@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
@@ -42,6 +42,24 @@ export declare class IsomorphicCrypto<T = any> {
42
42
  * @throws
43
43
  */
44
44
  isValidIdToken(idToken: string, jwk: JWKInterface, clientId: string, issuer: string, username: string, clockTolerance: number | undefined, validateJwtIssuer: boolean | undefined): Promise<boolean>;
45
+ /**
46
+ * Verifies the signature of a back-channel logout token, along with its audience, issuer,
47
+ * lifetime and, when the token has one, subject.
48
+ *
49
+ * @param logoutToken - The logout token received from the server.
50
+ * @param jwk - The server key the token names.
51
+ * @param clientId - The client the token must be addressed to.
52
+ * @param issuer - The expected issuer.
53
+ * @param subject - The token's subject, when it has one.
54
+ * @param clockTolerance - Allowed clock difference in seconds.
55
+ *
56
+ * @throws {InvalidLogoutTokenError} When verification fails. The message never includes the token.
57
+ */
58
+ verifyLogoutTokenSignature(logoutToken: string, jwk: JWKInterface, clientId: string, issuer: string, subject: string | undefined, clockTolerance: number): Promise<void>;
59
+ /**
60
+ * Decodes the JOSE header of a JWT without verifying its signature.
61
+ */
62
+ decodeJwtHeader<R = Record<string, unknown>>(token: string): R;
45
63
  decodeJwtToken<R = Record<string, unknown>>(token: string): R;
46
64
  }
47
65
  //# sourceMappingURL=IsomorphicCrypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IsomorphicCrypto.d.ts","sourceRoot":"","sources":["../src/IsomorphicCrypto.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAErD,qBAAa,gBAAgB,CAAC,CAAC,GAAG,GAAG;IACnC,OAAO,CAAC,WAAW,CAAY;gBAEZ,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAIzC;;;;OAIG;IACI,eAAe,IAAI,MAAM;IAIhC;;;;;;OAMG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE;;;;;;;;;OASG;IAEI,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY;IAoBjF;;;;;;;;;;;;;OAaG;IACI,cAAc,CACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,iBAAiB,EAAE,OAAO,GAAG,SAAS,GACrC,OAAO,CAAC,OAAO,CAAC;IA4BZ,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;CAUrE"}
