@datadog/datadog-ci-plugin-synthetics 5.12.1 → 5.13.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 (86) hide show
  1. package/dist/bundle.d.ts +2392 -0
  2. package/dist/bundle.js +144530 -0
  3. package/dist/bundle.js.LEGAL.txt +2412 -0
  4. package/dist/bundle.js.map +1 -0
  5. package/dist/commands/deploy-tests.js +2 -125
  6. package/dist/commands/import-tests.js +2 -118
  7. package/dist/commands/run-tests.js +2 -319
  8. package/dist/commands/upload-application.js +2 -138
  9. package/package.json +19 -19
  10. package/dist/api.d.ts +0 -52
  11. package/dist/api.js +0 -333
  12. package/dist/api.js.map +0 -1
  13. package/dist/batch.d.ts +0 -9
  14. package/dist/batch.js +0 -325
  15. package/dist/batch.js.map +0 -1
  16. package/dist/build-and-test.d.ts +0 -25
  17. package/dist/build-and-test.js +0 -196
  18. package/dist/build-and-test.js.map +0 -1
  19. package/dist/commands/deploy-tests.d.ts +0 -19
  20. package/dist/commands/deploy-tests.js.map +0 -1
  21. package/dist/commands/import-tests.d.ts +0 -19
  22. package/dist/commands/import-tests.js.map +0 -1
  23. package/dist/commands/run-tests.d.ts +0 -19
  24. package/dist/commands/run-tests.js.map +0 -1
  25. package/dist/commands/upload-application.d.ts +0 -18
  26. package/dist/commands/upload-application.js.map +0 -1
  27. package/dist/deploy-tests-lib.d.ts +0 -2
  28. package/dist/deploy-tests-lib.js +0 -96
  29. package/dist/deploy-tests-lib.js.map +0 -1
  30. package/dist/errors.d.ts +0 -19
  31. package/dist/errors.js +0 -31
  32. package/dist/errors.js.map +0 -1
  33. package/dist/import-tests-lib.d.ts +0 -2
  34. package/dist/import-tests-lib.js +0 -71
  35. package/dist/import-tests-lib.js.map +0 -1
  36. package/dist/index.d.ts +0 -8
  37. package/dist/index.js +0 -46
  38. package/dist/index.js.map +0 -1
  39. package/dist/interfaces.d.ts +0 -759
  40. package/dist/interfaces.js +0 -27
  41. package/dist/interfaces.js.map +0 -1
  42. package/dist/local-test-definition.d.ts +0 -2
  43. package/dist/local-test-definition.js +0 -16
  44. package/dist/local-test-definition.js.map +0 -1
  45. package/dist/mobile.d.ts +0 -28
  46. package/dist/mobile.js +0 -275
  47. package/dist/mobile.js.map +0 -1
  48. package/dist/multilocator.d.ts +0 -2
  49. package/dist/multilocator.js +0 -88
  50. package/dist/multilocator.js.map +0 -1
  51. package/dist/reporters/constants.d.ts +0 -6
  52. package/dist/reporters/constants.js +0 -14
  53. package/dist/reporters/constants.js.map +0 -1
  54. package/dist/reporters/default.d.ts +0 -33
  55. package/dist/reporters/default.js +0 -461
  56. package/dist/reporters/default.js.map +0 -1
  57. package/dist/reporters/junit.d.ts +0 -100
  58. package/dist/reporters/junit.js +0 -425
  59. package/dist/reporters/junit.js.map +0 -1
  60. package/dist/reporters/mobile/app-upload.d.ts +0 -14
  61. package/dist/reporters/mobile/app-upload.js +0 -54
  62. package/dist/reporters/mobile/app-upload.js.map +0 -1
  63. package/dist/run-tests-lib.d.ts +0 -28
  64. package/dist/run-tests-lib.js +0 -281
  65. package/dist/run-tests-lib.js.map +0 -1
  66. package/dist/test.d.ts +0 -29
  67. package/dist/test.js +0 -200
  68. package/dist/test.js.map +0 -1
  69. package/dist/tunnel/crypto.d.ts +0 -6
  70. package/dist/tunnel/crypto.js +0 -48
  71. package/dist/tunnel/crypto.js.map +0 -1
  72. package/dist/tunnel/index.d.ts +0 -1
  73. package/dist/tunnel/index.js +0 -6
  74. package/dist/tunnel/index.js.map +0 -1
  75. package/dist/tunnel/tunnel.d.ts +0 -49
  76. package/dist/tunnel/tunnel.js +0 -329
  77. package/dist/tunnel/tunnel.js.map +0 -1
  78. package/dist/tunnel/websocket.d.ts +0 -39
  79. package/dist/tunnel/websocket.js +0 -154
  80. package/dist/tunnel/websocket.js.map +0 -1
  81. package/dist/utils/internal.d.ts +0 -58
  82. package/dist/utils/internal.js +0 -317
  83. package/dist/utils/internal.js.map +0 -1
  84. package/dist/utils/public.d.ts +0 -81
  85. package/dist/utils/public.js +0 -524
  86. package/dist/utils/public.js.map +0 -1
