@cratis/chronicle 2.0.0 → 2.1.1

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 (102) hide show
  1. package/ChronicleClient.ts +69 -60
  2. package/connection/ChronicleConnection.ts +32 -9
  3. package/connection/ChronicleConnectionString.spec.ts +227 -0
  4. package/connection/ChronicleConnectionString.ts +290 -40
  5. package/connection/ChronicleServerAddressResolver.spec.ts +41 -0
  6. package/connection/ChronicleServerAddressResolver.ts +33 -0
  7. package/connection/ChronicleSrvResolutionError.ts +13 -0
  8. package/connection/ChronicleSrvResolver.spec.ts +103 -0
  9. package/connection/ChronicleSrvResolver.ts +57 -0
  10. package/connection/ConnectionLifecycle.spec.ts +109 -0
  11. package/connection/ILoadBalancerStrategy.ts +16 -0
  12. package/connection/KernelKeepAlive.spec.ts +175 -0
  13. package/connection/KernelKeepAlive.ts +161 -0
  14. package/connection/LeastConnectionsLoadBalancerStrategy.spec.ts +159 -0
  15. package/connection/LeastConnectionsLoadBalancerStrategy.ts +117 -0
  16. package/connection/LoadBalancerMode.ts +25 -0
  17. package/connection/LoadBalancerStrategyFactory.ts +28 -0
  18. package/connection/RandomLoadBalancerStrategy.spec.ts +50 -0
  19. package/connection/RandomLoadBalancerStrategy.ts +19 -0
  20. package/connection/RoundRobinLoadBalancerStrategy.spec.ts +61 -0
  21. package/connection/RoundRobinLoadBalancerStrategy.ts +29 -0
  22. package/connection/TokenProvider.spec.ts +159 -0
  23. package/connection/TokenProvider.ts +80 -68
  24. package/connection/fetchOAuthAccessToken.ts +86 -0
  25. package/connection/formatServerAddress.ts +16 -0
  26. package/dist/ChronicleClient.d.ts +8 -1
  27. package/dist/ChronicleClient.d.ts.map +1 -1
  28. package/dist/ChronicleClient.js +63 -56
  29. package/dist/ChronicleClient.js.map +1 -1
  30. package/dist/connection/ChronicleConnection.d.ts +4 -1
  31. package/dist/connection/ChronicleConnection.d.ts.map +1 -1
  32. package/dist/connection/ChronicleConnection.js +29 -9
  33. package/dist/connection/ChronicleConnection.js.map +1 -1
  34. package/dist/connection/ChronicleConnectionString.d.ts +77 -3
  35. package/dist/connection/ChronicleConnectionString.d.ts.map +1 -1
  36. package/dist/connection/ChronicleConnectionString.js +251 -37
  37. package/dist/connection/ChronicleConnectionString.js.map +1 -1
  38. package/dist/connection/ChronicleServerAddressResolver.d.ts +23 -0
  39. package/dist/connection/ChronicleServerAddressResolver.d.ts.map +1 -0
  40. package/dist/connection/ChronicleServerAddressResolver.js +32 -0
  41. package/dist/connection/ChronicleServerAddressResolver.js.map +1 -0
  42. package/dist/connection/ChronicleSrvResolutionError.d.ts +8 -0
  43. package/dist/connection/ChronicleSrvResolutionError.d.ts.map +1 -0
  44. package/dist/connection/ChronicleSrvResolutionError.js +13 -0
  45. package/dist/connection/ChronicleSrvResolutionError.js.map +1 -0
  46. package/dist/connection/ChronicleSrvResolver.d.ts +28 -0
  47. package/dist/connection/ChronicleSrvResolver.d.ts.map +1 -0
  48. package/dist/connection/ChronicleSrvResolver.js +51 -0
  49. package/dist/connection/ChronicleSrvResolver.js.map +1 -0
  50. package/dist/connection/ILoadBalancerStrategy.d.ts +13 -0
  51. package/dist/connection/ILoadBalancerStrategy.d.ts.map +1 -0
  52. package/dist/connection/ILoadBalancerStrategy.js +4 -0
  53. package/dist/connection/ILoadBalancerStrategy.js.map +1 -0
  54. package/dist/connection/KernelKeepAlive.d.ts +73 -0
  55. package/dist/connection/KernelKeepAlive.d.ts.map +1 -0
  56. package/dist/connection/KernelKeepAlive.js +115 -0
  57. package/dist/connection/KernelKeepAlive.js.map +1 -0
  58. package/dist/connection/LeastConnectionsLoadBalancerStrategy.d.ts +30 -0
  59. package/dist/connection/LeastConnectionsLoadBalancerStrategy.d.ts.map +1 -0
  60. package/dist/connection/LeastConnectionsLoadBalancerStrategy.js +95 -0
  61. package/dist/connection/LeastConnectionsLoadBalancerStrategy.js.map +1 -0
  62. package/dist/connection/LoadBalancerMode.d.ts +21 -0
  63. package/dist/connection/LoadBalancerMode.d.ts.map +1 -0
  64. package/dist/connection/LoadBalancerMode.js +24 -0
  65. package/dist/connection/LoadBalancerMode.js.map +1 -0
  66. package/dist/connection/LoadBalancerStrategyFactory.d.ts +11 -0
  67. package/dist/connection/LoadBalancerStrategyFactory.d.ts.map +1 -0
  68. package/dist/connection/LoadBalancerStrategyFactory.js +26 -0
  69. package/dist/connection/LoadBalancerStrategyFactory.js.map +1 -0
  70. package/dist/connection/RandomLoadBalancerStrategy.d.ts +9 -0
  71. package/dist/connection/RandomLoadBalancerStrategy.d.ts.map +1 -0
  72. package/dist/connection/RandomLoadBalancerStrategy.js +15 -0
  73. package/dist/connection/RandomLoadBalancerStrategy.js.map +1 -0
  74. package/dist/connection/RoundRobinLoadBalancerStrategy.d.ts +12 -0
  75. package/dist/connection/RoundRobinLoadBalancerStrategy.d.ts.map +1 -0
  76. package/dist/connection/RoundRobinLoadBalancerStrategy.js +22 -0
  77. package/dist/connection/RoundRobinLoadBalancerStrategy.js.map +1 -0
  78. package/dist/connection/TokenProvider.d.ts +32 -7
  79. package/dist/connection/TokenProvider.d.ts.map +1 -1
  80. package/dist/connection/TokenProvider.js +69 -61
  81. package/dist/connection/TokenProvider.js.map +1 -1
  82. package/dist/connection/fetchOAuthAccessToken.d.ts +18 -0
  83. package/dist/connection/fetchOAuthAccessToken.d.ts.map +1 -0
  84. package/dist/connection/fetchOAuthAccessToken.js +62 -0
  85. package/dist/connection/fetchOAuthAccessToken.js.map +1 -0
  86. package/dist/connection/formatServerAddress.d.ts +10 -0
  87. package/dist/connection/formatServerAddress.d.ts.map +1 -0
  88. package/dist/connection/formatServerAddress.js +14 -0
  89. package/dist/connection/formatServerAddress.js.map +1 -0
  90. package/dist/reactors/Reactors.d.ts +13 -0
  91. package/dist/reactors/Reactors.d.ts.map +1 -1
  92. package/dist/reactors/Reactors.js +42 -4
  93. package/dist/reactors/Reactors.js.map +1 -1
  94. package/dist/reducers/Reducers.d.ts +14 -0
  95. package/dist/reducers/Reducers.d.ts.map +1 -1
  96. package/dist/reducers/Reducers.js +43 -8
  97. package/dist/reducers/Reducers.js.map +1 -1
  98. package/dist/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +8 -5
  100. package/reactors/Reactors.ts +53 -4
  101. package/reducers/Reducers.ts +55 -8
  102. package/vitest.config.ts +12 -0