1
+ {"version":3,"file":"IsomorphicCrypto.d.ts","sourceRoot":"","sources":["../src/IsomorphicCrypto.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAErD,qBAAa,gBAAgB,CAAC,CAAC,GAAG,GAAG;IACnC,OAAO,CAAC,WAAW,CAAY;gBAEZ,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAIzC;;;;OAIG;IACI,eAAe,IAAI,MAAM;IAIhC;;;;;;OAMG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE;;;;;;;;;OASG;IAEI,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY;IAoBjF;;;;;;;;;;;;;OAaG;IACI,cAAc,CACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,iBAAiB,EAAE,OAAO,GAAG,SAAS,GACrC,OAAO,CAAC,OAAO,CAAC;IA4BnB;;;;;;;;;;;;OAYG;IACU,0BAA0B,CACrC,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,YAAY,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC;IA2BhB;;OAEG;IACI,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;IAY9D,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;CAUrE"}
@@ -27,6 +27,7 @@ declare class StorageManager<T> {
27
27
  setPersistedData(persistedData: Partial<TemporaryStore>, userId?: string): Promise<void>;
28
28
  getSessionData(userId?: string, instanceId?: string): Promise<SessionData>;
29
29
  getCustomData<K>(key: string, userId?: string): Promise<K>;
30
+ removeCustomData(key: string, userId?: string): Promise<void>;
30
31
  setSessionStatus(status: string): void;
31
32
  getSessionStatus(): string;
32
33
  removeSessionStatus(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageManager.d.ts","sourceRoot":"","sources":["../src/StorageManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageManager.d.ts","sourceRoot":"","sources":["../src/StorageManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAC,wBAAwB,EAAC,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAIjG,KAAK,WAAW,CAAC,CAAC,IAAI,OAAO,CAC3B,gBAAgB,CAAC,CAAC,CAAC,GAAG,wBAAwB,GAAG,WAAW,GAAG,cAAc,GAAG,WAAW,CAC5F,CAAC;AAEF,cAAM,cAAc,CAAC,CAAC;IACpB,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC;IAErB,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;IAEzB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEN,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,MAAsC;cAMrF,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAU/D,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,wBAAwB,GAAG,MAAM,WAAW,GAAG,MAAM,cAAc,EAChH,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;cAUA,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,wBAAwB,GAAG,MAAM,WAAW,GAAG,MAAM,cAAc,GAC/G,OAAO,CAAC,IAAI,CAAC;IAahB,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAa1F,SAAS,CAAC,MAAM,CAAC,uBAAuB,IAAI,OAAO;IAatC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,uBAAuB,CAAC,oBAAoB,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/F,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/E,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjF,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAI5D,+BAA+B,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAIpE,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB1D,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA4BpD,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAI1D,gBAAgB,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI1E,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOtC,gBAAgB,IAAI,MAAM;IAM1B,mBAAmB,IAAI,IAAI;IAMrB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3C,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,sBAAsB,CAAC,GAAG,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMpF,gCAAgC,CAAC,GAAG,EAAE,MAAM,wBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMnG,yBAAyB,CAAC,GAAG,EAAE,MAAM,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAKnG,sBAAsB,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAa7F,uBAAuB,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM9F,sBAAsB,CAAC,GAAG,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjG,gCAAgC,CAC3C,GAAG,EAAE,MAAM,wBAAwB,EACnC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,IAAI,CAAC;IAIH,yBAAyB,CACpC,GAAG,EAAE,MAAM,cAAc,EACzB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAIH,sBAAsB,CACjC,GAAG,EAAE,MAAM,WAAW,EACtB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAaH,uBAAuB,CAClC,GAAG,EAAE,MAAM,WAAW,EACtB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAIH,yBAAyB,CAAC,GAAG,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxE,mCAAmC,CAAC,GAAG,EAAE,MAAM,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvF,4BAA4B,CAAC,GAAG,EAAE,MAAM,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvF,yBAAyB,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajF,0BAA0B,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhG;AAED,eAAe,cAAc,CAAC"}
@@ -7,6 +7,7 @@ import { Crypto } from './models/crypto';
7
7
  import { ExtendedAuthorizeRequestUrlParams } from './models/oauth-request';
8
8
  import { OIDCDiscoveryApiResponse } from './models/oidc-discovery';
9
9
  import { OIDCEndpoints } from './models/oidc-endpoints';
10
+ import { LogoutTokenClaims } from './models/logout-token';
10
11
  import { UserSession } from './models/session';
11
12
  import { Storage } from './models/store';
12
13
  import { IdToken, TokenExchangeRequestConfig, TokenResponse } from './models/token';
@@ -39,6 +40,11 @@ declare class ThunderIDJavaScriptClient<T = Config> implements ThunderIDClient<T
39
40
  protected clearSessionAsync(sessionId?: string): Promise<void>;
40
41
  setSession(sessionData: Record<string, unknown>, sessionId?: string): Promise<void>;
41
42
  decodeJwtToken<R = Record<string, unknown>>(token: string): Promise<R>;
43
+ /**
44
+ * Validates a back-channel logout token and returns its claims. Protected, because only an SDK
45
+ * that runs on a server can receive one; such an SDK builds its logout handler on this.
46
+ */
47
+ protected validateLogoutToken(logoutToken: string): Promise<LogoutTokenClaims>;
42
48
  exchangeToken(config: TokenExchangeRequestConfig, sessionId?: string): Promise<TokenResponse | Response | User>;
43
49
  isLoading(): boolean;
44
50
  signIn(_options?: SignInOptions): Promise<User | TokenResponse | undefined>;
@@ -50,7 +56,7 @@ declare class ThunderIDJavaScriptClient<T = Config> implements ThunderIDClient<T
50
56
  updateUserProfile(_payload: any, _userId?: string): Promise<User>;
51
57
  protected loadOpenIDProviderConfiguration(forceInit?: boolean): Promise<void>;
52
58
  protected getSignInUrl(requestConfig?: ExtendedAuthorizeRequestUrlParams, userId?: string): Promise<string>;
53
- protected requestAccessToken(authorizationCode: string, sessionState: string, state: string, userId?: string, tokenRequestConfig?: {
59
+ protected requestAccessToken(authorizationCode: string, state: string, userId?: string, tokenRequestConfig?: {
54
60
  params: Record<string, unknown>;
55
61
  }): Promise<TokenResponse>;
56
62
  protected getSignOutUrl(userId?: string): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"ThunderIDJavaScriptClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDJavaScriptClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThunderIDJavaScriptClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDJavaScriptClient.ts"],"names":[],"mappings":"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"}
@@ -81,6 +81,15 @@ var ThunderIDAuthException = class extends Error {
81
81
  Object.setPrototypeOf(this, new.target.prototype);
82
82
  }
83
83
  };
84
+ /**
85
+ * Raised when a back-channel logout token is not valid. A logout handler answers 400 for this and a
86
+ * 5xx for any other failure, which tells the server whether a retry can help.
87
+ */
88
+ var InvalidLogoutTokenError = class extends ThunderIDAuthException {
89
+ constructor(code, message) {
90
+ super(code, "Invalid logout token.", message);
91
+ }
92
+ };
84
93
 
85
94
  //#endregion
86
95
  //#region src/IsomorphicCrypto.ts
@@ -144,6 +153,38 @@ var IsomorphicCrypto = class {
144
153
  return Promise.reject(new ThunderIDAuthException("JS-CRYPTO_HELPER-IVIT-IV01", "Invalid ID token.", "ID token validation returned false"));
145
154
  }).catch((error$1) => Promise.reject(error$1));
146
155
  }
