@testim/testim-cli 3.232.0 → 3.233.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.
package/cli.js CHANGED
@@ -94,6 +94,12 @@ function main() {
94
94
  return undefined;
95
95
  }
96
96
 
97
+ if (options.tunnelOnlyMode) {
98
+ await testRunner.init(options);
99
+ await require('./commons/testimTunnel').serveTunneling(options);
100
+ return undefined;
101
+ }
102
+
97
103
  if (agentMode.shouldStartAgentMode(options)) {
98
104
  return agentMode.runAgentMode(options);
99
105
  }
@@ -37,8 +37,8 @@ const logErrorAndRethrow = (logMsg, data) => err => {
37
37
  throw err;
38
38
  };
39
39
 
40
- function deleteMethod(url, headers, timeout) {
41
- return deleteFullRes(url, headers, timeout)
40
+ function deleteMethod(url, body, headers, timeout) {
41
+ return deleteFullRes(url, body, headers, timeout)
42
42
  .then(res => {
43
43
  if (res.type === 'text/plain') {
44
44
  return res.text;
@@ -48,9 +48,10 @@ function deleteMethod(url, headers, timeout) {
48
48
  .catch(logErrorAndRethrow('failed to delete request', { url }));
49
49
  }
50
50
 
51
- function deleteFullRes(url, headers = {}, timeout = DEFAULT_REQUEST_TIMEOUT) {
51
+ function deleteFullRes(url, body = {}, headers = {}, timeout = DEFAULT_REQUEST_TIMEOUT) {
52
52
  const request = superagent
53
53
  .delete(url)
54
+ .send(body)
54
55
  .timeout(timeout)
55
56
  .set(headers);
56
57
 
@@ -0,0 +1,73 @@
1
+ 'use strict';
2
+
3
+ const os = require('os');
4
+ const path = require('path');
5
+ const { spawn } = require('child_process');
6
+ const fse = require('fs-extra');
7
+ const { downloadAndSave, unzipFile } = require('../utils');
8
+ const servicesApi = require('./testimServicesApi.js');
9
+
10
+ const TUNNEL_BINARY_ORIGIN = 'https://github.com/cloudflare/cloudflared/releases/download/2022.4.1/';
11
+ const TUNNEL_BINARY_PATHNAME = {
12
+ win32ia32: { path: 'cloudflared-windows-386.exe' },
13
+ win32x64: { path: 'cloudflared-windows-amd64.exe' },
14
+ darwinx64: { path: 'cloudflared-darwin-amd64.tgz', extract: true },
15
+ linuxia32: { path: 'cloudflared-linux-386' },
16
+ linuxx64: { path: 'cloudflared-linux-amd64' },
17
+ };
18
+ const TUNNEL_BINARY_DIRECTORY = `${os.tmpdir()}/cloudflared`;
19
+ const TUNNEL_BINARY_LOCATION = `${TUNNEL_BINARY_DIRECTORY}/cloudflared`;
20
+
21
+
22
+ let tunnelId = null;
23
+ let tunnelProcess = null;
24
+
25
+ async function prepareTunnel() {
26
+ const isBinaryExist = await fse.pathExists(TUNNEL_BINARY_LOCATION);
27
+ if (isBinaryExist) {
28
+ return;
29
+ }
30
+
31
+ const downloadUrl = TUNNEL_BINARY_PATHNAME[os.platform() + os.arch()];
32
+ if (!downloadUrl) {
33
+ throw new Error(`tunnel on ${os.platform() + os.arch()} platform is not supported.`);
34
+ }
35
+ const destination = downloadUrl.extract ? path.extname(downloadUrl.path) : downloadUrl.path;
36
+ await downloadAndSave(`${TUNNEL_BINARY_ORIGIN}/${downloadUrl.path}`, destination);
37
+ if (downloadUrl.extract) {
38
+ await unzipFile(destination, TUNNEL_BINARY_DIRECTORY);
39
+ }
40
+ }
41
+
42
+ const connectTunnel = async (options) => {
43
+ const [result] = await Promise.all([
44
+ servicesApi.getCloudflareTunnel(options.company.companyId, options.tunnelRoutes),
45
+ prepareTunnel(),
46
+ ]);
47
+ tunnelId = result._id;
48
+ tunnelProcess = spawn('./cloudflared', ['tunnel', '--no-autoupdate', 'run', '--force', '--token', result.token], { cwd: TUNNEL_BINARY_DIRECTORY, stdio: 'inherit' });
49
+ await servicesApi.forceUpdateCloudflareTunnelRoutes(options.company.companyId, tunnelId);
50
+ await fse.writeFileSync(options.tunnelRoutesOutput, JSON.stringify(result.routesMapping, null, 2));
51
+ };
52
+
53
+ const disconnectTunnel = async (options) => {
54
+ if (tunnelId) {
55
+ await servicesApi.deleteCloudflareTunnel(options.company.companyId, tunnelId);
56
+ }
57
+ if (tunnelProcess) {
58
+ await new Promise((resolve, reject) => {
59
+ tunnelProcess.on('close', (code) => {
60
+ if (code) {
61
+ reject();
62
+ }
63
+ resolve();
64
+ });
65
+ tunnelProcess.kill();
66
+ });
67
+ }
68
+ };
69
+
70
+ module.exports = {
71
+ connectTunnel,
72
+ disconnectTunnel,
73
+ };
@@ -55,6 +55,11 @@ function putAuth(url, body) {
55
55
  .then(headers => httpRequest.put(`${config.SERVICES_HOST}${url || ''}`, body, headers));
56
56
  }
57
57
 
58
+ function deleteAuth(url, body) {
59
+ return getTokenHeader()
60
+ .then(headers => httpRequest.delete(`${config.SERVICES_HOST}${url || ''}`, body, headers));
61
+ }
62
+
58
63
  function getWithAuth(url, query, options, timeout) {
59
64
  return getTokenHeader()
60
65
  .then(headers => httpRequest.get(`${config.SERVICES_HOST}${url || ''}`, query, headers, timeout, options));
@@ -444,6 +449,32 @@ function getApplitoolsIntegrationData(projectId) {
444
449
  }
445
450
  }
446
451
 
452
+
453
+ function getCloudflareTunnel(companyId, routes) {
454
+ try {
455
+ return putAuth('/tunnel', { companyId, routes });
456
+ } catch (err) {
457
+ logger.warn('could\'nt get tunnel.', { err });
458
+ return {};
459
+ }
460
+ }
461
+ function forceUpdateCloudflareTunnelRoutes(companyId, tunnelId) {
462
+ try {
463
+ return postAuth({ url: `/tunnel/${tunnelId}`, body: { companyId } });
464
+ } catch (err) {
465
+ logger.warn('could\'nt get tunnel.', { err });
466
+ return {};
467
+ }
468
+ }
469
+ function deleteCloudflareTunnel(companyId, tunnelId) {
470
+ try {
471
+ return deleteAuth(`/tunnel/${tunnelId}`, { companyId });
472
+ } catch (err) {
473
+ logger.warn('could\'nt get tunnel.', { err });
474
+ return {};
475
+ }
476
+ }
477
+
447
478
  module.exports = {
448
479
  getS3Artifact,
449
480
  getTestPlan,
@@ -476,4 +507,7 @@ module.exports = {
476
507
  loadTest,
477
508
  isTestResultCompleted,
478
509
  getApplitoolsIntegrationData,
510
+ getCloudflareTunnel,
511
+ forceUpdateCloudflareTunnelRoutes,
512
+ deleteCloudflareTunnel,
479
513
  };
@@ -3,22 +3,29 @@
3
3
  const ora = require('ora');
4
4
 
5
5
  const LambdatestService = require('../services/lambdatestService');
6
+ const { registerExitHook } = require('../processHandler');
7
+ const testimCustomToken = require('./testimCustomToken');
6
8
  const { gridTypes } = require('./constants');
7
9
  const testimNgrok = require('./testimNgrok');
10
+ const testimCloudflare = require('./testimCloudflare');
8
11
  const logger = require('./logger').getLogger('tunnel');
9
12
 
10
- const shouldUseLambdatestTunnel = options => [gridTypes.LAMBDATEST, gridTypes.HYBRID].includes(options.gridData.type) && options.gridData.tunnel !== 'ngrok';
13
+ const shouldUseLambdatestTunnel = options => [gridTypes.LAMBDATEST, gridTypes.HYBRID].includes(options.gridData && options.gridData.type) && options.gridData.tunnel !== 'ngrok';
11
14
 
12
- const connect = async (options, authData) => {
15
+ const connect = async (options) => {
13
16
  if (!options.tunnel) {
14
17
  return;
15
18
  }
16
19
 
20
+ const authData = testimCustomToken.getTokenV3UserData();
17
21
  let spinner;
18
22
  try {
19
23
  if (shouldUseLambdatestTunnel(options)) {
20
24
  spinner = ora('Starting testim lambdatest tunnel...').start();
21
25
  await LambdatestService.connectTunnel(options);
26
+ } else if (options.tunnelRoutes) {
27
+ spinner = ora('Starting testim cloudflare tunnel...').start();
28
+ await testimCloudflare.connectTunnel(options);
22
29
  } else {
23
30
  spinner = ora('Starting testim ngrok tunnel...').start();
24
31
  await testimNgrok.connectTunnel(options, authData);
@@ -40,6 +47,8 @@ const disconnect = async (options) => {
40
47
  try {
41
48
  if (shouldUseLambdatestTunnel(options)) {
42
49
  await LambdatestService.disconnectTunnel(options);
50
+ } else if (options.tunnelRoutes) {
51
+ await testimCloudflare.disconnectTunnel(options);
43
52
  } else {
44
53
  await testimNgrok.disconnectTunnel(options);
45
54
  }
@@ -50,7 +59,14 @@ const disconnect = async (options) => {
50
59
  }
51
60
  };
52
61
 
62
+ const serveTunneling = async (options) => {
63
+ await connect(options);
64
+ registerExitHook(() => disconnect(options));
65
+ return await new Promise(() => { /* avoid exiting process */ });
66
+ };
67
+
53
68
  module.exports = {
54
69
  connect,
55
70
  disconnect,
71
+ serveTunneling,
56
72
  };
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "3.232.0",
3
+ "version": "3.233.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@testim/testim-cli",
9
- "version": "3.232.0",
9
+ "version": "3.233.0",
10
10
  "license": "Proprietary",
11
11
  "dependencies": {
12
12
  "@applitools/eyes-sdk-core": "13.2.0",
@@ -103,12 +103,13 @@
103
103
  }
104
104
  },
105
105
  "node_modules/@ampproject/remapping": {
106
- "version": "2.1.2",
107
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
108
- "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
106
+ "version": "2.2.0",
107
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
108
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
109
109
  "dev": true,
110
110
  "dependencies": {
111
- "@jridgewell/trace-mapping": "^0.3.0"
111
+ "@jridgewell/gen-mapping": "^0.1.0",
112
+ "@jridgewell/trace-mapping": "^0.3.9"
112
113
  },
113
114
  "engines": {
114
115
  "node": ">=6.0.0"
@@ -475,30 +476,30 @@
475
476
  }
476
477
  },
477
478
  "node_modules/@babel/compat-data": {
478
- "version": "7.17.7",
479
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
480
- "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
479
+ "version": "7.17.10",
480
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz",
481
+ "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==",
481
482
  "dev": true,
482
483
  "engines": {
483
484
  "node": ">=6.9.0"
484
485
  }
485
486
  },
486
487
  "node_modules/@babel/core": {
487
- "version": "7.17.9",
488
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz",
489
- "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==",
488
+ "version": "7.17.10",
489
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz",
490
+ "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==",
490
491
  "dev": true,
491
492
  "dependencies": {
492
493
  "@ampproject/remapping": "^2.1.0",
493
494
  "@babel/code-frame": "^7.16.7",
494
- "@babel/generator": "^7.17.9",
495
- "@babel/helper-compilation-targets": "^7.17.7",
495
+ "@babel/generator": "^7.17.10",
496
+ "@babel/helper-compilation-targets": "^7.17.10",
496
497
  "@babel/helper-module-transforms": "^7.17.7",
497
498
  "@babel/helpers": "^7.17.9",
498
- "@babel/parser": "^7.17.9",
499
+ "@babel/parser": "^7.17.10",
499
500
  "@babel/template": "^7.16.7",
500
- "@babel/traverse": "^7.17.9",
501
- "@babel/types": "^7.17.0",
501
+ "@babel/traverse": "^7.17.10",
502
+ "@babel/types": "^7.17.10",
502
503
  "convert-source-map": "^1.7.0",
503
504
  "debug": "^4.1.0",
504
505
  "gensync": "^1.0.0-beta.2",
@@ -532,28 +533,28 @@
532
533
  }
533
534
  },
534
535
  "node_modules/@babel/generator": {
535
- "version": "7.17.9",
536
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
537
- "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
536
+ "version": "7.17.10",
537
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz",
538
+ "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==",
538
539
  "dev": true,
539
540
  "dependencies": {
540
- "@babel/types": "^7.17.0",
541
- "jsesc": "^2.5.1",
542
- "source-map": "^0.5.0"
541
+ "@babel/types": "^7.17.10",
542
+ "@jridgewell/gen-mapping": "^0.1.0",
543
+ "jsesc": "^2.5.1"
543
544
  },
544
545
  "engines": {
545
546
  "node": ">=6.9.0"
546
547
  }
547
548
  },
548
549
  "node_modules/@babel/helper-compilation-targets": {
549
- "version": "7.17.7",
550
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
551
- "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
550
+ "version": "7.17.10",
551
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz",
552
+ "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==",
552
553
  "dev": true,
553
554
  "dependencies": {
554
- "@babel/compat-data": "^7.17.7",
555
+ "@babel/compat-data": "^7.17.10",
555
556
  "@babel/helper-validator-option": "^7.16.7",
556
- "browserslist": "^4.17.5",
557
+ "browserslist": "^4.20.2",
557
558
  "semver": "^6.3.0"
558
559
  },
559
560
  "engines": {
@@ -773,9 +774,9 @@
773
774
  }
774
775
  },
775
776
  "node_modules/@babel/parser": {
776
- "version": "7.17.9",
777
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
778
- "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
777
+ "version": "7.17.10",
778
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz",
779
+ "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==",
779
780
  "dev": true,
780
781
  "bin": {
781
782
  "parser": "bin/babel-parser.js"
@@ -810,19 +811,19 @@
810
811
  }
811
812
  },
812
813
  "node_modules/@babel/traverse": {
813
- "version": "7.17.9",
814
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
815
- "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
814
+ "version": "7.17.10",
815
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz",
816
+ "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==",
816
817
  "dev": true,
817
818
  "dependencies": {
818
819
  "@babel/code-frame": "^7.16.7",
819
- "@babel/generator": "^7.17.9",
820
+ "@babel/generator": "^7.17.10",
820
821
  "@babel/helper-environment-visitor": "^7.16.7",
821
822
  "@babel/helper-function-name": "^7.17.9",
822
823
  "@babel/helper-hoist-variables": "^7.16.7",
823
824
  "@babel/helper-split-export-declaration": "^7.16.7",
824
- "@babel/parser": "^7.17.9",
825
- "@babel/types": "^7.17.0",
825
+ "@babel/parser": "^7.17.10",
826
+ "@babel/types": "^7.17.10",
826
827
  "debug": "^4.1.0",
827
828
  "globals": "^11.1.0"
828
829
  },
@@ -831,9 +832,9 @@
831
832
  }
832
833
  },
833
834
  "node_modules/@babel/types": {
834
- "version": "7.17.0",
835
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
836
- "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
835
+ "version": "7.17.10",
836
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz",
837
+ "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==",
837
838
  "dev": true,
838
839
  "dependencies": {
839
840
  "@babel/helper-validator-identifier": "^7.16.7",
@@ -1413,6 +1414,19 @@
1413
1414
  "regenerator-runtime": "^0.13.3"
1414
1415
  }
1415
1416
  },
1417
+ "node_modules/@jridgewell/gen-mapping": {
1418
+ "version": "0.1.1",
1419
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
1420
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
1421
+ "dev": true,
1422
+ "dependencies": {
1423
+ "@jridgewell/set-array": "^1.0.0",
1424
+ "@jridgewell/sourcemap-codec": "^1.4.10"
1425
+ },
1426
+ "engines": {
1427
+ "node": ">=6.0.0"
1428
+ }
1429
+ },
1416
1430
  "node_modules/@jridgewell/resolve-uri": {
1417
1431
  "version": "3.0.6",
1418
1432
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz",
@@ -1422,6 +1436,15 @@
1422
1436
  "node": ">=6.0.0"
1423
1437
  }
1424
1438
  },
1439
+ "node_modules/@jridgewell/set-array": {
1440
+ "version": "1.1.0",
1441
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz",
1442
+ "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==",
1443
+ "dev": true,
1444
+ "engines": {
1445
+ "node": ">=6.0.0"
1446
+ }
1447
+ },
1425
1448
  "node_modules/@jridgewell/sourcemap-codec": {
1426
1449
  "version": "1.4.11",
1427
1450
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
@@ -1492,14 +1515,6 @@
1492
1515
  "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
1493
1516
  "dev": true
1494
1517
  },
1495
- "node_modules/@socket.io/base64-arraybuffer": {
1496
- "version": "1.0.2",
1497
- "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
1498
- "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
1499
- "engines": {
1500
- "node": ">= 0.6.0"
1501
- }
1502
- },
1503
1518
  "node_modules/@socket.io/component-emitter": {
1504
1519
  "version": "3.0.0",
1505
1520
  "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz",
@@ -1824,9 +1839,9 @@
1824
1839
  }
1825
1840
  },
1826
1841
  "node_modules/acorn": {
1827
- "version": "8.7.0",
1828
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
1829
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
1842
+ "version": "8.7.1",
1843
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
1844
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
1830
1845
  "bin": {
1831
1846
  "acorn": "bin/acorn"
1832
1847
  },
@@ -2673,9 +2688,9 @@
2673
2688
  }
2674
2689
  },
2675
2690
  "node_modules/axios-retry": {
2676
- "version": "3.2.4",
2677
- "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.2.4.tgz",
2678
- "integrity": "sha512-Co3UXiv4npi6lM963mfnuH90/YFLKWWDmoBYfxkHT5xtkSSWNqK9zdG3fw5/CP/dsoKB5aMMJCsgab+tp1OxLQ==",
2691
+ "version": "3.2.5",
2692
+ "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.2.5.tgz",
2693
+ "integrity": "sha512-a8umkKbfIkTiYJQLx3v3TzKM85TGKB8ZQYz4zwykt2fpO64TsRlUhjaPaAb3fqMWCXFm2YhWcd8V5FHDKO9bSA==",
2679
2694
  "dependencies": {
2680
2695
  "@babel/runtime": "^7.15.4",
2681
2696
  "is-retry-allowed": "^2.2.0"
@@ -2904,9 +2919,9 @@
2904
2919
  "dev": true
2905
2920
  },
2906
2921
  "node_modules/browserslist": {
2907
- "version": "4.20.2",
2908
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
2909
- "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
2922
+ "version": "4.20.3",
2923
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
2924
+ "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
2910
2925
  "dev": true,
2911
2926
  "funding": [
2912
2927
  {
@@ -2919,10 +2934,10 @@
2919
2934
  }
2920
2935
  ],
2921
2936
  "dependencies": {
2922
- "caniuse-lite": "^1.0.30001317",
2923
- "electron-to-chromium": "^1.4.84",
2937
+ "caniuse-lite": "^1.0.30001332",
2938
+ "electron-to-chromium": "^1.4.118",
2924
2939
  "escalade": "^3.1.1",
2925
- "node-releases": "^2.0.2",
2940
+ "node-releases": "^2.0.3",
2926
2941
  "picocolors": "^1.0.0"
2927
2942
  },
2928
2943
  "bin": {
@@ -3113,9 +3128,9 @@
3113
3128
  }
3114
3129
  },
3115
3130
  "node_modules/caniuse-lite": {
3116
- "version": "1.0.30001332",
3117
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
3118
- "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==",
3131
+ "version": "1.0.30001335",
3132
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz",
3133
+ "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==",
3119
3134
  "dev": true,
3120
3135
  "funding": [
3121
3136
  {
@@ -4315,13 +4330,25 @@
4315
4330
  "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA=="
4316
4331
  },
4317
4332
  "node_modules/data-urls": {
4318
- "version": "3.0.1",
4319
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
4320
- "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
4333
+ "version": "3.0.2",
4334
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
4335
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
4321
4336
  "dependencies": {
4322
- "abab": "^2.0.3",
4337
+ "abab": "^2.0.6",
4323
4338
  "whatwg-mimetype": "^3.0.0",
4324
- "whatwg-url": "^10.0.0"
4339
+ "whatwg-url": "^11.0.0"
4340
+ },
4341
+ "engines": {
4342
+ "node": ">=12"
4343
+ }
4344
+ },
4345
+ "node_modules/data-urls/node_modules/whatwg-url": {
4346
+ "version": "11.0.0",
4347
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
4348
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
4349
+ "dependencies": {
4350
+ "tr46": "^3.0.0",
4351
+ "webidl-conversions": "^7.0.0"
4325
4352
  },
4326
4353
  "engines": {
4327
4354
  "node": ">=12"
@@ -4854,9 +4881,9 @@
4854
4881
  }
4855
4882
  },
4856
4883
  "node_modules/electron-to-chromium": {
4857
- "version": "1.4.118",
4858
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz",
4859
- "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==",
4884
+ "version": "1.4.129",
4885
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.129.tgz",
4886
+ "integrity": "sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ==",
4860
4887
  "dev": true
4861
4888
  },
4862
4889
  "node_modules/emoji-regex": {
@@ -4923,12 +4950,9 @@
4923
4950
  }
4924
4951
  },
4925
4952
  "node_modules/engine.io-parser": {
4926
- "version": "5.0.3",
4927
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
4928
- "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
4929
- "dependencies": {
4930
- "@socket.io/base64-arraybuffer": "~1.0.2"
4931
- },
4953
+ "version": "5.0.4",
4954
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
4955
+ "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
4932
4956
  "engines": {
4933
4957
  "node": ">=10.0.0"
4934
4958
  }
@@ -9213,9 +9237,9 @@
9213
9237
  }
9214
9238
  },
9215
9239
  "node_modules/node-releases": {
9216
- "version": "2.0.3",
9217
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
9218
- "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
9240
+ "version": "2.0.4",
9241
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
9242
+ "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
9219
9243
  "dev": true
9220
9244
  },
9221
9245
  "node_modules/nopt": {
@@ -16412,12 +16436,13 @@
16412
16436
  },
16413
16437
  "dependencies": {
16414
16438
  "@ampproject/remapping": {
16415
- "version": "2.1.2",
16416
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
16417
- "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
16439
+ "version": "2.2.0",
16440
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
16441
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
16418
16442
  "dev": true,
16419
16443
  "requires": {
16420
- "@jridgewell/trace-mapping": "^0.3.0"
16444
+ "@jridgewell/gen-mapping": "^0.1.0",
16445
+ "@jridgewell/trace-mapping": "^0.3.9"
16421
16446
  }
16422
16447
  },
16423
16448
  "@applitools/dom-capture": {
@@ -16706,27 +16731,27 @@
16706
16731
  }
16707
16732
  },
16708
16733
  "@babel/compat-data": {
16709
- "version": "7.17.7",
16710
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
16711
- "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
16734
+ "version": "7.17.10",
16735
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz",
16736
+ "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==",
16712
16737
  "dev": true
16713
16738
  },
16714
16739
  "@babel/core": {
16715
- "version": "7.17.9",
16716
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz",
16717
- "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==",
16740
+ "version": "7.17.10",
16741
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz",
16742
+ "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==",
16718
16743
  "dev": true,
16719
16744
  "requires": {
16720
16745
  "@ampproject/remapping": "^2.1.0",
16721
16746
  "@babel/code-frame": "^7.16.7",
16722
- "@babel/generator": "^7.17.9",
16723
- "@babel/helper-compilation-targets": "^7.17.7",
16747
+ "@babel/generator": "^7.17.10",
16748
+ "@babel/helper-compilation-targets": "^7.17.10",
16724
16749
  "@babel/helper-module-transforms": "^7.17.7",
16725
16750
  "@babel/helpers": "^7.17.9",
16726
- "@babel/parser": "^7.17.9",
16751
+ "@babel/parser": "^7.17.10",
16727
16752
  "@babel/template": "^7.16.7",
16728
- "@babel/traverse": "^7.17.9",
16729
- "@babel/types": "^7.17.0",
16753
+ "@babel/traverse": "^7.17.10",
16754
+ "@babel/types": "^7.17.10",
16730
16755
  "convert-source-map": "^1.7.0",
16731
16756
  "debug": "^4.1.0",
16732
16757
  "gensync": "^1.0.0-beta.2",
@@ -16752,25 +16777,25 @@
16752
16777
  }
16753
16778
  },
16754
16779
  "@babel/generator": {
16755
- "version": "7.17.9",
16756
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
16757
- "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
16780
+ "version": "7.17.10",
16781
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz",
16782
+ "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==",
16758
16783
  "dev": true,
16759
16784
  "requires": {
16760
- "@babel/types": "^7.17.0",
16761
- "jsesc": "^2.5.1",
16762
- "source-map": "^0.5.0"
16785
+ "@babel/types": "^7.17.10",
16786
+ "@jridgewell/gen-mapping": "^0.1.0",
16787
+ "jsesc": "^2.5.1"
16763
16788
  }
16764
16789
  },
16765
16790
  "@babel/helper-compilation-targets": {
16766
- "version": "7.17.7",
16767
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
16768
- "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
16791
+ "version": "7.17.10",
16792
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz",
16793
+ "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==",
16769
16794
  "dev": true,
16770
16795
  "requires": {
16771
- "@babel/compat-data": "^7.17.7",
16796
+ "@babel/compat-data": "^7.17.10",
16772
16797
  "@babel/helper-validator-option": "^7.16.7",
16773
- "browserslist": "^4.17.5",
16798
+ "browserslist": "^4.20.2",
16774
16799
  "semver": "^6.3.0"
16775
16800
  },
16776
16801
  "dependencies": {
@@ -16937,9 +16962,9 @@
16937
16962
  }
16938
16963
  },
16939
16964
  "@babel/parser": {
16940
- "version": "7.17.9",
16941
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
16942
- "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
16965
+ "version": "7.17.10",
16966
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz",
16967
+ "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==",
16943
16968
  "dev": true
16944
16969
  },
16945
16970
  "@babel/runtime": {
@@ -16962,27 +16987,27 @@
16962
16987
  }
16963
16988
  },
16964
16989
  "@babel/traverse": {
16965
- "version": "7.17.9",
16966
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
16967
- "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
16990
+ "version": "7.17.10",
16991
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz",
16992
+ "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==",
16968
16993
  "dev": true,
16969
16994
  "requires": {
16970
16995
  "@babel/code-frame": "^7.16.7",
16971
- "@babel/generator": "^7.17.9",
16996
+ "@babel/generator": "^7.17.10",
16972
16997
  "@babel/helper-environment-visitor": "^7.16.7",
16973
16998
  "@babel/helper-function-name": "^7.17.9",
16974
16999
  "@babel/helper-hoist-variables": "^7.16.7",
16975
17000
  "@babel/helper-split-export-declaration": "^7.16.7",
16976
- "@babel/parser": "^7.17.9",
16977
- "@babel/types": "^7.17.0",
17001
+ "@babel/parser": "^7.17.10",
17002
+ "@babel/types": "^7.17.10",
16978
17003
  "debug": "^4.1.0",
16979
17004
  "globals": "^11.1.0"
16980
17005
  }
16981
17006
  },
16982
17007
  "@babel/types": {
16983
- "version": "7.17.0",
16984
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
16985
- "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
17008
+ "version": "7.17.10",
17009
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz",
17010
+ "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==",
16986
17011
  "dev": true,
16987
17012
  "requires": {
16988
17013
  "@babel/helper-validator-identifier": "^7.16.7",
@@ -17427,12 +17452,28 @@
17427
17452
  "regenerator-runtime": "^0.13.3"
17428
17453
  }
17429
17454
  },
17455
+ "@jridgewell/gen-mapping": {
17456
+ "version": "0.1.1",
17457
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
17458
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
17459
+ "dev": true,
17460
+ "requires": {
17461
+ "@jridgewell/set-array": "^1.0.0",
17462
+ "@jridgewell/sourcemap-codec": "^1.4.10"
17463
+ }
17464
+ },
17430
17465
  "@jridgewell/resolve-uri": {
17431
17466
  "version": "3.0.6",
17432
17467
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz",
17433
17468
  "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==",
17434
17469
  "dev": true
17435
17470
  },
17471
+ "@jridgewell/set-array": {
17472
+ "version": "1.1.0",
17473
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.0.tgz",
17474
+ "integrity": "sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==",
17475
+ "dev": true
17476
+ },
17436
17477
  "@jridgewell/sourcemap-codec": {
17437
17478
  "version": "1.4.11",
17438
17479
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
@@ -17503,11 +17544,6 @@
17503
17544
  "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
17504
17545
  "dev": true
17505
17546
  },
17506
- "@socket.io/base64-arraybuffer": {
17507
- "version": "1.0.2",
17508
- "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
17509
- "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ=="
17510
- },
17511
17547
  "@socket.io/component-emitter": {
17512
17548
  "version": "3.0.0",
17513
17549
  "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz",
@@ -17788,9 +17824,9 @@
17788
17824
  }
17789
17825
  },
17790
17826
  "acorn": {
17791
- "version": "8.7.0",
17792
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
17793
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
17827
+ "version": "8.7.1",
17828
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
17829
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A=="
17794
17830
  },
17795
17831
  "acorn-globals": {
17796
17832
  "version": "6.0.0",
@@ -18455,9 +18491,9 @@
18455
18491
  }
18456
18492
  },
18457
18493
  "axios-retry": {
18458
- "version": "3.2.4",
18459
- "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.2.4.tgz",
18460
- "integrity": "sha512-Co3UXiv4npi6lM963mfnuH90/YFLKWWDmoBYfxkHT5xtkSSWNqK9zdG3fw5/CP/dsoKB5aMMJCsgab+tp1OxLQ==",
18494
+ "version": "3.2.5",
18495
+ "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.2.5.tgz",
18496
+ "integrity": "sha512-a8umkKbfIkTiYJQLx3v3TzKM85TGKB8ZQYz4zwykt2fpO64TsRlUhjaPaAb3fqMWCXFm2YhWcd8V5FHDKO9bSA==",
18461
18497
  "requires": {
18462
18498
  "@babel/runtime": "^7.15.4",
18463
18499
  "is-retry-allowed": "^2.2.0"
@@ -18658,15 +18694,15 @@
18658
18694
  "dev": true
18659
18695
  },
18660
18696
  "browserslist": {
18661
- "version": "4.20.2",
18662
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
18663
- "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
18697
+ "version": "4.20.3",
18698
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
18699
+ "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
18664
18700
  "dev": true,
18665
18701
  "requires": {
18666
- "caniuse-lite": "^1.0.30001317",
18667
- "electron-to-chromium": "^1.4.84",
18702
+ "caniuse-lite": "^1.0.30001332",
18703
+ "electron-to-chromium": "^1.4.118",
18668
18704
  "escalade": "^3.1.1",
18669
- "node-releases": "^2.0.2",
18705
+ "node-releases": "^2.0.3",
18670
18706
  "picocolors": "^1.0.0"
18671
18707
  }
18672
18708
  },
@@ -18803,9 +18839,9 @@
18803
18839
  "dev": true
18804
18840
  },
18805
18841
  "caniuse-lite": {
18806
- "version": "1.0.30001332",
18807
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
18808
- "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==",
18842
+ "version": "1.0.30001335",
18843
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz",
18844
+ "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==",
18809
18845
  "dev": true
18810
18846
  },
18811
18847
  "caseless": {
@@ -19780,13 +19816,24 @@
19780
19816
  "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA=="
19781
19817
  },
19782
19818
  "data-urls": {
19783
- "version": "3.0.1",
19784
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.1.tgz",
19785
- "integrity": "sha512-Ds554NeT5Gennfoo9KN50Vh6tpgtvYEwraYjejXnyTpu1C7oXKxdFk75REooENHE8ndTVOJuv+BEs4/J/xcozw==",
19819
+ "version": "3.0.2",
19820
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
19821
+ "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
19786
19822
  "requires": {
19787
- "abab": "^2.0.3",
19823
+ "abab": "^2.0.6",
19788
19824
  "whatwg-mimetype": "^3.0.0",
19789
- "whatwg-url": "^10.0.0"
19825
+ "whatwg-url": "^11.0.0"
19826
+ },
19827
+ "dependencies": {
19828
+ "whatwg-url": {
19829
+ "version": "11.0.0",
19830
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
19831
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
19832
+ "requires": {
19833
+ "tr46": "^3.0.0",
19834
+ "webidl-conversions": "^7.0.0"
19835
+ }
19836
+ }
19790
19837
  }
19791
19838
  },
19792
19839
  "dateformat": {
@@ -20213,9 +20260,9 @@
20213
20260
  }
20214
20261
  },
20215
20262
  "electron-to-chromium": {
20216
- "version": "1.4.118",
20217
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.118.tgz",
20218
- "integrity": "sha512-maZIKjnYDvF7Fs35nvVcyr44UcKNwybr93Oba2n3HkKDFAtk0svERkLN/HyczJDS3Fo4wU9th9fUQd09ZLtj1w==",
20263
+ "version": "1.4.129",
20264
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.129.tgz",
20265
+ "integrity": "sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ==",
20219
20266
  "dev": true
20220
20267
  },
20221
20268
  "emoji-regex": {
@@ -20267,12 +20314,9 @@
20267
20314
  }
20268
20315
  },
20269
20316
  "engine.io-parser": {
20270
- "version": "5.0.3",
20271
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
20272
- "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
20273
- "requires": {
20274
- "@socket.io/base64-arraybuffer": "~1.0.2"
20275
- }
20317
+ "version": "5.0.4",
20318
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
20319
+ "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
20276
20320
  },
20277
20321
  "errno": {
20278
20322
  "version": "0.1.8",
@@ -23656,9 +23700,9 @@
23656
23700
  }
23657
23701
  },
23658
23702
  "node-releases": {
23659
- "version": "2.0.3",
23660
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
23661
- "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
23703
+ "version": "2.0.4",
23704
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
23705
+ "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
23662
23706
  "dev": true
23663
23707
  },
23664
23708
  "nopt": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testim/testim-cli",
3
- "version": "3.232.0",
3
+ "version": "3.233.0",
4
4
  "description": "Command line interface for running Testing on your CI",
5
5
  "author": "Oren Rubin",
6
6
  "contributors": [{
@@ -154,7 +154,7 @@ class WebDriverHttpRequest {
154
154
  httpDeleteRequest(path) {
155
155
  const requestId = utils.guid();
156
156
  logger.info("DELETE REQUEST", {requestId, path, testResultId: this.testResultId});
157
- return httpRequest.deleteFullRes(`${this.gridUrl}${path}`, this.headers, this.connectionRetryTimeout)
157
+ return httpRequest.deleteFullRes(`${this.gridUrl}${path}`, undefined, this.headers, this.connectionRetryTimeout)
158
158
  .tap((response) => logger.info("DELETE RESPONSE", {
159
159
  requestId,
160
160
  path,
package/runOptions.js CHANGED
@@ -295,7 +295,9 @@ program
295
295
  .option('--require-credentials', 'Log in to Testim if not already logged in')
296
296
 
297
297
  // Tunnel
298
+ .option('tunneld', 'run a tunnel daemon only')
298
299
  .option('--tunnel [tunnel]', 'enable tunnel')
300
+ .option('--tunnel-routes [routes]', 'tunnel routes for cloudflare tunnels')
299
301
  .option('--tunnel-port [tunnel-port]', 'tunnel port address')
300
302
  .option('--tunnel-host-header [tunnel-host-header]', 'tunnel host header')
301
303
  .option('--tunnel-region [tunnel-region]', 'ngrok tunnel region')
@@ -522,6 +524,23 @@ module.exports = {
522
524
  throw err;
523
525
  }
524
526
 
527
+ if (program.tunneld) {
528
+ return {
529
+ tunnel: true,
530
+ tunnelPort: program.tunnelPort,
531
+ tunnelRoutes: program.tunnelRoutes,
532
+ tunnelRoutesOutput: program.tunnelRoutesOutput,
533
+ tunnelHostHeader: program.tunnelHostHeader,
534
+ tunnelRegion: program.tunnelRegion,
535
+ tunnelDiagnostics: program.tunnelDiagnostics,
536
+ tunnelUseHttpAddress: program.tunnelUseHttpAddress,
537
+ tunnelOnlyMode: true,
538
+ token: program.token,
539
+ project: program.project,
540
+ };
541
+ }
542
+
543
+
525
544
  const isTestConfigSpecified = (program.testConfig && program.testConfig.length) || (program.testConfigId && program.testConfigId.length);
526
545
  const isTestPlanSpecified = (program.testPlan && program.testPlan.length) || (program.testPlanId && program.testPlanId.length);
527
546
  const isSuiteSpecified = (program.suite && program.suite.length) || (program.suiteId && program.suiteId.length);
@@ -1108,6 +1127,8 @@ module.exports = {
1108
1127
  // Tunnel
1109
1128
  tunnel: program.tunnel,
1110
1129
  tunnelPort: program.tunnelPort,
1130
+ tunnelRoutes: program.tunnelRoutes,
1131
+ tunnelRoutesOutput: program.tunnelRoutesOutput,
1111
1132
  tunnelHostHeader: program.tunnelHostHeader,
1112
1133
  tunnelRegion: program.tunnelRegion,
1113
1134
  tunnelDiagnostics: program.tunnelDiagnostics,
package/runner.js CHANGED
@@ -213,7 +213,7 @@ function runRunner(options, customExtensionLocalLocation) {
213
213
 
214
214
  return validateCliAccount(options)
215
215
  .log('in runRunner before tunnel.connect')
216
- .then(() => tunnel.connect(options, testimCustomToken.getTokenV3UserData()))
216
+ .then(() => tunnel.connect(options))
217
217
  .log('in runRunner after tunnel.connect')
218
218
  .then(() => new TestPlanRunner(customExtensionLocalLocation).run(options))
219
219
  .log('before tunnel.disconnect')
@@ -88,22 +88,25 @@ class TestPlanRunner {
88
88
  await EyeSdkBuilder.closeBatch(executionId);
89
89
  return;
90
90
  }
91
+ /** @type {Awaited<ReturnType<typeof testimServicesApi['getApplitoolsIntegrationData']>>} */
92
+ let applitoolsIntegrationData;
91
93
  try {
92
94
  if (!tpOptions.company || !tpOptions.company.activePlan || !tpOptions.company.activePlan.premiumFeatures || !tpOptions.company.activePlan.premiumFeatures.applitools) {
93
95
  return;
94
96
  }
95
- const applitoolsIntegrationData = await testimServicesApi.getApplitoolsIntegrationData(tpOptions.project);
96
- if (_.isEmpty(applitoolsIntegrationData)) {
97
+ applitoolsIntegrationData = await testimServicesApi.getApplitoolsIntegrationData(tpOptions.project);
98
+ if (_.isEmpty(applitoolsIntegrationData) || !executionId) {
97
99
  return;
98
100
  }
99
101
  const { runKey: apiKey, url: serverUrl } = applitoolsIntegrationData;
100
102
  const tmpSDK = require('@applitools/eyes-sdk-core').makeSDK({ name: 'Testim.io', version: '4.0.0', spec: {} });
101
103
  await tmpSDK.closeBatches({ batchIds: [executionId], serverUrl, apiKey });
102
104
  } catch (err) {
103
- if (err.message && err.message.startsWith('Request failed with status code 404')) { // If a batch with this name did not exist, do not log an error.
105
+ // If a batch with this name did not exist, do not log an error.
106
+ if (err.message && (err.message.startsWith('Request failed with status code 404') || err.message.startsWith('no batchIds were set'))) {
104
107
  return;
105
108
  }
106
- logger.error('Failed closing batch in extension mode', { err, projectId: tpOptions.project });
109
+ logger.error('Failed closing batch in extension mode', { err, projectId: tpOptions.project, applitoolsIntegrationData, batchIds: [executionId] });
107
110
  }
108
111
  });
109
112
  }
@@ -258,7 +258,7 @@ async function getGridData(options) {
258
258
  if (grid) {
259
259
  return getGridDataByGridName(companyId, grid, allGrids);
260
260
  }
261
- if (hasTestPlanFlag(options)) {
261
+ if (hasTestPlanFlag(options) || options.tunnelOnlyMode) {
262
262
  logger.info('skipping getting grid, as it is set on test plan', { companyId });
263
263
  return undefined;
264
264
  }