@@ -1,11 +1,16 @@
1
1
  // Copyright (c) Cratis. All rights reserved.
2
2
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
3
 
4
- import * as http from 'http';
5
- import * as https from 'https';
4
+ import { diag } from '@opentelemetry/api';
5
+ import { fetchOAuthAccessToken, type OAuthTokenResponse } from './fetchOAuthAccessToken';
6
6
 
7
- const TOKEN_EXPIRY_BUFFER_SECONDS = 60;
7
+ // Refresh once the token has less than this long left before it expires.
8
+ const TOKEN_REFRESH_MARGIN_MS = 60_000;
9
+ // Assumed lifetime when the token response carries no usable expires_in.
8
10
  const DEFAULT_TOKEN_EXPIRY_SECONDS = 3600;
11
+ // Minimum pause between failed fetch attempts, so an auth outage does not turn
12
+ // every RPC into a token request.
13
+ const FAILED_FETCH_RETRY_DELAY_MS = 5_000;
9
14
 
10
15
  /**
11
16
  * Interface for providing authentication tokens.
@@ -13,6 +18,10 @@ const DEFAULT_TOKEN_EXPIRY_SECONDS = 3600;
13
18
  export interface ITokenProvider {
14
19
  /**
15
20
  * Gets the current access token.
21
+ *
22
+ * Never rejects — when no token can be obtained the result is undefined, the RPC
23
+ * proceeds without authorization and fails with the server's rejection, which the
24
+ * session machinery recovers from.
16
25
  * @returns Promise resolving to the access token or undefined if not available.
17
26
  */
18
27
  getAccessToken(): Promise<string | undefined>;
@@ -37,27 +46,46 @@ export class NoOpTokenProvider implements ITokenProvider {
37
46
  }
38
47
  }
39
48
 
