@thunderid/javascript 0.11.1 → 0.11.2

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.
@@ -46,6 +46,7 @@ declare class ThunderIDJavaScriptClient<T = Config> implements ThunderIDClient<T
46
46
  getUser(userId?: string): Promise<User>;
47
47
  isSignedIn(userId?: string): Promise<boolean>;
48
48
  getAccessToken(sessionId?: string): Promise<string>;
49
+ private isCachedTokenStillValid;
49
50
  clearSession(sessionId?: string): void;
50
51
  /**
51
52
  * Async variant of {@link clearSession} that resolves once the session data has been removed from
@@ -76,6 +77,12 @@ declare class ThunderIDJavaScriptClient<T = Config> implements ThunderIDClient<T
76
77
  protected getIdToken(userId?: string): Promise<string>;
77
78
  protected getUserSession(userId?: string): Promise<UserSession>;
78
79
  protected refreshAccessToken(userId?: string): Promise<TokenResponse | User>;
80
+ /**
81
+ * Requests a machine-to-machine access token via the `client_credentials` grant
82
+ * (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
83
+ * flows, there's no id_token or refresh_token: the service authenticates as itself.
84
+ */
85
+ protected requestClientCredentialsToken(sessionId?: string): Promise<TokenResponse>;
79
86
  protected revokeAccessToken(userId?: string): Promise<Response | boolean>;
80
87
  initiateCIBA(options: CIBAInitiateOptions): Promise<CIBAInitiateResponse>;
81
88
  pollCIBA(authReqId: string, interval: number, options?: CIBAPollOptions): Promise<TokenResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"ThunderIDJavaScriptClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDJavaScriptClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAC,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAC,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAmB,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,iCAAiC,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAC,wBAAwB,EAAC,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAC,aAAa,EAAC,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAc,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,OAAO,EAAiB,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAC,OAAO,EAAE,0BAA0B,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAC,IAAI,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAyB9C,cAAM,yBAAyB,CAAC,CAAC,GAAG,MAAM,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IACvE,SAAS,CAAC,cAAc,EAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAE7C,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,cAAc,CAAsC;IAE5D,OAAO,CAAC,4BAA4B,CAA2C;IAE/E,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,eAAe,CAAK;IAE5B,OAAO,CAAC,UAAU,CAAU;IAE5B,OAAO,CAAC,OAAO,CAAM;gBAET,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM;IAOtC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA8C1D,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxD,gBAAgB,IAAI,CAAC;IAIf,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7C,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzD,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7C;;;;OAIG;IACH,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInF,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAItE,aAAa,CACxB,MAAM,EAAE,0BAA0B,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,GAAG,QAAQ,GAAG,IAAI,CAAC;IAqFpC,SAAS,IAAI,OAAO;IAIpB,MAAM,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,GAAG,aAAa,GAAG,SAAS,CAAC;IAI3E,OAAO,CACZ,QAAQ,CAAC,EAAE,cAAc,EACzB,wBAAwB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC,EACvE,aAAa,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;IAIrB,cAAc,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC;IAI7E,MAAM,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;IAIpD,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAMxD,+BAA+B,CAAC,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;cAiHjE,YAAY,CAAC,aAAa,CAAC,EAAE,iCAAiC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAwEjG,kBAAkB,CAChC,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,kBAAkB,CAAC,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,GACrD,OAAO,CAAC,aAAa,CAAC;cAgGT,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cA4C/C,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAiBhE,oBAAoB,IAAI,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;cAQ7D,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;cAMtE,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAI5C,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;cASrD,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;cA2DlE,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;IAoDlE,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmIzE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;cAkH7F,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAI5D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjF,aAAa,IAAI,MAAM;IAI9B,SAAS,CAAC,iBAAiB,IAAI,cAAc,CAAC,CAAC,CAAC;IAIhD,SAAS,CAAC,eAAe,IAAI,gBAAgB;WAM/B,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;WAQrD,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;IAUjD,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CASxE;AAED,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"ThunderIDJavaScriptClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDJavaScriptClient.ts"],"names":[],"mappings":"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"}
@@ -79,7 +79,8 @@ const TokenConstants = {
79
79
  "ML-DSA-65",
80
80
  "ML-DSA-87"
81
81
  ] },
82
- Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } }
82
+ Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } },
83
+ Lifecycle: { CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: 3e4 }
83
84
  };
84
85
  var TokenConstants_default = TokenConstants;
85
86
 
@@ -2545,6 +2546,42 @@ const processOpenIDScopes = (scopes) => {
2545
2546
  };
2546
2547
  var processOpenIDScopes_default = processOpenIDScopes;
2547
2548
 
2549
+ //#endregion
2550
+ //#region src/utils/resolveResourceEndpoint.ts
2551
+ /**
2552
+ * The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
2553
+ * endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
2554
+ */
2555
+ const RESOURCE_ENDPOINT_KEYS = [
2556
+ "flowExecute",
2557
+ "flowMeta",
2558
+ "usersMe"
2559
+ ];
2560
+ /**
2561
+ * Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
2562
+ * precedence) an explicit per-call URL, then a `config.endpoints` override.
2563
+ *
2564
+ * Returns `undefined` when neither is set, so the calling API function falls back to deriving the
2565
+ * endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
2566
+ * passing `baseUrl` alongside the resolved `url` to preserve that fallback.
2567
+ *
2568
+ * @param key - The resource endpoint to resolve.
2569
+ * @param config - The client config carrying optional `endpoints` overrides.
2570
+ * @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
2571
+ * @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
2572
+ *
2573
+ * @example
2574
+ * ```typescript
2575
+ * const response = await executeEmbeddedUserOnboardingFlow({
2576
+ * baseUrl: config.baseUrl,
2577
+ * url: resolveResourceEndpoint('flowExecute', config),
2578
+ * payload,
2579
+ * });
2580
+ * ```
2581
+ */
2582
+ const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
2583
+ var resolveResourceEndpoint_default = resolveResourceEndpoint;
2584
+
2548
2585
  //#endregion
2549
2586
  //#region src/constants/TokenExchangeConstants.ts
