@thunderid/javascript 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
- import * as jose from "jose";
1
+ import * as base64url from "jose/base64url";
2
+ import { importJWK } from "jose/key/import";
3
+ import { jwtVerify } from "jose/jwt/verify";
2
4
 
3
5
  //#region rolldown:runtime
4
6
  var __defProp = Object.defineProperty;
@@ -87,6 +89,16 @@ var IsomorphicCrypto = class {
87
89
  return this.cryptoUtils.base64URLEncode(this.cryptoUtils.generateRandomBytes(32));
88
90
  }
89
91
  /**
92
+ * Generates the random part of an authorization request `state` from 32 random bytes. Only
93
+ * letters and digits are kept, so the value never contains the `_` that separates the parts of
94
+ * the state.
95
+ *
96
+ * @returns A random string of about 42 characters.
97
+ */
98
+ generateState() {
99
+ return this.cryptoUtils.base64URLEncode(this.cryptoUtils.generateRandomBytes(32)).replace(/[^A-Za-z0-9]/g, "");
100
+ }
101
+ /**
90
102
  * Derive code challenge from the code verifier.
91
103
  *
92
104
  * @param verifier - Code verifier.
@@ -2225,7 +2237,10 @@ const OIDCRequestConstants = {
2225
2237
  SIGN_OUT_SUCCESS: "sign_out_success",
2226
2238
  STATE: "state"
2227
2239
  },
2228
- SignIn: { Payload: { DEFAULT_SCOPES: [ScopeConstants_default.OPENID, ScopeConstants_default.PROFILE] } },
2240
+ SignIn: {
2241
+ Payload: { DEFAULT_SCOPES: [ScopeConstants_default.OPENID, ScopeConstants_default.PROFILE] },
2242
+ Storage: { StorageKeys: { STATE: "authorization_state" } }
2243
+ },
2229
2244
  SignOut: { Storage: { StorageKeys: { SIGN_OUT_URL: "sign_out_url" } } }
2230
2245
  };
2231
2246
  var OIDCRequestConstants_default = OIDCRequestConstants;
@@ -2682,11 +2697,11 @@ var DefaultCacheStore = class {
2682
2697
  */
