@thunderid/javascript 1.1.0 → 1.3.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.
Files changed (53) hide show
  1. package/dist/IsomorphicCrypto.d.ts +18 -0
  2. package/dist/IsomorphicCrypto.d.ts.map +1 -1
  3. package/dist/StorageManager.d.ts +1 -0
  4. package/dist/StorageManager.d.ts.map +1 -1
  5. package/dist/ThunderIDJavaScriptClient.d.ts +7 -1
  6. package/dist/ThunderIDJavaScriptClient.d.ts.map +1 -1
  7. package/dist/cjs/index.cjs +243 -20
  8. package/dist/constants/BackchannelLogoutConstants.d.ts +13 -0
  9. package/dist/constants/BackchannelLogoutConstants.d.ts.map +1 -0
  10. package/dist/constants/OIDCDiscoveryConstants.d.ts +0 -2
  11. package/dist/constants/OIDCDiscoveryConstants.d.ts.map +1 -1
  12. package/dist/constants/OIDCRequestConstants.d.ts +0 -1
  13. package/dist/constants/OIDCRequestConstants.d.ts.map +1 -1
  14. package/dist/edge/index.js +240 -21
  15. package/dist/errors/exception.d.ts +7 -0
  16. package/dist/errors/exception.d.ts.map +1 -1
  17. package/dist/i18n/models/i18n.d.ts +1 -0
  18. package/dist/i18n/models/i18n.d.ts.map +1 -1
  19. package/dist/i18n/translations/en-US.d.ts.map +1 -1
  20. package/dist/i18n/translations/fr-FR.d.ts.map +1 -1
  21. package/dist/i18n/translations/hi-IN.d.ts.map +1 -1
  22. package/dist/i18n/translations/ja-JP.d.ts.map +1 -1
  23. package/dist/i18n/translations/pt-BR.d.ts.map +1 -1
  24. package/dist/i18n/translations/pt-PT.d.ts.map +1 -1
  25. package/dist/i18n/translations/si-LK.d.ts.map +1 -1
  26. package/dist/i18n/translations/ta-IN.d.ts.map +1 -1
  27. package/dist/i18n/translations/te-IN.d.ts.map +1 -1
  28. package/dist/index.d.ts +6 -2
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +240 -21
  31. package/dist/models/auth-code-response.d.ts +0 -4
  32. package/dist/models/auth-code-response.d.ts.map +1 -1
  33. package/dist/models/config.d.ts +0 -11
  34. package/dist/models/config.d.ts.map +1 -1
  35. package/dist/models/embedded-flow.d.ts +14 -1
  36. package/dist/models/embedded-flow.d.ts.map +1 -1
  37. package/dist/models/embedded-signup-flow.d.ts +4 -0
  38. package/dist/models/embedded-signup-flow.d.ts.map +1 -1
  39. package/dist/models/logout-token.d.ts +58 -0
  40. package/dist/models/logout-token.d.ts.map +1 -0
  41. package/dist/models/oidc-discovery.d.ts +0 -5
  42. package/dist/models/oidc-discovery.d.ts.map +1 -1
  43. package/dist/models/oidc-endpoints.d.ts +0 -1
  44. package/dist/models/oidc-endpoints.d.ts.map +1 -1
  45. package/dist/models/session.d.ts +0 -2
  46. package/dist/models/session.d.ts.map +1 -1
  47. package/dist/utils/AuthenticationHelper.d.ts +31 -0
  48. package/dist/utils/AuthenticationHelper.d.ts.map +1 -1
  49. package/dist/utils/parseKeyValuePairs.d.ts +21 -0
  50. package/dist/utils/parseKeyValuePairs.d.ts.map +1 -0
  51. package/dist/utils/validateLogoutTokenClaims.d.ts +15 -0
  52. package/dist/utils/validateLogoutTokenClaims.d.ts.map +1 -0
  53. package/package.json +2 -2
@@ -24,7 +24,6 @@ declare const OIDCDiscoveryConstants: {
24
24
  readonly ISSUER: string;
25
25
  readonly JWKS: string;
26
26
  readonly REVOCATION: string;
27
- readonly SESSION_IFRAME: string;
28
27
  readonly TOKEN: string;
29
28
  readonly USERINFO: string;
30
29
  };
@@ -36,7 +35,6 @@ declare const OIDCDiscoveryConstants: {
36
35
  readonly ISSUER: string;
37
36
  readonly JWKS: string;
38
37
  readonly REVOCATION: string;
39
- readonly SESSION_IFRAME: string;
40
38
  readonly TOKEN: string;
41
39
  readonly USERINFO: string;
42
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OIDCDiscoveryConstants.d.ts","sourceRoot":"","sources":["../../src/constants/OIDCDiscoveryConstants.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,sBAAsB,EAAE;IAC5B,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE;YACpB,QAAQ,CAAC,SAAS,EAAE;gBAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC3B,CAAC;YACF,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC;SACnD,CAAC;KACH,CAAC;CAwIM,CAAC;AAEX,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"OIDCDiscoveryConstants.d.ts","sourceRoot":"","sources":["../../src/constants/OIDCDiscoveryConstants.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,sBAAsB,EAAE;IAC5B,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE;YACpB,QAAQ,CAAC,SAAS,EAAE;gBAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC3B,CAAC;YACF,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC;SACnD,CAAC;KACH,CAAC;CA4HM,CAAC;AAEX,eAAe,sBAAsB,CAAC"}
@@ -5,7 +5,6 @@
5
5
  declare const OIDCRequestConstants: {
6
6
  readonly Params: {
7
7
  readonly AUTHORIZATION_CODE: string;
8
- readonly SESSION_STATE: string;
9
8
  readonly SIGN_OUT_SUCCESS: string;
10
9
  readonly STATE: string;
11
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OIDCRequestConstants.d.ts","sourceRoot":"","sources":["../../src/constants/OIDCRequestConstants.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,QAAA,MAAM,oBAAoB,EAAE;IAC1B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;SAC5C,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,WAAW,EAAE;gBACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;aAC/B,CAAC;SACH,CAAC;KACH,CAAC;CA+DM,CAAC;AAEX,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"OIDCRequestConstants.d.ts","sourceRoot":"","sources":["../../src/constants/OIDCRequestConstants.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,QAAA,MAAM,oBAAoB,EAAE;IAC1B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;SAC5C,CAAC;KACH,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,WAAW,EAAE;gBACpB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;aAC/B,CAAC;SACH,CAAC;KACH,CAAC;CA0DM,CAAC;AAEX,eAAe,oBAAoB,CAAC"}
@@ -61,6 +61,15 @@ var ThunderIDAuthException = class extends Error {
61
61
  Object.setPrototypeOf(this, new.target.prototype);
62
62
  }
63
63
  };
64
+ /**
65
+ * Raised when a back-channel logout token is not valid. A logout handler answers 400 for this and a
66
+ * 5xx for any other failure, which tells the server whether a retry can help.
67
+ */
68
+ var InvalidLogoutTokenError = class extends ThunderIDAuthException {
69
+ constructor(code, message) {
70
+ super(code, "Invalid logout token.", message);
71
+ }
72
+ };
64
73
 
65
74
  //#endregion
66
75
  //#region src/IsomorphicCrypto.ts
@@ -124,6 +133,38 @@ var IsomorphicCrypto = class {
124
133
  return Promise.reject(new ThunderIDAuthException("JS-CRYPTO_HELPER-IVIT-IV01", "Invalid ID token.", "ID token validation returned false"));
125
134
  }).catch((error$1) => Promise.reject(error$1));
126
135
  }