2550
2587
  /**
@@ -2615,6 +2652,25 @@ var AuthenticationHelper = class {
2615
2652
  this.cryptoHelper = cryptoHelperInstance;
2616
2653
  }
2617
2654
  /**
2655
+ * Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
2656
+ *
2657
+ * Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
2658
+ * (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
2659
+ * `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
2660
+ *
2661
+ * @param configData - The resolved auth client config.
2662
+ * @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
2663
+ */
2664
+ mapConfiguredOidcEndpoints(configData) {
2665
+ const endpoints = {};
2666
+ if (!configData.endpoints) return endpoints;
2667
+ Object.keys(configData.endpoints).filter((endpointName) => !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
2668
+ const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2669
+ endpoints[snakeCasedName] = configData.endpoints ? configData.endpoints[endpointName] : "";
2670
+ });
2671
+ return endpoints;
2672
+ }
2673
+ /**
2618
2674
  * Merges explicit endpoint overrides from config into the discovery response.
2619
2675
  * Config-defined endpoint names (camelCase) are converted to snake_case before merging.
2620
2676
  *
@@ -2622,15 +2678,10 @@ var AuthenticationHelper = class {
2622
2678
  * @returns The discovery response with any config-specified endpoint overrides applied.
2623
2679
  */
2624
2680
  async resolveEndpoints(response) {
2625
- const oidcProviderMetaData = {};
2626
2681
  const configData = await this.config();
2627
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2628
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2629
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2630
- });
2631
2682
  return {
2632
2683
  ...response,
2633
- ...oidcProviderMetaData
2684
+ ...this.mapConfiguredOidcEndpoints(configData)
2634
2685
  };
2635
2686
  }
2636
2687
  /**
@@ -2641,7 +2692,6 @@ var AuthenticationHelper = class {
2641
2692
  * @throws {ThunderIDAuthException} When required endpoints are absent from the config.
2642
2693
  */
2643
2694
  async resolveEndpointsExplicitly() {
2644
- const oidcProviderMetaData = {};
2645
2695
  const configData = await this.config();
2646
2696
  const requiredEndpoints = [
2647
2697
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
@@ -2656,11 +2706,7 @@ var AuthenticationHelper = class {
2656
2706
  if (!(configData.endpoints ? requiredEndpoints.every((reqEndpointName) => configData.endpoints ? Object.keys(configData.endpoints).some((endpointName) => {
2657
2707
  return endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) === reqEndpointName;
2658
2708
  }) : false) : false)) throw new ThunderIDAuthException("JS-AUTH_HELPER-REE-NF01", "Required endpoints missing", "Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");
2659
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2660
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2661
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2662
- });
2663
- return { ...oidcProviderMetaData };
2709
+ return { ...this.mapConfiguredOidcEndpoints(configData) };
2664
2710
  }
2665
2711
  /**
2666
2712
  * Derives OIDC endpoint URLs from the configured `baseUrl`.
@@ -2671,14 +2717,10 @@ var AuthenticationHelper = class {
2671
2717
  * @throws {ThunderIDAuthException} When `baseUrl` is not defined in the config.
2672
2718
  */
2673
2719
  async resolveEndpointsByBaseURL() {
2674
- const oidcProviderMetaData = {};
2675
2720
  const configData = await this.config();
2676
2721
  const { baseUrl } = configData;
2677
2722
  if (!baseUrl) throw new ThunderIDAuthException("JS-AUTH_HELPER_REBO-NF01", "Base URL not defined.", "Base URL is not defined in AuthClient config.");
2678
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2679
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2680
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2681
- });
2723
+ const oidcProviderMetaData = this.mapConfiguredOidcEndpoints(configData);
2682
2724
  const endpointKeys = OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints;
2683
2725
  const endpointPaths = OIDCDiscoveryConstants_default.Endpoints;
2684
2726
  return {
@@ -3106,8 +3148,18 @@ var ThunderIDJavaScriptClient = class {
3106
3148
  return createdAt + parseInt(expiresInString, 10) * 1e3 > (/* @__PURE__ */ new Date()).getTime();
3107
3149
  }
3108
3150
  async getAccessToken(sessionId) {
3151
+ if ((await this.configProvider()).grantType === "client_credentials") {
3152
+ const sessionData = await this.storageManager.getSessionData(sessionId);
3153
+ if (sessionData?.access_token && this.isCachedTokenStillValid(sessionData)) return sessionData.access_token;
3154
+ return (await this.requestClientCredentialsToken(sessionId)).accessToken;
3155
+ }
3109
3156
  return (await this.storageManager.getSessionData(sessionId))?.access_token;
3110
3157
  }
3158
+ isCachedTokenStillValid(sessionData) {
3159
+ if (!sessionData.created_at || !sessionData.expires_in) return false;
3160
+ const expiresInMs = parseInt(sessionData.expires_in, 10) * 1e3;
3161
+ return sessionData.created_at + expiresInMs - TokenConstants_default.Lifecycle.CLIENT_CREDENTIALS_REFRESH_MARGIN_MS > Date.now();
3162
+ }
3111
3163
  clearSession(sessionId) {
3112
3164
  this.authHelper.clearSession(sessionId);
3113
3165
  }
@@ -3380,6 +3432,56 @@ var ThunderIDJavaScriptClient = class {
3380
3432
  if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
3381
3433
  return this.authHelper.handleTokenResponse(tokenResponse, userId);
3382
3434
  }
3435
+ /**
3436
+ * Requests a machine-to-machine access token via the `client_credentials` grant
3437
+ * (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
3438
+ * flows, there's no id_token or refresh_token: the service authenticates as itself.
3439
+ */
3440
+ async requestClientCredentialsToken(sessionId) {
3441
+ if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
3442
+ const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
3443
+ const configData = await this.configProvider();
3444
+ if (!tokenEndpoint || tokenEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NF01", "Token endpoint not found.", "No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");
3445
+ const body = new URLSearchParams();
3446
+ body.set("grant_type", "client_credentials");
3447
+ body.set("client_id", configData.clientId ?? "");
3448
+ const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
3449
+ const tokenEndpointAuthMethod = configData.tokenRequest?.authMethod ?? "client_secret_basic";
3450
+ if (hasSecret && tokenEndpointAuthMethod === "client_secret_post") body.set("client_secret", configData.clientSecret);
3451
+ const scope = Array.isArray(configData.scopes) ? configData.scopes.join(" ") : configData.scopes;
3452
+ if (scope) body.set("scope", scope);
3453
+ if (configData.tokenRequest?.params) Object.entries(configData.tokenRequest.params).forEach(([key, value]) => {
3454
+ body.set(key, value);
3455
+ });
3456
+ const tokenRequestHeaders = {
3457
+ Accept: "application/json",
3458
+ "Content-Type": "application/x-www-form-urlencoded"
3459
+ };
3460
+ if (hasSecret && tokenEndpointAuthMethod === "client_secret_basic") tokenRequestHeaders["Authorization"] = `Basic ${base64Encode_default(`${encodeURIComponent(configData.clientId)}:${encodeURIComponent(configData.clientSecret)}`)}`;
3461
+ let tokenResponse;
3462
+ try {
3463
+ tokenResponse = await fetch(tokenEndpoint, {
3464
+ body,
3465
+ headers: tokenRequestHeaders,
3466
+ method: "POST"
3467
+ });
3468
+ } catch (error$1) {
3469
+ throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NE02", "Requesting client credentials token failed.", error$1 ?? "The request to get the client credentials access token failed.");
3470
+ }
3471
+ if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
3472
+ const parsedResponse = await tokenResponse.json();
3473
+ parsedResponse.created_at = (/* @__PURE__ */ new Date()).getTime();
3474
+ await this.storageManager.setSessionData(parsedResponse, sessionId);
3475
+ return {
3476
+ accessToken: parsedResponse.access_token,
3477
+ createdAt: parsedResponse.created_at,
3478
+ expiresIn: parsedResponse.expires_in,
3479
+ idToken: parsedResponse.id_token ?? "",
3480
+ refreshToken: parsedResponse.refresh_token ?? "",
3481
+ scope: parsedResponse.scope,
3482
+ tokenType: parsedResponse.token_type
3483
+ };
3484
+ }
3383
3485
  async revokeAccessToken(userId) {
3384
3486
  const revokeTokenEndpoint = (await this.oidcProviderMetaDataProvider()).revocation_endpoint;
3385
3487
  const configData = await this.configProvider();
@@ -6199,6 +6301,7 @@ exports.resolveFlowTemplateLiterals = resolveFlowTemplateLiterals;
6199
6301
  exports.resolveLocaleDisplayName = resolveLocaleDisplayName;
6200
6302
  exports.resolveLocaleEmoji = resolveLocaleEmoji_default;
6201
6303
  exports.resolveMeta = resolveMeta;
6304
+ exports.resolveResourceEndpoint = resolveResourceEndpoint_default;
6202
6305
  exports.set = set_default;
6203
6306
  exports.startCase = startCase_default;
6204
6307
  exports.updateMeProfile = updateMeProfile_default;
@@ -43,6 +43,9 @@ declare const TokenConstants: {
43
43
  readonly REFRESH_TOKEN_TIMER: string;
44
44
  };
45
45
  };
46
+ readonly Lifecycle: {
47
+ readonly CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: number;
48
+ };
46
49
  };
47
50
  export default TokenConstants;
48
51
  //# sourceMappingURL=TokenConstants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/TokenConstants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,cAAc,EAAE;IACpB,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE;YACpB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACtC,CAAC;KACH,CAAC;CAyCM,CAAC;AAEX,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"TokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/TokenConstants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,cAAc,EAAE;IACpB,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;KAClD,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE;YACpB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACtC,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,oCAAoC,EAAE,MAAM,CAAC;KACvD,CAAC;CAqDM,CAAC;AAEX,eAAe,cAAc,CAAC"}
@@ -59,7 +59,8 @@ const TokenConstants = {
59
59
  "ML-DSA-65",
60
60
  "ML-DSA-87"
61
61
  ] },