@@ -1,49 +0,0 @@
1
- import type { ProxyAgent } from 'proxy-agent';
2
- export interface TunnelInfo {
3
- host: string;
4
- id: string;
5
- privateKey: string;
6
- }
7
- export interface TunnelReporter {
8
- error(message: string): void;
9
- log(message: string): void;
10
- warn(message: string): void;
11
- }
12
- export declare class Tunnel {
13
- private url;
14
- private testIDs;
15
- private reporter?;
16
- private FORWARDING_TIMEOUT;
17
- private sshConfig;
18
- private privateKey;
19
- private publicKey;
20
- /** Used to catch SIGINT only once. */
21
- private started;
22
- /** Used to log "Successfully connected" only once. */
23
- private connected;
24
- private ws;
25
- private multiplexer?;
26
- private forwardedSockets;
27
- constructor(url: string, testIDs: string[], proxyAgent?: ProxyAgent, reporter?: TunnelReporter | undefined);
28
- /**
29
- * keepAlive will return a promise that tracks the state of the tunnel (and reject in case of error)
30
- */
31
- keepAlive(): Promise<void>;
32
- /**
33
- * start the tunnel:
34
- * - get the pre-signed URL to connect to the tunnel service
35
- * - Set up SSH
36
- * - establish a WebSocket connection to the tunnel service
37
- */
38
- start(): Promise<TunnelInfo>;
39
- /**
40
- * stop the tunnel
41
- */
42
- stop(): Promise<void>;
43
- private authenticateSSHConnection;
44
- private forwardProxiedPacketsFromSSH;
45
- private forwardWebSocketToSSH;
46
- private getConnectionInfo;
47
- private processSSHStream;
48
- private handleSIGINT;
49
- }
@@ -1,329 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Tunnel = void 0;
13
- const crypto_1 = require("crypto");
14
- const net_1 = require("net");
15
- const stream_1 = require("stream");
16
- const ssh2_1 = require("ssh2");
17
- const yamux_js_1 = require("yamux-js");
18
- const crypto_2 = require("./crypto");
19
- const websocket_1 = require("./websocket");
20
- /**
21
- * Use `DEBUG=synthetics:tunnel` to enable debug logs.
22
- */
23
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-call
24
- const debug = require('debug')('synthetics:tunnel');
25
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires -- SW-1310
26
- const SSH_CONSTANTS = require('ssh2/lib/protocol/constants');
27
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires -- SW-1310
28
- const { KexInit } = require('ssh2/lib/protocol/kex');
29
- class Tunnel {
30
- constructor(url, testIDs, proxyAgent, reporter) {
31
- this.url = url;
32
- this.testIDs = testIDs;
33
- this.reporter = reporter;
34
- this.FORWARDING_TIMEOUT = 40000;
35
- /** Used to catch SIGINT only once. */
36
- this.started = false;
37
- /** Used to log "Successfully connected" only once. */
38
- this.connected = false;
39
- this.forwardedSockets = new Set();
40
- this.handleSIGINT = () => {
41
- var _a;
42
- if (this.started) {
43
- // The tunnel is connected, so we stop it gracefully – all tests will be aborted.
44
- (_a = this.reporter) === null || _a === void 0 ? void 0 : _a.log('Closing tunnel and waiting for results... (press Ctrl+C again to force quit)');
45
- void this.stop();
46
- }
47
- else {
48
- // The tunnel was already closed and we received a second Ctrl+C.
49
- // Removing the listener automatically stops the process.
50
- process.removeListener('SIGINT', this.handleSIGINT);
51
- }
52
- };
53
- // Setup SSH
54
- const { privateKey: hostPrivateKey } = (0, crypto_2.generateOpenSSHKeys)();
55
- const parsedHostPrivateKey = (0, crypto_2.parseSSHKey)(hostPrivateKey);
56
- const { publicKey, privateKey } = (0, crypto_2.generateOpenSSHKeys)();
57
- this.publicKey = (0, crypto_2.parseSSHKey)(publicKey);
58
- this.privateKey = privateKey;
59
- this.sshConfig = {
60
- algorithms: {
61
- serverHostKey: [parsedHostPrivateKey.type],
62
- },
63
- // Greatly increase highWaterMark (32kb -> 255kb) to avoid hanging with large requests
64
- highWaterMark: 255 * 1024,
65
- hostKeys: [hostPrivateKey],
66
- };
67
- this.ws = new websocket_1.WebSocket(this.url, proxyAgent);
68
- }
69
- /**
70
- * keepAlive will return a promise that tracks the state of the tunnel (and reject in case of error)
71
- */
72
- keepAlive() {
73
- return __awaiter(this, void 0, void 0, function* () {
74
- if (!this.ws) {
75
- throw new Error('No WebSocket connection');
76
- }
77
- return this.ws.keepAlive();
78
- });
79
- }
80
- /**
81
- * start the tunnel:
82
- * - get the pre-signed URL to connect to the tunnel service
83
- * - Set up SSH
84
- * - establish a WebSocket connection to the tunnel service
85
- */
86
- start() {
87
- var _a, _b, _c;
88
- return __awaiter(this, void 0, void 0, function* () {
89
- this.started = true;
90
- process.addListener('SIGINT', this.handleSIGINT);
91
- (_a = this.reporter) === null || _a === void 0 ? void 0 : _a.log(`Opening tunnel for ${this.testIDs.length} tests…`);
92
- (_b = this.reporter) === null || _b === void 0 ? void 0 : _b.log('Generating encryption key, setting up SSH and opening WebSocket connection…');
93
- try {
94
- // Establish a WebSocket connection to the tunnel service
95
- yield this.ws.connect();
96
- // @todo: in case of reconnect, add tunnel ID to WebSocket URL to re-use the same tunnel (in the tunnel service)
97
- const connectionInfo = yield this.forwardWebSocketToSSH();
98
- return connectionInfo;
99
- }
100
- catch (err) {
101
- (_c = this.reporter) === null || _c === void 0 ? void 0 : _c.error('Tunnel setup failed, cleaning up and exiting…');
102
- yield this.stop(); // Clean up
103
- throw err;
104
- }
105
- });
106
- }
107
- /**
108
- * stop the tunnel
109
- */
110
- stop() {
111
- var _a;
112
- return __awaiter(this, void 0, void 0, function* () {
113
- this.connected = false;
114
- this.forwardedSockets.forEach((socket) => {
115
- if (!!socket) {
116
- socket.destroy();
117
- }
118
- });
119
- yield this.ws.close();
120
- if (this.started) {
121
- (_a = this.reporter) === null || _a === void 0 ? void 0 : _a.log('Tunnel closed.');
122
- this.started = false;
123
- }
124
- });
125
- }
126
- // Authenticate SSH with key authentication - username should be the test ID
127
- authenticateSSHConnection(ctx) {
128
- var _a;
129
- const allowedUsers = this.testIDs.map((testId) => Buffer.from(testId));
130
- // Ensure username is allowed
131
- const user = Buffer.from(ctx.username);
132
- if (!allowedUsers.some((allowedUser) => user.length === allowedUser.length && (0, crypto_1.timingSafeEqual)(user, allowedUser))) {
133
- return ctx.reject();
134
- }
135
- // Only allow key authentication
136
- if (ctx.method !== 'publickey') {
137
- return ctx.reject();
138
- }
139
- const allowedPubSSHKey = Buffer.from(this.publicKey.getPublicSSH());
140
- if (ctx.key.algo !== this.publicKey.type ||
141
- ctx.key.data.length !== allowedPubSSHKey.length ||
142
- !(0, crypto_1.timingSafeEqual)(ctx.key.data, allowedPubSSHKey) ||
143
- (ctx.signature && ctx.blob && !this.publicKey.verify(ctx.blob, ctx.signature))) {
144
- // Invalid key authentication
145
- return ctx.reject();
146
- }
147
- // A connection without a signature is only to check for public key validity
148
- if (!ctx.signature) {
149
- return ctx.accept();
150
- }
151
- // Username is allowed and key authentication was successful
152
- if (!this.connected) {
153
- // Limit to one log per tunnel
154
- this.connected = true;
155
- (_a = this.reporter) === null || _a === void 0 ? void 0 : _a.log('Successfully connected');
156
- }
157
- ctx.accept();
158
- }
159
- forwardProxiedPacketsFromSSH(client) {
160
- client
161
- .on('session', (accept) => {
162
- accept().on('close', () => {
163
- client.end();
164
- });
165
- })
166
- .on('tcpip', (accept, reject, { destIP, destPort }) => {
167
- // Forward packets
168
- // See https://github.com/mscdex/ssh2/issues/479#issuecomment-250416559
169
- let src;
170
- const dest = new net_1.Socket();
171
- dest.setTimeout(this.FORWARDING_TIMEOUT);
172
- this.forwardedSockets.add(dest);
173
- dest.on('timeout', () => {
174
- debug(`Connection timeout (${destIP})`);
175
- if (src) {
176
- src.destroy();
177
- }
178
- else {
179
- reject();
180
- }
181
- this.forwardedSockets.delete(dest);
182
- dest.end();
183
- dest.destroy();
184
- });
185
- dest.on('connect', () => {
186
- src = accept();
187
- if (!src) {
188
- return dest.end();
189
- }
190
- (0, stream_1.pipeline)([dest, src], () => this.forwardedSockets.delete(dest));
191
- (0, stream_1.pipeline)([src, dest], () => this.forwardedSockets.delete(dest));
192
- src.on('close', () => {
193
- dest.end();
194
- dest.destroy();
195
- });
196
- });
197
- dest.on('error', (error) => {
198
- var _a, _b;
199
- if (src) {
200
- if (error.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
201
- debug(`Error on opened connection (${destIP}): ${error.code}`);
202
- }
203
- src.close();
204
- }
205
- else {
206
- if ('code' in error && error.code === 'ENOTFOUND') {
207
- (_a = this.reporter) === null || _a === void 0 ? void 0 : _a.warn(`Unable to resolve host (${destIP})`);
208
- }
209
- else {
210
- (_b = this.reporter) === null || _b === void 0 ? void 0 : _b.warn(`Connection error (${destIP}): ${error.code}`);
211
- }
212
- reject();
213
- this.forwardedSockets.delete(dest);
214
- dest.end();
215
- dest.destroy();
216
- }
217
- });
218
- dest.on('close', () => {
219
- if (src) {
220
- src.close();
221
- }
222
- else {
223
- reject();
224
- }
225
- this.forwardedSockets.delete(dest);
226
- });
227
- dest.connect(destPort, destIP);
228
- })
229
- .on('request', (accept, reject, name, info) => {
230
- if (accept) {
231
- accept();
232
- }
233
- });
234
- }
235
- forwardWebSocketToSSH() {
236
- var _a;
237
- return __awaiter(this, void 0, void 0, function* () {
238
- const connectionInfo = yield this.getConnectionInfo();
239
- (_a = this.reporter) === null || _a === void 0 ? void 0 : _a.log(`Websocket connection to tunnel ${connectionInfo.id} opened, proxy is ready!`);
240
- // Stop any existing multiplexing
241
- if (this.multiplexer) {
242
- this.multiplexer.close();
243
- }
244
- // Set up multiplexing
245
- const multiplexerConfig = {
246
- // Increase maximum backlog size to more easily handle
247
- // running multiple large browser tests in parallel.
248
- acceptBacklog: 2048,
249
- enableKeepAlive: false,
250
- };
251
- this.multiplexer = new yamux_js_1.Server((stream) => {
252
- stream.on('error', (error) => {
253
- debug(`Error in multiplexing: ${error}`);
254
- });
255
- void this.processSSHStream(stream);
256
- }, multiplexerConfig);
257
- // Pipe WebSocket to multiplexing
258
- const duplex = this.ws.duplex();
259
- this.multiplexer.on('error', (error) => {
260
- debug(`Multiplexer error: ${error.message}`);
261
- });
262
- duplex.on('error', (error) => {
263
- debug(`Websocket error: ${error.message}`);
264
- });
265
- (0, stream_1.pipeline)(duplex, this.multiplexer, (err) => {
266
- if (err) {
267
- debug(`Error on duplex connection close: ${err}`);
268
- }
269
- });
270
- (0, stream_1.pipeline)(this.multiplexer, duplex, (err) => {
271
- if (err) {
272
- debug(`Error on Multiplexer connection close: ${err}`);
273
- }
274
- });
275
- return connectionInfo;
276
- });
277
- }
278
- getConnectionInfo() {
279
- return __awaiter(this, void 0, void 0, function* () {
280
- const rawConnectionInfo = yield this.ws.waitForFirstMessage();
281
- try {
282
- const connectionInfo = Object.assign({ privateKey: this.privateKey }, JSON.parse(rawConnectionInfo.toString()));
283
- return connectionInfo;
284
- }
285
- catch (_a) {
286
- throw new Error(`Unexpected response from tunnel service: ${rawConnectionInfo.toString()}\n`);
287
- }
288
- });
289
- }
290
- processSSHStream(stream) {
291
- return __awaiter(this, void 0, void 0, function* () {
292
- // Process SSH stream - see https://github.com/mscdex/ssh2/blob/v0.8.x/lib/server.js#L24
293
- const serverConfig = Object.assign(Object.assign({}, this.sshConfig), { keepaliveInterval: 0 });
294
- ssh2_1.Server.KEEPALIVE_CLIENT_INTERVAL = 0;
295
- const server = new ssh2_1.Server(serverConfig, () => {
296
- // 'connection' event listener is required otherwise connection wont proceed.
297
- });
298
- const { ident } = this.sshConfig;
299
- const hostKeys = { 'ecdsa-sha2-nistp256': (0, crypto_2.parseSSHKey)(this.sshConfig.hostKeys[0]) };
300
- const encryptionConfig = {
301
- cipher: SSH_CONSTANTS.DEFAULT_CIPHER,
302
- compress: SSH_CONSTANTS.DEFAULT_COMPRESSION,
303
- lang: [],
304
- mac: SSH_CONSTANTS.DEFAULT_MAC,
305
- };
306
- const algorithms = {
307
- cs: encryptionConfig,
308
- kex: SSH_CONSTANTS.DEFAULT_KEX,
309
- sc: encryptionConfig,
310
- serverHostKey: ['ecdsa-sha2-nistp256'],
311
- };
312
- const offer = new KexInit(algorithms);
313
- const clientConfig = Object.assign(Object.assign({}, this.sshConfig), { keepaliveInterval: 0 });
314
- // SW-1310: Typing does not include IncomingClient
315
- const client = new ssh2_1.Server.IncomingClient(stream, hostKeys, ident, offer, undefined, server, clientConfig);
316
- client
317
- .on('authentication', (ctx) => this.authenticateSSHConnection(ctx))
318
- .on('ready', () => this.forwardProxiedPacketsFromSSH(client))
319
- .on('close', () => {
320
- server.close();
321
- })
322
- .on('error', (err) => {
323
- debug(`SSH error in proxy: ${err.message}`);
324
- });
325
- });
326
- }
327
- }
328
- exports.Tunnel = Tunnel;
329
- //# sourceMappingURL=tunnel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/tunnel/tunnel.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { EventEmitter } from 'events';
4
- import type { ProxyAgent } from 'proxy-agent';
5
- import { default as WebSocketModule } from 'ws';
6
- export declare class WebSocket extends EventEmitter {
7
- private url;
8
- private proxyAgent;
9
- private firstMessage?;
10
- private keepAliveWebsocket?;
11
- private websocket?;
12
- constructor(url: string, proxyAgent: ProxyAgent | undefined);
13
- /**
14
- * close will terminate the WebSocket connection
15
- */
16
- close(gracefullyClose?: boolean): Promise<void>;
17
- /**
18
- * connect will start a WebSocket connection
19
- */
20
- connect(): Promise<void>;
21
- /**
22
- * duplex will create a duplex stream for the WS connection
23
- */
24
- duplex(): import("stream").Duplex;
25
- /**
26
- * keepAlive will return a promise to keep track of the tunnel connection
27
- */
28
- keepAlive(): Promise<void>;
29
- /**
30
- * on allows to listen for WebSocket messages
31
- */
32
- on(event: 'message', listener: (data: WebSocketModule.Data) => void): this;
33
- /**
34
- * once allows to listen for a WebSocket message
35
- */
36
- once(event: 'message', listener: (data: WebSocketModule.Data) => void): this;
37
- waitForFirstMessage(): Promise<WebSocketModule.Data>;
38
- private establishWebsocketConnection;
39
- }
@@ -1,154 +0,0 @@
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
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.WebSocket = void 0;
36
- const events_1 = require("events");
37
- const ws_1 = __importStar(require("ws"));
38
- class WebSocket extends events_1.EventEmitter {
39
- constructor(url, proxyAgent) {
40
- super();
41
- this.url = url;
42
- this.proxyAgent = proxyAgent;
43
- }
44
- /**
45
- * close will terminate the WebSocket connection
46
- */
47
- close(gracefullyClose = true) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- if (this.websocket) {
50
- this.websocket.removeAllListeners();
51
- if (this.websocket.readyState === ws_1.default.OPEN) {
52
- if (gracefullyClose) {
53
- // Gracefully close the tunnel
54
- this.websocket.close();
55
- yield (0, events_1.once)(this.websocket, 'close');
56
- }
57
- // Clean up the underlying socket
58
- this.websocket.terminate();
59
- }
60
- this.websocket = undefined;
61
- }
62
- });
63
- }
64
- /**
65
- * connect will start a WebSocket connection
66
- */
67
- connect() {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- // Open the connection or throw
70
- yield new Promise((resolve, reject) => this.establishWebsocketConnection(resolve, reject));
71
- });
72
- }
73
- /**
74
- * duplex will create a duplex stream for the WS connection
75
- */
76
- duplex() {
77
- if (!this.websocket) {
78
- throw new Error('You must start the WebSocket connection before calling duplex');
79
- }
80
- return (0, ws_1.createWebSocketStream)(this.websocket, {
81
- // Increase websocket buffer sizes from 16kb to 64kb.
82
- readableHighWaterMark: 64 * 1024,
83
- writableHighWaterMark: 64 * 1024,
84
- });
85
- }
86
- /**
87
- * keepAlive will return a promise to keep track of the tunnel connection
88
- */
89
- keepAlive() {
90
- if (!this.keepAliveWebsocket) {
91
- // Use an artificial promise to keep track of the connection state and reconnect if necessary
92
- this.keepAliveWebsocket = new Promise((resolve, reject) => this.establishWebsocketConnection(resolve, reject));
93
- }
94
- return this.keepAliveWebsocket;
95
- }
96
- /**
97
- * on allows to listen for WebSocket messages
98
- */
99
- on(event, listener) {
100
- if (!this.websocket) {
101
- throw new Error('You must start the WebSocket connection before listening to messages');
102
- }
103
- this.websocket.on(event, listener);
104
- return this;
105
- }
106
- /**
107
- * once allows to listen for a WebSocket message
108
- */
109
- once(event, listener) {
110
- if (!this.websocket) {
111
- throw new Error('You must start the WebSocket connection before listening to messages');
112
- }
113
- this.websocket.once(event, listener);
114
- return this;
115
- }
116
- waitForFirstMessage() {
117
- if (!this.firstMessage) {
118
- throw new Error('Websocket connection was not established before reading first message');
119
- }
120
- return this.firstMessage;
121
- }
122
- establishWebsocketConnection(resolve, reject) {
123
- if (!this.websocket) {
124
- const options = {
125
- agent: this.proxyAgent,
126
- };
127
- this.websocket = new ws_1.default(this.url, options);
128
- }
129
- this.firstMessage = new Promise((firstMessageResolve, firstMessageReject) => {
130
- if (!this.websocket) {
131
- firstMessageReject(Error('Unable to start websocket connection'));
132
- }
133
- else {
134
- this.websocket.once('message', firstMessageResolve);
135
- }
136
- });
137
- this.websocket.on('unexpected-response', (req, res) => {
138
- let body = '';
139
- res.on('readable', () => {
140
- body += res.read();
141
- });
142
- res.on('end', () => {
143
- reject(Error(`Got unexpected response in WebSocket connection (code: ${res.statusCode}): ${body}`));
144
- });
145
- req.end();
146
- res.destroy();
147
- });
148
- this.websocket.on('open', () => {
149
- resolve();
150
- });
151
- }
152
- }
153
- exports.WebSocket = WebSocket;
154
- //# sourceMappingURL=websocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/tunnel/websocket.ts"],"names":[],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- import type { BaseResult, BasicAuthCredentials, BrowserServerResult, CookiesObject, DatadogCIConfig, LocalTriggerConfig, MobileTestWithOverride, Result, ResultInBatch, ResultInBatchSkippedBySelectiveRerun, RetryConfig, ServerConfigOverride, ServerResult, Test, TestMissing, TestPayload, TestSkipped, TestWithOverride, TriggerConfig, UserConfigOverride, LocalTestPayload } from '../interfaces';
2
- import { ExecutionRule } from '../interfaces';
3
- export type RecursivePartial<T> = {
4
- [P in keyof T]?: RecursivePartial<T[P]>;
5
- };
6
- export declare const getDefaultConfig: () => DatadogCIConfig;
7
- export declare const wait: (duration: number) => Promise<unknown>;
8
- export declare const getOverriddenExecutionRule: (test?: Test, testOverrides?: UserConfigOverride) => ExecutionRule | undefined;
9
- export declare const hasResultPassed: (result: ResultInBatch, isUnhealthy: boolean, hasTimedOut: boolean, options: {
10
- failOnCriticalErrors?: boolean;
11
- failOnTimeout?: boolean;
12
- }) => boolean;
13
- /**
14
- * Whether the result is of type {@link BaseResult}, i.e. it wasn't skipped.
15
- */
16
- export declare const isBaseResult: (result: Result) => result is BaseResult;
17
- /**
18
- * Whether the result has a defined {@link BaseResult.result} property.
19
- *
20
- * This property would be undefined if the server result isn't available when polling for it,
21
- * which is a known latency issue. We call such result an incomplete result.
22
- */
23
- export declare const hasDefinedResult: (result: Result) => result is BaseResult & {
24
- result: ServerResult;
25
- };
26
- /**
27
- * When the test is configured to be retried and the first attempt fails, `retries` is set to `0`
28
- * and the result is kept `in_progress` until the final result is received.
29
- */
30
- export declare const isNonFinalResult: (result: ResultInBatch) => result is import("../interfaces").BaseResultInBatch & {
31
- retries: number;
32
- status: 'in_progress';
33
- };
34
- export declare const isTimedOutRetry: (retries: number | null, maxRetries: number | null, timedOut: boolean | null) => boolean;
35
- export declare const isLocalTriggerConfig: (triggerConfig?: TriggerConfig) => triggerConfig is LocalTriggerConfig;
36
- export declare const isLocalTestPayload: (testPayload: TestPayload) => testPayload is LocalTestPayload;
37
- export declare const isBrowserServerResult: (serverResult: ServerResult) => serverResult is BrowserServerResult;
38
- export declare const getTriggerConfigPublicId: (triggerConfig: TriggerConfig) => string | undefined;
39
- export declare const LOCAL_TEST_DEFINITION_PUBLIC_ID_PLACEHOLDER = "local";
40
- export declare const getPublicIdOrPlaceholder: (test: Test | TestPayload | {
41
- public_id?: string;
42
- }) => string;
43
- export declare const isResultInBatchSkippedBySelectiveRerun: (result: ResultInBatch) => result is ResultInBatchSkippedBySelectiveRerun;
44
- export declare const isMobileTestWithOverride: (item: TestMissing | TestSkipped | TestWithOverride) => item is MobileTestWithOverride;
45
- export declare const getResultIdOrLinkedResultId: (result: ResultInBatch) => string;
46
- export declare const toExecutionRule: (env: string | undefined) => ExecutionRule | undefined;
47
- type AccumulatorBaseConfigOverride = Omit<UserConfigOverride, 'retry' | 'basicAuth' | 'cookies' | 'setCookies' | 'mobileApplicationVersion' | 'mobileApplicationVersionFilePath'> & {
48
- retry?: Partial<RetryConfig>;
49
- basicAuth?: Partial<BasicAuthCredentials>;
50
- cookies?: Partial<CookiesObject>;
51
- setCookies?: Partial<CookiesObject>;
52
- };
53
- type TestOverrideValueType = boolean | number | string | string[] | ExecutionRule;
54
- type ValidTestOverrideValueTypeName = 'boolean' | 'number' | 'string' | 'string[]' | 'ExecutionRule';
55
- export declare const parseOverrideValue: (value: string, type: ValidTestOverrideValueTypeName) => TestOverrideValueType;
56
- export declare const validateAndParseOverrides: (overrides: string[] | undefined) => AccumulatorBaseConfigOverride;
57
- export declare const getBasePayload: (test: Test, testOverrides?: UserConfigOverride) => ServerConfigOverride;
58
- export {};