156
+ /**
157
+ * Verifies the signature of a back-channel logout token, along with its audience, issuer,
158
+ * lifetime and, when the token has one, subject.
159
+ *
160
+ * @param logoutToken - The logout token received from the server.
161
+ * @param jwk - The server key the token names.
162
+ * @param clientId - The client the token must be addressed to.
163
+ * @param issuer - The expected issuer.
164
+ * @param subject - The token's subject, when it has one.
165
+ * @param clockTolerance - Allowed clock difference in seconds.
166
+ *
167
+ * @throws {InvalidLogoutTokenError} When verification fails. The message never includes the token.
168
+ */
169
+ async verifyLogoutTokenSignature(logoutToken, jwk, clientId, issuer, subject, clockTolerance) {
170
+ let verified = false;
171
+ try {
172
+ verified = await this.cryptoUtils.verifyJwt(logoutToken, jwk, TokenConstants_default.SignatureValidation.SUPPORTED_ALGORITHMS, clientId, issuer, subject, clockTolerance, true);
173
+ } catch {
174
+ verified = false;
175
+ }
176
+ if (!verified) throw new InvalidLogoutTokenError("JS-CRYPTO_HELPER-VLTS-IV01", "The logout token signature could not be verified.");
177
+ }
178
+ /**
179
+ * Decodes the JOSE header of a JWT without verifying its signature.
180
+ */
181
+ decodeJwtHeader(token) {
182
+ try {
183
+ return JSON.parse(this.cryptoUtils.base64URLDecode(token?.split(".")[0]));
184
+ } catch {
185
+ throw new ThunderIDAuthException("JS-CRYPTO_UTIL-DJH-IV01", "Decoding token failed.", "The token header could not be decoded.");
186
+ }
187
+ }
147
188
  decodeJwtToken(token) {
148
189
  try {
149
190
  const utf8String = this.cryptoUtils.base64URLDecode(token?.split(".")[1]);
@@ -1032,6 +1073,8 @@ let EmbeddedFlowComponentType = /* @__PURE__ */ function(EmbeddedFlowComponentTy
1032
1073
  EmbeddedFlowComponentType$1["Icon"] = "ICON";
1033
1074
  /** Image display component for logos and illustrations */
1034
1075
  EmbeddedFlowComponentType$1["Image"] = "IMAGE";
1076
+ /** Key-value list display component that shows label and value pairs published in additionalData */
1077
+ EmbeddedFlowComponentType$1["KeyValueList"] = "KEY_VALUE_LIST";
1035
1078
  /** One-time password input field for multi-factor authentication */
1036
1079
  EmbeddedFlowComponentType$1["OtpInput"] = "OTP_INPUT";
1037
1080
  /** Organization unit tree picker for selecting an OU */
@@ -2082,6 +2125,21 @@ const ApplicationNativeAuthenticationConstants = { SupportedAuthenticators: {
2082
2125
  } };
2083
2126
  var ApplicationNativeAuthenticationConstants_default = ApplicationNativeAuthenticationConstants;
2084
2127
 
2128
+ //#endregion
2129
+ //#region src/constants/BackchannelLogoutConstants.ts
2130
+ /**
2131
+ * Constants for OpenID Connect Back-Channel Logout 1.0, for an SDK that receives logout tokens.
2132
+ */
2133
+ const BackchannelLogoutConstants = {
2134
+ DEFAULT_CLOCK_TOLERANCE_SECONDS: 60,
2135
+ EVENT: "http://schemas.openid.net/event/backchannel-logout",
2136
+ JWKS_CACHE_TTL_MS: 6e5,
2137
+ JWKS_MIN_REFETCH_INTERVAL_MS: 3e4,
2138
+ TOKEN_PARAM: "logout_token",
2139
+ TOKEN_TYPE: "logout+jwt"
2140
+ };
2141
+ var BackchannelLogoutConstants_default = BackchannelLogoutConstants;
2142
+
2085
2143
  //#endregion
2086
2144
  //#region src/constants/ScopeConstants.ts
2087
2145
  /**
@@ -2118,7 +2176,6 @@ var ScopeConstants_default = ScopeConstants;
2118
2176
  const OIDCRequestConstants = {
2119
2177
  Params: {
2120
2178
  AUTHORIZATION_CODE: "code",
2121
- SESSION_STATE: "session_state",
2122
2179
  SIGN_OUT_SUCCESS: "sign_out_success",
2123
2180
  STATE: "state"
2124
2181
  },
@@ -2441,7 +2498,6 @@ const OIDCDiscoveryConstants = {
2441
2498
  ISSUER: "/oauth2/token",
2442
2499
  JWKS: "/oauth2/jwks",
2443
2500
  REVOCATION: "/oauth2/revoke",
2444
- SESSION_IFRAME: "/oidc/checksession",
2445
2501
  TOKEN: "/oauth2/token",
2446
2502
  USERINFO: "/oauth2/userinfo"
2447
2503
  },
@@ -2452,7 +2508,6 @@ const OIDCDiscoveryConstants = {
2452
2508
  ISSUER: "issuer",
2453
2509
  JWKS: "jwks_uri",
2454
2510
  REVOCATION: "revocation_endpoint",
2455
- SESSION_IFRAME: "check_session_iframe",
2456
2511
  TOKEN: "token_endpoint",
2457
2512
  USERINFO: "userinfo_endpoint"
2458
2513
  },
@@ -2720,6 +2775,9 @@ var StorageManager = class StorageManager {
2720
2775
  async getCustomData(key, userId) {
2721
2776
  return JSON.parse(await this.store.getData(this.resolveKey(key, userId)) ?? null);
2722
2777
  }
2778
+ async removeCustomData(key, userId) {
2779
+ await this.store.removeData(this.resolveKey(key, userId));
2780
+ }
2723
2781
  setSessionStatus(status) {
2724
2782
  if (StorageManager.isLocalStorageAvailable()) localStorage.setItem(`${this.vendor}-session-active`, status);
2725
2783
  }
@@ -2954,6 +3012,47 @@ const RESOURCE_ENDPOINT_KEYS = [
2954
3012
  const resolveResourceEndpoint = (key, config, explicitUrl) => explicitUrl ?? config?.endpoints?.[key] ?? void 0;
2955
3013
  var resolveResourceEndpoint_default = resolveResourceEndpoint;
2956
3014
 
3015
+ //#endregion
3016
+ //#region src/utils/validateLogoutTokenClaims.ts
3017
+ const fail = (code, message) => {
3018
+ throw new InvalidLogoutTokenError(code, message);
3019
+ };
3020
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
3021
+ const isNonEmptyString = (value) => typeof value === "string" && value.length > 0;
3022
+ /**
3023
+ * Checks the header and claims of a back-channel logout token, per OpenID Connect Back-Channel
3024
+ * Logout 1.0 section 2.6. It does not verify the signature: the caller does that with the server's
3025
+ * keys. Messages never include the token or its claim values.
3026
+ *
3027
+ * @param header - The decoded JOSE header.
3028
+ * @param payload - The decoded claims.
3029
+ * @param options - The issuer, client and clock the claims are checked against.
3030
+ * @returns The claims, typed.
3031
+ * @throws {InvalidLogoutTokenError} When any check fails.
3032
+ */
3033
+ const validateLogoutTokenClaims = (header, payload, options) => {
3034
+ if (!isRecord(header) || !isRecord(payload)) return fail("JS-LOGOUT_TOKEN-VLTC-IV01", "The logout token is not a well-formed JWT.");
3035
+ const type = typeof header["typ"] === "string" ? header["typ"].toLowerCase() : "";
3036
+ 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.");
3037
+ if (typeof header["alg"] !== "string" || !options.supportedAlgorithms.includes(header["alg"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV03", "The signature algorithm is not supported.");
3038
+ if ("nonce" in payload) return fail("JS-LOGOUT_TOKEN-VLTC-IV04", "A logout token must not carry a nonce.");
3039
+ const { events } = payload;
3040
+ if (!isRecord(events) || !isRecord(events[BackchannelLogoutConstants_default.EVENT])) return fail("JS-LOGOUT_TOKEN-VLTC-IV05", "The back-channel logout event is missing.");
3041
+ if (payload["iss"] !== options.issuer) return fail("JS-LOGOUT_TOKEN-VLTC-IV06", "The issuer does not match.");
3042
+ const audiences = Array.isArray(payload["aud"]) ? payload["aud"] : [payload["aud"]];
3043
+ if (!isNonEmptyString(options.clientId) || !audiences.includes(options.clientId)) return fail("JS-LOGOUT_TOKEN-VLTC-IV07", "The audience does not include this client.");
3044
+ const now = options.now ?? Math.floor(Date.now() / 1e3);
3045
+ const tolerance = options.clockTolerance ?? BackchannelLogoutConstants_default.DEFAULT_CLOCK_TOLERANCE_SECONDS;
3046
+ 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.");
3047
+ if (typeof payload["exp"] !== "number" || payload["exp"] <= now - tolerance) return fail("JS-LOGOUT_TOKEN-VLTC-IV09", "The token has expired.");
3048
+ if ("sid" in payload && !isNonEmptyString(payload["sid"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV10", "The session identifier is not valid.");
3049
+ if ("sub" in payload && !isNonEmptyString(payload["sub"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV10", "The subject is not valid.");
3050
+ if (!("sid" in payload) && !("sub" in payload)) return fail("JS-LOGOUT_TOKEN-VLTC-IV11", "The token names neither a session nor a subject.");
3051
+ if (!isNonEmptyString(payload["jti"])) return fail("JS-LOGOUT_TOKEN-VLTC-IV12", "The token identifier is missing.");
3052
+ return payload;
3053
+ };
3054
+ var validateLogoutTokenClaims_default = validateLogoutTokenClaims;
3055
+
2957
3056
  //#endregion
2958
3057
  //#region src/constants/TokenExchangeConstants.ts
2959
3058
  /**
@@ -2994,6 +3093,9 @@ var AuthenticationHelper = class {
2994
3093
  config;
2995
3094
  oidcProviderMetaData;
2996
3095
  cryptoHelper;
3096
+ jwksCache;
3097
+ jwksFetch;
3098
+ jwksFetchStartedAt = 0;
2997
3099
  /**
2998
3100
  * Creates a new `AuthenticationHelper` instance.
2999
3101
  *
@@ -3052,7 +3154,6 @@ var AuthenticationHelper = class {
3052
3154
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.AUTHORIZATION,
3053
3155
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.END_SESSION,
3054
3156
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.JWKS,
3055
- OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.SESSION_IFRAME,
3056
3157
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.REVOCATION,
3057
3158
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.TOKEN,
3058
3159
  OIDCDiscoveryConstants_default.Storage.StorageKeys.Endpoints.ISSUER,
@@ -3083,7 +3184,6 @@ var AuthenticationHelper = class {
3083
3184
  [endpointKeys.END_SESSION]: `${baseUrl}${endpointPaths.END_SESSION}`,
3084
3185
  [endpointKeys.ISSUER]: `${baseUrl}`,
3085
3186
  [endpointKeys.JWKS]: `${baseUrl}${endpointPaths.JWKS}`,
3086
- [endpointKeys.SESSION_IFRAME]: `${baseUrl}${endpointPaths.SESSION_IFRAME}`,
3087
3187
  [endpointKeys.REVOCATION]: `${baseUrl}${endpointPaths.REVOCATION}`,
3088
3188
  [endpointKeys.TOKEN]: `${baseUrl}${endpointPaths.TOKEN}`,
3089
3189
  [endpointKeys.USERINFO]: `${baseUrl}${endpointPaths.USERINFO}`,
@@ -3098,6 +3198,83 @@ var AuthenticationHelper = class {
3098
3198
  * @throws {ThunderIDAuthException} When the JWKS endpoint is missing or the request fails.
3099
3199
  */
3100
3200
  async validateIdToken(idToken) {
3201
+ const keys = await this.fetchJwks();
3202
+ const { issuer } = await this.oidcProviderMetaData();
3203
+ const jwk = await this.cryptoHelper.getJWKForTheIdToken(idToken.split(".")[0], keys);
3204
+ 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);
3205
+ }
3206
+ /**
3207
+ * Validates a back-channel logout token: its type, event, issuer, audience and lifetime, then its
3208
+ * signature against the server's keys. The claims are checked first, so a malformed token costs
3209
+ * neither a key fetch nor a signature check.
3210
+ *
3211
+ * @param logoutToken - The raw `logout_token` the server posted.
3212
+ * @returns The token's claims.
3213
+ * @throws {InvalidLogoutTokenError} When the token is not valid.
3214
+ */
3215
+ async validateLogoutToken(logoutToken) {
3216
+ const malformed = new InvalidLogoutTokenError("JS-AUTH_HELPER-VLT-IV01", "The logout token is not a signed JWT.");
3217
+ if (typeof logoutToken !== "string" || logoutToken.split(".").length !== 3) throw malformed;
3218
+ const configData = await this.config();
3219
+ const { issuer } = await this.oidcProviderMetaData();
3220
+ const clockTolerance = configData.tokenValidation?.idToken?.clockTolerance ?? BackchannelLogoutConstants_default.DEFAULT_CLOCK_TOLERANCE_SECONDS;
3221
+ let header;
3222
+ let payload;
3223
+ try {
3224
+ header = this.cryptoHelper.decodeJwtHeader(logoutToken);
3225
+ payload = this.cryptoHelper.decodeJwtToken(logoutToken);
3226
+ } catch {
3227
+ throw malformed;
3228
+ }
3229
+ const claims = validateLogoutTokenClaims_default(header, payload, {
3230
+ clientId: configData.clientId ?? "",
3231
+ clockTolerance,
3232
+ issuer: issuer ?? "",
3233
+ supportedAlgorithms: TokenConstants_default.SignatureValidation.SUPPORTED_ALGORITHMS
3234
+ });
3235
+ await this.cryptoHelper.verifyLogoutTokenSignature(logoutToken, await this.getCachedJwk(header["kid"]), configData.clientId ?? "", issuer ?? "", claims.sub, clockTolerance);
3236
+ return claims;
3237
+ }
3238
+ /**
3239
+ * Returns the server key with the given identifier from a cached key set. An unknown identifier
3240
+ * triggers one re-fetch, to follow key rotation, no more often than the minimum interval: the
3241
+ * logout endpoint is unauthenticated, so an unbounded re-fetch would let anyone drive requests
3242
+ * to the server. Requests that arrive while a fetch runs share it.
3243
+ */
3244
+ async getCachedJwk(kid) {
3245
+ const now = Date.now();
3246
+ const find = (keys) => keys.find((key) => key.kid === kid);
3247
+ const fresh = this.jwksCache !== void 0 && now - this.jwksCache.fetchedAt < BackchannelLogoutConstants_default.JWKS_CACHE_TTL_MS;
3248
+ let jwk = fresh ? find(this.jwksCache.keys) : void 0;
3249
+ if (!jwk && (this.jwksFetch || now - this.jwksFetchStartedAt >= BackchannelLogoutConstants_default.JWKS_MIN_REFETCH_INTERVAL_MS)) jwk = find(await this.fetchJwksOnce());
3250
+ 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.");
3251
+ if (!jwk) throw new InvalidLogoutTokenError("JS-AUTH_HELPER-GCJ-NF01", "The logout token names a key the server does not publish.");
3252
+ return jwk;
3253
+ }
3254
+ /**
3255
+ * Fetches the key set unless a fetch is already running, in which case that one is shared.
3256
+ */
3257
+ fetchJwksOnce() {
3258
+ if (!this.jwksFetch) {
3259
+ this.jwksFetchStartedAt = Date.now();
3260
+ this.jwksFetch = this.fetchJwks().then((keys) => {
3261
+ this.jwksCache = {
3262
+ fetchedAt: Date.now(),
3263
+ keys
3264
+ };
3265
+ return keys;
3266
+ }).finally(() => {
3267
+ this.jwksFetch = void 0;
3268
+ });
3269
+ }
3270
+ return this.jwksFetch;
3271
+ }
3272
+ /**
3273
+ * Fetches the server's JSON Web Key Set.
3274
+ *
3275
+ * @throws {ThunderIDAuthException} When the JWKS endpoint is missing or the request fails.
3276
+ */
3277
+ async fetchJwks() {
3101
3278
  const jwksEndpoint = (await this.storageManager.loadOpenIDProviderConfiguration()).jwks_uri;
3102
3279
  const configData = await this.config();
3103
3280
  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.");
@@ -3108,10 +3285,8 @@ var AuthenticationHelper = class {
3108
3285
  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.");
3109
3286
  }
3110
3287
  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());
3111
- const { issuer } = await this.oidcProviderMetaData();
3112
3288
  const { keys } = await response.json();
3113
- const jwk = await this.cryptoHelper.getJWKForTheIdToken(idToken.split(".")[0], keys);
3114
- 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);
3289
+ return keys;
3115
3290
  }
3116
3291
  /**
3117
3292
  * Extracts user information from a decoded ID token payload.
@@ -3516,6 +3691,14 @@ var ThunderIDJavaScriptClient = class {
3516
3691
  async decodeJwtToken(token) {
3517
3692
  return this.cryptoHelper.decodeJwtToken(token);
3518
3693
  }
3694
+ /**
3695
+ * Validates a back-channel logout token and returns its claims. Protected, because only an SDK
3696
+ * that runs on a server can receive one; such an SDK builds its logout handler on this.
3697
+ */
3698
+ async validateLogoutToken(logoutToken) {
3699
+ await this.loadOpenIDProviderConfiguration(false);
3700
+ return this.authHelper.validateLogoutToken(logoutToken);
3701
+ }
3519
3702
  async exchangeToken(config, sessionId) {
3520
3703
  if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
3521
3704
  const oidcProviderMetadata = await this.oidcProviderMetaDataProvider();
@@ -3655,12 +3838,11 @@ var ThunderIDJavaScriptClient = class {
3655
3838
  if (await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) return buildSignInUrl();
3656
3839
  return this.loadOpenIDProviderConfiguration(requestConfig?.forceInit).then(() => buildSignInUrl());
3657
3840
  }
3658
- async requestAccessToken(authorizationCode, sessionState, state, userId, tokenRequestConfig) {
3841
+ async requestAccessToken(authorizationCode, state, userId, tokenRequestConfig) {
3659
3842
  if (!await this.storageManager.getTemporaryDataParameter(OIDCDiscoveryConstants_default.Storage.StorageKeys.OPENID_PROVIDER_CONFIG_INITIATED)) await this.loadOpenIDProviderConfiguration(false);
3660
3843
  const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
3661
3844
  const configData = await this.configProvider();
3662
3845
  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.");
3663
- if (sessionState) await this.storageManager.setSessionDataParameter(OIDCRequestConstants_default.Params.SESSION_STATE, sessionState, userId);
3664
3846
  const body = new URLSearchParams();
3665
3847
  body.set("client_id", configData.clientId ?? "");
3666
3848
  const hasSecret = Boolean(configData.clientSecret && configData.clientSecret.trim().length > 0);
@@ -3713,7 +3895,6 @@ var ThunderIDJavaScriptClient = class {
3713
3895
  const meta = await this.oidcProviderMetaDataProvider();
3714
3896
  return {
3715
3897
  authorizationEndpoint: meta.authorization_endpoint ?? "",
3716
- checkSessionIframe: meta.check_session_iframe ?? "",
3717
3898
  endSessionEndpoint: meta.end_session_endpoint ?? "",
3718
3899
  introspectionEndpoint: meta.introspection_endpoint ?? "",
3719
3900
  issuer: meta.issuer ?? "",
@@ -3736,11 +3917,7 @@ var ThunderIDJavaScriptClient = class {
3736
3917
  return (await this.storageManager.getSessionData(userId)).id_token;
3737
3918
  }
3738
3919
  async getUserSession(userId) {
3739
- const sessionData = await this.storageManager.getSessionData(userId);
3740
- return {
3741
- scopes: sessionData?.scope?.split(" "),
3742
- sessionState: sessionData?.session_state ?? ""
3743
- };
3920
+ return { scopes: (await this.storageManager.getSessionData(userId))?.scope?.split(" ") };
3744
3921
  }
3745
3922
  async refreshAccessToken(userId) {
3746
3923
  const tokenEndpoint = (await this.oidcProviderMetaDataProvider()).token_endpoint;
@@ -5324,6 +5501,40 @@ function resolveFlowTemplateLiterals(text, { t, meta }) {
5324
5501
  });
5325
5502
  }
5326
5503
 
5504
+ //#endregion
5505
+ //#region src/utils/parseKeyValuePairs.ts
5506
+ /**
5507
+ * Reads the label and value pairs a KEY_VALUE_LIST renders from the raw value found under its
5508
+ * `source` key in `additionalData`. The server publishes them as a JSON-encoded array, since
5509
+ * additional data carries strings, so both an array and its encoding are accepted.
5510
+ *
5511
+ * Entries that are not objects, or that carry no value, are dropped, since an empty row tells the
5512
+ * user nothing. Anything that is not a list of pairs yields none.
5513
+ *
5514
+ * @param raw - The raw value found under the source key.
5515
+ * @returns The pairs to render, empty when the value holds none.
5516
+ *
5517
+ * @example
5518
+ * ```typescript
5519
+ * parseKeyValuePairs('[{"label":"Email","value":"a@b.com"}]'); // [{label: 'Email', value: 'a@b.com'}]
5520
+ * parseKeyValuePairs('not json'); // []
5521
+ * ```
5522
+ */
5523
+ const parseKeyValuePairs = (raw) => {
5524
+ let parsed = raw;
5525
+ if (typeof raw === "string") try {
5526
+ parsed = JSON.parse(raw);
5527
+ } catch {
5528
+ return [];
5529
+ }
5530
+ if (!Array.isArray(parsed)) return [];
5531
+ return parsed.filter((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry)).map((entry) => ({
5532
+ label: typeof entry["label"] === "string" ? entry["label"] : "",
5533
+ value: typeof entry["value"] === "string" ? entry["value"] : ""
5534
+ })).filter((pair) => pair.value !== "");
5535
+ };
5536
+ var parseKeyValuePairs_default = parseKeyValuePairs;
5537
+
5327
5538
  //#endregion
5328
5539
  //#region src/utils/countryCodeToFlagEmoji.ts
5329
5540
  /**
@@ -5518,7 +5729,7 @@ const DEFAULT_VALIDATION_MESSAGE_KEYS = {
5518
5729
  * - Unknown rule types are treated as passing (forward compatibility with future types).
5519
5730
  */
5520
5731
  const evaluateValidationRule = (rule, value) => {
5521
- const fail = () => rule.message ?? DEFAULT_VALIDATION_MESSAGE_KEYS[rule.type];
5732
+ const fail$1 = () => rule.message ?? DEFAULT_VALIDATION_MESSAGE_KEYS[rule.type];
5522
5733
  switch (rule.type) {
5523
5734
  case "regex": {
5524
5735
  if (typeof rule.value !== "string" || rule.value === "") return null;
@@ -5528,14 +5739,14 @@ const evaluateValidationRule = (rule, value) => {
5528
5739
  } catch {
5529
5740
  return null;
5530
5741
  }
5531
- return re.test(value) ? null : fail();
5742
+ return re.test(value) ? null : fail$1();
5532
5743
  }
5533
5744
  case "minLength":
5534
5745
  if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
5535
- return value.length >= rule.value ? null : fail();
5746
+ return value.length >= rule.value ? null : fail$1();
5536
5747
  case "maxLength":
5537
5748
  if (typeof rule.value !== "number" || Number.isNaN(rule.value)) return null;
5538
- return value.length <= rule.value ? null : fail();
5749
+ return value.length <= rule.value ? null : fail$1();
5539
5750
  default: return null;
5540
5751
  }
5541
5752
  };
@@ -5821,6 +6032,7 @@ const en_US = {
5821
6032
  "errors.signup.initialization": "An error occurred while initializing. Please try again later.",
5822
6033
  "errors.signup.flow.failure": "An error occurred during the sign-up flow. Please try again later.",
5823
6034
  "errors.signup.flow.initialization.failure": "An error occurred while initializing the sign-up flow. Please try again later.",
6035
+ "errors.signup.popup.failure": "Could not continue the sign-up in the pop-up window. Please try again.",
5824
6036
  "errors.signup.components.not.available": "Sign-up form is not available at the moment. Please try again later."
5825
6037
  }
5826
6038
  };
@@ -5953,6 +6165,7 @@ const fr_FR = {
5953
6165
  "errors.signup.initialization": "Une erreur est survenue lors de l'initialisation. Veuillez réessayer plus tard.",
5954
6166
  "errors.signup.flow.failure": "Une erreur est survenue lors du flux d'inscription. Veuillez réessayer plus tard.",
5955
6167
  "errors.signup.flow.initialization.failure": "Une erreur est survenue lors de l'initialisation du flux d'inscription. Veuillez réessayer plus tard.",
6168
+ "errors.signup.popup.failure": "Impossible de poursuivre l'inscription dans la fenêtre contextuelle. Veuillez réessayer.",
5956
6169
  "errors.signup.components.not.available": "Le formulaire d'inscription n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
5957
6170
  "errors.signin.components.not.available": "Le formulaire de connexion n'est pas disponible pour le moment. Veuillez réessayer plus tard.",
5958
6171
  "errors.signin.timeout": "Le temps imparti pour effectuer cette e'tape est expire'."
@@ -6087,6 +6300,7 @@ const te_IN = {
6087
6300
  "errors.signup.initialization": "ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6088
6301
  "errors.signup.flow.failure": "సైన్ అప్ ప్రక్రియలో లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6089
6302
  "errors.signup.flow.initialization.failure": "సైన్ అప్ ప్రక్రియను ప్రారంభించేటప్పుడు లోపం వచ్చింది. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6303
+ "errors.signup.popup.failure": "పాప్-అప్ విండోలో సైన్ అప్ కొనసాగించడం సాధ్యం కాలేదు. దయచేసి మళ్లీ ప్రయత్నించండి.",
6090
6304
  "errors.signup.components.not.available": "సైన్ అప్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6091
6305
  "errors.signin.components.not.available": "సైన్ ఇన్ ఫారం ప్రస్తుతం అందుబాటులో లేదు. దయచేసి తరువాత మళ్లీ ప్రయత్నించండి.",
6092
6306
  "errors.signin.timeout": "దశను పూర్తి చేయడానికి అనుమతించబడిన సమయం ముగిసింది."
@@ -6221,6 +6435,7 @@ const hi_IN = {
6221
6435
  "errors.signup.initialization": "प्रारंभीकरण के दौरान एक त्रुटि हुई। कृपया बाद में पुनः प्रयास करें।",
6222
6436
  "errors.signup.flow.failure": "साइन-अप प्रक्रिया में त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6223
6437
  "errors.signup.flow.initialization.failure": "साइन-अप प्रक्रिया प्रारंभ करते समय त्रुटि। कृपया बाद में पुनः प्रयास करें।",
6438
+ "errors.signup.popup.failure": "पॉप-अप विंडो में साइन-अप जारी नहीं रखा जा सका। कृपया पुनः प्रयास करें।",
6224
6439
  "errors.signup.components.not.available": "साइन-अप फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6225
6440
  "errors.signin.components.not.available": "साइन-इन फॉर्म फिलहाल उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें।",
6226
6441
  "errors.signin.timeout": "स्टेप पूरा करने के लिए दिया गया समय खत्म हो गया है।"
@@ -6355,6 +6570,7 @@ const pt_BR = {
6355
6570
  "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6356
6571
  "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de cadastro. Tente novamente mais tarde.",
6357
6572
  "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de cadastro. Tente novamente mais tarde.",
6573
+ "errors.signup.popup.failure": "Não foi possível continuar o cadastro na janela pop-up. Tente novamente.",
6358
6574
  "errors.signup.components.not.available": "O formulário de cadastro não está disponível no momento. Tente novamente mais tarde.",
6359
6575
  "errors.signin.components.not.available": "O formulário de login não está disponível no momento. Tente novamente mais tarde.",
6360
6576
  "errors.signin.timeout": "O tempo permitido para concluir a etapa expirou."
@@ -6489,6 +6705,7 @@ const pt_PT = {
6489
6705
  "errors.signup.initialization": "Ocorreu um erro durante a inicialização. Tente novamente mais tarde.",
6490
6706
  "errors.signup.flow.failure": "Ocorreu um erro durante o fluxo de registo. Tente novamente mais tarde.",
6491
6707
  "errors.signup.flow.initialization.failure": "Ocorreu um erro ao inicializar o fluxo de registo. Tente novamente mais tarde.",
6708
+ "errors.signup.popup.failure": "Não foi possível continuar o registo na janela pop-up. Tente novamente.",
6492
6709
  "errors.signup.components.not.available": "O formulário de registo não está disponível de momento. Tente novamente mais tarde.",
6493
6710
  "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.",
6494
6711
  "errors.signin.timeout": "O tempo permitido para completar a etapa expirou."
@@ -6623,6 +6840,7 @@ const ta_IN = {
6623
6840
  "errors.signup.initialization": "தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6624
6841
  "errors.signup.flow.failure": "பதிவு செய்யும் செயல்பாட்டில் பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6625
6842
  "errors.signup.flow.initialization.failure": "பதிவு செய்யும் செயல்பாட்டை தொடங்கும்போது பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6843
+ "errors.signup.popup.failure": "பாப்-அப் சாளரத்தில் பதிவைத் தொடர முடியவில்லை. மீண்டும் முயற்சிக்கவும்.",
6626
6844
  "errors.signup.components.not.available": "பதிவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6627
6845
  "errors.signin.components.not.available": "உள்நுழைவு படிவம் இப்போது கிடைக்கவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
6628
6846
  "errors.signin.timeout": "படிநிலையை முடிக்க அனுமதிக்கப்பட்ட நேரம் காலாவதியானது."
@@ -6757,6 +6975,7 @@ const si_LK = {
6757
6975
  "errors.signup.initialization": "ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6758
6976
  "errors.signup.flow.failure": "ගිණුම් තැනීමේ ක්‍රියාවලියේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6759
6977
  "errors.signup.flow.initialization.failure": "ගිණුම් තැනීමේ ක්‍රියාවලිය ආරම්භ කිරීමේදී දෝෂයක් සිදු විය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6978
+ "errors.signup.popup.failure": "උත්පතන කවුළුවේ ගිණුම් තැනීම දිගටම කරගෙන යා නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න.",
6760
6979
  "errors.signup.components.not.available": "ගිණුම් තැනීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6761
6980
  "errors.signin.components.not.available": "ප්‍රවේශ වීමේ පිටුව දැන් ලබා ගත නොහැකිය. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
6762
6981
  "errors.signin.timeout": "පියවර සම්පූර්ණ කිරීමට ලබා දී තිබූ කාලය ඉකුත් වී ඇත."
@@ -6857,6 +7076,7 @@ exports.AgentQueryKeys = AgentQueryKeys_default;
6857
7076
  exports.ApplicationNativeAuthenticationConstants = ApplicationNativeAuthenticationConstants_default;
6858
7077
  exports.ApplicationQueryKeys = ApplicationQueryKeys_default;
6859
7078
  exports.AuthenticationHelper = AuthenticationHelper_default;
7079
+ exports.BackchannelLogoutConstants = BackchannelLogoutConstants_default;
6860
7080
  exports.ConsentConstants = ConsentConstants_default;
6861
7081
  exports.CredentialConstants = CredentialConstants_default;
6862
7082
  exports.DEFAULT_THEME = DEFAULT_THEME;
@@ -6879,6 +7099,7 @@ exports.FlowMetaType = FlowMetaType;
6879
7099
  exports.FlowMode = FlowMode;
6880
7100
  exports.HttpClient = HttpClient;
6881
7101
  exports.InboundAuthTypes = InboundAuthTypes;
7102
+ exports.InvalidLogoutTokenError = InvalidLogoutTokenError;
6882
7103
  exports.IsomorphicCrypto = IsomorphicCrypto;
6883
7104
  exports.OAuth2GrantTypes = OAuth2GrantTypes;
6884
7105
  exports.OAuth2ResponseTypes = OAuth2ResponseTypes;
@@ -6953,6 +7174,7 @@ exports.logger = logger_default;
6953
7174
  exports.mapCredentialUpdateError = mapCredentialUpdateError_default;
6954
7175
  exports.normalizeLocaleTag = normalizeLocaleTag;
6955
7176
  exports.normalizeTranslations = normalizeTranslations_default;
7177
+ exports.parseKeyValuePairs = parseKeyValuePairs_default;
6956
7178
  exports.processOpenIDScopes = processOpenIDScopes_default;
6957
7179
  exports.removeTrailingSlash = removeTrailingSlash_default;
6958
7180
  exports.resolveChangeCredentialPolicy = resolveChangeCredentialPolicy_default;
@@ -6971,5 +7193,6 @@ exports.updateApplication = updateApplication_default;
6971
7193
  exports.updateMeCredentials = updateMeCredentials_default;
6972
7194
  exports.updateMeProfile = updateMeProfile_default;
6973
7195
  exports.updateUser = updateUser_default;
7196
+ exports.validateLogoutTokenClaims = validateLogoutTokenClaims_default;
6974
7197
  exports.warn = warn;
6975
7198
  exports.withVendorCSSClassPrefix = withVendorCSSClassPrefix_default;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Constants for OpenID Connect Back-Channel Logout 1.0, for an SDK that receives logout tokens.
3
+ */
4
+ declare const BackchannelLogoutConstants: {
5
+ readonly DEFAULT_CLOCK_TOLERANCE_SECONDS: number;
6
+ readonly EVENT: string;
7
+ readonly JWKS_CACHE_TTL_MS: number;
8
+ readonly JWKS_MIN_REFETCH_INTERVAL_MS: number;
9
+ readonly TOKEN_PARAM: string;
10
+ readonly TOKEN_TYPE: string;
11
+ };
12
+ export default BackchannelLogoutConstants;
13
+ //# sourceMappingURL=BackchannelLogoutConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackchannelLogoutConstants.d.ts","sourceRoot":"","sources":["../../src/constants/BackchannelLogoutConstants.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,QAAA,MAAM,0BAA0B,EAAE;IAChC,QAAQ,CAAC,+BAA+B,EAAE,MAAM,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAU7B,CAAC;AAEF,eAAe,0BAA0B,CAAC"}