62
- Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } }
62
+ Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } },
63
+ Lifecycle: { CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: 3e4 }
63
64
  };
64
65
  var TokenConstants_default = TokenConstants;
65
66
 
@@ -2525,6 +2526,42 @@ const processOpenIDScopes = (scopes) => {
2525
2526
  };
2526
2527
  var processOpenIDScopes_default = processOpenIDScopes;
2527
2528
 
2529
+ //#endregion
2530
+ //#region src/utils/resolveResourceEndpoint.ts
2531
+ /**
2532
+ * The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
2533
+ * endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
2534
+ */
2535
+ const RESOURCE_ENDPOINT_KEYS = [
2536
+ "flowExecute",
2537
+ "flowMeta",
2538
+ "usersMe"
2539
+ ];
2540
+ /**
2541
+ * Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
2542
+ * precedence) an explicit per-call URL, then a `config.endpoints` override.
2543
+ *
2544
+ * Returns `undefined` when neither is set, so the calling API function falls back to deriving the
2545
+ * endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
2546
+ * passing `baseUrl` alongside the resolved `url` to preserve that fallback.
2547
+ *
2548
+ * @param key - The resource endpoint to resolve.
2549
+ * @param config - The client config carrying optional `endpoints` overrides.
2550
+ * @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
2551
+ * @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
2552
+ *
2553
+ * @example
2554
+ * ```typescript
2555
+ * const response = await executeEmbeddedUserOnboardingFlow({
2556
+ * baseUrl: config.baseUrl,
2557
+ * url: resolveResourceEndpoint('flowExecute', config),
2558
+ * payload,
2559
+ * });
2560
+ * ```
2561
+ */
2562
+ const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
2563
+ var resolveResourceEndpoint_default = resolveResourceEndpoint;
2564
+
2528
2565
  //#endregion
2529
2566
  //#region src/constants/TokenExchangeConstants.ts
2530
2567
  /**
@@ -2595,6 +2632,25 @@ var AuthenticationHelper = class {
2595
2632
  this.cryptoHelper = cryptoHelperInstance;
2596
2633
  }
2597
2634
  /**
2635
+ * Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
2636
+ *
2637
+ * Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
2638
+ * (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
2639
+ * `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
2640
+ *
2641
+ * @param configData - The resolved auth client config.
2642
+ * @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
2643
+ */
2644
+ mapConfiguredOidcEndpoints(configData) {
2645
+ const endpoints = {};
2646
+ if (!configData.endpoints) return endpoints;
2647
+ Object.keys(configData.endpoints).filter((endpointName) => !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
2648
+ const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2649
+ endpoints[snakeCasedName] = configData.endpoints ? configData.endpoints[endpointName] : "";
2650
+ });
2651
+ return endpoints;
2652
+ }
2653
+ /**
2598
2654
  * Merges explicit endpoint overrides from config into the discovery response.
2599
2655
  * Config-defined endpoint names (camelCase) are converted to snake_case before merging.
2600
2656
  *
@@ -2602,15 +2658,10 @@ var AuthenticationHelper = class {
2602
2658
  * @returns The discovery response with any config-specified endpoint overrides applied.
2603
2659
  */
2604
2660
  async resolveEndpoints(response) {
2605
- const oidcProviderMetaData = {};
2606
2661
  const configData = await this.config();
2607
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2608
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2609
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2610
- });
2611
2662
  return {
2612
2663
  ...response,
2613
- ...oidcProviderMetaData
2664
+ ...this.mapConfiguredOidcEndpoints(configData)
2614
2665
  };
2615
2666
  }
2616
2667
  /**
@@ -2621,7 +2672,6 @@ var AuthenticationHelper = class {
2621
2672
  * @throws {ThunderIDAuthException} When required endpoints are absent from the config.
2622
2673
  */