136
+ /**
137
+ * Verifies the signature of a back-channel logout token, along with its audience, issuer,
138
+ * lifetime and, when the token has one, subject.
139
+ *
140
+ * @param logoutToken - The logout token received from the server.
141
+ * @param jwk - The server key the token names.
142
+ * @param clientId - The client the token must be addressed to.
143
+ * @param issuer - The expected issuer.
144
+ * @param subject - The token's subject, when it has one.
145
+ * @param clockTolerance - Allowed clock difference in seconds.
146
+ *
147
+ * @throws {InvalidLogoutTokenError} When verification fails. The message never includes the token.
148
+ */
149
+ async verifyLogoutTokenSignature(logoutToken, jwk, clientId, issuer, subject, clockTolerance) {
150
+ let verified = false;
151
+ try {
152
+ verified = await this.cryptoUtils.verifyJwt(logoutToken, jwk, TokenConstants_default.SignatureValidation.SUPPORTED_ALGORITHMS, clientId, issuer, subject, clockTolerance, true);
153
+ } catch {
154
+ verified = false;
155
+ }
156
+ if (!verified) throw new InvalidLogoutTokenError("JS-CRYPTO_HELPER-VLTS-IV01", "The logout token signature could not be verified.");
157
+ }
158
+ /**
159
+ * Decodes the JOSE header of a JWT without verifying its signature.
160
+ */
161
+ decodeJwtHeader(token) {
162
+ try {
163
+ return JSON.parse(this.cryptoUtils.base64URLDecode(token?.split(".")[0]));
164
+ } catch {
165
+ throw new ThunderIDAuthException("JS-CRYPTO_UTIL-DJH-IV01", "Decoding token failed.", "The token header could not be decoded.");
166
+ }
167
+ }
127
168
  decodeJwtToken(token) {
128
169
  try {
129
170
  const utf8String = this.cryptoUtils.base64URLDecode(token?.split(".")[1]);
@@ -1012,6 +1053,8 @@ let EmbeddedFlowComponentType = /* @__PURE__ */ function(EmbeddedFlowComponentTy
1012
1053
  EmbeddedFlowComponentType$1["Icon"] = "ICON";
1013
1054
  /** Image display component for logos and illustrations */
1014
1055
  EmbeddedFlowComponentType$1["Image"] = "IMAGE";
1056
+ /** Key-value list display component that shows label and value pairs published in additionalData */
1057
+ EmbeddedFlowComponentType$1["KeyValueList"] = "KEY_VALUE_LIST";
1015
1058
  /** One-time password input field for multi-factor authentication */
1016
1059
  EmbeddedFlowComponentType$1["OtpInput"] = "OTP_INPUT";
1017
1060
  /** Organization unit tree picker for selecting an OU */
@@ -2062,6 +2105,21 @@ const ApplicationNativeAuthenticationConstants = { SupportedAuthenticators: {
2062
2105
  } };
2063
2106
  var ApplicationNativeAuthenticationConstants_default = ApplicationNativeAuthenticationConstants;
2064
2107
 
2108
+ //#endregion
2109
+ //#region src/constants/BackchannelLogoutConstants.ts
2110
+ /**
2111
+ * Constants for OpenID Connect Back-Channel Logout 1.0, for an SDK that receives logout tokens.
2112
+ */
2113
+ const BackchannelLogoutConstants = {
2114
+ DEFAULT_CLOCK_TOLERANCE_SECONDS: 60,
2115
+ EVENT: "http://schemas.openid.net/event/backchannel-logout",
2116
+ JWKS_CACHE_TTL_MS: 6e5,
2117
+ JWKS_MIN_REFETCH_INTERVAL_MS: 3e4,
2118
+ TOKEN_PARAM: "logout_token",
2119
+ TOKEN_TYPE: "logout+jwt"
2120
+ };
2121
+ var BackchannelLogoutConstants_default = BackchannelLogoutConstants;
2122
+
2065
2123
  //#endregion
2066
2124
  //#region src/constants/ScopeConstants.ts
2067
2125
  /**
@@ -2098,7 +2156,6 @@ var ScopeConstants_default = ScopeConstants;
2098
2156
  const OIDCRequestConstants = {
2099
2157
  Params: {
2100
2158
  AUTHORIZATION_CODE: "code",
2101
- SESSION_STATE: "session_state",
2102
2159
  SIGN_OUT_SUCCESS: "sign_out_success",
2103
2160
  STATE: "state"
2104
2161
  },
@@ -2421,7 +2478,6 @@ const OIDCDiscoveryConstants = {
2421
2478
  ISSUER: "/oauth2/token",
2422
2479
  JWKS: "/oauth2/jwks",
2423
2480
  REVOCATION: "/oauth2/revoke",
2424
- SESSION_IFRAME: "/oidc/checksession",
2425
2481
  TOKEN: "/oauth2/token",
2426
2482
  USERINFO: "/oauth2/userinfo"
2427
2483
  },
@@ -2432,7 +2488,6 @@ const OIDCDiscoveryConstants = {
2432
2488
  ISSUER: "issuer",
2433
2489
  JWKS: "jwks_uri",
2434
2490
  REVOCATION: "revocation_endpoint",
2435
- SESSION_IFRAME: "check_session_iframe",
2436
2491
  TOKEN: "token_endpoint",
2437
2492
  USERINFO: "userinfo_endpoint"
2438
2493
  },
@@ -2700,6 +2755,9 @@ var StorageManager = class StorageManager {
2700
2755
  async getCustomData(key, userId) {
2701
2756
  return JSON.parse(await this.store.getData(this.resolveKey(key, userId)) ?? null);
2702
2757
  }
2758
+ async removeCustomData(key, userId) {
2759
+ await this.store.removeData(this.resolveKey(key, userId));
2760
+ }
2703
2761
  setSessionStatus(status) {
2704
2762
  if (StorageManager.isLocalStorageAvailable()) localStorage.setItem(`${this.vendor}-session-active`, status);
2705
2763
  }
@@ -2934,6 +2992,47 @@ const RESOURCE_ENDPOINT_KEYS = [
2934
2992
  const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
2935
2993
  var resolveResourceEndpoint_default = resolveResourceEndpoint;
2936
2994
 
2995
+ //#endregion
2996
+ //#region src/utils/validateLogoutTokenClaims.ts
2997
+ const fail = (code, message) => {
2998
+ throw new InvalidLogoutTokenError(code, message);
2999
+ };
3000
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3001
+ const isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
3002
+ /**
3003
+ * Checks the header and claims of a back-channel logout token, per OpenID Connect Back-Channel
3004
+ * Logout 1.0 section 2.6. It does not verify the signature: the caller does that with the server's
3005
+ * keys. Messages never include the token or its claim values.
3006
+ *
3007
+ * @param header - The decoded JOSE header.
3008
+ * @param payload - The decoded claims.
3009
+ * @param options - The issuer, client and clock the claims are checked against.
3010
+ * @returns The claims, typed.
3011
+ * @throws {InvalidLogoutTokenError} When any check fails.
3012
+ */
3013
+ const validateLogoutTokenClaims = (header, payload, options) => {
3014
+ if (!isRecord(header) || !isRecord(payload)) return fail("JS-LOGOUT_TOKEN-VLTC-IV01", "The logout token is not a well-formed JWT.");
3015
+ const type = typeof header["typ"] === "string" ? header["typ"].toLowerCase() : "";
3016
+ if (type !== BackchannelLogoutConstants_default.TOKEN_TYPE && type !== `application/${BackchannelLogoutConstants_default.TOKEN_TYPE}`) return fail("JS-LOGOUT_TOKEN-VLTC-IV02", "The token type is not logout+jwt.");
3017
+ if (typeof header["alg"] !== "string" || !options.supportedAlgorithms.includes(header["alg"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV03", "The signature algorithm is not supported.");
3018
+ if ("nonce" in payload) return fail("JS-LOGOUT_TOKEN-VLTC-IV04", "A logout token must not carry a nonce.");
3019
+ const { events } = payload;
3020
+ if (!isRecord(events) || !isRecord(events[BackchannelLogoutConstants_default.EVENT])) return fail("JS-LOGOUT_TOKEN-VLTC-IV05", "The back-channel logout event is missing.");
3021
+ if (payload["iss"] !== options.issuer) return fail("JS-LOGOUT_TOKEN-VLTC-IV06", "The issuer does not match.");
3022
+ const audiences = Array.isArray(payload["aud"]) ? payload["aud"] : [payload["aud"]];
3023
+ if (!isNonEmptyString(options.clientId) || !audiences.includes(options.clientId)) return fail("JS-LOGOUT_TOKEN-VLTC-IV07", "The audience does not include this client.");
3024
+ const now = options.now ?? Math.floor(Date.now() / 1e3);
3025
+ const tolerance = options.clockTolerance ?? BackchannelLogoutConstants_default.DEFAULT_CLOCK_TOLERANCE_SECONDS;
3026
+ if (typeof payload["iat"] !== "number" || payload["iat"] > now + tolerance) return fail("JS-LOGOUT_TOKEN-VLTC-IV08", "The issued-at time is missing or in the future.");
3027
+ if (typeof payload["exp"] !== "number" || payload["exp"] <= now - tolerance) return fail("JS-LOGOUT_TOKEN-VLTC-IV09", "The token has expired.");
3028
+ if ("sid" in payload && !isNonEmptyString(payload["sid"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV10", "The session identifier is not valid.");
3029
+ if ("sub" in payload && !isNonEmptyString(payload["sub"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV10", "The subject is not valid.");
3030
+ if (!("sid" in payload) && !("sub" in payload)) return fail("JS-LOGOUT_TOKEN-VLTC-IV11", "The token names neither a session nor a subject.");
3031
+ if (!isNonEmptyString(payload["jti"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV12", "The token identifier is missing.");
3032
+ return payload;
3033
+ };
3034
+ var validateLogoutTokenClaims_default = validateLogoutTokenClaims;
3035
+
2937
3036
  //#endregion
2938
3037
  //#region src/constants/TokenExchangeConstants.ts
2939
3038
  /**
@@ -2974,6 +3073,9 @@ var AuthenticationHelper = class {
2974
3073
  config;
2975
3074
  oidcProviderMetaData;
2976
3075
  cryptoHelper;
3076
+ jwksCache;
3077
+ jwksFetch;
3078
+ jwksFetchStartedAt = 0;
2977
3079
  /**
2978
3080
  * Creates a new `AuthenticationHelper` instance.
2979
3081
  *
@@ -3032,7 +3134,6 @@ var AuthenticationHelper = class {
3032
3134
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
3033
3135
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.END_SESSION,
3034
3136
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.JWKS,
3035
- OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.SESSION_IFRAME,
3036
3137
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.REVOCATION,
3037
3138
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.TOKEN,
3038
3139
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.ISSUER,
@@ -3063,7 +3164,6 @@ var AuthenticationHelper = class {
3063
3164
  [endpointKeys.END_SESSION]: `${baseUrl}${endpointPaths.END_SESSION}`,
3064
3165
  [endpointKeys.ISSUER]: `${baseUrl}`,
3065
3166
  [endpointKeys.JWKS]: `${baseUrl}${endpointPaths.JWKS}`,
3066
- [endpointKeys.SESSION_IFRAME]: `${baseUrl}${endpointPaths.SESSION_IFRAME}`,
3067
3167
  [endpointKeys.REVOCATION]: `${baseUrl}${endpointPaths.REVOCATION}`,
3068
3168
  [endpointKeys.TOKEN]: `${baseUrl}${endpointPaths.TOKEN}`,
3069
3169
  [endpointKeys.USERINFO]: `${baseUrl}${endpointPaths.USERINFO}`,
@@ -3078,6 +3178,83 @@ var AuthenticationHelper = class {
3078
3178
  * @throws {ThunderIDAuthException} When the JWKS endpoint is missing or the request fails.
3079
3179
  */
3080
3180
  async validateIdToken(idToken) {
3181
+ const keys = await this.fetchJwks();
3182
+ const { issuer } = await this.oidcProviderMetaData();
3183
+ const jwk = await this.cryptoHelper.getJWKForTheIdToken(idToken.split(".")[0], keys);
3184
+ return this.cryptoHelper.isValidIdToken(idToken, jwk, (await this.config()).clientId ?? "", issuer ?? "", this.cryptoHelper.decodeJwtToken(idToken).sub, (await this.config()).tokenValidation?.idToken?.clockTolerance, (await this.config()).tokenValidation?.idToken?.validateIssuer ?? true);
3185
+ }
3186
+ /**
3187
+ * Validates a back-channel logout token: its type, event, issuer, audience and lifetime, then its
3188
+ * signature against the server's keys. The claims are checked first, so a malformed token costs
3189
+ * neither a key fetch nor a signature check.
3190
+ *
3191
+ * @param logoutToken - The raw `logout_token` the server posted.
3192
+ * @returns The token's claims.
3193
+ * @throws {InvalidLogoutTokenError} When the token is not valid.
3194
+ */
3195
+ async validateLogoutToken(logoutToken) {
3196
+ const malformed = new InvalidLogoutTokenError("JS-AUTH_HELPER-VLT-IV01", "The logout token is not a signed JWT.");
3197
+ if (typeof logoutToken !== "string" || logoutToken.split(".").length !== 3) throw malformed;
3198
+ const configData = await this.config();
3199
+ const { issuer } = await this.oidcProviderMetaData();
3200
+ const clockTolerance = configData.tokenValidation?.idToken?.clockTolerance ?? BackchannelLogoutConstants_default.DEFAULT_CLOCK_TOLERANCE_SECONDS;
3201
+ let header;
3202
+ let payload;
3203
+ try {
3204
+ header = this.cryptoHelper.decodeJwtHeader(logoutToken);
3205
+ payload = this.cryptoHelper.decodeJwtToken(logoutToken);
3206
+ } catch {
3207
+ throw malformed;
3208
+ }
3209
+ const claims = validateLogoutTokenClaims_default(header, payload, {
3210
+ clientId: configData.clientId ?? "",
3211
+ clockTolerance,
3212
+ issuer: issuer ?? "",
3213
+ supportedAlgorithms: TokenConstants_default.SignatureValidation.SUPPORTED_ALGORITHMS
3214
+ });
3215
+ await this.cryptoHelper.verifyLogoutTokenSignature(logoutToken, await this.getCachedJwk(header["kid"]), configData.clientId ?? "", issuer ?? "", claims.sub, clockTolerance);
3216
+ return claims;
3217
+ }
3218
+ /**
3219
+ * Returns the server key with the given identifier from a cached key set. An unknown identifier
3220
+ * triggers one re-fetch, to follow key rotation, no more often than the minimum interval: the
3221
+ * logout endpoint is unauthenticated, so an unbounded re-fetch would let anyone drive requests
3222
+ * to the server. Requests that arrive while a fetch runs share it.
3223
+ */
3224
+ async getCachedJwk(kid) {
3225
+ const now = Date.now();
3226
+ const find = (keys) => keys.find((key) => key.kid === kid);
3227
+ const fresh = this.jwksCache !== void 0 && now - this.jwksCache.fetchedAt < BackchannelLogoutConstants_default.JWKS_CACHE_TTL_MS;
3228
+ let jwk = fresh ? find(this.jwksCache.keys) : void 0;
3229
+ if (!jwk && (this.jwksFetch || now - this.jwksFetchStartedAt >= BackchannelLogoutConstants_default.JWKS_MIN_REFETCH_INTERVAL_MS)) jwk = find(await this.fetchJwksOnce());
3230
+ else if (!jwk && !fresh) throw new ThunderIDAuthException("JS-AUTH_HELPER-GCJ-NA02", "The server keys are not available.", "The server key set could not be fetched recently, and the cached one has expired.");
3231
+ if (!jwk) throw new InvalidLogoutTokenError("JS-AUTH_HELPER-GCJ-NF01", "The logout token names a key the server does not publish.");
3232
+ return jwk;
3233
+ }
3234
+ /**
3235
+ * Fetches the key set unless a fetch is already running, in which case that one is shared.
3236
+ */
3237
+ fetchJwksOnce() {
3238
+ if (!this.jwksFetch) {
3239
+ this.jwksFetchStartedAt = Date.now();
3240
+ this.jwksFetch = this.fetchJwks().then((keys) => {
3241
+ this.jwksCache = {
3242
+ fetchedAt: Date.now(),
3243
+ keys
3244
+ };
3245
+ return keys;
3246
+ }).finally(() => {
3247
+ this.jwksFetch = void 0;
3248
+ });
3249
+ }
3250
+ return this.jwksFetch;
3251
+ }
3252
+ /**
3253
+ * Fetches the server's JSON Web Key Set.
3254
+ *
3255
+ * @throws {ThunderIDAuthException} When the JWKS endpoint is missing or the request fails.
3256
+ */
3257
+ async fetchJwks() {
3081
3258
  const jwksEndpoint = (await this.storageManager.loadOpenIDProviderConfiguration()).jwks_uri;
3082
3259
  const configData = await this.config();
3083
3260
  if (!jwksEndpoint || jwksEndpoint.trim().length === 0) throw new ThunderIDAuthException("JS_AUTH_HELPER-VIT-NF01", "JWKS endpoint not found.", "No JWKS endpoint was found in the OIDC provider meta data returned by the well-known endpoint or the JWKS endpoint passed to the SDK is empty.");
@@ -3088,10 +3265,8 @@ var AuthenticationHelper = class {
3088
3265
  throw new ThunderIDAuthException("JS-AUTH_HELPER-VIT-NE02", "Request to jwks endpoint failed.", error$1 ?? "The request sent to get the jwks from the server failed.");
3089
3266
  }
3090
3267
  if (response.status !== 200 || !response.ok) throw new ThunderIDAuthException("JS-AUTH_HELPER-VIT-HE03", `Invalid response status received for jwks request (${response.statusText}).`, await response.json());
3091
- const { issuer } = await this.oidcProviderMetaData();
3092
3268
  const { keys } = await response.json();
3093
- const jwk = await this.cryptoHelper.getJWKForTheIdToken(idToken.split(".")[0], keys);
3094
- return this.cryptoHelper.isValidIdToken(idToken, jwk, (await this.config()).clientId ?? "", issuer ?? "", this.cryptoHelper.decodeJwtToken(idToken).sub, (await this.config()).tokenValidation?.idToken?.clockTolerance, (await this.config()).tokenValidation?.idToken?.validateIssuer ?? true);
3269
+ return keys;
3095
3270
  }
3096
3271
  /**
3097
3272
  * Extracts user information from a decoded ID token payload.
@@ -3496,6 +3671,14 @@ var ThunderIDJavaScriptClient = class {
3496
3671
  async decodeJwtToken(token) {
3497
3672
  return this.cryptoHelper.decodeJwtToken(token);
3498
3673
  }
3674
+ /**
3675
+ * Validates a back-channel logout token and returns its claims. Protected, because only an SDK
3676
+ * that runs on a server can receive one; such an SDK builds its logout handler on this.
3677
+ */
3678
+ async validateLogoutToken(logoutToken) {
3679
+ await this.loadOpenIDProviderConfiguration(false);
3680
+ return this.authHelper.validateLogoutToken(logoutToken);
3681
+ }
3499
3682
  async exchangeToken(config, sessionId) {
3500
3683
  if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
3501
3684
  const oidcProviderMetadata = await this.oidcProviderMetaDataProvider();
@@ -3635,12 +3818,11 @@ var ThunderIDJavaScriptClient = class {
3635
3818
  if (await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) return buildSignInUrl();
3636
3819
  return this.loadOpenIDProviderConfiguration(requestConfig?.forceInit).then(() => buildSignInUrl());
3637
3820
  }
3638
- async requestAccessToken(authorizationCode, sessionState, state, userId, tokenRequestConfig) {
3821
+ async requestAccessToken(authorizationCode, state, userId, tokenRequestConfig) {
3639
3822
  if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
3640
3823
  const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
3641
3824
  const configData = await this.configProvider();
3642
3825
  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.");
3643
- if (sessionState) await this.storageManager.setSessionDataParameter(OIDCRequestConstants_default.Params.SESSION_STATE, sessionState, userId);
3644
3826
  const body = new URLSearchParams();
3645
3827
  body.set("client_id", configData.clientId ?? "");
3646
3828
  const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
@@ -3693,7 +3875,6 @@ var ThunderIDJavaScriptClient = class {
3693
3875
  const meta = await this.oidcProviderMetaDataProvider();
3694
3876
  return {
3695
3877
  authorizationEndpoint: meta.authorization_endpoint ?? "",
3696
- checkSessionIframe: meta.check_session_iframe ?? "",
3697
3878
  endSessionEndpoint: meta.end_session_endpoint ?? "",
3698
3879
  introspectionEndpoint: meta.introspection_endpoint ?? "",
3699
3880
  issuer: meta.issuer ?? "",
@@ -3716,11 +3897,7 @@ var ThunderIDJavaScriptClient = class {
3716
3897
  return (await this.storageManager.getSessionData(userId)).id_token;
3717
3898
  }
3718
3899
  async getUserSession(userId) {
3719
- const sessionData = await this.storageManager.getSessionData(userId);
3720
- return {
3721
- scopes: sessionData?.scope?.split(" "),
3722
- sessionState: sessionData?.session_state ?? ""
3723
- };
3900
+ return { scopes: (await this.storageManager.getSessionData(userId))?.scope?.split(" ") };
3724
3901
  }
3725
3902
  async refreshAccessToken(userId) {
3726
3903
  const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
@@ -5304,6 +5481,40 @@ function resolveFlowTemplateLiterals(text, { t, meta }) {
5304
5481
  });
5305
5482
  }
5306
5483
 
5484
+ //#endregion
5485
+ //#region src/utils/parseKeyValuePairs.ts
5486
+ /**
5487
+ * Reads the label and value pairs a KEY_VALUE_LIST renders from the raw value found under its
5488
+ * `source` key in `additionalData`. The server publishes them as a JSON-encoded array, since
5489
+ * additional data carries strings, so both an array and its encoding are accepted.
5490
+ *
5491
+ * Entries that are not objects, or that carry no value, are dropped, since an empty row tells the
5492
+ * user nothing. Anything that is not a list of pairs yields none.
5493
+ *
5494
+ * @param raw - The raw value found under the source key.
5495
+ * @returns The pairs to render, empty when the value holds none.
5496
+ *
5497
+ * @example
5498
+ * ```typescript
5499
+ * parseKeyValuePairs('[{"label":"Email","value":"a@b.com"}]'); // [{label: 'Email', value: 'a@b.com'}]
5500
+ * parseKeyValuePairs('not json'); // []
5501
+ * ```
5502
+ */
5503
+ const parseKeyValuePairs = (raw) => {
5504
+ let parsed = raw;
5505
+ if (typeof raw === "string") try {
5506
+ parsed = JSON.parse(raw);
5507
+ } catch {
5508
+ return [];
5509
+ }
5510
+ if (!Array.isArray(parsed)) return [];
5511
+ return parsed.filter((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry)).map((entry) => ({
5512
+ label: typeof entry["label"] === "string" ? entry["label"] : "",
5513
+ value: typeof entry["value"] === "string" ? entry["value"] : ""
5514
+ })).filter((pair) => pair.value !== "");
5515
+ };
5516
+ var parseKeyValuePairs_default = parseKeyValuePairs;
5517
+
5307
5518
  //#endregion
5308
5519
  //#region src/utils/countryCodeToFlagEmoji.ts
5309
5520
  /**
@@ -5498,7 +5709,7 @@ const DEFAULT_VALIDATION_MESSAGE_KEYS = {
5498
5709
  * - Unknown rule types are treated as passing (forward compatibility with future types).
5499
5710
  */
5500
5711
  const evaluateValidationRule = (rule, value) => {
5501
- const fail = () => rule.message ?? DEFAULT_VALIDATION_MESSAGE_KEYS[rule.type];
5712
+ const fail$1 = () => rule.message ?? DEFAULT_VALIDATION_MESSAGE_KEYS[rule.type];
5502
5713
  switch (rule.type) {
5503
5714
  case "regex": {
5504
5715
  if (typeof rule.value !== "string" || rule.value === "") return null;
@@ -5508,14 +5719,14 @@ const evaluateValidationRule = (rule, value) => {
5508
5719
  } catch {
5509
5720
  return null;
5510
5721
  }
5511
- return re.test(value) ? null : fail();
5722
+ return re.test(value) ? null : fail$1();
5512
5723
  }
5513
5724
  case "minLength":
5514
5725
  if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
5515
- return value.length >= rule.value ? null : fail();
5726
+ return value.length >= rule.value ? null : fail$1();
5516
5727
  case "maxLength":
5517
5728
  if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
5518
- return value.length <= rule.value ? null : fail();
5729
+ return value.length <= rule.value ? null : fail$1();
5519
5730
  default: return null;
5520
5731
  }
5521
5732
  };
@@ -5801,6 +6012,7 @@ const en_US = {
5801
6012
  "errors.signup.initialization": "An error occurred while initializing. Please try again later.",
5802
6013
  "errors.signup.flow.failure": "An error occurred during the sign-up flow. Please try again later.",
5803
6014
  "errors.signup.flow.initialization.failure": "An error occurred while initializing the sign-up flow. Please try again later.",
6015
+ "errors.signup.popup.failure": "Could not continue the sign-up in the pop-up window. Please try again.",
5804
6016
  "errors.signup.components.not.available": "Sign-up form is not available at the moment. Please try again later."
5805
6017
  }
5806
6018
  };
@@ -5933,6 +6145,7 @@ const fr_FR = {
5933
6145
  "errors.signup.initialization": "Une erreur est survenue lors de l'initialisation. Veuillez réessayer plus tard.",
5934
6146
  "errors.signup.flow.failure": "Une erreur est survenue lors du flux d'inscription. Veuillez réessayer plus tard.",
5935
6147
  "errors.signup.flow.initialization.failure": "Une erreur est survenue lors de l'initialisation du flux d'inscription. Veuillez réessayer plus tard.",
6148
+ "errors.signup.popup.failure": "Impossible de poursuivre l'inscription dans la fenêtre contextuelle. Veuillez réessayer.",
5936
6149
  "errors.signup.components.not.available": "Le formulaire d'inscription n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
5937
6150
  "errors.signin.components.not.available": "Le formulaire de connexion n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
5938
6151
  "errors.signin.timeout": "Le temps imparti pour effectuer cette e'tape est expire'."
@@ -6067,6 +6280,7 @@ const te_IN = {
6067
6280
  "errors.signup.initialization": "ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6068
6281
  "errors.signup.flow.failure": "సైన్ అప్ ప్రక్రియలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6069
6282
  "errors.signup.flow.initialization.failure": "సైన్ అప్ ప్రక్రియను ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6283
+ "errors.signup.popup.failure": "పాప్-అప్ విండోలో సైన్ అప్ కొనసాగించడం సాధ్యం కాలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.",
6070
6284
  "errors.signup.components.not.available": "సైన్ అప్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6071
6285
  "errors.signin.components.not.available": "సైన్ ఇన్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6072
6286
  "errors.signin.timeout": "దశను పూర్తి చేయడానికి అనుమతించబడిన సమయం ముగిసింది."
@@ -6201,6 +6415,7 @@ const hi_IN = {
6201
6415
  "errors.signup.initialization": "प्रारंभीकरण के दौरान एक त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
6202
6416
  "errors.signup.flow.failure": "साइन-अप प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6203
6417
  "errors.signup.flow.initialization.failure": "साइन-अप प्रक्रिया प्रारंभ करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6418
+ "errors.signup.popup.failure": "पॉप-अप विंडो में साइन-अप जारी नहीं रखा जा सका। कृपया पुनः प्रयास करें।",
6204
6419
  "errors.signup.components.not.available": "साइन-अप फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6205
6420
  "errors.signin.components.not.available": "साइन-इन फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6206
6421
  "errors.signin.timeout": "स्टेप पूरा करने के लिए दिया गया समय खत्म हो गया है।"
@@ -6335,6 +6550,7 @@ const pt_BR = {
6335
6550
  "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6336
6551
  "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de cadastro. Tente novamente mais tarde.",
6337
6552
  "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de cadastro. Tente novamente mais tarde.",
6553
+ "errors.signup.popup.failure": "Não foi possível continuar o cadastro na janela pop-up. Tente novamente.",
6338
6554
  "errors.signup.components.not.available": "O formulário de cadastro não está disponível no momento. Tente novamente mais tarde.",
6339
6555
  "errors.signin.components.not.available": "O formulário de login não está disponível no momento. Tente novamente mais tarde.",
6340
6556
  "errors.signin.timeout": "O tempo permitido para concluir a etapa expirou."
@@ -6469,6 +6685,7 @@ const pt_PT = {
6469
6685
  "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6470
6686
  "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de registo. Tente novamente mais tarde.",
6471
6687
  "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de registo. Tente novamente mais tarde.",
6688
+ "errors.signup.popup.failure": "Não foi possível continuar o registo na janela pop-up. Tente novamente.",
6472
6689
  "errors.signup.components.not.available": "O formulário de registo não está disponível de momento. Tente novamente mais tarde.",
6473
6690
  "errors.signin.components.not.available": "O formulário de início de sessão não está disponível de momento. Tente novamente mais tarde.",
6474
6691
  "errors.signin.timeout": "O tempo permitido para completar a etapa expirou."
@@ -6603,6 +6820,7 @@ const ta_IN = {
6603
6820
  "errors.signup.initialization": "தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6604
6821
  "errors.signup.flow.failure": "பதிவு செய்யும் செயல்பாட்டில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6605
6822
  "errors.signup.flow.initialization.failure": "பதிவு செய்யும் செயல்பாட்டை தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6823
+ "errors.signup.popup.failure": "பாப்-அப் சாளரத்தில் பதிவைத் தொடர முடியவில்லை. மீண்டும் முயற்சிக்கவும்.",
6606
6824
  "errors.signup.components.not.available": "பதிவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6607
6825
  "errors.signin.components.not.available": "உள்நுழைவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6608
6826
  "errors.signin.timeout": "படிநிலையை முடிக்க அனுமதிக்கப்பட்ட நேரம் காலாவதியானது."
@@ -6737,6 +6955,7 @@ const si_LK = {
6737
6955
  "errors.signup.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6738
6956
  "errors.signup.flow.failure": "ගිණුම් තැනීමේ ක්‍රියාවලියේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6739
6957
  "errors.signup.flow.initialization.failure": "ගිණුම් තැනීමේ ක්‍රියාවලිය ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6958
+ "errors.signup.popup.failure": "උත්පතන කවුළුවේ ගිණුම් තැනීම දිගටම කරගෙන යා නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න.",
6740
6959
  "errors.signup.components.not.available": "ගිණුම් තැනීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6741
6960
  "errors.signin.components.not.available": "ප්‍රවේශ වීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6742
6961
  "errors.signin.timeout": "පියවර සම්පූර්ණ කිරීමට ලබා දී තිබූ කාලය ඉකුත් වී ඇත."
@@ -6833,4 +7052,4 @@ const normalizeTranslations = (translations) => {
6833
7052
  var normalizeTranslations_default = normalizeTranslations;
6834
7053
 
6835
7054
  //#endregion
6836
- export { AgentQueryKeys_default as AgentQueryKeys, ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, ApplicationQueryKeys_default as ApplicationQueryKeys, AuthenticationHelper_default as AuthenticationHelper, 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, IsomorphicCrypto, OAuth2GrantTypes, OAuth2ResponseTypes, OIDCRequestConstants_default as OIDCRequestConstants, REFRESH_TOKEN_ISSUING_GRANTS, 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, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createAgent_default as createAgent, createApplication_default as createApplication, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, createUser_default as createUser, debug, 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, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUser_default as getUser, getUserInfo_default as getUserInfo, getUsers_default as getUsers, getUsersMe_default as getUsersMe, getUsersMeMeta_default as getUsersMeMeta, getVendorPrefix_default as getVendorPrefix, hasUnresolvedTranslationParams, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, mapCredentialUpdateError_default as mapCredentialUpdateError, normalizeLocaleTag, normalizeTranslations_default as normalizeTranslations, processOpenIDScopes_default as processOpenIDScopes, removeTrailingSlash_default as removeTrailingSlash, resolveChangeCredentialPolicy_default as resolveChangeCredentialPolicy, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, substituteTranslationParams_default as substituteTranslationParams, supportsCredential_default as supportsCredential, updateAgent_default as updateAgent, updateApplication_default as updateApplication, updateMeCredentials_default as updateMeCredentials, updateMeProfile_default as updateMeProfile, updateUser_default as updateUser, warn, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
7055
+ export { AgentQueryKeys_default as AgentQueryKeys, ApplicationNativeAuthenticationConstants_default as ApplicationNativeAuthenticationConstants, ApplicationQueryKeys_default as ApplicationQueryKeys, 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, 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, VendorConstants_default as VendorConstants, arrayBufferToBase64url_default as arrayBufferToBase64url, base64urlToArrayBuffer_default as base64urlToArrayBuffer, bem_default as bem, buildValidatorFromRules_default as buildValidatorFromRules, configure as configureLogger, countryCodeToFlagEmoji, createAgent_default as createAgent, createApplication_default as createApplication, createComponentLogger, createLogger, createPackageComponentLogger, createPackageLogger, createTheme_default as createTheme, createUser_default as createUser, debug, 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, getLatestStateParam_default as getLatestStateParam, getOrganizationUnitChildren_default as getOrganizationUnitChildren, getRedirectBasedSignUpUrl_default as getRedirectBasedSignUpUrl, getUser_default as getUser, getUserInfo_default as getUserInfo, getUsers_default as getUsers, getUsersMe_default as getUsersMe, getUsersMeMeta_default as getUsersMeMeta, getVendorPrefix_default as getVendorPrefix, hasUnresolvedTranslationParams, info, isEmojiUri_default as isEmojiUri, isEmpty_default as isEmpty, isRecognizedBaseUrlPattern_default as isRecognizedBaseUrlPattern, logger_default as logger, mapCredentialUpdateError_default as mapCredentialUpdateError, normalizeLocaleTag, normalizeTranslations_default as normalizeTranslations, parseKeyValuePairs_default as parseKeyValuePairs, processOpenIDScopes_default as processOpenIDScopes, removeTrailingSlash_default as removeTrailingSlash, resolveChangeCredentialPolicy_default as resolveChangeCredentialPolicy, resolveFieldName_default as resolveFieldName, resolveFlowTemplateLiterals, resolveLocaleDisplayName, resolveLocaleEmoji_default as resolveLocaleEmoji, resolveMeta, resolveResourceEndpoint_default as resolveResourceEndpoint, set_default as set, startCase_default as startCase, substituteTranslationParams_default as substituteTranslationParams, supportsCredential_default as supportsCredential, 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, withVendorCSSClassPrefix_default as withVendorCSSClassPrefix };
@@ -5,4 +5,11 @@ export declare class ThunderIDAuthException extends Error {
5
5
  code: string | undefined;
6
6
  constructor(code: string, name: string, message: string);
7
7
  }
8
+ /**
9
+ * Raised when a back-channel logout token is not valid. A logout handler answers 400 for this and a
10
+ * 5xx for any other failure, which tells the server whether a retry can help.
11
+ */
12
+ export declare class InvalidLogoutTokenError extends ThunderIDAuthException {
13
+ constructor(code: string, message: string);
14
+ }
8
15
  //# sourceMappingURL=exception.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exception.d.ts","sourceRoot":"","sources":["../../src/errors/exception.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAM/D"}
1
+ {"version":3,"file":"exception.d.ts","sourceRoot":"","sources":["../../src/errors/exception.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEb,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAM/D;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,sBAAsB;gBAC9C,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGjD"}
@@ -115,6 +115,7 @@ export interface I18nTranslations {
115
115
  'errors.signup.initialization': string;
116
116
  'errors.signup.flow.failure': string;
117
117
  'errors.signup.flow.initialization.failure': string;
118
+ 'errors.signup.popup.failure': string;
118
119
  'errors.signup.components.not.available': string;
119
120
  'errors.signin.components.not.available': string;
120
121
  'errors.signin.timeout': string;
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/i18n/models/i18n.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAM/B,8BAA8B,EAAE,MAAM,CAAC;IACvC,+BAA+B,EAAE,MAAM,CAAC;IACxC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,gCAAgC,EAAE,MAAM,CAAC;IACzC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,gCAAgC,EAAE,MAAM,CAAC;IACzC,gCAAgC,EAAE,MAAM,CAAC;IACzC,8BAA8B,EAAE,MAAM,CAAC;IACvC,oCAAoC,EAAE,MAAM,CAAC;IAC7C,8BAA8B,EAAE,MAAM,CAAC;IAGvC,uCAAuC,EAAE,MAAM,CAAC;IAChD,qCAAqC,EAAE,MAAM,CAAC;IAC9C,uCAAuC,EAAE,MAAM,CAAC;IAGhD,qCAAqC,EAAE,MAAM,CAAC;IAC9C,gCAAgC,EAAE,MAAM,CAAC;IACzC,sCAAsC,EAAE,MAAM,CAAC;IAC/C,gCAAgC,EAAE,MAAM,CAAC;IACzC,sCAAsC,EAAE,MAAM,CAAC;IAC/C,kCAAkC,EAAE,MAAM,CAAC;IAC3C,wCAAwC,EAAE,MAAM,CAAC;IACjD,iCAAiC,EAAE,MAAM,CAAC;IAC1C,uCAAuC,EAAE,MAAM,CAAC;IAChD,6BAA6B,EAAE,MAAM,CAAC;IACtC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,yCAAyC,EAAE,MAAM,CAAC;IAClD,2CAA2C,EAAE,MAAM,CAAC;IACpD,gDAAgD,EAAE,MAAM,CAAC;IACzD,2CAA2C,EAAE,MAAM,CAAC;IACpD,iDAAiD,EAAE,MAAM,CAAC;IAG1D,kCAAkC,EAAE,MAAM,CAAC;IAC3C,4BAA4B,EAAE,MAAM,CAAC;IACrC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IAOvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,4BAA4B,EAAE,MAAM,CAAC;IAGrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAG5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,+BAA+B,EAAE,MAAM,CAAC;IAGxC,0BAA0B,EAAE,MAAM,CAAC;IACnC,6BAA6B,EAAE,MAAM,CAAC;IACtC,sCAAsC,EAAE,MAAM,CAAC;IAG/C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6BAA6B,EAAE,MAAM,CAAC;IAGtC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0BAA0B,EAAE,MAAM,CAAC;IAGnC,uCAAuC,EAAE,MAAM,CAAC;IAChD,2BAA2B,EAAE,MAAM,CAAC;IACpC,8BAA8B,EAAE,MAAM,CAAC;IAGvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,0BAA0B,EAAE,MAAM,CAAC;IACnC,8BAA8B,EAAE,MAAM,CAAC;IAMvC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mCAAmC,EAAE,MAAM,CAAC;IAM5C,8BAA8B,EAAE,MAAM,CAAC;IACvC,gCAAgC,EAAE,MAAM,CAAC;IACzC,sCAAsC,EAAE,MAAM,CAAC;IAC/C,oCAAoC,EAAE,MAAM,CAAC;IAC7C,0CAA0C,EAAE,MAAM,CAAC;IACnD,2CAA2C,EAAE,MAAM,CAAC;IACpD,6BAA6B,EAAE,MAAM,CAAC;IACtC,8BAA8B,EAAE,MAAM,CAAC;IACvC,qCAAqC,EAAE,MAAM,CAAC;IAC9C,oCAAoC,EAAE,MAAM,CAAC;IAC7C,0CAA0C,EAAE,MAAM,CAAC;IACnD,8CAA8C,EAAE,MAAM,CAAC;IACvD,6BAA6B,EAAE,MAAM,CAAC;IAMtC,2CAA2C,EAAE,MAAM,CAAC;IACpD,yDAAyD,EAAE,MAAM,CAAC;IAClE,+BAA+B,EAAE,MAAM,CAAC;IACxC,8BAA8B,EAAE,MAAM,CAAC;IACvC,2CAA2C,EAAE,MAAM,CAAC;IACpD,4CAA4C,EAAE,MAAM,CAAC;IACrD,2CAA2C,EAAE,MAAM,CAAC;IACpD,6CAA6C,EAAE,MAAM,CAAC;IACtD,2CAA2C,EAAE,MAAM,CAAC;IACpD,iCAAiC,EAAE,MAAM,CAAC;IAC1C,oCAAoC,EAAE,MAAM,CAAC;IAC7C,qCAAqC,EAAE,MAAM,CAAC;IAC9C,4CAA4C,EAAE,MAAM,CAAC;IACrD,8CAA8C,EAAE,MAAM,CAAC;IACvD,oCAAoC,EAAE,MAAM,CAAC;IAC7C,wCAAwC,EAAE,MAAM,CAAC;IACjD,oCAAoC,EAAE,MAAM,CAAC;IAC7C,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IAMrC,6BAA6B,EAAE,MAAM,CAAC;IACtC,sDAAsD,EAAE,MAAM,CAAC;IAC/D,8DAA8D,EAAE,MAAM,CAAC;IACvE,yCAAyC,EAAE,MAAM,CAAC;IAMlD,8BAA8B,EAAE,MAAM,CAAC;IAMvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,+BAA+B,EAAE,MAAM,CAAC;IACxC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IAMvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IACrC,uCAAuC,EAAE,MAAM,CAAC;IAChD,qCAAqC,EAAE,MAAM,CAAC;IAC9C,gDAAgD,EAAE,MAAM,CAAC;IACzD,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IACrC,2CAA2C,EAAE,MAAM,CAAC;IACpD,wCAAwC,EAAE,MAAM,CAAC;IACjD,wCAAwC,EAAE,MAAM,CAAC;IACjD,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;CAChC"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/i18n/models/i18n.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAM/B,8BAA8B,EAAE,MAAM,CAAC;IACvC,+BAA+B,EAAE,MAAM,CAAC;IACxC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,gCAAgC,EAAE,MAAM,CAAC;IACzC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,iCAAiC,EAAE,MAAM,CAAC;IAC1C,gCAAgC,EAAE,MAAM,CAAC;IACzC,gCAAgC,EAAE,MAAM,CAAC;IACzC,8BAA8B,EAAE,MAAM,CAAC;IACvC,oCAAoC,EAAE,MAAM,CAAC;IAC7C,8BAA8B,EAAE,MAAM,CAAC;IAGvC,uCAAuC,EAAE,MAAM,CAAC;IAChD,qCAAqC,EAAE,MAAM,CAAC;IAC9C,uCAAuC,EAAE,MAAM,CAAC;IAGhD,qCAAqC,EAAE,MAAM,CAAC;IAC9C,gCAAgC,EAAE,MAAM,CAAC;IACzC,sCAAsC,EAAE,MAAM,CAAC;IAC/C,gCAAgC,EAAE,MAAM,CAAC;IACzC,sCAAsC,EAAE,MAAM,CAAC;IAC/C,kCAAkC,EAAE,MAAM,CAAC;IAC3C,wCAAwC,EAAE,MAAM,CAAC;IACjD,iCAAiC,EAAE,MAAM,CAAC;IAC1C,uCAAuC,EAAE,MAAM,CAAC;IAChD,6BAA6B,EAAE,MAAM,CAAC;IACtC,mCAAmC,EAAE,MAAM,CAAC;IAC5C,yCAAyC,EAAE,MAAM,CAAC;IAClD,2CAA2C,EAAE,MAAM,CAAC;IACpD,gDAAgD,EAAE,MAAM,CAAC;IACzD,2CAA2C,EAAE,MAAM,CAAC;IACpD,iDAAiD,EAAE,MAAM,CAAC;IAG1D,kCAAkC,EAAE,MAAM,CAAC;IAC3C,4BAA4B,EAAE,MAAM,CAAC;IACrC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IAOvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,4BAA4B,EAAE,MAAM,CAAC;IAGrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAG5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,+BAA+B,EAAE,MAAM,CAAC;IAGxC,0BAA0B,EAAE,MAAM,CAAC;IACnC,6BAA6B,EAAE,MAAM,CAAC;IACtC,sCAAsC,EAAE,MAAM,CAAC;IAG/C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6BAA6B,EAAE,MAAM,CAAC;IAGtC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0BAA0B,EAAE,MAAM,CAAC;IAGnC,uCAAuC,EAAE,MAAM,CAAC;IAChD,2BAA2B,EAAE,MAAM,CAAC;IACpC,8BAA8B,EAAE,MAAM,CAAC;IAGvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,0BAA0B,EAAE,MAAM,CAAC;IACnC,8BAA8B,EAAE,MAAM,CAAC;IAMvC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mCAAmC,EAAE,MAAM,CAAC;IAM5C,8BAA8B,EAAE,MAAM,CAAC;IACvC,gCAAgC,EAAE,MAAM,CAAC;IACzC,sCAAsC,EAAE,MAAM,CAAC;IAC/C,oCAAoC,EAAE,MAAM,CAAC;IAC7C,0CAA0C,EAAE,MAAM,CAAC;IACnD,2CAA2C,EAAE,MAAM,CAAC;IACpD,6BAA6B,EAAE,MAAM,CAAC;IACtC,8BAA8B,EAAE,MAAM,CAAC;IACvC,qCAAqC,EAAE,MAAM,CAAC;IAC9C,oCAAoC,EAAE,MAAM,CAAC;IAC7C,0CAA0C,EAAE,MAAM,CAAC;IACnD,8CAA8C,EAAE,MAAM,CAAC;IACvD,6BAA6B,EAAE,MAAM,CAAC;IAMtC,2CAA2C,EAAE,MAAM,CAAC;IACpD,yDAAyD,EAAE,MAAM,CAAC;IAClE,+BAA+B,EAAE,MAAM,CAAC;IACxC,8BAA8B,EAAE,MAAM,CAAC;IACvC,2CAA2C,EAAE,MAAM,CAAC;IACpD,4CAA4C,EAAE,MAAM,CAAC;IACrD,2CAA2C,EAAE,MAAM,CAAC;IACpD,6CAA6C,EAAE,MAAM,CAAC;IACtD,2CAA2C,EAAE,MAAM,CAAC;IACpD,iCAAiC,EAAE,MAAM,CAAC;IAC1C,oCAAoC,EAAE,MAAM,CAAC;IAC7C,qCAAqC,EAAE,MAAM,CAAC;IAC9C,4CAA4C,EAAE,MAAM,CAAC;IACrD,8CAA8C,EAAE,MAAM,CAAC;IACvD,oCAAoC,EAAE,MAAM,CAAC;IAC7C,wCAAwC,EAAE,MAAM,CAAC;IACjD,oCAAoC,EAAE,MAAM,CAAC;IAC7C,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IAMrC,6BAA6B,EAAE,MAAM,CAAC;IACtC,sDAAsD,EAAE,MAAM,CAAC;IAC/D,8DAA8D,EAAE,MAAM,CAAC;IACvE,yCAAyC,EAAE,MAAM,CAAC;IAMlD,8BAA8B,EAAE,MAAM,CAAC;IAMvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,+BAA+B,EAAE,MAAM,CAAC;IACxC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,MAAM,CAAC;IAMvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IACrC,uCAAuC,EAAE,MAAM,CAAC;IAChD,qCAAqC,EAAE,MAAM,CAAC;IAC9C,gDAAgD,EAAE,MAAM,CAAC;IACzD,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,EAAE,MAAM,CAAC;IACrC,2CAA2C,EAAE,MAAM,CAAC;IACpD,6BAA6B,EAAE,MAAM,CAAC;IACtC,wCAAwC,EAAE,MAAM,CAAC;IACjD,wCAAwC,EAAE,MAAM,CAAC;IACjD,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,YAAY,EAAE,gBAAgB,CAAC;CAChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"en-US.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/en-US.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAuM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"en-US.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/en-US.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAwM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fr-FR.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/fr-FR.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AA6M1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"fr-FR.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/fr-FR.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AA+M1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hi-IN.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/hi-IN.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAoM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"hi-IN.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/hi-IN.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAqM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ja-JP.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/ja-JP.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAqM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"ja-JP.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/ja-JP.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAsM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/pt-BR.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAwM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"pt-BR.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/pt-BR.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAyM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pt-PT.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/pt-PT.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAyM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"pt-PT.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/pt-PT.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AA0M1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"si-LK.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/si-LK.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAuM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"si-LK.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/si-LK.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAwM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ta-IN.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/ta-IN.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAyM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"ta-IN.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/ta-IN.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AA0M1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"te-IN.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/te-IN.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAyM1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"te-IN.d.ts","sourceRoot":"","sources":["../../../src/i18n/translations/te-IN.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AA0M1E,QAAA,MAAM,KAAK,EAAE,UAGZ,CAAC;AAEF,eAAe,KAAK,CAAC"}