40
- interface OAuthTokenResponse {
41
- access_token: string;
42
- expires_in: number;
43
- }
44
-
45
49
  /**
46
- * OAuth token provider using client credentials flow.
50
+ * OAuth token provider using the client credentials flow.
51
+ *
52
+ * Owns the access token so it can be attached to every RPC individually instead of
53
+ * being baked into the channel at connect time: the token is fetched lazily on first
54
+ * use, cached, and refreshed once it enters the refresh margin ahead of expiry, so
55
+ * token expiry never invalidates the channel. A failed refresh falls back to the
56
+ * cached token while it is still actually valid — only the refresh margin has been
57
+ * crossed, not the expiry — and further attempts are throttled so an unreachable
58
+ * auth endpoint does not turn every RPC into a fetch attempt.
47
59
  */
48
60
  export class OAuthTokenProvider implements ITokenProvider {
61
+ private readonly _logger = diag.createComponentLogger({
62
+ namespace: '@cratis/chronicle/OAuthTokenProvider'
63
+ });
64
+
49
65
  private _accessToken?: string;
50
- private _tokenExpiry = new Date(0);
66
+ private _expiresAt = 0;
67
+ private _lastFailedFetch?: number;
51
68
  private _refreshPromise?: Promise<string | undefined>;
52
69
 
70
+ /**
71
+ * Creates a new {@link OAuthTokenProvider}.
72
+ * @param tokenEndpoint - The OAuth2 token endpoint to request tokens from.
73
+ * @param clientId - The client identifier.
74
+ * @param clientSecret - The client secret.
75
+ * @param skipTlsValidation - Whether to skip TLS certificate chain validation.
76
+ * @param _fetchToken - Test-only seam replacing the OAuth2 token request.
77
+ */
53
78
  constructor(
54
- private readonly _tokenEndpoint: string,
55
- private readonly _clientId: string,
56
- private readonly _clientSecret: string
79
+ tokenEndpoint: string,
80
+ clientId: string,
81
+ clientSecret: string,
82
+ skipTlsValidation: boolean = true,
83
+ private readonly _fetchToken: () => Promise<OAuthTokenResponse> = () =>
84
+ fetchOAuthAccessToken(tokenEndpoint, clientId, clientSecret, skipTlsValidation)
57
85
  ) {}
58
86
 
59
87
  async getAccessToken(): Promise<string | undefined> {
60
- if (this._accessToken && new Date() < this._tokenExpiry) {
88
+ if (this.hasFreshToken()) {
61
89
  return this._accessToken;
62
90
  }
63
91
 
@@ -65,7 +93,11 @@ export class OAuthTokenProvider implements ITokenProvider {
65
93
  return this._refreshPromise;
66
94
  }
67
95
 
68
- this._refreshPromise = this.fetchAccessToken();
96
+ if (this.isThrottled()) {
97
+ return this.cachedTokenWhileValid();
98
+ }
99
+
100
+ this._refreshPromise = this.fetchAndCacheAccessToken();
69
101
  try {
70
102
  return await this._refreshPromise;
71
103
  } finally {
@@ -75,65 +107,45 @@ export class OAuthTokenProvider implements ITokenProvider {
75
107
 
76
108
  async refresh(): Promise<string | undefined> {
77
109
  this._accessToken = undefined;
78
- this._tokenExpiry = new Date(0);
110
+ this._expiresAt = 0;
111
+ this._lastFailedFetch = undefined;
79
112
  return this.getAccessToken();
80
113
  }
81
114
 
82
- private async fetchAccessToken(): Promise<string | undefined> {
83
- const params = new URLSearchParams();
84
- params.append('grant_type', 'client_credentials');
85
- params.append('client_id', this._clientId);
86
- params.append('client_secret', this._clientSecret);
87
-
88
- const body = params.toString();
89
-
90
- return new Promise((resolve, reject) => {
91
- const url = new URL(this._tokenEndpoint);
92
- const isHttps = url.protocol === 'https:';
93
- const httpModule = isHttps ? https : http;
94
-
95
- const req = httpModule.request(url, {
96
- method: 'POST',
97
- headers: {
98
- 'Content-Type': 'application/x-www-form-urlencoded',
99
- 'Content-Length': Buffer.byteLength(body)
100
- },
101
- // Chronicle generates a self-signed certificate in development, so chain
102
- // validation is skipped, matching the gRPC channel's credentials.
103
- ...(isHttps ? { rejectUnauthorized: false } : {})
104
- }, response => {
105
- let data = '';
106
-
107
- response.on('data', chunk => {
108
- data += chunk;
109
- });
110
-
111
- response.on('end', () => {
112
- if (response.statusCode !== 200) {
113
- reject(new Error(`Token request failed with status ${response.statusCode}: ${data}`));
114
- return;
115
- }
116
-
117
- try {
118
- const tokenResponse = JSON.parse(data) as OAuthTokenResponse;
119
- this._accessToken = tokenResponse.access_token;
120
- const expiresInSeconds = tokenResponse.expires_in || DEFAULT_TOKEN_EXPIRY_SECONDS;
121
- this._tokenExpiry = new Date(Date.now() + (expiresInSeconds - TOKEN_EXPIRY_BUFFER_SECONDS) * 1000);
122
- resolve(this._accessToken);
123
- } catch (error) {
124
- reject(new Error(`Failed to parse token response: ${error instanceof Error ? error.message : String(error)}`));
125
- }
126
- });
127
- });
115
+ private hasFreshToken(): boolean {
116
+ return !!this._accessToken && this._expiresAt - Date.now() > TOKEN_REFRESH_MARGIN_MS;
117
+ }
128
118
 
129
- req.on('error', error => {
130
- reject(new Error(`Token request failed: ${error.message}`));
119
+ private isThrottled(): boolean {
120
+ return this._lastFailedFetch !== undefined && Date.now() - this._lastFailedFetch < FAILED_FETCH_RETRY_DELAY_MS;
121
+ }
122
+
123
+ private cachedTokenWhileValid(): string | undefined {
124
+ return this._accessToken && Date.now() < this._expiresAt ? this._accessToken : undefined;
125
+ }
126
+
127
+ private async fetchAndCacheAccessToken(): Promise<string | undefined> {
128
+ try {
129
+ const response = await this._fetchToken();
130
+ this._accessToken = response.access_token;
131
+ this._expiresAt = Date.now() + this.lifetimeSecondsFrom(response) * 1000;
132
+ this._lastFailedFetch = undefined;
133
+ return this._accessToken;
134
+ } catch (error) {
135
+ this._logger.warn('Failed to fetch OAuth2 token', {
136
+ error: error instanceof Error ? error.message : String(error)
131
137
  });
138
+ this._lastFailedFetch = Date.now();
139
+ return this.cachedTokenWhileValid();
140
+ }
141
+ }
132
142
 
133
- req.write(body);
134
- req.end();
135
- });
143
+ // expires_in is RECOMMENDED but not required by OAuth2, and some servers send it
144
+ // as a string.
145
+ private lifetimeSecondsFrom(response: OAuthTokenResponse): number {
146
+ const seconds = Number(response.expires_in);
147
+ return Number.isFinite(seconds) && seconds > 0 ? seconds : DEFAULT_TOKEN_EXPIRY_SECONDS;
136
148
  }
137
149
  }
138
150
 
139
- export type TokenProvider = ITokenProvider;
151
+ export type TokenProvider = ITokenProvider;
@@ -0,0 +1,86 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import * as http from 'http';
5
+ import * as https from 'https';
6
+
7
+ /**
8
+ * The shape of a successful OAuth2 token response.
9
+ */
10
+ export interface OAuthTokenResponse {
11
+ access_token: string;
12
+
13
+ /** RECOMMENDED but not required by OAuth2, and some servers send it as a string. */
14
+ expires_in?: number | string;
15
+ }
16
+
17
+ /**
18
+ * Requests an access token from an OAuth2 token endpoint using the client credentials flow.
19
+ * @param tokenEndpoint - The token endpoint URL.
20
+ * @param clientId - The client identifier.
21
+ * @param clientSecret - The client secret.
22
+ * @param skipTlsValidation - Whether to skip TLS certificate chain validation.
23
+ * @returns The parsed token response; rejects when the request fails or the response is not a valid token.
24
+ */
25
+ export function fetchOAuthAccessToken(
26
+ tokenEndpoint: string,
27
+ clientId: string,
28
+ clientSecret: string,
29
+ skipTlsValidation: boolean
30
+ ): Promise<OAuthTokenResponse> {
31
+ const params = new URLSearchParams();
32
+ params.append('grant_type', 'client_credentials');
33
+ params.append('client_id', clientId);
34
+ params.append('client_secret', clientSecret);
35
+
36
+ const body = params.toString();
37
+
38
+ return new Promise((resolve, reject) => {
39
+ const url = new URL(tokenEndpoint);
40
+ const isHttps = url.protocol === 'https:';
41
+ const httpModule = isHttps ? https : http;
42
+
43
+ const request = httpModule.request(url, {
44
+ method: 'POST',
45
+ headers: {
46
+ 'Content-Type': 'application/x-www-form-urlencoded',
47
+ 'Content-Length': Buffer.byteLength(body)
48
+ },
49
+ // Chain validation is skipped only when skipTlsValidation is explicitly set,
50
+ // matching the gRPC channel's credentials for the same connection string.
51
+ ...(isHttps && skipTlsValidation ? { rejectUnauthorized: false } : {})
52
+ }, response => {
53
+ let data = '';
54
+
55
+ response.on('data', chunk => {
56
+ data += chunk;
57
+ });
58
+
59
+ response.on('end', () => {
60
+ if (response.statusCode !== 200) {
61
+ reject(new Error(`Token request failed with status ${response.statusCode}: ${data}`));
62
+ return;
63
+ }
64
+
65
+ try {
66
+ const tokenResponse = JSON.parse(data) as OAuthTokenResponse;
67
+ if (!tokenResponse.access_token) {
68
+ reject(new Error('Token response did not contain an access_token'));
69
+ return;
70
+ }
71
+
72
+ resolve(tokenResponse);
73
+ } catch (error) {
74
+ reject(new Error(`Failed to parse token response: ${error instanceof Error ? error.message : String(error)}`));
75
+ }
76
+ });
77
+ });
78
+
79
+ request.on('error', error => {
80
+ reject(new Error(`Token request failed: ${error.message}`));
81
+ });
82
+
83
+ request.write(body);
84
+ request.end();
85
+ });
86
+ }
@@ -0,0 +1,16 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+
4
+ import type { ChronicleServerAddress } from './ChronicleConnectionString';
5
+
6
+ /**
7
+ * Formats a {@link ChronicleServerAddress} as a `host:port` string, wrapping IPv6 host
8
+ * literals in bracket notation (e.g. `[::1]:35000`) as required by both the connection
9
+ * string grammar and gRPC target grammar.
10
+ * @param address - The address to format.
11
+ * @returns The formatted `host:port` string.
12
+ */
13
+ export function formatServerAddress(address: ChronicleServerAddress): string {
14
+ const host = address.host.includes(':') ? `[${address.host}]` : address.host;
15
+ return `${host}:${address.port}`;
16
+ }
@@ -19,6 +19,7 @@ import { IEventStore } from './IEventStore';
19
19
  export declare class ChronicleClient implements IChronicleClient {
20
20
  readonly options: ChronicleOptions;
21
21
  private static readonly _healthCheckIntervalMs;
22
+ private static readonly _maxBackoffMs;
22
23
  private readonly _connection;
23
24
  private readonly _stores;
24
25
  private readonly _lifecycle;
@@ -29,6 +30,7 @@ export declare class ChronicleClient implements IChronicleClient {
29
30
  private _discoveryOperation?;
30
31
  private _isDisposed;
31
32
  private _keepAliveAbortController?;
33
+ private _healthCheckInFlight;
32
34
  /**
33
35
  * Creates a new {@link ChronicleClient} using the provided options.
34
36
  * @param options - The options to configure the client, including the connection string.
@@ -43,13 +45,18 @@ export declare class ChronicleClient implements IChronicleClient {
43
45
  private connectWithRetry;
44
46
  private ensureConnected;
45
47
  private reconnect;
48
+ /**
49
+ * Waits out the exponential backoff for a failed attempt and reports why.
50
+ * The delay is jittered so a fleet of clients that lost the same kernel does
51
+ * not come back in lockstep and knock it over again.
52
+ */
53
+ private backOff;
46
54
  private withReconnect;
47
55
  private shouldReconnect;
48
56
  private toErrorMessage;
49
57
  private startConnectionWatchdog;
50
58
  private runHealthCheck;
51
59
  private startKernelKeepAlive;
52
- private runKeepAliveLoop;
53
60
  private registerArtifactsForStore;
54
61
  }
55
62
  //# sourceMappingURL=ChronicleClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChronicleClient.d.ts","sourceRoot":"","sources":["../ChronicleClient.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAItD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAsBxC,QAAQ,CAAC,OAAO,EAAE,gBAAgB;IArB9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAEtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IAExD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAErB;IAEH,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,iBAAiB,CAAC,CAAgB;IAC1C,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAC5C,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,yBAAyB,CAAC,CAAkB;IAEpD;;;OAGG;gBACkB,OAAO,EAAE,gBAAgB;IAgD9C,kBAAkB;IACZ,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0DtH,kBAAkB;IACZ,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA0BjD,kBAAkB;IAClB,OAAO,IAAI,IAAI;YAsBD,gBAAgB;YA8ChB,eAAe;YAkBf,SAAS;YAgDT,aAAa;IAa3B,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,uBAAuB;YAQjB,cAAc;YAad,oBAAoB;YAuBpB,gBAAgB;YAuBhB,yBAAyB;CAmB1C"}
1
+ {"version":3,"file":"ChronicleClient.d.ts","sourceRoot":"","sources":["../ChronicleClient.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IAwBxC,QAAQ,CAAC,OAAO,EAAE,gBAAgB;IAvB9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAU;IAE/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IAExD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAErB;IAEH,OAAO,CAAC,eAAe,CAAC,CAAiC;IACzD,OAAO,CAAC,iBAAiB,CAAC,CAAgB;IAC1C,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAC5C,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,yBAAyB,CAAC,CAAkB;IACpD,OAAO,CAAC,oBAAoB,CAAS;IAErC;;;OAGG;gBACkB,OAAO,EAAE,gBAAgB;IAgD9C,kBAAkB;IACZ,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IA0DtH,kBAAkB;IACZ,cAAc,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA0BjD,kBAAkB;IAClB,OAAO,IAAI,IAAI;YAsBD,gBAAgB;YA0ChB,eAAe;YAkBf,SAAS;IA0CvB;;;;OAIG;YACW,OAAO;YAcP,aAAa;IAa3B,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,uBAAuB;YAQjB,cAAc;YAkBd,oBAAoB;YAqCpB,yBAAyB;CAmB1C"}
@@ -1,9 +1,11 @@
1
1
  // Copyright (c) Cratis. All rights reserved.
2
2
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ import * as os from 'os';
3
4
  import { diag } from '@opentelemetry/api';
4
5
  import { SpanStatusCode } from '@opentelemetry/api';
5
6
  import { ChronicleConnection } from './connection';
6
7
  import { ConnectionLifecycle } from './connection/ConnectionLifecycle';
8
+ import { KernelKeepAlive } from './connection/KernelKeepAlive';
7
9
  import { EventStore } from './EventStore';
8
10
  import { EventStoreName } from './EventStoreName';
9
11
  import { EventStoreNamespaceName } from './EventStoreNamespaceName';
@@ -26,6 +28,7 @@ import { TypeDiscoverer } from './types';
26
28
  export class ChronicleClient {
27
29
  options;
28
30
  static _healthCheckIntervalMs = 5000;
31
+ static _maxBackoffMs = 30_000;
29
32
  _connection;
30
33
  _stores = new Map();
31
34
  _lifecycle = new ConnectionLifecycle();
@@ -38,6 +41,7 @@ export class ChronicleClient {
38
41
  _discoveryOperation;
39
42
  _isDisposed = false;
40
43
  _keepAliveAbortController;
44
+ _healthCheckInFlight = false;
41
45
  /**
42
46
  * Creates a new {@link ChronicleClient} using the provided options.
43
47
  * @param options - The options to configure the client, including the connection string.
@@ -188,15 +192,16 @@ export class ChronicleClient {
188
192
  let attempt = 0;
189
193
  while (!this._isDisposed) {
190
194
  try {
191
- if (attempt > 0) {
192
- // Recreate the gRPC channel so we start from IDLE. A failed
193
- // probe can leave the channel in TRANSIENT_FAILURE, which gRPC
194
- // won't recover without a fresh channel. The contracts connect()
195
- // is also bypassed here it uses watchConnectivityState and
196
- // rejects as soon as the state changes to CONNECTING (not READY),
197
- // making it unreliable for initial connection establishment.
198
- this._connection.resetChannel();
199
- }
195
+ // Resolve (DNS SRV, when applicable) and select (load balancer strategy) a
196
+ // server address and rebuild the gRPC channel from scratch on every attempt,
197
+ // including the first not just once at startup — so membership and load
198
+ // changes are always picked up. This also guarantees a fresh IDLE channel: a
199
+ // failed probe can leave a channel in TRANSIENT_FAILURE, which gRPC won't
200
+ // recover from without a new channel. The contracts connect() is bypassed
201
+ // here it uses watchConnectivityState and rejects as soon as the state
202
+ // changes to CONNECTING (not READY), making it unreliable for initial
203
+ // connection establishment.
204
+ await this._connection.resetChannel();
200
205
  this._logger.debug('Connecting to Chronicle kernel', { attempt: attempt + 1 });
201
206
  // Probe with a real RPC call. gRPC connects lazily on the first call,
202
207
  // so this effectively waits until the channel reaches READY or fails.
@@ -212,13 +217,8 @@ export class ChronicleClient {
212
217
  }
213
218
  catch (error) {
214
219
  attempt++;
215
- const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 30_000);
216
- this._logger.warn('Connection attempt failed, retrying', {
217
- attempt,
218
- delayMs,
219
- error: this.toErrorMessage(error)
220
- });
221
- await new Promise(resolve => setTimeout(resolve, delayMs));
220
+ const delayMs = await this.backOff(attempt, 'Connection attempt failed, retrying', error);
221
+ this._logger.verbose('Backed off before next connection attempt', { attempt, delayMs });
222
222
  }
223
223
  }
224
224
  throw new Error('ChronicleClient was disposed during connection attempt.');
@@ -254,7 +254,7 @@ export class ChronicleClient {
254
254
  let attempt = 0;
255
255
  while (!this._isDisposed) {
256
256
  try {
257
- this._connection.resetChannel();
257
+ await this._connection.resetChannel();
258
258
  await this._connection.server.getVersionInfo({}, { signal: AbortSignal.timeout(10_000) });
259
259
  this._logger.info('Reconnected to Chronicle kernel', { attempt: attempt + 1 });
260
260
  await this.startKernelKeepAlive();
@@ -267,13 +267,7 @@ export class ChronicleClient {
267
267
  }
268
268
  catch (reconnectError) {
269
269
  attempt++;
270
- const delayMs = Math.min(1000 * Math.pow(2, attempt - 1), 30_000);
271
- this._logger.warn('Reconnect attempt failed, retrying', {
272
- attempt,
273
- delayMs,
274
- error: this.toErrorMessage(reconnectError)
275
- });
276
- await new Promise(resolve => setTimeout(resolve, delayMs));
270
+ await this.backOff(attempt, 'Reconnect attempt failed, retrying', reconnectError);
277
271
  }
278
272
  }
279
273
  })().finally(() => {
@@ -282,6 +276,22 @@ export class ChronicleClient {
282
276
  }
283
277
  await this._reconnectOperation;
284
278
  }
279
+ /**
280
+ * Waits out the exponential backoff for a failed attempt and reports why.
281
+ * The delay is jittered so a fleet of clients that lost the same kernel does
282
+ * not come back in lockstep and knock it over again.
283
+ */
284
+ async backOff(attempt, message, error) {
285
+ const ceiling = Math.min(1000 * Math.pow(2, attempt - 1), ChronicleClient._maxBackoffMs);
286
+ const delayMs = Math.round(ceiling / 2 + Math.random() * (ceiling / 2));
287
+ this._logger.warn(message, {
288
+ attempt,
289
+ delayMs,
290
+ error: this.toErrorMessage(error)
291
+ });
292
+ await new Promise(resolve => setTimeout(resolve, delayMs));
293
+ return delayMs;
294
+ }
285
295
  async withReconnect(operation, action) {
286
296
  try {
287
297
  return await action();
@@ -327,54 +337,51 @@ export class ChronicleClient {
327
337
  this._watchdogHandle.unref?.();
328
338
  }
329
339
  async runHealthCheck() {
330
- if (this._isDisposed || !this._lifecycle.isConnected) {
340
+ // A black-holed connection makes the probe itself hang, so without the
341
+ // in-flight guard every tick would stack another one that never returns.
342
+ if (this._isDisposed || !this._lifecycle.isConnected || this._healthCheckInFlight) {
331
343
  return;
332
344
  }
345
+ this._healthCheckInFlight = true;
333
346
  try {
334
- await this._connection.server.getVersionInfo({});
347
+ await this._connection.server.getVersionInfo({}, { signal: AbortSignal.timeout(10_000) });
335
348
  this._logger.verbose('Connection health check passed');
336
349
  }
337
350
  catch (error) {
338
351
  await this.reconnect('watchdog-health-check', error);
339
352
  }
353
+ finally {
354
+ this._healthCheckInFlight = false;
355
+ }
340
356
  }
341
357
  async startKernelKeepAlive() {
342
358
  this._keepAliveAbortController?.abort();
343
359
  this._keepAliveAbortController = new AbortController();
344
360
  const { signal } = this._keepAliveAbortController;
345
- const keepAliveStream = this._connection.connections.connect({ ConnectionId: this._lifecycle.connectionId, ClientVersion: '1.0.0', IsRunningWithDebugger: false }, { signal });
346
- const iterator = keepAliveStream[Symbol.asyncIterator]();
347
- const firstResult = await iterator.next();
348
- if (firstResult.done) {
349
- throw new Error('Connection service stream ended before sending first keep-alive');
350
- }
351
- await this._connection.connections.connectionKeepAlive(firstResult.value);
361
+ // Losing the keep-alive means the kernel has stopped counting us as
362
+ // connected, so observers are already being torn down server-side.
363
+ // Reconnecting is the only way back — without this the client sits on a
364
+ // dead session, appends keep working, and reactors never fire again.
365
+ const keepAlive = new KernelKeepAlive(this._connection.connections, (reason, error) => {
366
+ if (this._isDisposed || signal.aborted) {
367
+ return;
368
+ }
369
+ void this.reconnect(reason, error);
370
+ });
371
+ await keepAlive.start({
372
+ ConnectionId: this._lifecycle.connectionId,
373
+ // TODO: Not derived from this package's own version anywhere yet; kept as
374
+ // the pre-existing hardcoded placeholder until such a mechanism exists.
375
+ ClientVersion: '1.0.0',
376
+ IsRunningWithDebugger: false,
377
+ ProcessId: process.pid,
378
+ ProcessPath: process.execPath,
379
+ MachineName: os.hostname(),
380
+ ClientType: 'TypeScript'
381
+ }, signal);
352
382
  this._logger.info('Client registered with kernel keep-alive mechanism', {
353
383
  connectionId: this._lifecycle.connectionId
354
384
  });
355
- void this.runKeepAliveLoop(iterator, signal);
356
- }
357
- async runKeepAliveLoop(iterator, signal) {
358
- try {
359
- while (!signal.aborted) {
360
- const result = await iterator.next();
361
- if (result.done) {
362
- this._logger.info('Keep-alive stream ended');
363
- break;
364
- }
365
- await this._connection.connections.connectionKeepAlive(result.value);
366
- this._logger.verbose('Keep-alive ping responded', {
367
- connectionId: this._lifecycle.connectionId
368
- });
369
- }
370
- }
371
- catch (err) {
372
- if (!signal.aborted) {
373
- this._logger.warn('Keep-alive loop ended with error', {
374
- error: this.toErrorMessage(err)
375
- });
376
- }
377
- }
378
385
  }
379
386
  async registerArtifactsForStore(store, reason) {
380
387
  this._logger.debug('Registering artifacts for event store', {
@@ -1 +1 @@
1
- {"version":3,"file":"ChronicleClient.js","sourceRoot":"","sources":["../ChronicleClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChronicleClient.js","sourceRoot":"","sources":["../ChronicleClient.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,10 @@ export declare class ChronicleConnection implements ChronicleServices {
49
49
  private _connections;
50
50
  private readonly _connectionString;
51
51
  private readonly _tokenProvider;
52
+ private readonly _addressResolver;
53
+ private readonly _loadBalancerStrategy;
52
54
  private _isConnected;
55
+ private _clientsReady;
53
56
  constructor(_options: ChronicleConnectionOptions);
54
57
  get connectionString(): ChronicleConnectionString;
55
58
  get isConnected(): boolean;
@@ -75,7 +78,7 @@ export declare class ChronicleConnection implements ChronicleServices {
75
78
  get compliance(): import("../compliance/ComplianceContracts").ComplianceClient<{}>;
76
79
  get connections(): ConnectionServiceClient;
77
80
  connect(): Promise<void>;
78
- resetChannel(): void;
81
+ resetChannel(): Promise<void>;
79
82
  reconnect(): Promise<void>;
80
83
  disconnect(): void;
81
84
  dispose(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../../connection/ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,kBAAkB,EAAkB,MAAM,eAAe,CAAC;AACjF,OAAO,EAoBH,KAAK,uBAAuB,EAC/B,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAAsB,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAC;IAEtD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAEjC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IAQ7C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAPrC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,YAAY,CAAS;gBAEA,QAAQ,EAAE,0BAA0B;IAejE,IAAI,gBAAgB,IAAI,yBAAyB,CAEhD;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,gEAEd;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,eAAe,oEAElB;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,cAAc,mEAEjB;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,WAAW,gEAEd;IAED,IAAI,SAAS,8DAEZ;IAED,IAAI,uBAAuB,qFAE1B;IAED,IAAI,gBAAgB,qEAEnB;IAED,IAAI,QAAQ,6DAEX;IAED,IAAI,QAAQ,6DAEX;IAED,IAAI,WAAW,gEAEd;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,sBAAsB,2EAEzB;IAED,IAAI,IAAI,yDAEP;IAED,IAAI,QAAQ,6DAEX;IAED,IAAI,YAAY,iEAEf;IAED,IAAI,MAAM,2DAET;IAED,IAAI,UAAU,qEAEb;IAED,IAAI,WAAW,IAAI,uBAAuB,CAEzC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,YAAY,IAAI,IAAI;IAWd,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC,UAAU,IAAI,IAAI;IAKlB,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,aAAa;IA0CrB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,oBAAoB;CAoB/B"}
1
+ {"version":3,"file":"ChronicleConnection.d.ts","sourceRoot":"","sources":["../../connection/ChronicleConnection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,kBAAkB,EAAkB,MAAM,eAAe,CAAC;AACjF,OAAO,EAoBH,KAAK,uBAAuB,EAC/B,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAAsB,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAMxD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,yBAAyB,CAAC;IAEtD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAEjC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IAW7C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAVrC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiC;IAClE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAwB;IAC9D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAgB;gBAER,QAAQ,EAAE,0BAA0B;IAuBjE,IAAI,gBAAgB,IAAI,yBAAyB,CAEhD;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,gEAEd;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,eAAe,oEAElB;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,cAAc,mEAEjB;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,WAAW,gEAEd;IAED,IAAI,SAAS,8DAEZ;IAED,IAAI,uBAAuB,qFAE1B;IAED,IAAI,gBAAgB,qEAEnB;IAED,IAAI,QAAQ,6DAEX;IAED,IAAI,QAAQ,6DAEX;IAED,IAAI,WAAW,gEAEd;IAED,IAAI,UAAU,+DAEb;IAED,IAAI,sBAAsB,2EAEzB;IAED,IAAI,IAAI,yDAEP;IAED,IAAI,QAAQ,6DAEX;IAED,IAAI,YAAY,iEAEf;IAED,IAAI,MAAM,2DAET;IAED,IAAI,UAAU,qEAEb;IAED,IAAI,WAAW,IAAI,uBAAuB,CAEzC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC,UAAU,IAAI,IAAI;IAKlB,OAAO,IAAI,IAAI;YAID,aAAa;IA+C3B,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,oBAAoB;CAoB/B"}