2623
2674
  async resolveEndpointsExplicitly() {
2624
- const oidcProviderMetaData = {};
2625
2675
  const configData = await this.config();
2626
2676
  const requiredEndpoints = [
2627
2677
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
@@ -2636,11 +2686,7 @@ var AuthenticationHelper = class {
2636
2686
  if (!(configData.endpoints ? requiredEndpoints.every((reqEndpointName) => configData.endpoints ? Object.keys(configData.endpoints).some((endpointName) => {
2637
2687
  return endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) === reqEndpointName;
2638
2688
  }) : false) : false)) throw new ThunderIDAuthException("JS-AUTH_HELPER-REE-NF01", "Required endpoints missing", "Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");
2639
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2640
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2641
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2642
- });
2643
- return { ...oidcProviderMetaData };
2689
+ return { ...this.mapConfiguredOidcEndpoints(configData) };
2644
2690
  }
2645
2691
  /**
2646
2692
  * Derives OIDC endpoint URLs from the configured `baseUrl`.
@@ -2651,14 +2697,10 @@ var AuthenticationHelper = class {
2651
2697
  * @throws {ThunderIDAuthException} When `baseUrl` is not defined in the config.
2652
2698
  */
2653
2699
  async resolveEndpointsByBaseURL() {
2654
- const oidcProviderMetaData = {};
2655
2700
  const configData = await this.config();
2656
2701
  const { baseUrl } = configData;
2657
2702
  if (!baseUrl) throw new ThunderIDAuthException("JS-AUTH_HELPER_REBO-NF01", "Base URL not defined.", "Base URL is not defined in AuthClient config.");
2658
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2659
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2660
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2661
- });
2703
+ const oidcProviderMetaData = this.mapConfiguredOidcEndpoints(configData);
2662
2704
  const endpointKeys = OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints;
2663
2705
  const endpointPaths = OIDCDiscoveryConstants_default.Endpoints;
2664
2706
  return {
@@ -3086,8 +3128,18 @@ var ThunderIDJavaScriptClient = class {
3086
3128
  return createdAt + parseInt(expiresInString, 10) * 1e3 > (/* @__PURE__ */ new Date()).getTime();
3087
3129
  }
3088
3130
  async getAccessToken(sessionId) {
3131
+ if ((await this.configProvider()).grantType === "client_credentials") {
3132
+ const sessionData = await this.storageManager.getSessionData(sessionId);
3133
+ if (sessionData?.access_token && this.isCachedTokenStillValid(sessionData)) return sessionData.access_token;
3134
+ return (await this.requestClientCredentialsToken(sessionId)).accessToken;
3135
+ }
3089
3136
  return (await this.storageManager.getSessionData(sessionId))?.access_token;
3090
3137
  }
3138
+ isCachedTokenStillValid(sessionData) {
3139
+ if (!sessionData.created_at || !sessionData.expires_in) return false;
3140
+ const expiresInMs = parseInt(sessionData.expires_in, 10) * 1e3;
3141
+ return sessionData.created_at + expiresInMs - TokenConstants_default.Lifecycle.CLIENT_CREDENTIALS_REFRESH_MARGIN_MS > Date.now();
3142
+ }
3091
3143
  clearSession(sessionId) {
3092
3144
  this.authHelper.clearSession(sessionId);
3093
3145
  }
@@ -3360,6 +3412,56 @@ var ThunderIDJavaScriptClient = class {
3360
3412
  if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
3361
3413
  return this.authHelper.handleTokenResponse(tokenResponse, userId);
3362
3414
  }
3415
+ /**
3416
+ * Requests a machine-to-machine access token via the `client_credentials` grant
3417
+ * (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
3418
+ * flows, there's no id_token or refresh_token: the service authenticates as itself.
3419
+ */
3420
+ async requestClientCredentialsToken(sessionId) {
3421
+ if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
3422
+ const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
3423
+ const configData = await this.configProvider();
3424
+ if (!tokenEndpoint || tokenEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NF01", "Token endpoint not found.", "No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");
3425
+ const body = new URLSearchParams();
3426
+ body.set("grant_type", "client_credentials");
3427
+ body.set("client_id", configData.clientId ?? "");
3428
+ const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
3429
+ const tokenEndpointAuthMethod = configData.tokenRequest?.authMethod ?? "client_secret_basic";
3430
+ if (hasSecret && tokenEndpointAuthMethod === "client_secret_post") body.set("client_secret", configData.clientSecret);
3431
+ const scope = Array.isArray(configData.scopes) ? configData.scopes.join(" ") : configData.scopes;
3432
+ if (scope) body.set("scope", scope);
3433
+ if (configData.tokenRequest?.params) Object.entries(configData.tokenRequest.params).forEach(([key, value]) => {
3434
+ body.set(key, value);
3435
+ });
3436
+ const tokenRequestHeaders = {
3437
+ Accept: "application/json",
3438
+ "Content-Type": "application/x-www-form-urlencoded"
3439
+ };
3440
+ if (hasSecret && tokenEndpointAuthMethod === "client_secret_basic") tokenRequestHeaders["Authorization"] = `Basic ${base64Encode_default(`${encodeURIComponent(configData.clientId)}:${encodeURIComponent(configData.clientSecret)}`)}`;
3441
+ let tokenResponse;
3442
+ try {
3443
+ tokenResponse = await fetch(tokenEndpoint, {
3444
+ body,
3445
+ headers: tokenRequestHeaders,
3446
+ method: "POST"
3447
+ });
3448
+ } catch (error$1) {
3449
+ throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NE02", "Requesting client credentials token failed.", error$1 ?? "The request to get the client credentials access token failed.");
3450
+ }
3451
+ if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
3452
+ const parsedResponse = await tokenResponse.json();
3453
+ parsedResponse.created_at = (/* @__PURE__ */ new Date()).getTime();
3454
+ await this.storageManager.setSessionData(parsedResponse, sessionId);
3455
+ return {
3456
+ accessToken: parsedResponse.access_token,
3457
+ createdAt: parsedResponse.created_at,
3458
+ expiresIn: parsedResponse.expires_in,
3459
+ idToken: parsedResponse.id_token ?? "",
3460
+ refreshToken: parsedResponse.refresh_token ?? "",
3461
+ scope: parsedResponse.scope,
3462
+ tokenType: parsedResponse.token_type
3463
+ };
3464
+ }
3363
3465
  async revokeAccessToken(userId) {
3364
3466
  const revokeTokenEndpoint = (await this.oidcProviderMetaDataProvider()).revocation_endpoint;
3365
3467
  const configData = await this.configProvider();
@@ -6100,4 +6202,4 @@ const normalizeTranslations = (translations) => {
6100
6202
  var normalizeTranslations_default = normalizeTranslations;
6101
6203
 
6102
6204
  //#endregion
6103
- export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
6205
+ export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
package/dist/index.d.ts CHANGED
@@ -93,6 +93,8 @@ export { default as get } from './utils/get';
93
93
  export { default as startCase } from './utils/startCase';
94
94
  export { default as removeTrailingSlash } from './utils/removeTrailingSlash';
95
95
  export { default as resolveFieldName } from './utils/resolveFieldName';
96
+ export { default as resolveResourceEndpoint } from './utils/resolveResourceEndpoint';
97
+ export type { ResourceEndpointKey, ResourceEndpointConfig } from './utils/resolveResourceEndpoint';
96
98
  export { default as resolveMeta } from './utils/resolveMeta';
97
99
  export { default as resolveFlowTemplateLiterals } from './utils/resolveFlowTemplateLiterals';
98
100
  export { default as countryCodeToFlagEmoji } from './utils/countryCodeToFlagEmoji';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -59,7 +59,8 @@ const TokenConstants = {
59
59
  "ML-DSA-65",
60
60
  "ML-DSA-87"
61
61
  ] },
62
- Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } }
62
+ Storage: { StorageKeys: { REFRESH_TOKEN_TIMER: "refresh_token_timer" } },
63
+ Lifecycle: { CLIENT_CREDENTIALS_REFRESH_MARGIN_MS: 3e4 }
63
64
  };
