@wireapp/api-client 27.90.1-beta.14.8cd9a3525 → 27.90.1-beta.17.457c85ad6

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.
@@ -33,6 +33,7 @@ export declare class ReconnectingWebsocket {
33
33
  */
34
34
  private readonly stopBackFromSleepHandler?;
35
35
  private isPingingEnabled;
36
+ private readonly pendingHealthChecks;
36
37
  constructor(onReconnect: () => Promise<string>, options?: {
37
38
  pingInterval?: number;
38
39
  });
@@ -47,6 +48,11 @@ export declare class ReconnectingWebsocket {
47
48
  connect(): void;
48
49
  send(message: any): void;
49
50
  getState(): WEBSOCKET_STATE;
51
+ /**
52
+ * Lightweight health probe that sends a single ping and resolves with whether a pong was received in time.
53
+ * Does not close or reconnect the socket; callers can decide how to react to failures.
54
+ */
55
+ checkHealth(timeoutMs?: number): Promise<boolean>;
50
56
  disconnect(reason?: string): void;
51
57
  /**
52
58
  * Cleans up all active intervals and timers to prevent memory leaks.
@@ -58,6 +64,7 @@ export declare class ReconnectingWebsocket {
58
64
  */
59
65
  private cleanup;
60
66
  private getReconnectingWebsocket;
67
+ private resolvePendingHealthChecks;
61
68
  setOnOpen(onOpen: (event: Event) => void): void;
62
69
  setOnMessage(onMessage: (data: string) => void): void;
63
70
  setOnError(onError: (error: ErrorEvent) => void): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ReconnectingWebsocket.d.ts","sourceRoot":"","sources":["../../src/tcp/ReconnectingWebsocket.ts"],"names":[],"mappings":"AAoBA,OAAY,EAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAU,MAAM,wBAAwB,CAAC;AAQnF,oBAAY,cAAc;IACxB,cAAc,OAAO;IACrB,UAAU,OAAO;IACjB,cAAc,OAAO;IACrB,gBAAgB,OAAO;CACxB;AAED,oBAAY,eAAe;IACzB,UAAU,IAAI;IACd,IAAI,IAAI;IACR,OAAO,IAAI;IACX,MAAM,IAAI;CACX;AAED,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,qBAAa,qBAAqB;IA6B9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IA5B9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAQ1C;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,MAAM,CAAC,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;IACnE,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,MAAM,CAAC,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAC,CAAyB;IAC3C,OAAO,CAAC,OAAO,CAAC,CAA8B;IAC9C,OAAO,CAAC,OAAO,CAAC,CAA8B;IAC9C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAa;IAEvD,OAAO,CAAC,gBAAgB,CAAQ;gBAGb,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EACnD,OAAO,GAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB;IA6BR,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAEF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAahC;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAQ7B;IAEF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAQlC;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAM9B;IAEF,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAWvB;IAEK,OAAO,IAAI,IAAI;IAQf,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAIxB,QAAQ,IAAI,eAAe;IAI3B,UAAU,CAAC,MAAM,SAAqB,GAAG,IAAI;IASpD;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,wBAAwB;IAIzB,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI/C,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrD,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAItD,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAItD,cAAc,IAAI,IAAI;CAI9B"}
1
+ {"version":3,"file":"ReconnectingWebsocket.d.ts","sourceRoot":"","sources":["../../src/tcp/ReconnectingWebsocket.ts"],"names":[],"mappings":"AAoBA,OAAY,EAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAU,MAAM,wBAAwB,CAAC;AAQnF,oBAAY,cAAc;IACxB,cAAc,OAAO;IACrB,UAAU,OAAO;IACjB,cAAc,OAAO;IACrB,gBAAgB,OAAO;CACxB;AAED,oBAAY,eAAe;IACzB,UAAU,IAAI;IACd,IAAI,IAAI;IACR,OAAO,IAAI;IACX,MAAM,IAAI;CACX;AAED,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,IAAI,SAAS;CACd;AAED,qBAAa,qBAAqB;IA8B9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IA7B9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAQ1C;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,MAAM,CAAC,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;IACnE,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,MAAM,CAAC,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAC,CAAyB;IAC3C,OAAO,CAAC,OAAO,CAAC,CAA8B;IAC9C,OAAO,CAAC,OAAO,CAAC,CAA8B;IAC9C;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAa;IAEvD,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA2C;gBAG5D,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EACnD,OAAO,GAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB;IA+BR,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAEF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAchC;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAQ7B;IAEF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAQlC;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAO9B;IAEF,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAgBvB;IAEK,OAAO,IAAI,IAAI;IAQf,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAIxB,QAAQ,IAAI,eAAe;IAIlC;;;OAGG;IACI,WAAW,CAAC,SAAS,SAAmC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB3E,UAAU,CAAC,MAAM,SAAqB,GAAG,IAAI;IASpD;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,0BAA0B;IAK3B,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI/C,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrD,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAItD,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAItD,cAAc,IAAI,IAAI;CAI9B"}
@@ -95,6 +95,7 @@ class ReconnectingWebsocket {
95
95
  */
96
96
  stopBackFromSleepHandler;
97
97
  isPingingEnabled = true;
98
+ pendingHealthChecks = new Set();
98
99
  constructor(onReconnect, options = {}) {
99
100
  this.onReconnect = onReconnect;
100
101
  this.logger = commons_1.LogFactory.getLogger('@wireapp/api-client/tcp/ReconnectingWebsocket');
@@ -113,12 +114,14 @@ class ReconnectingWebsocket {
113
114
  * **/
114
115
  this.stopBackFromSleepHandler = (0, BackFromSleepHandler_1.onBackFromSleep)({
115
116
  callback: () => {
116
- if (this.socket) {
117
- this.logger.debug('Back from sleep, reconnecting WebSocket');
118
- this.socket?.reconnect();
117
+ if (!this.socket) {
118
+ this.logger.debug('WebSocket instance does not exist, skipping reconnect after sleep');
119
+ return;
119
120
  }
121
+ this.logger.debug('Back from sleep, reconnecting WebSocket');
122
+ // Force reconnect even if the browser keeps the socket in OPEN state after sleep.
123
+ this.socket.reconnect();
120
124
  },
121
- isDisconnected: () => this.getState() === WEBSOCKET_STATE.CLOSED,
122
125
  });
123
126
  }
124
127
  internalOnError = (error) => {
@@ -133,6 +136,7 @@ class ReconnectingWebsocket {
133
136
  if (data === PingMessage.PONG) {
134
137
  this.logger.debug('Received pong from WebSocket');
135
138
  this.hasUnansweredPing = false;
139
+ this.resolvePendingHealthChecks(true);
136
140
  return;
137
141
  }
138
142
  this.onMessage?.(data);
@@ -158,6 +162,7 @@ class ReconnectingWebsocket {
158
162
  internalOnClose = (event) => {
159
163
  this.logger.debug(`WebSocket closed with code: ${event?.code}${event?.reason ? `Reason: ${event?.reason}` : ''}`);
160
164
  this.stopPinging();
165
+ this.resolvePendingHealthChecks(false);
161
166
  if (this.onClose) {
162
167
  this.onClose(event);
163
168
  }
@@ -173,16 +178,20 @@ class ReconnectingWebsocket {
173
178
  }
174
179
  }
175
180
  sendPing = () => {
176
- if (this.socket) {
177
- if (this.hasUnansweredPing) {
178
- this.logger.warn('Ping interval check failed');
179
- this.stopPinging();
180
- this.socket.reconnect();
181
- return;
182
- }
183
- this.hasUnansweredPing = true;
184
- this.send(PingMessage.PING);
181
+ if (!this.socket) {
182
+ this.logger.debug('WebSocket instance does not exist, skipping ping');
183
+ return;
184
+ }
185
+ if (this.hasUnansweredPing) {
186
+ this.logger.warn('Ping interval check failed');
187
+ this.stopPinging();
188
+ // Closing here intentionally triggers reconnecting-websocket's retry loop; it will call
189
+ // internalOnReconnect to build a fresh URL and re-open the socket.
190
+ this.socket.close(CloseEventCode.NORMAL_CLOSURE, 'Ping timeout');
191
+ return;
185
192
  }
193
+ this.hasUnansweredPing = true;
194
+ this.send(PingMessage.PING);
186
195
  };
187
196
  connect() {
188
197
  this.socket = this.getReconnectingWebsocket();
@@ -197,6 +206,27 @@ class ReconnectingWebsocket {
197
206
  getState() {
198
207
  return this.socket ? this.socket.readyState : WEBSOCKET_STATE.CLOSED;
199
208
  }
209
+ /**
210
+ * Lightweight health probe that sends a single ping and resolves with whether a pong was received in time.
211
+ * Does not close or reconnect the socket; callers can decide how to react to failures.
212
+ */
213
+ checkHealth(timeoutMs = commons_1.TimeUtil.TimeInMillis.SECOND * 5) {
214
+ if (!this.socket || this.getState() !== WEBSOCKET_STATE.OPEN) {
215
+ return Promise.resolve(false);
216
+ }
217
+ return new Promise(resolve => {
218
+ const timeoutId = setTimeout(() => {
219
+ this.pendingHealthChecks.delete(resolveHealthCheck);
220
+ resolve(false);
221
+ }, timeoutMs);
222
+ const resolveHealthCheck = (isHealthy) => {
223
+ clearTimeout(timeoutId);
224
+ resolve(isHealthy);
225
+ };
226
+ this.pendingHealthChecks.add(resolveHealthCheck);
227
+ this.send(PingMessage.PING);
228
+ });
229
+ }
200
230
  disconnect(reason = 'Closed by client') {
201
231
  if (this.socket) {
202
232
  this.logger.info(`Disconnecting from WebSocket (reason: "${reason}")`);
@@ -221,6 +251,10 @@ class ReconnectingWebsocket {
221
251
  getReconnectingWebsocket() {
222
252
  return new reconnecting_websocket_1.default(this.internalOnReconnect, undefined, ReconnectingWebsocket.RECONNECTING_OPTIONS);
223
253
  }
254
+ resolvePendingHealthChecks(isHealthy) {
255
+ this.pendingHealthChecks.forEach(resolve => resolve(isHealthy));
256
+ this.pendingHealthChecks.clear();
257
+ }
224
258
  setOnOpen(onOpen) {
225
259
  this.onOpen = onOpen;
226
260
  }
@@ -74,6 +74,14 @@ export declare class WebSocketClient extends EventEmitter {
74
74
  acknowledgeMissedNotification(): void;
75
75
  acknowledgeConsumableNotificationSynchronization(notification: ConsumableNotificationSynchronization): void;
76
76
  acknowledgeNotification(notification: ConsumableNotificationEvent): void;
77
+ /**
78
+ * Performs a lightweight health check on the WebSocket connection.
79
+ * Sends a ping and waits for a pong response without closing or reconnecting the socket.
80
+ * The default timeout is 5 seconds; this may be configurable depending on the socket implementation.
81
+ * This method does not disrupt the existing connection.
82
+ * @returns A promise that resolves to true if a pong is received within the timeout, false otherwise.
83
+ */
84
+ checkHealth(): Promise<boolean>;
77
85
  }
78
86
  export {};
79
87
  //# sourceMappingURL=WebSocketClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebSocketClient.d.ts","sourceRoot":"","sources":["../../src/tcp/WebSocketClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebSocketClient.d.ts","sourceRoot":"","sources":["../../src/tcp/WebSocketClient.ts"],"names":[],"mappings":"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"}
@@ -257,5 +257,15 @@ class WebSocketClient extends events_1.EventEmitter {
257
257
  });
258
258
  this.socket.send(jsonEvent);
259
259
  }
260
+ /**
261
+ * Performs a lightweight health check on the WebSocket connection.
262
+ * Sends a ping and waits for a pong response without closing or reconnecting the socket.
263
+ * The default timeout is 5 seconds; this may be configurable depending on the socket implementation.
264
+ * This method does not disrupt the existing connection.
265
+ * @returns A promise that resolves to true if a pong is received within the timeout, false otherwise.
266
+ */
267
+ checkHealth() {
268
+ return this.socket.checkHealth();
269
+ }
260
270
  }
261
271
  exports.WebSocketClient = WebSocketClient;
package/package.json CHANGED
@@ -70,6 +70,6 @@
70
70
  "watch": "webpack serve --config webpack.browser.js",
71
71
  "prepare": "yarn dist"
72
72
  },
73
- "version": "27.90.1-beta.14.8cd9a3525",
74
- "gitHead": "8cd9a35250b6cf17f0ee286b5e9fdab641004426"
73
+ "version": "27.90.1-beta.17.457c85ad6",
74
+ "gitHead": "457c85ad6738d1f5ac746bdc1a7bdfb2cc9f9ad7"
75
75
  }