2683
2698
  var DefaultCrypto = class {
2684
2699
  base64URLDecode(value) {
2685
- const decodedArray = jose.base64url.decode(value);
2700
+ const decodedArray = base64url.decode(value);
2686
2701
  return new TextDecoder().decode(decodedArray);
2687
2702
  }
2688
2703
  base64URLEncode(value) {
2689
- return jose.base64url.encode(value);
2704
+ return base64url.encode(value);
2690
2705
  }
2691
2706
  generateRandomBytes(length) {
2692
2707
  return crypto.getRandomValues(new Uint8Array(length));
@@ -2697,8 +2712,7 @@ var DefaultCrypto = class {
2697
2712
  return new Uint8Array(hashBuffer);
2698
2713
  }
2699
2714
  async verifyJwt(idToken, jwk, algorithms, clientId, issuer, subject, clockTolerance, validateJwtIssuer = true) {
2700
- const key = await jose.importJWK(jwk);
2701
- await jose.jwtVerify(idToken, key, {
2715
+ await jwtVerify(idToken, await importJWK(jwk), {
2702
2716
  algorithms,
2703
2717
  audience: [clientId],
2704
2718
  clockTolerance,
@@ -2785,6 +2799,7 @@ var StorageManager = class StorageManager {
2785
2799
  return `${store}-${this.id}`;
2786
2800
  }
2787
2801
  static isLocalStorageAvailable() {
2802
+ if (typeof window === "undefined") return false;
2788
2803
  try {
2789
2804
  const testValue = "__AUTH_SDK_STORAGE_TEST__";
2790
2805
  localStorage.setItem(testValue, testValue);
@@ -3208,7 +3223,7 @@ var AuthenticationHelper = class {
3208
3223
  * Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
3209
3224
  *
3210
3225
  * Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
3211
- * (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
3226
+ * (`RESOURCE_ENDPOINT_KEYS`) and the backend overrides are excluded — those are resolved separately via
3212
3227
  * `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
3213
3228
  *
3214
3229
  * @param configData - The resolved auth client config.
@@ -3217,7 +3232,7 @@ var AuthenticationHelper = class {
3217
3232
  mapConfiguredOidcEndpoints(configData) {
3218
3233
  const endpoints = {};
3219
3234
  if (!configData.endpoints) return endpoints;
3220
- Object.keys(configData.endpoints).filter((endpointName) => !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
3235
+ Object.keys(configData.endpoints).filter((endpointName) => endpointName !== "backend" && !RESOURCE_ENDPOINT_KEYS.includes(endpointName)).forEach((endpointName) => {
3221
3236
  const snakeCasedName = endpointName.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
3222
3237
  endpoints[snakeCasedName] = configData.endpoints ? configData.endpoints[endpointName] : "";
3223
3238
  });
@@ -3424,7 +3439,7 @@ var AuthenticationHelper = class {
3424
3439
  } else sessionData = await this.storageManager.getSessionData(userId);
3425
3440
  const scope = processOpenIDScopes_default(configData.scopes);
3426
3441
  if (typeof text !== "string") return text;
3427
- return text.replace(TokenExchangeConstants_default.Placeholders.ACCESS_TOKEN, sessionData.access_token).replace(TokenExchangeConstants_default.Placeholders.USERNAME, this.getAuthenticatedUserInfo(sessionData.id_token).username ?? "").replace(TokenExchangeConstants_default.Placeholders.SCOPES, scope).replace(TokenExchangeConstants_default.Placeholders.CLIENT_ID, configData.clientId ?? "").replace(TokenExchangeConstants_default.Placeholders.CLIENT_SECRET, configData.clientSecret ?? "");
3442
+ return text.replace(TokenExchangeConstants_default.Placeholders.ACCESS_TOKEN, () => sessionData?.access_token ?? "").replace(TokenExchangeConstants_default.Placeholders.USERNAME, () => sessionData?.id_token ? this.getAuthenticatedUserInfo(sessionData.id_token).username ?? "" : "").replace(TokenExchangeConstants_default.Placeholders.SCOPES, scope).replace(TokenExchangeConstants_default.Placeholders.CLIENT_ID, configData.clientId ?? "").replace(TokenExchangeConstants_default.Placeholders.CLIENT_SECRET, configData.clientSecret ?? "");
3428
3443
  }
3429
3444
  /**
3430
3445
  * Clears all temporary and session data for the given user.
@@ -3479,7 +3494,7 @@ var AuthenticationHelper_default = AuthenticationHelper;
3479
3494
  /**
3480
3495
  * Encodes a string to standard base64 using `jose` (already a package dependency).
3481
3496
  *
3482
- * `jose.base64url.encode` is environment-agnostic (browser, Node.js, Deno, Bun,
3497
+ * jose's `base64url.encode` is environment-agnostic (browser, Node.js, Deno, Bun,
3483
3498
  * edge/service-worker runtimes). It produces base64url output, which is then
3484
3499
  * converted to standard base64 by restoring the `+`/`/` characters and adding
3485
3500
  * `=` padding.
@@ -3493,7 +3508,7 @@ var AuthenticationHelper_default = AuthenticationHelper;
3493
3508
  * ```
3494
3509
  */
3495
3510
  const base64Encode = (value) => {
3496
- const b64url = jose.base64url.encode(new TextEncoder().encode(value));
3511
+ const b64url = base64url.encode(new TextEncoder().encode(value));
3497
3512
  const rem = b64url.length % 4;
3498
3513
  return (rem === 0 ? b64url : b64url + "=".repeat(4 - rem)).replace(/-/g, "+").replace(/_/g, "/");
3499
3514
  };
@@ -3628,7 +3643,7 @@ var generateStateParamForRequestCorrelation_default = generateStateParamForReque
3628
3643
  * This utility ensures the `openid` scope is always included, handles both string and array forms of the `scope` parameter,
3629
3644
  * and supports PKCE and custom parameters. Throws if a code challenge is provided without a code challenge method.
3630
3645
  *
3631
- * @param options - The main options for the authorization request, including redirectUri, clientId, scope, responseMode, codeChallenge, codeChallengeMethod, and prompt.
3646
+ * @param options - The main options for the authorization request, including redirectUri, clientId, scope, responseMode, codeChallenge, codeChallengeMethod, prompt, and randomState (a value generated from random bytes that makes the `state` unique to this request).
3632
3647
  * @param pkceOptions - PKCE options, including the PKCE key for state correlation.
3633
3648
  * @param customParams - Optional custom parameters to include in the request (excluding the `state` param, which is handled separately).
3634
3649
  * @returns A Map of key-value pairs representing the authorization request URL parameters.
@@ -3673,14 +3688,67 @@ const getAuthorizeRequestUrlParams = (options, pkceOptions, customParams) => {
3673
3688
  const customState = customParams?.[OIDCRequestConstants_default.Params.STATE]?.toString() ?? "";
3674
3689
  let customStateValue = customState;
3675
3690
  if (options.instanceId) customStateValue = AUTH_INSTANCE_PREFIX + options.instanceId + (customState ? `_${customState}` : "");
3691
+ if (options.randomState) customStateValue = customStateValue ? `${customStateValue}_${options.randomState}` : options.randomState;
3676
3692
  authorizeRequestParams.set(OIDCRequestConstants_default.Params.STATE, generateStateParamForRequestCorrelation_default(pkceKey, customStateValue));
3677
3693
  return authorizeRequestParams;
3678
3694
  };
3679
3695
  var getAuthorizeRequestUrlParams_default = getAuthorizeRequestUrlParams;
3680
3696
 
3697
+ //#endregion
3698
+ //#region src/utils/getOAuthErrorMessage.ts
3699
+ /**
3700
+ * Builds a readable message from the body of an OAuth 2.0 error response (RFC 6749 section 5.2).
3701
+ *
3702
+ * Only the `error` and `error_description` members are read, so nothing else in the body, such as
3703
+ * a token, can end up in the message.
3704
+ *
3705
+ * @param body - The parsed response body, or its raw text.
3706
+ * @param fallback - The message to use when the body carries neither member.
3707
+ * @returns `"<error>: <error_description>"`, whichever of the two is present, or `fallback`.
3708
+ *
3709
+ * @example
3710
+ * getOAuthErrorMessage({error: 'invalid_grant', error_description: 'The code has expired.'}, 'Failed');
3711
+ * // Returns: "invalid_grant: The code has expired."
3712
+ */
3713
+ const getOAuthErrorMessage = (body, fallback) => {
3714
+ let parsed = body;
3715
+ if (typeof body === "string") try {
3716
+ parsed = JSON.parse(body);
3717
+ } catch {
3718
+ return fallback;
3719
+ }
3720
+ if (!parsed || typeof parsed !== "object") return fallback;
3721
+ const { error: error$1, error_description: description } = parsed;
3722
+ const parts = [error$1, description].filter((part) => typeof part === "string" && part.trim().length > 0);
3723
+ return parts.length > 0 ? parts.join(": ") : fallback;
3724
+ };
3725
+ var getOAuthErrorMessage_default = getOAuthErrorMessage;
3726
+
3681
3727
  //#endregion
3682
3728
  //#region src/ThunderIDJavaScriptClient.ts
3683
3729
  const WELL_KNOWN_PATH = "/.well-known/openid-configuration";
3730
+ /**
3731
+ * The issuer a discovery document must name: the configured `endpoints.issuer`, else the URL the
3732
+ * well-known path was appended to (OpenID Connect Discovery 1.0, section 4.3).
3733
+ */
3734
+ const getExpectedIssuer = (configuredIssuer, wellKnownOverride, baseUrl) => {
3735
+ if (configuredIssuer) return configuredIssuer;
3736
+ if (wellKnownOverride) return wellKnownOverride.endsWith(WELL_KNOWN_PATH) ? wellKnownOverride.slice(0, -33) : void 0;
3737
+ return baseUrl || void 0;
3738
+ };
3739
+ /**
3740
+ * Compares two issuers exactly, apart from a trailing slash on either side.
3741
+ */
3742
+ const issuersMatch = (discovered, expected) => typeof discovered === "string" && discovered.replace(/\/+$/, "") === expected.replace(/\/+$/, "");
3743
+ /**
3744
+ * Reads a readable message from the body of a failed token, revocation, or custom grant response.
3745
+ */
3746
+ const readErrorMessage = async (response, fallback) => getOAuthErrorMessage_default(await response.json().catch(() => void 0), fallback);
3747
+ /**
3748
+ * The storage key of the `state` sent with the authorization request whose PKCE key is given. Both
3749
+ * share the request index, so the callback finds the state from the index at the end of `state`.
3750
+ */
3751
+ const getStateStorageKey = (pkceKey) => pkceKey.replace(PKCEConstants_default.Storage.StorageKeys.CODE_VERIFIER, OIDCRequestConstants_default.SignIn.Storage.StorageKeys.STATE);
3684
3752
  const REVOKE_ACCESS_TOKEN_REQUEST_TIMEOUT_MS = 1e4;
3685
3753
  const DEFAULT_CONFIG = {
3686
3754
  enablePKCE: true,
@@ -3738,12 +3806,19 @@ var ThunderIDJavaScriptClient = class {
3738
3806
  await this.loadOpenIDProviderConfiguration(true);
3739
3807
  return true;
3740
3808
  }
3741
- getConfiguration() {
3742
- return this.storageManager.getConfigData();
3809
+ async getConfiguration() {
3810
+ return await this.storageManager.getConfigData();
3743
3811
  }
3812
+ /**
3813
+ * Returns the signed-in user, read from the claims of the session's ID token.
3814
+ *
3815
+ * @param userId - The session to read, on a server.
3816
+ * @throws {ThunderIDRuntimeError} With code `JS-AUTH_CORE-GU-NF01` when the session holds no ID token.
3817
+ */
3744
3818
  async getUser(userId) {
3745
3819
  const sessionData = await this.storageManager.getSessionData(userId);
3746
- const authenticatedUser = this.authHelper.getAuthenticatedUserInfo(sessionData?.id_token);
3820
+ if (!sessionData?.id_token) throw new ThunderIDRuntimeError("No signed-in session was found.", "JS-AUTH_CORE-GU-NF01", "javascript");
3821
+ const authenticatedUser = this.authHelper.getAuthenticatedUserInfo(sessionData.id_token);
3747
3822
  Object.keys(authenticatedUser).forEach((key) => {
3748
3823
  if (authenticatedUser[key] === void 0 || authenticatedUser[key] === "" || authenticatedUser[key] === null) delete authenticatedUser[key];
3749
3824
  });
@@ -3812,7 +3887,7 @@ var ThunderIDJavaScriptClient = class {
3812
3887
  };
3813
3888
  if (config.attachToken) requestHeaders = {
3814
3889
  ...requestHeaders,
3815
- Authorization: `Bearer ${(await this.storageManager.getSessionData(sessionId)).access_token}`
3890
+ Authorization: `Bearer ${(await this.storageManager.getSessionData(sessionId))?.access_token}`
3816
3891
  };
3817
3892
  const requestConfig = {
3818
3893
  body: data.join("&"),
@@ -3826,7 +3901,7 @@ var ThunderIDJavaScriptClient = class {
3826
3901
  } catch (error$1) {
3827
3902
  throw new ThunderIDAuthException("JS-AUTH_CORE-RCG-NE02", "The custom grant request failed.", error$1 ?? "The request sent to get the custom grant failed.");
3828
3903
  }
3829
- if (response.status !== 200 || !response.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCG-HE03", `Invalid response status received for the custom grant request. (${response.statusText})`, await response.json());
3904
+ if (response.status !== 200 || !response.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCG-HE03", `Invalid response status received for the custom grant request. (${response.statusText})`, await readErrorMessage(response, "The custom grant request was rejected."));
3830
3905
  if (config.returnsSession) return this.authHelper.handleTokenResponse(response, sessionId);
3831
3906
  return await response.json();
3832
3907
  }
@@ -3858,7 +3933,8 @@ var ThunderIDJavaScriptClient = class {
3858
3933
  const configData = await this.configProvider();
3859
3934
  if (!forceInit && await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) return;
3860
3935
  const { discovery, baseUrl, endpoints } = configData;
3861
- const resolvedWellKnownEndpoint = endpoints?.wellKnown || (discovery?.wellKnown?.enabled !== false && baseUrl ? `${baseUrl}${WELL_KNOWN_PATH}` : void 0);
3936
+ const wellKnownOverride = endpoints?.wellKnown;
3937
+ const resolvedWellKnownEndpoint = wellKnownOverride || (discovery?.wellKnown?.enabled !== false && baseUrl ? `${baseUrl}${WELL_KNOWN_PATH}` : void 0);
3862
3938
  if (resolvedWellKnownEndpoint) {
3863
3939
  let response;
3864
3940
  try {
@@ -3873,8 +3949,19 @@ var ThunderIDJavaScriptClient = class {
3873
3949
  }
3874
3950
  if (response) {
3875
3951
  let discoveryResolved = false;
3952
+ let discovered;
3953
+ try {
3954
+ discovered = await response.json();
3955
+ } catch {
3956
+ discovered = void 0;
3957
+ }
3958
+ if (discovered && typeof discovered === "object") {
3959
+ const expectedIssuer = getExpectedIssuer(endpoints?.issuer, wellKnownOverride, baseUrl);
3960
+ if (expectedIssuer !== void 0 && !issuersMatch(discovered.issuer, expectedIssuer)) throw new ThunderIDRuntimeError("The discovered issuer does not match the expected issuer. Set endpoints.issuer if your server uses a custom issuer.", "JS-AUTH_CORE-GOPMD-IV03", "javascript");
3961
+ }
3876
3962
  try {
3877
- await this.storageManager.setOIDCProviderMetaData(await this.authHelper.resolveEndpoints(await response.json()));
3963
+ if (!discovered || typeof discovered !== "object") throw new Error("The discovery response is not a JSON object.");
3964
+ await this.storageManager.setOIDCProviderMetaData(await this.authHelper.resolveEndpoints(discovered));
3878
3965
  discoveryResolved = true;
3879
3966
  } catch (error$1) {
3880
3967
  logger_default.warn(`ThunderIDJavaScriptClient: Could not resolve endpoints from the discovery response of ${resolvedWellKnownEndpoint}; falling back to endpoints derived from the base URL.`, error$1);
@@ -3922,10 +4009,12 @@ var ThunderIDJavaScriptClient = class {
3922
4009
  codeChallengeMethod: PKCEConstants_default.DEFAULT_CODE_CHALLENGE_METHOD,
3923
4010
  instanceId: this.getInstanceId().toString(),
3924
4011
  prompt: configData.prompt,
4012
+ randomState: this.cryptoHelper.generateState(),
3925
4013
  redirectUri: configData.afterSignInUrl ?? "",
3926
4014
  responseMode: configData.responseMode,
3927
4015
  scopes: processOpenIDScopes_default(configData.scopes)
3928
4016
  }).filter(([, v]) => v !== void 0)), { key: pkceKey }, authRequestConfig);
4017
+ await this.storageManager.setHybridDataParameter(getStateStorageKey(pkceKey), authorizeRequestParams.get(OIDCRequestConstants_default.Params.STATE) ?? "", userId);
3929
4018
  Array.from(authorizeRequestParams.entries()).forEach(([paramKey, paramValue]) => {
3930
4019
  authorizeRequest.searchParams.append(paramKey, paramValue);
3931
4020
  });
@@ -3936,6 +4025,10 @@ var ThunderIDJavaScriptClient = class {
3936
4025
  }
3937
4026
  async requestAccessToken(authorizationCode, state, userId, tokenRequestConfig) {
3938
4027
  if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
4028
+ const stateStorageKey = getStateStorageKey(extractPkceStorageKeyFromState_default(state ?? ""));
4029
+ const expectedState = await this.storageManager.getHybridDataParameter(stateStorageKey, userId);
4030
+ if (!state || typeof expectedState !== "string" || !expectedState || state !== expectedState) throw new ThunderIDRuntimeError("The state returned to the callback does not match the state of the authorization request.", "JS-AUTH_CORE-RAT1-IV04", "javascript");
4031
+ await this.storageManager.removeHybridDataParameter(stateStorageKey, userId);
3939
4032
  const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
3940
4033
  const configData = await this.configProvider();
3941
4034
  if (!tokenEndpoint || tokenEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT1-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.");
@@ -3970,7 +4063,7 @@ var ThunderIDJavaScriptClient = class {
3970
4063
  } catch (error$1) {
3971
4064
  throw new ThunderIDAuthException("JS-AUTH_CORE-RAT1-NE02", "Requesting access token failed", error$1 ?? "The request to get the access token from the server failed.");
3972
4065
  }
3973
- if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT1-HE03", `Requesting access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
4066
+ if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT1-HE03", `Requesting access token failed with ${tokenResponse.statusText}`, await readErrorMessage(tokenResponse, "The token request was rejected."));
3974
4067
  return this.authHelper.handleTokenResponse(tokenResponse, userId);
3975
4068
  }
3976
4069
  async getSignOutUrl(userId) {
@@ -3987,7 +4080,11 @@ var ThunderIDJavaScriptClient = class {
3987
4080
  queryParams.set("state", OIDCRequestConstants_default.Params.SIGN_OUT_SUCCESS);
3988
4081
  return `${logoutEndpoint}?${queryParams.toString()}`;
3989
4082
  }
4083
+ /**
4084
+ * Returns the endpoints the SDK calls. Loads the discovery document first when no other call has.
4085
+ */
3990
4086
  async getOpenIDProviderEndpoints() {
4087
+ await this.loadOpenIDProviderConfiguration(false);
3991
4088
  const meta = await this.oidcProviderMetaDataProvider();
3992
4089
  return {
3993
4090
  authorizationEndpoint: meta.authorization_endpoint ?? "",
@@ -4001,16 +4098,27 @@ var ThunderIDJavaScriptClient = class {
4001
4098
  userinfoEndpoint: meta.userinfo_endpoint ?? ""
4002
4099
  };
4003
4100
  }
4101
+ /**
4102
+ * Returns the discovery document. Loads it first when no other call has. Resolves to `null`
4103
+ * before `initialize()`.
4104
+ */
4004
4105
  async getDiscoveryResponse() {
4005
4106
  if (!this.storageManager) return null;
4107
+ await this.loadOpenIDProviderConfiguration(false);
4006
4108
  return this.storageManager.loadOpenIDProviderConfiguration();
4007
4109
  }
4110
+ /**
4111
+ * Returns the claims of the session's ID token, or of `idToken` when the session holds none.
4112
+ *
4113
+ * @throws {ThunderIDRuntimeError} With code `JS-AUTH_CORE-GDIT-NF01` when there is no ID token to decode.
4114
+ */
4008
4115
  async getDecodedIdToken(userId, idToken) {
4009
- const storedIdToken = (await this.storageManager.getSessionData(userId)).id_token;
4010
- return this.cryptoHelper.decodeJwtToken(storedIdToken ?? idToken);
4116
+ const token = (await this.storageManager.getSessionData(userId))?.id_token ?? idToken;
4117
+ if (!token) throw new ThunderIDRuntimeError("No signed-in session was found.", "JS-AUTH_CORE-GDIT-NF01", "javascript");
4118
+ return this.cryptoHelper.decodeJwtToken(token);
4011
4119
  }
4012
4120
  async getIdToken(userId) {
4013
- return (await this.storageManager.getSessionData(userId)).id_token;
4121
+ return (await this.storageManager.getSessionData(userId))?.id_token;
4014
4122
  }
4015
4123
  async getUserSession(userId) {
4016
4124
  return { scopes: (await this.storageManager.getSessionData(userId))?.scope?.split(" ") };
@@ -4041,7 +4149,7 @@ var ThunderIDJavaScriptClient = class {
4041
4149
  } catch (error$1) {
4042
4150
  throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-NR03", "Refresh access token request failed.", error$1 ?? "The request to refresh the access token failed.");
4043
4151
  }
4044
- if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
4152
+ if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT2-HE04", `Refreshing access token failed with ${tokenResponse.statusText}`, await readErrorMessage(tokenResponse, "The refresh token request was rejected."));
4045
4153
  return this.authHelper.handleTokenResponse(tokenResponse, userId);
4046
4154
  }
4047
4155
  /**
@@ -4080,7 +4188,7 @@ var ThunderIDJavaScriptClient = class {
4080
4188
  } catch (error$1) {
4081
4189
  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.");
4082
4190
  }
4083
- if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await tokenResponse.json());
4191
+ if (!tokenResponse.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RCCT-HE03", `Requesting client credentials token failed with ${tokenResponse.statusText}`, await readErrorMessage(tokenResponse, "The client credentials token request was rejected."));
4084
4192
  const parsedResponse = await tokenResponse.json();
4085
4193
  parsedResponse.created_at = (/* @__PURE__ */ new Date()).getTime();
4086
4194
  await this.storageManager.setSessionData(parsedResponse, sessionId);
@@ -4124,7 +4232,7 @@ var ThunderIDJavaScriptClient = class {
4124
4232
  } catch (error$1) {
4125
4233
  throw new ThunderIDAuthException("JS-AUTH_CORE-RAT3-NE02", "The request to revoke access token failed.", error$1 ?? "The request sent to revoke the access token failed.");
4126
4234
  }
4127
- if (response.status !== 200 || !response.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT3-HE03", `Invalid response status received for revoke access token request (${response.statusText}).`, await response.json());
4235
+ if (response.status !== 200 || !response.ok) throw new ThunderIDAuthException("JS-AUTH_CORE-RAT3-HE03", `Invalid response status received for revoke access token request (${response.statusText}).`, await readErrorMessage(response, "The revocation request was rejected."));
4128
4236
  return response;
4129
4237
  }
4130
4238
  async revokeAccessToken(userId) {
@@ -4180,7 +4288,7 @@ var ThunderIDJavaScriptClient = class {
4180
4288
  } catch {
4181
4289
  parsedBody = rawBody;
4182
4290
  }
4183
- if (!response.ok) throw new ThunderIDAPIError(parsedBody, "JS-AUTH_CORE-CIBA1-HE03", "javascript", response.status, response.statusText, "CIBA backchannel authentication request failed");
4291
+ if (!response.ok) throw new ThunderIDAPIError(getOAuthErrorMessage_default(parsedBody, "The backchannel authentication request was rejected."), "JS-AUTH_CORE-CIBA1-HE03", "javascript", response.status, response.statusText, "CIBA backchannel authentication request failed");
4184
4292
  const payload = parsedBody;
4185
4293
  if (!payload.auth_req_id) throw new ThunderIDAPIError("The server response did not include an auth_req_id.", "JS-AUTH_CORE-CIBA1-PR04", "javascript");
4186
4294
  return {
@@ -4812,9 +4920,9 @@ var arrayBufferToBase64url_default = arrayBufferToBase64url;
4812
4920
  *
4813
4921
  * @see {@link arrayBufferToBase64url} - The inverse function for encoding ArrayBuffer to base64url
4814
4922
  */
4815
- const base64urlToArrayBuffer = (base64url) => {
4816
- const padding = "=".repeat((4 - base64url.length % 4) % 4);
4817
- const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/") + padding;
4923
+ const base64urlToArrayBuffer = (base64url$1) => {
4924
+ const padding = "=".repeat((4 - base64url$1.length % 4) % 4);
4925
+ const base64 = base64url$1.replace(/-/g, "+").replace(/_/g, "/") + padding;
4818
4926
  const binaryString = atob(base64);
4819
4927
  const bytes = new Uint8Array(binaryString.length);
4820
4928
  for (let i = 0; i < binaryString.length; i += 1) bytes[i] = binaryString.charCodeAt(i);
@@ -5229,6 +5337,43 @@ const resolveFieldName = (field) => {
5229
5337
  };
5230
5338
  var resolveFieldName_default = resolveFieldName;
5231
5339
 
5340
+ //#endregion
5341
+ //#region src/utils/resolveBackendEndpoints.ts
5342
+ const DEFAULT_BACKEND_BASE_PATH = "/api/auth";
5343
+ /**
5344
+ * Resolves the backend endpoints from `endpoints.backend`, or returns `undefined` when it is not set
5345
+ * and sign-in does not run on a backend.
5346
+ *
5347
+ * @param config - The client config.
5348
+ * @param origin - The app's origin, used as the API base when `baseUrl` is not set.
5349
+ * @returns The resolved endpoints, or `undefined` when `endpoints.backend` is not set.
5350
+ *
5351
+ * @example
5352
+ * ```typescript
5353
+ * resolveBackendEndpoints({endpoints: {backend: {signIn: '/auth/signin'}}}, window.location.origin);
5354
+ * // {signIn: '/auth/signin', session: '/api/auth/session', ..., apiBaseUrl: 'https://...'}
5355
+ * ```
5356
+ */
5357
+ const resolveBackendEndpoints = (config, origin) => {
5358
+ const endpoints = config?.endpoints?.backend;
5359
+ if (!endpoints) return;
5360
+ return {
5361
+ apiBaseUrl: (config?.baseUrl || origin).replace(/\/+$/, ""),
5362
+ bypass: {
5363
+ attachToken: endpoints.bypass?.attachToken ?? true,
5364
+ urls: (endpoints.bypass?.urls ?? []).map((url) => url.replace(/\/+$/, ""))
5365
+ },
5366
+ checkSession: endpoints.checkSession ?? `${DEFAULT_BACKEND_BASE_PATH}/checksession`,
5367
+ proxy: (endpoints.proxy ?? `${DEFAULT_BACKEND_BASE_PATH}/proxy`).replace(/\/+$/, ""),
5368
+ refresh: endpoints.refresh ?? `${DEFAULT_BACKEND_BASE_PATH}/refresh`,
5369
+ session: endpoints.session ?? `${DEFAULT_BACKEND_BASE_PATH}/session`,
5370
+ signIn: endpoints.signIn ?? `${DEFAULT_BACKEND_BASE_PATH}/signin`,
5371
+ signOut: endpoints.signOut ?? `${DEFAULT_BACKEND_BASE_PATH}/signout`,
5372
+ token: endpoints.token ?? `${DEFAULT_BACKEND_BASE_PATH}/token`
5373
+ };
5374
+ };
5375
+ var resolveBackendEndpoints_default = resolveBackendEndpoints;
5376
+
5232
5377
  //#endregion
5233
5378
  //#region src/utils/computeNextPageOffset.ts
5234
5379
  /**
@@ -7769,4 +7914,4 @@ const normalizeTranslations = (translations) => {
7769
7914
  var normalizeTranslations_default = normalizeTranslations;
7770
7915
 
7771
7916
  //#endregion
7772
- export { AgentQueryKeys_default as AgentQueryKeys, ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, ApplicationQueryKeys_default as ApplicationQueryKeys, AuthFlowSelectConstants_default as AuthFlowSelectConstants, AuthenticationHelper_default as AuthenticationHelper, BackchannelLogoutConstants_default as BackchannelLogoutConstants, ConsentConstants_default as ConsentConstants, CredentialConstants_default as CredentialConstants, 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, InboundAuthTypes, InvalidLogoutTokenError, IsomorphicCrypto, OAuth2GrantTypes, OAuth2ResponseTypes, OIDCRequestConstants_default as OIDCRequestConstants, REFRESH_TOKEN_ISSUING_GRANTS, SelectConstants_default as SelectConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TokenEndpointAuthMethods, TranslationBundleConstants_default as TranslationBundleConstants, UserQueryKeys_default as UserQueryKeys, UserSelectConstants_default as UserSelectConstants, UserTypeSelectConstants_default as UserTypeSelectConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, capPageSize_default as capPageSize, computeNextPageOffset_default as computeNextPageOffset, configure as configureLogger, countryCodeToFlagEmoji, createAgent_default as createAgent, createApplication_default as createApplication, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createResourceFailureLogger, createResourceOptionsLoader_default as createResourceOptionsLoader, createTheme_default as createTheme, createUser_default as createUser, debug, dedupeSelectOptions_default as dedupeSelectOptions, deepMerge_default as deepMerge, deleteAgent_default as deleteAgent, deleteApplication_default as deleteApplication, deleteUser_default as deleteUser, error, evaluateChangePasswordForm_default as evaluateChangePasswordForm, evaluatePasswordPolicy_default as evaluatePasswordPolicy, 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, getAgent_default as getAgent, getAgents_default as getAgents, getApplication_default as getApplication, getApplications_default as getApplications, getBaseLanguage, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getFlows_default as getFlows, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getSelectMessages_default as getSelectMessages, getUser_default as getUser, getUserInfo_default as getUserInfo, getUserTypes_default as getUserTypes, getUsers_default as getUsers, getUsersMe_default as getUsersMe, getUsersMeMeta_default as getUsersMeMeta, getVendorPrefix_default as getVendorPrefix, hasUnresolvedTranslationParams, info, isAdvancingPageOffset_default as isAdvancingPageOffset, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, isRetryableError_default as isRetryableError, loadPageWithRetryAndLog_default as loadPageWithRetryAndLog, loadUntilOptionsGrow_default as loadUntilOptionsGrow, logResourceFailure, logger_default as logger, mapCredentialUpdateError_default as mapCredentialUpdateError, mapSelectPageError_default as mapSelectPageError, mergeOptionsBatch_default as mergeOptionsBatch, normalizeLocaleTag, normalizeSelectOptions_default as normalizeSelectOptions, normalizeTranslations_default as normalizeTranslations, parseKeyValuePairs_default as parseKeyValuePairs, parseSelectPageQuery_default as parseSelectPageQuery, processOpenIDScopes_default as processOpenIDScopes, removeTrailingSlash_default as removeTrailingSlash, resolveChangeCredentialPolicy_default as resolveChangeCredentialPolicy, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolvePageSize_default as resolvePageSize, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, substituteTranslationParams_default as substituteTranslationParams, supportsCredential_default as supportsCredential, toAuthFlowSelectPage_default as toAuthFlowSelectPage, toError_default as toError, toSelectOption_default as toSelectOption, toSelectOptions_default as toSelectOptions, toUserSelectOption_default as toUserSelectOption, toUserSelectPage_default as toUserSelectPage, toUserTypeSelectPage_default as toUserTypeSelectPage, updateAgent_default as updateAgent, updateApplication_default as updateApplication, updateMeCredentials_default as updateMeCredentials, updateMeProfile_default as updateMeProfile, updateUser_default as updateUser, validateLogoutTokenClaims_default as validateLogoutTokenClaims, warn, withRetry_default as withRetry, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
7917
+ export { AgentQueryKeys_default as AgentQueryKeys, ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, ApplicationQueryKeys_default as ApplicationQueryKeys, AuthFlowSelectConstants_default as AuthFlowSelectConstants, AuthenticationHelper_default as AuthenticationHelper, BackchannelLogoutConstants_default as BackchannelLogoutConstants, ConsentConstants_default as ConsentConstants, CredentialConstants_default as CredentialConstants, 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, InboundAuthTypes, InvalidLogoutTokenError, IsomorphicCrypto, OAuth2GrantTypes, OAuth2ResponseTypes, OIDCRequestConstants_default as OIDCRequestConstants, REFRESH_TOKEN_ISSUING_GRANTS, SelectConstants_default as SelectConstants, StorageManager_default as StorageManager, ThunderIDAPIError, ThunderIDAuthException, ThunderIDError, ThunderIDJavaScriptClient_default as ThunderIDJavaScriptClient, ThunderIDRuntimeError, TokenConstants_default as TokenConstants, TokenEndpointAuthMethods, TranslationBundleConstants_default as TranslationBundleConstants, UserQueryKeys_default as UserQueryKeys, UserSelectConstants_default as UserSelectConstants, UserTypeSelectConstants_default as UserTypeSelectConstants, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, capPageSize_default as capPageSize, computeNextPageOffset_default as computeNextPageOffset, configure as configureLogger, countryCodeToFlagEmoji, createAgent_default as createAgent, createApplication_default as createApplication, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createResourceFailureLogger, createResourceOptionsLoader_default as createResourceOptionsLoader, createTheme_default as createTheme, createUser_default as createUser, debug, dedupeSelectOptions_default as dedupeSelectOptions, deepMerge_default as deepMerge, deleteAgent_default as deleteAgent, deleteApplication_default as deleteApplication, deleteUser_default as deleteUser, error, evaluateChangePasswordForm_default as evaluateChangePasswordForm, evaluatePasswordPolicy_default as evaluatePasswordPolicy, 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, getAgent_default as getAgent, getAgents_default as getAgents, getApplication_default as getApplication, getApplications_default as getApplications, getBaseLanguage, getDefaultI18nBundles_default as getDefaultI18nBundles, getFlowMeta_default as getFlowMeta, getFlows_default as getFlows, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getSelectMessages_default as getSelectMessages, getUser_default as getUser, getUserInfo_default as getUserInfo, getUserTypes_default as getUserTypes, getUsers_default as getUsers, getUsersMe_default as getUsersMe, getUsersMeMeta_default as getUsersMeMeta, getVendorPrefix_default as getVendorPrefix, hasUnresolvedTranslationParams, info, isAdvancingPageOffset_default as isAdvancingPageOffset, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, isRetryableError_default as isRetryableError, loadPageWithRetryAndLog_default as loadPageWithRetryAndLog, loadUntilOptionsGrow_default as loadUntilOptionsGrow, logResourceFailure, logger_default as logger, mapCredentialUpdateError_default as mapCredentialUpdateError, mapSelectPageError_default as mapSelectPageError, mergeOptionsBatch_default as mergeOptionsBatch, normalizeLocaleTag, normalizeSelectOptions_default as normalizeSelectOptions, normalizeTranslations_default as normalizeTranslations, parseKeyValuePairs_default as parseKeyValuePairs, parseSelectPageQuery_default as parseSelectPageQuery, processOpenIDScopes_default as processOpenIDScopes, removeTrailingSlash_default as removeTrailingSlash, resolveBackendEndpoints_default as resolveBackendEndpoints, resolveChangeCredentialPolicy_default as resolveChangeCredentialPolicy, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolvePageSize_default as resolvePageSize, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, substituteTranslationParams_default as substituteTranslationParams, supportsCredential_default as supportsCredential, toAuthFlowSelectPage_default as toAuthFlowSelectPage, toError_default as toError, toSelectOption_default as toSelectOption, toSelectOptions_default as toSelectOptions, toUserSelectOption_default as toUserSelectOption, toUserSelectPage_default as toUserSelectPage, toUserTypeSelectPage_default as toUserTypeSelectPage, updateAgent_default as updateAgent, updateApplication_default as updateApplication, updateMeCredentials_default as updateMeCredentials, updateMeProfile_default as updateMeProfile, updateUser_default as updateUser, validateLogoutTokenClaims_default as validateLogoutTokenClaims, warn, withRetry_default as withRetry, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The app backend's auth endpoints, set under `endpoints.backend`. Setting them hands sign-in to the
3
+ * app's backend (the Backend for Frontend pattern): the backend, on the app's own origin, runs the
4
+ * OAuth flow and keeps the tokens. The browser only holds an `HttpOnly` cookie it cannot read, and
5
+ * API calls go through the backend, which attaches the access token.
6
+ *
7
+ * Any endpoint left unset defaults to a fixed path under `/api/auth`.
8
+ *
9
+ * @example
10
+ * endpoints: {backend: {signIn: '/api/auth/signin'}}
11
+ */
12
+ export interface BackendEndpoints {
13
+ /** Starts sign-in. Defaults to `/api/auth/signin`. */
14
+ signIn?: string;
15
+ /** Reports the signed-in user. Defaults to `/api/auth/session`. */
16
+ session?: string;
17
+ /**
18
+ * Reports only whether the session is still live, without refreshing it or counting as activity,
19
+ * so the SDK can poll it. Defaults to `/api/auth/checksession`.
20
+ */
21
+ checkSession?: string;
22
+ /** Refreshes the session. Defaults to `/api/auth/refresh`. */
23
+ refresh?: string;
24
+ /** Ends the session. Defaults to `/api/auth/signout`. */
25
+ signOut?: string;
26
+ /**
27
+ * Prefix of the API proxy. Requests under `baseUrl`, or under the app's origin when `baseUrl` is
28
+ * not set, are sent through it. Defaults to `/api/auth/proxy`.
29
+ */
30
+ proxy?: string;
31
+ /**
32
+ * Issues the access token for `bypass`, as an OAuth token response without a refresh token.
33
+ * Defaults to `/api/auth/token`.
34
+ */
35
+ token?: string;
36
+ /** Requests that skip the proxy and go straight from the browser. */
37
+ bypass?: BackendBypass;
38
+ }
39
+ /**
40
+ * Requests the browser sends directly rather than through the proxy, such as calls to a data plane on
41
+ * another origin. They always carry the cookies.
42
+ *
43
+ * @example
44
+ * bypass: {urls: ['https://dp.example.com/api']}
45
+ */
46
+ export interface BackendBypass {
47
+ /** Base URLs whose requests skip the proxy. A request matches its own base URL or anything under it. */
48
+ urls: string[];
49
+ /**
50
+ * Attach the access token from `token` as `Authorization: Bearer`, and get a new one and retry once
51
+ * on a 401. Defaults to `true`. With `false`, requests go out with only the cookies.
52
+ */
53
+ attachToken?: boolean;
54
+ }
55
+ /**
56
+ * The backend endpoints, fully resolved, with the API base whose requests go through the proxy.
57
+ */
58
+ export type ResolvedBackendEndpoints = Required<Omit<BackendEndpoints, 'bypass'>> & {
59
+ apiBaseUrl: string;
60
+ bypass: Required<BackendBypass>;
61
+ };
62
+ /**
63
+ * What the backend's session endpoint reports.
64
+ */
65
+ export interface BackendSession {
66
+ isSignedIn: boolean;
67
+ /** The ID token's user claims, without the protocol claims. */
68
+ user?: Record<string, unknown>;
69
+ /** When the access token expires, in seconds since the epoch. */
70
+ expiresAt?: number;
71
+ }
72
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/models/backend.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,wGAAwG;IACxG,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,GAAG;IAClF,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -39,9 +39,9 @@ export interface ThunderIDClient<T> {
39
39
  getAccessToken(sessionId?: string): Promise<string>;
40
40
  /**
41
41
  * Gets the client configuration.
42
- * @returns The client configuration.
42
+ * @returns A promise that resolves to the client configuration.
43
43
  */
44
- getConfiguration(): T;
44
+ getConfiguration(): Promise<T>;
45
45
  /**
46
46
  * Gets user information from the session.
47
47
  *
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/models/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,EAAC,MAAM,QAAQ,CAAC;AACvF,OAAO,EAAC,aAAa,EAAE,cAAc,EAAE,aAAa,EAAC,MAAM,UAAU,CAAC;AACtE,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAC;AAChC,OAAO,EAAC,0BAA0B,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAClE,OAAO,EAAC,IAAI,EAAE,WAAW,EAAC,MAAM,QAAQ,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC;;;OAGG;IACH,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvC;;;;OAIG;IACH,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvE;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,0BAA0B,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEhH;;;;OAIG;IACH,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpD;;;OAGG;IACH,gBAAgB,IAAI,CAAC,CAAC;IAEtB;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE1E;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEjG;;;;OAIG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEpD;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;OAKG;IACH,SAAS,IAAI,OAAO,CAAC;IAErB;;;;;OAKG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/B;;;;;;;;OAQG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;;;OAIG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF;;;;;;;OAOG;IACH,MAAM,CACJ,OAAO,CAAC,EAAE,aAAa,EACvB,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,GACjD,OAAO,CAAC,IAAI,GAAG,aAAa,GAAG,SAAS,CAAC,CAAC;IAE7C;;;;;;;;OAQG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAE7E;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAE/G;;;;;;;;OAQG;IACH,OAAO,CACL,OAAO,CAAC,EAAE,cAAc,EACxB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,GAC/C,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAE7B;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/models/client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { BackendEndpoints } from './backend';
1
2
  import { ComponentsExtensions } from './extensions/components';
2
3
  import type { OAuthResponseMode } from './oauth-response';
3
4
  import type { OIDCEndpoints } from './oidc-endpoints';
@@ -39,6 +40,14 @@ export type SignUpOptions = Record<string, unknown>;
39
40
  * Options for the ThunderID SSO session. See {@link BaseConfig.session}.
40
41
  */
41
42
  export interface SessionConfig {
43
+ /**
44
+ * How often to ask the app's backend whether the session is still live, in seconds. Only applies
45
+ * when sign-in runs on a backend (`endpoints.backend`): the backend's check endpoint reports
46
+ * liveness without refreshing the session or counting as activity, so polling it does not keep an
47
+ * idle session alive. Unset or `0` leaves only the check that runs when the page regains focus.
48
+ * @default 0
49
+ */
50
+ checkInterval?: number;
42
51
  /**
43
52
  * Silent sign-in: a `prompt=none` authorize request in a hidden iframe that signs the user in from
44
53
  * an existing ThunderID SSO session without any interaction.
@@ -261,6 +270,12 @@ export interface BaseConfig<T = unknown> extends WithPreferences, WithExtensions
261
270
  * If not provided, resolved from the well-known discovery document.
262
271
  */
263
272
  authorization?: string;
273
+ /**
274
+ * The app backend's auth endpoints. Setting them hands sign-in to the backend: the SDK then signs
275
+ * in, reads the session, and sends API calls through the backend, and never holds a token.
276
+ * Browser clients only. Unset entries default to a fixed path under `/api/auth`.
277
+ */
278
+ backend?: BackendEndpoints;
264
279
  /**
265
280
  * The end-session (logout) endpoint URL.
266
281
  * If not provided, resolved from the well-known discovery document.
@@ -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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"}
@@ -29,7 +29,7 @@ declare class AuthenticationHelper<T> {
29
29
  * Maps the config-defined OIDC endpoint overrides to their discovery-metadata form.
30
30
  *
31
31
  * Endpoint names are converted from camelCase to snake_case, and resource-server endpoints
32
- * (`RESOURCE_ENDPOINT_KEYS`) are excluded — those are resolved separately via
32
+ * (`RESOURCE_ENDPOINT_KEYS`) and the backend overrides are excluded — those are resolved separately via
33
33
  * `resolveResourceEndpoint` and must not leak into the OIDC provider metadata.
34
34
  *
35
35
  * @param configData - The resolved auth client config.