64
65
  var TokenConstants_default = TokenConstants;
65
66
 
@@ -2525,6 +2526,42 @@ const processOpenIDScopes = (scopes) => {
2525
2526
  };
2526
2527
  var processOpenIDScopes_default = processOpenIDScopes;
2527
2528
 
2529
+ //#endregion
2530
+ //#region src/utils/resolveResourceEndpoint.ts
2531
+ /**
2532
+ * The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
2533
+ * endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
2534
+ */
2535
+ const RESOURCE_ENDPOINT_KEYS = [
2536
+ "flowExecute",
2537
+ "flowMeta",
2538
+ "usersMe"
2539
+ ];
2540
+ /**
2541
+ * Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
2542
+ * precedence) an explicit per-call URL, then a `config.endpoints` override.
2543
+ *
2544
+ * Returns `undefined` when neither is set, so the calling API function falls back to deriving the
2545
+ * endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
2546
+ * passing `baseUrl` alongside the resolved `url` to preserve that fallback.
2547
+ *
2548
+ * @param key - The resource endpoint to resolve.
2549
+ * @param config - The client config carrying optional `endpoints` overrides.
2550
+ * @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
2551
+ * @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
2552
+ *
2553
+ * @example
2554
+ * ```typescript
2555
+ * const response = await executeEmbeddedUserOnboardingFlow({
2556
+ * baseUrl: config.baseUrl,
2557
+ * url: resolveResourceEndpoint('flowExecute', config),
2558
+ * payload,
2559
+ * });
2560
+ * ```
2561
+ */
2562
+ const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
2563
+ var resolveResourceEndpoint_default = resolveResourceEndpoint;
2564
+
2528
2565
  //#endregion
2529
2566
  //#region src/constants/TokenExchangeConstants.ts
2530
2567
  /**
@@ -2595,6 +2632,25 @@ var AuthenticationHelper = class {
2595
2632
  this.cryptoHelper = cryptoHelperInstance;
2596
2633
  }
2597
2634
  /**
2635
+ * Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
2636
+ *
2637
+ * Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
2638
+ * (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
2639
+ * `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
2640
+ *
2641
+ * @param configData - The resolved auth client config.
2642
+ * @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
2643
+ */
2644
+ mapConfiguredOidcEndpoints(configData) {
2645
+ const endpoints = {};
2646
+ if (!configData.endpoints) return endpoints;
2647
+ Object.keys(configData.endpoints).filter((endpointName) => !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
2648
+ const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2649
+ endpoints[snakeCasedName] = configData.endpoints ? configData.endpoints[endpointName] : "";
2650
+ });
2651
+ return endpoints;
2652
+ }
2653
+ /**
2598
2654
  * Merges explicit endpoint overrides from config into the discovery response.
2599
2655
  * Config-defined endpoint names (camelCase) are converted to snake_case before merging.
2600
2656
  *
@@ -2602,15 +2658,10 @@ var AuthenticationHelper = class {
2602
2658
  * @returns The discovery response with any config-specified endpoint overrides applied.
2603
2659
  */
2604
2660
  async resolveEndpoints(response) {
2605
- const oidcProviderMetaData = {};
2606
2661
  const configData = await this.config();
2607
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2608
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2609
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2610
- });
2611
2662
  return {
2612
2663
  ...response,
2613
- ...oidcProviderMetaData
2664
+ ...this.mapConfiguredOidcEndpoints(configData)
2614
2665
  };
2615
2666
  }
2616
2667
  /**
@@ -2621,7 +2672,6 @@ var AuthenticationHelper = class {
2621
2672
  * @throws {ThunderIDAuthException} When required endpoints are absent from the config.
2622
2673
  */
