testplane 8.31.7 → 8.32.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 (53) hide show
  1. package/build/package.json +2 -1
  2. package/build/src/browser/cdp/connection.d.ts +52 -0
  3. package/build/src/browser/cdp/connection.js +413 -0
  4. package/build/src/browser/cdp/connection.js.map +1 -0
  5. package/build/src/browser/cdp/constants.d.ts +16 -0
  6. package/build/src/browser/cdp/constants.js +20 -0
  7. package/build/src/browser/cdp/constants.js.map +1 -0
  8. package/build/src/browser/cdp/debug.d.ts +2 -0
  9. package/build/src/browser/cdp/debug.js +9 -0
  10. package/build/src/browser/cdp/debug.js.map +1 -0
  11. package/build/src/browser/cdp/emitter.d.ts +7 -0
  12. package/build/src/browser/cdp/emitter.js +48 -0
  13. package/build/src/browser/cdp/emitter.js.map +1 -0
  14. package/build/src/browser/cdp/error.d.ts +23 -0
  15. package/build/src/browser/cdp/error.js +41 -0
  16. package/build/src/browser/cdp/error.js.map +1 -0
  17. package/build/src/browser/cdp/index.d.ts +13 -0
  18. package/build/src/browser/cdp/index.js +37 -0
  19. package/build/src/browser/cdp/index.js.map +1 -0
  20. package/build/src/browser/cdp/profiler.d.ts +60 -0
  21. package/build/src/browser/cdp/profiler.js +42 -0
  22. package/build/src/browser/cdp/profiler.js.map +1 -0
  23. package/build/src/browser/cdp/target.d.ts +75 -0
  24. package/build/src/browser/cdp/target.js +51 -0
  25. package/build/src/browser/cdp/target.js.map +1 -0
  26. package/build/src/browser/cdp/types.d.ts +124 -0
  27. package/build/src/browser/cdp/types.js +3 -0
  28. package/build/src/browser/cdp/types.js.map +1 -0
  29. package/build/src/browser/cdp/utils.d.ts +7 -0
  30. package/build/src/browser/cdp/utils.js +23 -0
  31. package/build/src/browser/cdp/utils.js.map +1 -0
  32. package/build/src/browser/cdp/ws-endpoint.d.ts +2 -0
  33. package/build/src/browser/cdp/ws-endpoint.js +70 -0
  34. package/build/src/browser/cdp/ws-endpoint.js.map +1 -0
  35. package/build/src/browser/commands/assert-view/index.js +7 -0
  36. package/build/src/browser/commands/assert-view/index.js.map +1 -1
  37. package/build/src/browser/commands/index.js +1 -0
  38. package/build/src/browser/commands/index.js.map +1 -1
  39. package/build/src/browser/commands/waitForStaticToLoad.d.ts +13 -0
  40. package/build/src/browser/commands/waitForStaticToLoad.js +169 -0
  41. package/build/src/browser/commands/waitForStaticToLoad.js.map +1 -0
  42. package/build/src/browser/existing-browser.d.ts +4 -0
  43. package/build/src/browser/existing-browser.js +53 -11
  44. package/build/src/browser/existing-browser.js.map +1 -1
  45. package/build/src/browser/types.d.ts +5 -0
  46. package/build/src/browser/types.js.map +1 -1
  47. package/build/src/config/defaults.d.ts +1 -0
  48. package/build/src/config/defaults.js +1 -0
  49. package/build/src/config/defaults.js.map +1 -1
  50. package/build/src/config/types.d.ts +16 -0
  51. package/build/src/config/types.js.map +1 -1
  52. package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
  53. package/package.json +2 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testplane",
3
- "version": "8.31.7",
3
+ "version": "8.32.1",
4
4
  "description": "Tests framework based on mocha and wdio",
5
5
  "main": "build/src/index.js",
6
6
  "files": [
@@ -114,6 +114,7 @@
114
114
  "vite": "5.1.6",
115
115
  "wait-port": "1.1.0",
116
116
  "worker-farm": "1.7.0",
117
+ "ws": "8.18.3",
117
118
  "yallist": "3.1.1"
118
119
  },
