@wireapp/api-client 27.90.0 → 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.
- package/lib/APIClient.js +1 -1
- package/lib/tcp/ReconnectingWebsocket.d.ts +7 -0
- package/lib/tcp/ReconnectingWebsocket.d.ts.map +1 -1
- package/lib/tcp/ReconnectingWebsocket.js +47 -13
- package/lib/tcp/WebSocketClient.d.ts +8 -0
- package/lib/tcp/WebSocketClient.d.ts.map +1 -1
- package/lib/tcp/WebSocketClient.js +10 -0
- package/package.json +2 -2
package/lib/APIClient.js
CHANGED
|
@@ -106,7 +106,7 @@ class APIClient extends events_1.EventEmitter {
|
|
|
106
106
|
this.api = this.configureApis(this.backendFeatures);
|
|
107
107
|
}
|
|
108
108
|
configureApis(backendFeatures) {
|
|
109
|
-
this.logger.info('configuring APIs with config', backendFeatures);
|
|
109
|
+
this.logger.info('configuring APIs with config:', backendFeatures);
|
|
110
110
|
const assetAPI = new asset_1.AssetAPI(this.transport.http);
|
|
111
111
|
// Prevents the CellsAPI from being initialized multiple times
|
|
112
112
|
if (!this.cellsApi) {
|
|
@@ -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;
|
|
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('
|
|
118
|
-
|
|
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
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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.
|
|
74
|
-
"gitHead": "
|
|
73
|
+
"version": "27.90.1-beta.17.457c85ad6",
|
|
74
|
+
"gitHead": "457c85ad6738d1f5ac746bdc1a7bdfb2cc9f9ad7"
|
|
75
75
|
}
|