2623
2674
  async resolveEndpointsExplicitly() {
2624
- const oidcProviderMetaData = {};
2625
2675
  const configData = await this.config();
2626
2676
  const requiredEndpoints = [
2627
2677
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
@@ -2636,11 +2686,7 @@ var AuthenticationHelper = class {
2636
2686
  if (!(configData.endpoints ? requiredEndpoints.every((reqEndpointName) => configData.endpoints ? Object.keys(configData.endpoints).some((endpointName) => {
2637
2687
  return endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`) === reqEndpointName;
2638
2688
  }) : false) : false)) throw new ThunderIDAuthException("JS-AUTH_HELPER-REE-NF01", "Required endpoints missing", "Some or all of the required endpoints are missing in the object passed to the `endpoints` attribute of the`AuthConfig` object.");
2639
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2640
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2641
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2642
- });
2643
- return { ...oidcProviderMetaData };
2689
+ return { ...this.mapConfiguredOidcEndpoints(configData) };
2644
2690
  }
2645
2691
  /**
2646
2692
  * Derives OIDC endpoint URLs from the configured `baseUrl`.
@@ -2651,14 +2697,10 @@ var AuthenticationHelper = class {
2651
2697
  * @throws {ThunderIDAuthException} When `baseUrl` is not defined in the config.
2652
2698
  */
2653
2699
  async resolveEndpointsByBaseURL() {
2654
- const oidcProviderMetaData = {};
2655
2700
  const configData = await this.config();
2656
2701
  const { baseUrl } = configData;
2657
2702
  if (!baseUrl) throw new ThunderIDAuthException("JS-AUTH_HELPER_REBO-NF01", "Base URL not defined.", "Base URL is not defined in AuthClient config.");
2658
- if (configData.endpoints) Object.keys(configData.endpoints).forEach((endpointName) => {
2659
- const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
2660
- oidcProviderMetaData[snakeCasedName] = configData?.endpoints ? configData.endpoints[endpointName] : "";
2661
- });
2703
+ const oidcProviderMetaData = this.mapConfiguredOidcEndpoints(configData);
2662
2704
  const endpointKeys = OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints;
2663
2705
  const endpointPaths = OIDCDiscoveryConstants_default.Endpoints;
2664
2706
  return {
@@ -3086,8 +3128,18 @@ var ThunderIDJavaScriptClient = class {
3086
3128
  return createdAt + parseInt(expiresInString, 10) * 1e3 > (/* @__PURE__ */ new Date()).getTime();
3087
3129
  }
3088
3130
  async getAccessToken(sessionId) {
3131
+ if ((await this.configProvider()).grantType === "client_credentials") {
3132
+ const sessionData = await this.storageManager.getSessionData(sessionId);
3133
+ if (sessionData?.access_token && this.isCachedTokenStillValid(sessionData)) return sessionData.access_token;
3134
+ return (await this.requestClientCredentialsToken(sessionId)).accessToken;
3135
+ }
3089
3136
  return (await this.storageManager.getSessionData(sessionId))?.access_token;
3090
3137
  }
3138
+ isCachedTokenStillValid(sessionData) {
3139
+ if (!sessionData.created_at || !sessionData.expires_in) return false;
3140
+ const expiresInMs = parseInt(sessionData.expires_in, 10) * 1e3;
3141
+ return sessionData.created_at + expiresInMs - TokenConstants_default.Lifecycle.CLIENT_CREDENTIALS_REFRESH_MARGIN_MS > Date.now();
3142
+ }
3091
3143
  clearSession(sessionId) {
3092
3144
  this.authHelper.clearSession(sessionId);
3093
3145
  }
@@ -3360,6 +3412,56 @@ var ThunderIDJavaScriptClient = class {
3360
3412
  if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
3361
3413
  return this.authHelper.handleTokenResponse(tokenResponse, userId);
3362
3414
  }
3415
+ /**
3416
+ * Requests a machine-to-machine access token via the `client_credentials` grant
3417
+ * (RFC 6749 §4.4) and caches it under the given session key. Unlike the user-facing
3418
+ * flows, there's no id_token or refresh_token: the service authenticates as itself.
3419
+ */
3420
+ async requestClientCredentialsToken(sessionId) {
3421
+ if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
3422
+ const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
3423
+ const configData = await this.configProvider();
3424
+ if (!tokenEndpoint || tokenEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NF01", "Token endpoint not found.", "No token endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the token endpoint passed to the SDK is empty.");
3425
+ const body = new URLSearchParams();
3426
+ body.set("grant_type", "client_credentials");
3427
+ body.set("client_id", configData.clientId ?? "");
3428
+ const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
3429
+ const tokenEndpointAuthMethod = configData.tokenRequest?.authMethod ?? "client_secret_basic";
3430
+ if (hasSecret && tokenEndpointAuthMethod === "client_secret_post") body.set("client_secret", configData.clientSecret);
3431
+ const scope = Array.isArray(configData.scopes) ? configData.scopes.join(" ") : configData.scopes;
3432
+ if (scope) body.set("scope", scope);
3433
+ if (configData.tokenRequest?.params) Object.entries(configData.tokenRequest.params).forEach(([key, value]) => {
3434
+ body.set(key, value);
3435
+ });
3436
+ const tokenRequestHeaders = {
3437
+ Accept: "application/json",
3438
+ "Content-Type": "application/x-www-form-urlencoded"
3439
+ };
3440
+ if (hasSecret && tokenEndpointAuthMethod === "client_secret_basic") tokenRequestHeaders["Authorization"] = `Basic ${base64Encode_default(`${encodeURIComponent(configData.clientId)}:${encodeURIComponent(configData.clientSecret)}`)}`;
3441
+ let tokenResponse;
3442
+ try {
3443
+ tokenResponse = await fetch(tokenEndpoint, {
3444
+ body,
3445
+ headers: tokenRequestHeaders,
3446
+ method: "POST"
3447
+ });
3448
+ } catch (error$1) {
3449
+ throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-NE02", "Requesting client credentials token failed.", error$1 ?? "The request to get the client credentials access token failed.");
3450
+ }
3451
+ if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
3452
+ const parsedResponse = await tokenResponse.json();
3453
+ parsedResponse.created_at = (/* @__PURE__ */ new Date()).getTime();
3454
+ await this.storageManager.setSessionData(parsedResponse, sessionId);
3455
+ return {
3456
+ accessToken: parsedResponse.access_token,
3457
+ createdAt: parsedResponse.created_at,
3458
+ expiresIn: parsedResponse.expires_in,
3459
+ idToken: parsedResponse.id_token ?? "",
3460
+ refreshToken: parsedResponse.refresh_token ?? "",
3461
+ scope: parsedResponse.scope,
3462
+ tokenType: parsedResponse.token_type
3463
+ };
3464
+ }
3363
3465
  async revokeAccessToken(userId) {
3364
3466
  const revokeTokenEndpoint = (await this.oidcProviderMetaDataProvider()).revocation_endpoint;
3365
3467
  const configData = await this.configProvider();
@@ -6100,4 +6202,4 @@ const normalizeTranslations = (translations) => {
6100
6202
  var normalizeTranslations_default = normalizeTranslations;
6101
6203
 
6102
6204
  //#endregion
6103
- export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
6205
+ export { ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, AuthenticationHelper_default as AuthenticationHelper, DEFAULT_THEME, DEFAULT_VALIDATION_MESSAGE_KEYS, EMOJI_URI_SCHEME, EmbeddedFlowActionVariant, EmbeddedFlowComponentType, EmbeddedFlowEventType, EmbeddedFlowResponseType, EmbeddedFlowTextVariant, EmbeddedFlowType, EmbeddedRecoveryFlowStatus, EmbeddedRecoveryFlowType, EmbeddedSignInFlowStatus, EmbeddedSignInFlowType, EmbeddedSignUpFlowStatus, EmbeddedSignUpFlowType, FieldType, FlowMetaType, FlowMode, HttpClient, IsomorphicCrypto, OIDCRequestConstants_default as OIDCRequestConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TranslationBundleConstants_default as TranslationBundleConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, debug, deepMerge_default as deepMerge, error, evaluateValidationRule_default as evaluateValidationRule, executeEmbeddedRecoveryFlow_default as executeEmbeddedRecoveryFlow, executeEmbeddedSignInFlow_default as executeEmbeddedSignInFlow, executeEmbeddedSignUpFlow_default as executeEmbeddedSignUpFlow, executeEmbeddedUserOnboardingFlow_default as executeEmbeddedUserOnboardingFlow, extractEmojiFromUri_default as extractEmojiFromUri, extractPkceStorageKeyFromState_default as extractPkceStorageKeyFromState, extractUserClaimsFromIdToken_default as extractUserClaimsFromIdToken, formatDate_default as formatDate, generateFlattenedUserProfile_default as generateFlattenedUserProfile, get_default as get, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUserInfo_default as getUserInfo, getUsersMe_default as getUsersMe, getVendorPrefix_default as getVendorPrefix, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, processUsername_default as processUsername, removeTrailingSlash_default as removeTrailingSlash, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, updateMeProfile_default as updateMeProfile, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
@@ -197,19 +197,38 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
197
197
  };
198
198
  };
199
199
  /**
200
- * Optional overrides for the OIDC protocol endpoints.
201
- * By default, the SDK derives all endpoint URLs from the well-known discovery document
202
- * located at `{baseUrl}/oauth2/token/.well-known/openid-configuration`.
203
- * Use this when your authorization server exposes endpoints at non-standard paths,
204
- * or when a custom domain differs from `baseUrl`.
200
+ * Optional overrides for the endpoint URLs the SDK talks to.
205
201
  *
206
- * Individual overrides take precedence over values resolved from the discovery document.
202
+ * Two independent groups live here:
203
+ *
204
+ * - **OIDC/OAuth endpoints** (`authorization`, `token`, `userInfo`, `jwks`, `introspection`,
205
+ * `endSession`, `wellKnown`) — by default derived from the well-known discovery document at
206
+ * `{baseUrl}/oauth2/token/.well-known/openid-configuration`. Individual overrides take
207
+ * precedence over values resolved from the discovery document.
208
+ * - **Resource-server endpoints** (`flowExecute`, `flowMeta`, `usersMe`) —
209
+ * by default derived by concatenating `baseUrl` with a fixed path (e.g. `{baseUrl}/flow/execute`).
210
+ * These do not participate in OIDC discovery.
211
+ *
212
+ * Split these two groups when the OAuth authorization server (IdP) and the Thunder resource
213
+ * server are different hosts — for example, when two Thunder instances are connected as trusted
214
+ * issuers. Point `baseUrl` (and hence the OAuth/discovery endpoints) at the authorization server,
215
+ * and override the resource-server endpoints to target the resource server that actually owns the
216
+ * users and flows.
207
217
  *
208
218
  * @example
209
219
  * endpoints: {
210
220
  * wellKnown: "https://custom-domain.example.com/.well-known/openid-configuration",
211
221
  * authorization: "https://custom-domain.example.com/oauth2/authorize",
212
222
  * }
223
+ *
224
+ * @example
225
+ * // Trusted-issuer setup: OAuth on the authorization server, resource APIs on the resource server.
226
+ * baseUrl: "https://idp.example.com",
227
+ * endpoints: {
228
+ * flowExecute: "https://rs.example.com/flow/execute",
229
+ * flowMeta: "https://rs.example.com/flow/meta",
230
+ * usersMe: "https://rs.example.com/users/me",
231
+ * }
213
232
  */
214
233
  endpoints?: {
215
234
  /**
@@ -222,6 +241,17 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
222
241
  * If not provided, resolved from the well-known discovery document.
223
242
  */
224
243
  endSession?: string;
244
+ /**
245
+ * The flow execution endpoint URL used by the embedded sign-in, sign-up, recovery, and user
246
+ * onboarding flows.
247
+ * If not provided, defaults to `{baseUrl}/flow/execute`.
248
+ */
249
+ flowExecute?: string;
250
+ /**
251
+ * The flow metadata endpoint URL used to resolve flow/branding metadata.
252
+ * If not provided, defaults to `{baseUrl}/flow/meta`.
253
+ */
254
+ flowMeta?: string;
225
255
  /**
226
256
  * The introspection endpoint URL.
227
257
  * If not provided, resolved from the well-known discovery document.
@@ -242,6 +272,11 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
242
272
  * If not provided, resolved from the well-known discovery document.
243
273
  */
244
274
  userInfo?: string;
275
+ /**
276
+ * The current-user profile endpoint URL used to fetch and update the signed-in user's profile.
277
+ * If not provided, defaults to `{baseUrl}/users/me`.
278
+ */
279
+ usersMe?: string;
245
280
  /**
246
281
  * The OpenID Connect discovery document URL.
247
282
  * Defaults to `{baseUrl}/oauth2/token/.well-known/openid-configuration`.
@@ -263,6 +298,18 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
263
298
  * @default 'redirect'
264
299
  */
265
300
  mode?: 'redirect' | 'embedded';
301
+ /**
302
+ * The OAuth 2.0 grant type this client uses to obtain access tokens.
303
+ *
304
+ * - `'authorization_code'` (default) — standard user sign-in flow. `getAccessToken()`
305
+ * only ever reads from the stored session; it never fetches a token on its own.
306
+ * - `'client_credentials'` — machine-to-machine flow (RFC 6749 §4.4). There's no user
307
+ * and no sign-in step: `getAccessToken()` fetches (and transparently caches/refreshes)
308
+ * a token for the service itself, using `clientId`/`clientSecret`.
309
+ *
310
+ * @default 'authorization_code'
311
+ */
312
+ grantType?: 'authorization_code' | 'client_credentials';
266
313
  /**
267
314
  * Configuration for chaining authentication across multiple organization contexts.
268
315
  * Used when you need to authenticate a user in one organization using credentials
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/models/config.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,17 @@ declare class AuthenticationHelper<T> {
38
38
  * @param cryptoHelperInstance - The isomorphic crypto helper for JWT operations.
39
39
  */
40
40
  constructor(storageManagerInstance: StorageManager<T>, cryptoHelperInstance: IsomorphicCrypto);
41
+ /**
42
+ * Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
43
+ *
44
+ * Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
45
+ * (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
46
+ * `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
47
+ *
48
+ * @param configData - The resolved auth client config.
49
+ * @returns A snake_cased map of the OIDC endpoint overrides (empty when none are configured).
50
+ */
51
+ private mapConfiguredOidcEndpoints;
41
52
  /**
42
53
  * Merges explicit endpoint overrides from config into the discovery response.
43
54
  * Config-defined endpoint names (camelCase) are converted to snake_case before merging.
@@ -1 +1 @@
1
- {"version":3,"file":"AuthenticationHelper.d.ts","sourceRoot":"","sources":["../../src/utils/AuthenticationHelper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAC,iCAAiC,EAAE,wBAAwB,EAAC,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAU,aAAa,EAAyB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAE/C;;;;;GAKG;AACH,cAAM,oBAAoB,CAAC,CAAC;IAC1B,OAAO,CAAC,cAAc,CAAoB;IAE1C,OAAO,CAAC,MAAM,CAAqC;IAEnD,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,OAAO,CAAC,YAAY,CAAmB;IAEvC;;;;;OAKG;gBACgB,sBAAsB,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,gBAAgB;IAQpG;;;;;;OAMG;IACU,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAepG;;;;;;OAMG;IACU,0BAA0B,IAAI,OAAO,CAAC,iCAAiC,CAAC;IAkDrF;;;;;;;OAOG;IACU,yBAAyB,IAAI,OAAO,CAAC,iCAAiC,CAAC;IA0CpF;;;;;;OAMG;IACU,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsD/D;;;;;OAKG;IACI,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAetD;;;;;;;OAOG;IACU,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6C3F;;;;OAIG;IACU,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD;;;;;;;;OAQG;IACU,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CA2C9F;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"AuthenticationHelper.d.ts","sourceRoot":"","sources":["../../src/utils/AuthenticationHelper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAC,iCAAiC,EAAE,wBAAwB,EAAC,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAU,aAAa,EAAyB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAC,IAAI,EAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAE/C;;;;;GAKG;AACH,cAAM,oBAAoB,CAAC,CAAC;IAC1B,OAAO,CAAC,cAAc,CAAoB;IAE1C,OAAO,CAAC,MAAM,CAAqC;IAEnD,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,OAAO,CAAC,YAAY,CAAmB;IAEvC;;;;;OAKG;gBACgB,sBAAsB,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,gBAAgB;IAQpG;;;;;;;;;OASG;IACH,OAAO,CAAC,0BAA0B;IAkBlC;;;;;;OAMG;IACU,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAMpG;;;;;;OAMG;IACU,0BAA0B,IAAI,OAAO,CAAC,iCAAiC,CAAC;IAyCrF;;;;;;;OAOG;IACU,yBAAyB,IAAI,OAAO,CAAC,iCAAiC,CAAC;IAmCpF;;;;;;OAMG;IACU,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsD/D;;;;;OAKG;IACI,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAetD;;;;;;;OAOG;IACU,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6C3F;;;;OAIG;IACU,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD;;;;;;;;OAQG;IACU,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CA2C9F;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Copyright (c) 2025-2026, WSO2 LLC. (https://www.wso2.com).
3
+ *
4
+ * WSO2 LLC. licenses this file to you under the Apache License,
5
+ * Version 2.0 (the "License"); you may not use this file except
6
+ * in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing,
12
+ * software distributed under the License is distributed on an
13
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ * KIND, either express or implied. See the License for the
15
+ * specific language governing permissions and limitations
16
+ * under the License.
17
+ */
18
+ import { BaseConfig } from '../models/config';
19
+ /**
20
+ * Resource-server endpoints whose URLs can be overridden via `config.endpoints`.
21
+ *
22
+ * Unlike the OIDC/OAuth endpoints, these are not resolved from the well-known discovery document;
23
+ * they are derived by concatenating `baseUrl` with a fixed path. When the authorization server and
24
+ * the Thunder resource server are different hosts (e.g. two Thunder instances connected as trusted
25
+ * issuers), these overrides let the SDK send flow and user-management requests to the resource
26
+ * server while OAuth requests continue to target the authorization server.
27
+ */
28
+ export type ResourceEndpointKey = 'flowExecute' | 'flowMeta' | 'usersMe';
29
+ /**
30
+ * The `config.endpoints` keys that address resource-server endpoints rather than OIDC/OAuth
31
+ * endpoints. Used to keep these overrides out of the resolved OIDC provider metadata.
32
+ */
33
+ export declare const RESOURCE_ENDPOINT_KEYS: readonly ResourceEndpointKey[];
34
+ /**
35
+ * Minimal shape of the config needed to resolve a resource-server endpoint override.
36
+ * Reuses the `endpoints` type from {@link BaseConfig} so the override shape stays in sync.
37
+ */
38
+ export interface ResourceEndpointConfig {
39
+ endpoints?: BaseConfig['endpoints'];
40
+ }
41
+ /**
42
+ * Resolves the absolute `url` to use for a resource-server endpoint, honoring (in order of
43
+ * precedence) an explicit per-call URL, then a `config.endpoints` override.
44
+ *
45
+ * Returns `undefined` when neither is set, so the calling API function falls back to deriving the
46
+ * endpoint from `baseUrl` (i.e. `${baseUrl}/flow/execute`) exactly as before. Callers should keep
47
+ * passing `baseUrl` alongside the resolved `url` to preserve that fallback.
48
+ *
49
+ * @param key - The resource endpoint to resolve.
50
+ * @param config - The client config carrying optional `endpoints` overrides.
51
+ * @param explicitUrl - An explicit URL provided by the immediate caller; takes highest precedence.
52
+ * @returns The resolved override URL, or `undefined` to defer to `baseUrl`-based resolution.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const response = await executeEmbeddedUserOnboardingFlow({
57
+ * baseUrl: config.baseUrl,
58
+ * url: resolveResourceEndpoint('flowExecute', config),
59
+ * payload,
60
+ * });
61
+ * ```
62
+ */
63
+ declare const resolveResourceEndpoint: (key: ResourceEndpointKey, config: ResourceEndpointConfig | undefined, explicitUrl?: string) => string | undefined;
64
+ export default resolveResourceEndpoint;
65
+ //# sourceMappingURL=resolveResourceEndpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveResourceEndpoint.d.ts","sourceRoot":"","sources":["../../src/utils/resolveResourceEndpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,mBAAmB,EAA2C,CAAC;AAE7G;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,QAAA,MAAM,uBAAuB,GAC3B,KAAK,mBAAmB,EACxB,QAAQ,sBAAsB,GAAG,SAAS,EAC1C,cAAc,MAAM,KACnB,MAAM,GAAG,SAAiE,CAAC;AAE9E,eAAe,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thunderid/javascript",
3
- "version": "0.11.1",
3
+ "version": "0.11.2",
4
4
  "description": "JavaScript Ecosystem SDK for ThunderID",
5
5
  "keywords": [
6
6
  "thunderid",