119
120
  "devDependencies": {
@@ -0,0 +1,52 @@
1
+ import type { CDPEvent, CDPRequest } from "./types";
2
+ import type { Browser } from "../types";
3
+ type OnEventMessageFn = (cdpEventMessage: CDPEvent) => unknown;
4
+ export declare class CDPConnection {
5
+ onEventMessage: OnEventMessageFn | null;
6
+ private readonly _cdpWsEndpoint;
7
+ private readonly _headers?;
8
+ private _onPong;
9
+ private _pingInterval;
10
+ private _pingSubsequentFails;
11
+ private _onConnectionCloseFn;
12
+ private _wsConnectionStatus;
13
+ private _wsConnection;
14
+ private _wsConnectionPromise;
15
+ private _requestId;
16
+ private _pendingRequests;
17
+ private constructor();
18
+ /** @description Creates CDPConnection without establishing it */
19
+ static create(browser: Browser): Promise<CDPConnection>;
20
+ /** @description Tries to establish ws connection with timeout */
21
+ private _tryToEstablishWsConnection;
22
+ /**
23
+ * @description creates ws connection with retries or returns existing one
24
+ * @note Concurrent requests with same params produce same ws connection
25
+ */
26
+ private _getWsConnection;
27
+ /** @description Handles websocket incoming messages, resolving pending requests */
28
+ private _onMessage;
29
+ /**
30
+ * @description Produces connection-"uniq" request ids
31
+ * @note Theoretically, it can collide, but given "CDP_MAX_REQUEST_ID" is INT32_MAX, it wont
32
+ */
33
+ private _getRequestId;
34
+ /** @description establishes ws connection, sends request with timeout and waits for response */
35
+ private _tryToSendRequest;
36
+ /** @description Performs high-level CDP request with retries and timeouts */
37
+ request<T>(method: CDPRequest["method"], { params, sessionId }?: Omit<CDPRequest, "id" | "method">): Promise<T>;
38
+ private _closeWsConnection;
39
+ /**
40
+ * @description Tries to re-establish connection after network drops
41
+ * @note Silently gives up after failed "CDP_CONNECTION_RETRIES" attempts
42
+ */
43
+ private _tryToReconnect;
44
+ /** @description Used to abort all pending requests when connection is closed */
45
+ private _abortPendingRequests;
46
+ /** @description Closes websocket connection, terminating all pending requests */
47
+ close(): void;
48
+ private _pingHealthCheckStop;
49
+ private _isWebSocketActive;
50
+ private _pingHealthCheckStart;
51
+ }
52
+ export {};
@@ -0,0 +1,413 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDPConnection = void 0;
4
+ const ws_1 = require("ws");
5
+ const debug_1 = require("./debug");
6
+ const ws_endpoint_1 = require("./ws-endpoint");
7
+ const utils_1 = require("./utils");
8
+ const error_1 = require("./error");
9
+ const constants_1 = require("./constants");
10
+ var WsConnectionStatus;
11
+ (function (WsConnectionStatus) {
12
+ WsConnectionStatus[WsConnectionStatus["DISCONNECTED"] = 0] = "DISCONNECTED";
13
+ WsConnectionStatus[WsConnectionStatus["CONNECTING"] = 1] = "CONNECTING";
14
+ WsConnectionStatus[WsConnectionStatus["CONNECTED"] = 2] = "CONNECTED";
15
+ WsConnectionStatus[WsConnectionStatus["CLOSED"] = 3] = "CLOSED";
16
+ })(WsConnectionStatus || (WsConnectionStatus = {}));
17
+ class CDPConnection {
18
+ constructor(cdpWsEndpoint, headers) {
19
+ this.onEventMessage = null;
20
+ this._onPong = null;
21
+ this._pingInterval = null;
22
+ this._pingSubsequentFails = 0;
23
+ this._onConnectionCloseFn = null; // Defined, if there is connection attempt at the moment
24
+ this._wsConnectionStatus = WsConnectionStatus.DISCONNECTED;
25
+ this._wsConnection = null;
26
+ this._wsConnectionPromise = null;
27
+ this._requestId = 0;
28
+ this._pendingRequests = {};
29
+ this._cdpWsEndpoint = cdpWsEndpoint;
30
+ this._headers = headers;
31
+ }
32
+ /** @description Creates CDPConnection without establishing it */
33
+ static async create(browser) {
34
+ const sessionId = browser.publicAPI.sessionId;
35
+ const cdpWsEndpoint = await (0, ws_endpoint_1.getWsEndpoint)(browser);
36
+ const headers = browser.publicAPI.options.headers;
37
+ if (!cdpWsEndpoint) {
38
+ throw new error_1.CDPError({ message: `Couldn't determine CDP endpoint for session ${sessionId}` });
39
+ }
40
+ return new this(cdpWsEndpoint, headers);
41
+ }
42
+ /** @description Tries to establish ws connection with timeout */
43
+ async _tryToEstablishWsConnection(endpoint) {
44
+ return new Promise(resolve => {
45
+ try {
46
+ const onConnectionCloseFn = () => done(new error_1.CDPConnectionTerminatedError());
47
+ if (this._wsConnectionStatus === WsConnectionStatus.CLOSED) {
48
+ onConnectionCloseFn();
49
+ }
50
+ else {
51
+ this._onConnectionCloseFn = onConnectionCloseFn;
52
+ }
53
+ // eslint-disable-next-line
54
+ const cdpConnectionInstance = this;
55
+ const ws = new ws_1.WebSocket(endpoint, { headers: this._headers });
56
+ let isSettled = false;
57
+ const timeoutId = setTimeout(() => {
58
+ ws.close();
59
+ done(new error_1.CDPTimeoutError({
60
+ message: `Couldn't establish CDP connection to "${endpoint}" in ${constants_1.CDP_CONNECTION_TIMEOUT}ms`,
61
+ }));
62
+ }, constants_1.CDP_CONNECTION_TIMEOUT).unref();
63
+ const onOpen = () => {
64
+ done(ws);
65
+ };
66
+ const onError = (error) => {
67
+ ws.close();
68
+ done(new error_1.CDPError({
69
+ message: `Couldn't establish CDP connection to "${endpoint}": ${error}`,
70
+ }));
71
+ };
72
+ const onClose = () => {
73
+ done(new error_1.CDPError({
74
+ message: `CDP connection to "${endpoint}" unexpectedly closed while establishing`,
75
+ }));
76
+ };
77
+ ws.on("open", onOpen);
78
+ ws.on("error", onError);
79
+ ws.on("close", onClose);
80
+ // eslint-disable-next-line no-inner-declarations
81
+ function done(result) {
82
+ if (isSettled) {
83
+ return;
84
+ }
85
+ cdpConnectionInstance._onConnectionCloseFn = null;
86
+ isSettled = true;
87
+ clearTimeout(timeoutId);
88
+ ws.off("open", onOpen);
89
+ ws.off("error", onError);
90
+ ws.off("close", onClose);
91
+ resolve(result);
92
+ }
93
+ }
94
+ catch (err) {
95
+ resolve(err);
96
+ }
97
+ });
98
+ }
99
+ /**
100
+ * @description creates ws connection with retries or returns existing one
101
+ * @note Concurrent requests with same params produce same ws connection
102
+ */
103
+ async _getWsConnection() {
104
+ const ws = this._wsConnection;
105
+ if (this._wsConnectionStatus === WsConnectionStatus.CLOSED) {
106
+ throw new error_1.CDPConnectionTerminatedError({ message: `Session to ${this._cdpWsEndpoint} was closed` });
107
+ }
108
+ if (this._wsConnectionStatus === WsConnectionStatus.CONNECTING && this._wsConnectionPromise) {
109
+ return this._wsConnectionPromise;
110
+ }
111
+ if (this._wsConnectionStatus === WsConnectionStatus.CONNECTED && ws && ws.readyState === ws.OPEN) {
112
+ return ws;
113
+ }
114
+ if (this._wsConnectionStatus === WsConnectionStatus.CONNECTED && ws && ws.readyState !== ws.OPEN) {
115
+ this._closeWsConnection("CDP connection was in invalid state", WsConnectionStatus.DISCONNECTED);
116
+ }
117
+ this._wsConnectionStatus = WsConnectionStatus.CONNECTING;
118
+ this._wsConnectionPromise = (async () => {
119
+ try {
120
+ for (let retriesLeft = constants_1.CDP_CONNECTION_RETRIES; retriesLeft >= 0; retriesLeft--) {
121
+ const result = await this._tryToEstablishWsConnection(this._cdpWsEndpoint);
122
+ if (this._wsConnectionStatus === WsConnectionStatus.CLOSED) {
123
+ if (result instanceof ws_1.WebSocket) {
124
+ result.close();
125
+ }
126
+ throw new error_1.CDPConnectionTerminatedError();
127
+ }
128
+ if (result instanceof ws_1.WebSocket) {
129
+ (0, debug_1.debugCdp)(`Established CDP connection to ${this._cdpWsEndpoint}`);
130
+ this._wsConnection = result;
131
+ this._wsConnectionStatus = WsConnectionStatus.CONNECTED;
132
+ this._pingHealthCheckStart();
133
+ const onPing = () => result.pong();
134
+ const _onMessage = (data) => this._onMessage(data);
135
+ const onError = (err) => {
136
+ if (result === this._wsConnection) {
137
+ this._closeWsConnection(`An error occured in CDP connection: ${err}`, WsConnectionStatus.DISCONNECTED);
138
+ this._tryToReconnect();
139
+ }
140
+ };
141
+ result.on("ping", onPing);
142
+ result.on("message", _onMessage);
143
+ result.on("error", onError);
144
+ result.once("close", () => {
145
+ result.off("ping", onPing);
146
+ result.off("message", _onMessage);
147
+ result.off("error", onError);
148
+ if (result === this._wsConnection) {
149
+ this._closeWsConnection("CDP connection was closed unexpectedly", WsConnectionStatus.DISCONNECTED);
150
+ this._tryToReconnect();
151
+ }
152
+ });
153
+ return result;
154
+ }
155
+ if (!(result instanceof error_1.CDPError) || result instanceof error_1.CDPConnectionTerminatedError) {
156
+ throw result;
157
+ }
158
+ (0, debug_1.debugCdp)(`${result.message}; retries left: ${retriesLeft}`);
159
+ // Intentionally avoiding wait after timeout
160
+ if (result instanceof error_1.CDPError && !(result instanceof error_1.CDPTimeoutError)) {
161
+ await (0, utils_1.exponentiallyWait)({
162
+ baseDelay: constants_1.CDP_CONNECTION_RETRY_BASE_DELAY,
163
+ attempt: constants_1.CDP_CONNECTION_RETRIES - retriesLeft,
164
+ });
165
+ }
166
+ }
167
+ throw new error_1.CDPError({
168
+ message: `Couldn't establish CDP connection to ${this._cdpWsEndpoint} in ${constants_1.CDP_CONNECTION_RETRIES} retries`,
169
+ });
170
+ }
171
+ catch (err) {
172
+ if (this._wsConnectionStatus === WsConnectionStatus.CONNECTING) {
173
+ this._wsConnectionStatus = WsConnectionStatus.DISCONNECTED;
174
+ this._wsConnectionPromise = null;
175
+ }
176
+ throw err;
177
+ }
178
+ finally {
179
+ if (this._wsConnectionStatus !== WsConnectionStatus.CONNECTING) {
180
+ this._wsConnectionPromise = null;
181
+ }
182
+ }
183
+ })();
184
+ return this._wsConnectionPromise;
185
+ }
186
+ /** @description Handles websocket incoming messages, resolving pending requests */
187
+ _onMessage(data) {
188
+ const message = data.toString("utf8");
189
+ (0, debug_1.debugCdp)(`< ${message}`);
190
+ try {
191
+ const jsonParsedMessage = JSON.parse(message);
192
+ if (!("id" in jsonParsedMessage)) {
193
+ if (this.onEventMessage) {
194
+ this.onEventMessage(jsonParsedMessage);
195
+ }
196
+ return;
197
+ }
198
+ const requestId = jsonParsedMessage.id;
199
+ if (!this._pendingRequests[requestId]) {
200
+ (0, debug_1.debugCdp)(`Received response to request ${requestId}, which is probably timed out already`);
201
+ return;
202
+ }
203
+ if ("result" in jsonParsedMessage) {
204
+ this._pendingRequests[requestId](jsonParsedMessage.result);
205
+ }
206
+ else if ("error" in jsonParsedMessage) {
207
+ this._pendingRequests[requestId](new error_1.CDPError({
208
+ message: jsonParsedMessage.error.message,
209
+ code: jsonParsedMessage.error.code,
210
+ requestId: requestId,
211
+ }));
212
+ }
213
+ else {
214
+ this._pendingRequests[requestId](new error_1.CDPError({
215
+ message: "Received malformed response without result",
216
+ code: constants_1.CDP_ERROR_CODE.MALFORMED_RESPONSE,
217
+ requestId: requestId,
218
+ }));
219
+ }
220
+ }
221
+ catch (err) {
222
+ (0, debug_1.debugCdp)(`Couldn't process CDP message.\n\tError: ${err}\n\tMessage: "${message}"`);
223
+ const requestId = (0, utils_1.extractRequestIdFromBrokenResponse)(message);
224
+ if (requestId && this._pendingRequests[requestId]) {
225
+ this._pendingRequests[requestId](new error_1.CDPError({
226
+ message: "Received malformed response: response is invalid JSON",
227
+ code: constants_1.CDP_ERROR_CODE.MALFORMED_RESPONSE,
228
+ requestId: requestId,
229
+ }));
230
+ }
231
+ }
232
+ }
233
+ /**
234
+ * @description Produces connection-"uniq" request ids
235
+ * @note Theoretically, it can collide, but given "CDP_MAX_REQUEST_ID" is INT32_MAX, it wont
236
+ */
237
+ _getRequestId() {
238
+ const id = ++this._requestId;
239
+ if (this._requestId >= constants_1.CDP_MAX_REQUEST_ID) {
240
+ this._requestId = 0;
241
+ }
242
+ return id;
243
+ }
244
+ /** @description establishes ws connection, sends request with timeout and waits for response */
245
+ async _tryToSendRequest(method, { params, sessionId }) {
246
+ const id = this._getRequestId();
247
+ const ws = await this._getWsConnection();
248
+ const requestMessage = JSON.stringify({ id, sessionId, method, params });
249
+ if (this._wsConnectionStatus === WsConnectionStatus.CLOSED) {
250
+ throw new error_1.CDPConnectionTerminatedError({
251
+ message: `Couldn't send "${requestMessage}" because CDP connection was manually closed`,
252
+ });
253
+ }
254
+ (0, debug_1.debugCdp)(`> ${requestMessage}`);
255
+ return new Promise(resolve => {
256
+ const pendingRequests = this._pendingRequests;
257
+ let isSettled = false;
258
+ const onTimeout = setTimeout(() => {
259
+ const err = new error_1.CDPTimeoutError({
260
+ message: `Timed out while waiting for ${method} for ${constants_1.CDP_REQUEST_TIMEOUT}ms`,
261
+ requestId: id,
262
+ });
263
+ done(err);
264
+ }, constants_1.CDP_REQUEST_TIMEOUT).unref();
265
+ function done(response) {
266
+ if (isSettled) {
267
+ return;
268
+ }
269
+ isSettled = true;
270
+ delete pendingRequests[id];
271
+ clearTimeout(onTimeout);
272
+ resolve(response);
273
+ }
274
+ pendingRequests[id] = done;
275
+ ws.send(requestMessage, error => {
276
+ if (!error) {
277
+ return;
278
+ }
279
+ done(new error_1.CDPError({
280
+ message: `Couldn't send CDP request "${method}": ${error.message}`,
281
+ code: constants_1.CDP_ERROR_CODE.SEND_FAILED,
282
+ requestId: id,
283
+ }));
284
+ // Proactively closing connection as "send error" is marker that something bad with connection happened
285
+ if (ws === this._wsConnection) {
286
+ this._closeWsConnection("CDP connection was considered broken as 'send' failed", WsConnectionStatus.DISCONNECTED);
287
+ this._tryToReconnect();
288
+ }
289
+ });
290
+ });
291
+ }
292
+ /** @description Performs high-level CDP request with retries and timeouts */
293
+ async request(method, { params, sessionId } = {}) {
294
+ let result;
295
+ for (let retriesLeft = constants_1.CDP_REQUEST_RETRIES; retriesLeft >= 0; retriesLeft--) {
296
+ result = (await this._tryToSendRequest(method, { params, sessionId }));
297
+ const noRetriesLeft = retriesLeft <= 0;
298
+ const connectionIsClosed = this._wsConnectionStatus === WsConnectionStatus.CLOSED;
299
+ if (!(result instanceof error_1.CDPError) || result.isNonRetryable() || noRetriesLeft || connectionIsClosed) {
300
+ break;
301
+ }
302
+ (0, debug_1.debugCdp)(`${result.message}; retries left: ${retriesLeft}`);
303
+ // Intentionally avoiding wait after timeout
304
+ if (result instanceof error_1.CDPError && !(result instanceof error_1.CDPTimeoutError)) {
305
+ await (0, utils_1.exponentiallyWait)({
306
+ baseDelay: constants_1.CDP_REQUEST_RETRY_BASE_DELAY,
307
+ attempt: constants_1.CDP_REQUEST_RETRIES - retriesLeft,
308
+ });
309
+ }
310
+ }
311
+ if (result instanceof Error) {
312
+ throw result;
313
+ }
314
+ return result;
315
+ }
316
+ _closeWsConnection(sessionAbortMessage, status) {
317
+ const ws = this._wsConnection;
318
+ if (!ws || this._wsConnectionStatus === WsConnectionStatus.CLOSED) {
319
+ this._wsConnection = null;
320
+ return;
321
+ }
322
+ (0, debug_1.debugCdp)(`${sessionAbortMessage}; endpoint: "${this._cdpWsEndpoint}"`);
323
+ if (status === WsConnectionStatus.CLOSED && this._onConnectionCloseFn) {
324
+ this._onConnectionCloseFn();
325
+ }
326
+ this._wsConnection = null;
327
+ this._wsConnectionStatus = status;
328
+ this._abortPendingRequests(`Request was aborted because ${sessionAbortMessage}`);
329
+ this._pingHealthCheckStop();
330
+ ws.close();
331
+ }
332
+ /**
333
+ * @description Tries to re-establish connection after network drops
334
+ * @note Silently gives up after failed "CDP_CONNECTION_RETRIES" attempts
335
+ */
336
+ _tryToReconnect() {
337
+ (0, debug_1.debugCdp)(`Trying to reconnect; endpoint: "${this._cdpWsEndpoint}"`);
338
+ this._getWsConnection()
339
+ .then(() => (0, debug_1.debugCdp)(`Successfully reconnected to session; endpoint: "${this._cdpWsEndpoint}"`))
340
+ .catch(() => (0, debug_1.debugCdp)(`Couldn't reconnect to session automatically; endpoint: "${this._cdpWsEndpoint}"`));
341
+ }
342
+ /** @description Used to abort all pending requests when connection is closed */
343
+ _abortPendingRequests(message) {
344
+ const pendingRequests = this._pendingRequests;
345
+ const pendingRequestIds = Object.keys(pendingRequests).map(Number);
346
+ this._pendingRequests = {};
347
+ for (const requestId of pendingRequestIds) {
348
+ if (pendingRequests[requestId]) {
349
+ pendingRequests[requestId](new error_1.CDPConnectionTerminatedError({
350
+ message,
351
+ requestId,
352
+ }));
353
+ }
354
+ }
355
+ }
356
+ /** @description Closes websocket connection, terminating all pending requests */
357
+ close() {
358
+ this._closeWsConnection("Connection was closed manually", WsConnectionStatus.CLOSED);
359
+ }
360
+ _pingHealthCheckStop() {
361
+ this._pingSubsequentFails = 0;
362
+ if (this._pingInterval) {
363
+ clearInterval(this._pingInterval);
364
+ }
365
+ if (this._wsConnection && this._onPong) {
366
+ this._wsConnection.off("pong", this._onPong);
367
+ }
368
+ }
369
+ _isWebSocketActive(ws) {
370
+ return Boolean(ws.readyState !== ws.CLOSED && ws.readyState !== ws.CLOSING && ws === this._wsConnection);
371
+ }
372
+ _pingHealthCheckStart() {
373
+ this._pingHealthCheckStop();
374
+ const ws = this._wsConnection;
375
+ if (!ws || !this._isWebSocketActive(ws)) {
376
+ return;
377
+ }
378
+ this._pingHealthCheckStop();
379
+ let isWaitingForPong = false;
380
+ let pongTimeout;
381
+ const onPong = (this._onPong = () => {
382
+ if (isWaitingForPong && this._isWebSocketActive(ws)) {
383
+ isWaitingForPong = false;
384
+ (0, debug_1.debugCdp)("< PONG");
385
+ clearTimeout(pongTimeout);
386
+ this._pingSubsequentFails = 0;
387
+ }
388
+ });
389
+ ws.on("pong", onPong);
390
+ const pingInterval = (this._pingInterval = setInterval(() => {
391
+ if (!this._isWebSocketActive(ws)) {
392
+ clearInterval(pingInterval);
393
+ return;
394
+ }
395
+ pongTimeout = setTimeout(() => {
396
+ if (isWaitingForPong && this._isWebSocketActive(ws)) {
397
+ isWaitingForPong = false;
398
+ this._pingSubsequentFails++;
399
+ (0, debug_1.debugCdp)(`Ping failed(${this._pingSubsequentFails} in a row) in ${constants_1.CDP_PING_TIMEOUT}ms`);
400
+ if (this._pingSubsequentFails >= constants_1.CDP_PING_MAX_SUBSEQUENT_FAILS) {
401
+ this._closeWsConnection(`CDP connection was considered broken as ${this._pingSubsequentFails} pings failed in a row`, WsConnectionStatus.DISCONNECTED);
402
+ this._tryToReconnect();
403
+ }
404
+ }
405
+ }, constants_1.CDP_PING_TIMEOUT).unref();
406
+ ws.ping();
407
+ (0, debug_1.debugCdp)("> PING");
408
+ isWaitingForPong = true;
409
+ }, constants_1.CDP_PING_INTERVAL).unref());
410
+ }
411
+ }
412
+ exports.CDPConnection = CDPConnection;
413
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../../src/browser/cdp/connection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare const CDP_CONNECTION_TIMEOUT = 15000;
2
+ export declare const CDP_CONNECTION_RETRIES = 3;
3
+ export declare const CDP_CONNECTION_RETRY_BASE_DELAY = 500;
4
+ export declare const CDP_REQUEST_TIMEOUT = 15000;
5
+ export declare const CDP_REQUEST_RETRIES = 3;
6
+ export declare const CDP_REQUEST_RETRY_BASE_DELAY = 500;
7
+ export declare const CDP_MAX_REQUEST_ID = 2147483647;
8
+ export declare const CDP_PING_INTERVAL = 15000;
9
+ export declare const CDP_PING_TIMEOUT = 10000;
10
+ export declare const CDP_PING_MAX_SUBSEQUENT_FAILS = 2;
11
+ export declare const CDP_ERROR_CODE: {
12
+ readonly MALFORMED_RESPONSE: -32810;
13
+ readonly SEND_FAILED: -32820;
14
+ readonly TIMEOUT: -32830;
15
+ readonly CONNECTION_TERMINATED: -32840;
16
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDP_ERROR_CODE = exports.CDP_PING_MAX_SUBSEQUENT_FAILS = exports.CDP_PING_TIMEOUT = exports.CDP_PING_INTERVAL = exports.CDP_MAX_REQUEST_ID = exports.CDP_REQUEST_RETRY_BASE_DELAY = exports.CDP_REQUEST_RETRIES = exports.CDP_REQUEST_TIMEOUT = exports.CDP_CONNECTION_RETRY_BASE_DELAY = exports.CDP_CONNECTION_RETRIES = exports.CDP_CONNECTION_TIMEOUT = void 0;
4
+ exports.CDP_CONNECTION_TIMEOUT = 15000; // 15 sec
5
+ exports.CDP_CONNECTION_RETRIES = 3;
6
+ exports.CDP_CONNECTION_RETRY_BASE_DELAY = 500;
7
+ exports.CDP_REQUEST_TIMEOUT = 15000; // 15 sec
8
+ exports.CDP_REQUEST_RETRIES = 3;
9
+ exports.CDP_REQUEST_RETRY_BASE_DELAY = 500;
10
+ exports.CDP_MAX_REQUEST_ID = 2147483647; // INT32_MAX
11
+ exports.CDP_PING_INTERVAL = 15000; // 15 sec
12
+ exports.CDP_PING_TIMEOUT = 10000; // 10 sec
13
+ exports.CDP_PING_MAX_SUBSEQUENT_FAILS = 2;
14
+ exports.CDP_ERROR_CODE = {
15
+ MALFORMED_RESPONSE: -32810, // Custom error code
16
+ SEND_FAILED: -32820, // Custom error code
17
+ TIMEOUT: -32830, // Custom error code
18
+ CONNECTION_TERMINATED: -32840, // Custom error code
19
+ };
20
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/browser/cdp/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG,KAAK,CAAC,CAAC,SAAS;AACzC,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAC3B,QAAA,+BAA+B,GAAG,GAAG,CAAC;AACtC,QAAA,mBAAmB,GAAG,KAAK,CAAC,CAAC,SAAS;AACtC,QAAA,mBAAmB,GAAG,CAAC,CAAC;AACxB,QAAA,4BAA4B,GAAG,GAAG,CAAC;AACnC,QAAA,kBAAkB,GAAG,UAAU,CAAC,CAAC,YAAY;AAC7C,QAAA,iBAAiB,GAAG,KAAK,CAAC,CAAC,SAAS;AACpC,QAAA,gBAAgB,GAAG,KAAK,CAAC,CAAC,SAAS;AACnC,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,cAAc,GAAG;IAC1B,kBAAkB,EAAE,CAAC,KAAK,EAAE,oBAAoB;IAChD,WAAW,EAAE,CAAC,KAAK,EAAE,oBAAoB;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB;IACrC,qBAAqB,EAAE,CAAC,KAAK,EAAE,oBAAoB;CAC7C,CAAC"}
@@ -0,0 +1,2 @@
1
+ import debugModule from "debug";
2
+ export declare const debugCdp: debugModule.Debugger;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.debugCdp = void 0;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ exports.debugCdp = (0, debug_1.default)("testplane:cdp");
9
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../../src/browser/cdp/debug.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAgC;AAEnB,QAAA,QAAQ,GAAG,IAAA,eAAW,EAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from "events";
3
+ export declare class CDPEventEmitter<Events extends {
4
+ [key in keyof Events]: unknown;
5
+ }> extends EventEmitter {
6
+ on<U extends string & keyof Events>(event: U, listener: (params: Events[U]) => void | Promise<void>): this;
7
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.CDPEventEmitter = void 0;
27
+ const logger = __importStar(require("../../utils/logger"));
28
+ const events_1 = require("events");
29
+ class CDPEventEmitter extends events_1.EventEmitter {
30
+ on(event, listener) {
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ const eventListenerWithErrorBoundary = (params) => {
33
+ const logError = (e) => {
34
+ logger.error(`Catched unhandled error in CDP "${event}" handler: ${(e && e.stack) || e}`);
35
+ };
36
+ try {
37
+ const result = listener(params);
38
+ return result instanceof Promise ? result.catch(logError) : result;
39
+ }
40
+ catch (e) {
41
+ logError(e);
42
+ }
43
+ };
44
+ return super.on(event, eventListenerWithErrorBoundary);
45
+ }
46
+ }
47
+ exports.CDPEventEmitter = CDPEventEmitter;
48
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../../src/browser/cdp/emitter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA6C;AAC7C,mCAAsC;AAEtC,MAAa,eAAmE,SAAQ,qBAAY;IAChG,EAAE,CAAkC,KAAQ,EAAE,QAAqD;QAC/F,8DAA8D;QAC9D,MAAM,8BAA8B,GAAG,CAAC,MAAiB,EAAwB,EAAE;YAC/E,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAQ,EAAE;gBAClC,MAAM,CAAC,KAAK,CAAC,mCAAmC,KAAK,cAAc,CAAC,CAAC,IAAK,CAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC,CAAC;YAEF,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAEhC,OAAO,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACvE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;IAC3D,CAAC;CACJ;AAnBD,0CAmBC"}
@@ -0,0 +1,23 @@
1
+ import type { CDPRequestId } from "./types";
2
+ export declare class CDPError extends Error {
3
+ code?: number;
4
+ requestId?: CDPRequestId;
5
+ constructor({ message, code, requestId }: {
6
+ message: string;
7
+ code?: number;
8
+ requestId?: CDPRequestId;
9
+ });
10
+ isNonRetryable(): boolean;
11
+ }
12
+ export declare class CDPTimeoutError extends CDPError {
13
+ constructor({ message, requestId }: {
14
+ message: string;
15
+ requestId?: CDPRequestId;
16
+ });
17
+ }
18
+ export declare class CDPConnectionTerminatedError extends CDPError {
19
+ constructor({ message, requestId, }?: {
20
+ message?: string;
21
+ requestId?: CDPRequestId;
22
+ });
23
+ }