sitespeed.io 25.4.0 → 25.5.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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
2
2
 
3
+ ## 25.5.0 - 2022-07-14
4
+ ### Added
5
+ * New scp plugin [#3691](https://github.com/sitespeedio/sitespeed.io/pull/3691). The plugin is exprimental and documentation is coming in a couple of releases.
6
+
7
+ ### Fixed
8
+ * Upgraded to [Browsertime 16.1.3](https://github.com/sitespeedio/browsertime/releases/tag/v16.11.3) that fixes:
9
+ * If one of the visual elements failed, all failed. Fixed in [#1818](https://github.com/sitespeedio/browsertime/pull/1818).
10
+ * Use buffered long tasks instead of injecting the measurement in the page [#1817](https://github.com/sitespeedio/browsertime/pull/1817).
11
+ * Fixed broken Chromedriver and Geckodriver install on Windows.
12
+
3
13
  ## 25.4.0 - 2022-07-05
4
14
  ### Added
5
15
  * Show how many long tasks happens before LCP [#3686](https://github.com/sitespeedio/sitespeed.io/pull/3686) and show when last long task happen [#3687](https://github.com/sitespeedio/sitespeed.io/pull/3687).
package/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM sitespeedio/webbrowsers:chrome-103.0-firefox-102.0-edge-103.0
1
+ FROM sitespeedio/webbrowsers:chrome-103.0-firefox-102.0-edge-103.0-c
2
2
 
3
3
  ARG TARGETPLATFORM=linux/amd64
4
4
 
package/Dockerfile-slim CHANGED
@@ -1,4 +1,4 @@
1
- FROM node:16.15.0-bullseye-slim
1
+ FROM node:16.16.0-bullseye-slim
2
2
 
3
3
  ARG TARGETPLATFORM=linux/amd64
4
4
 
package/lib/cli/cli.js CHANGED
@@ -1088,6 +1088,44 @@ module.exports.parseCommandLine = function parseCommandLine() {
1088
1088
  default: false,
1089
1089
  describe: 'Ignore robots.txt rules of the crawled domain.',
1090
1090
  group: 'Crawler'
1091
+ })
1092
+
1093
+ .option('scp.host', {
1094
+ describe: 'The host.',
1095
+ group: 'scp'
1096
+ })
1097
+ .option('scp. destinationPath', {
1098
+ describe:
1099
+ 'The destionation path on the remote server where the files will be copied.',
1100
+ group: 'scp'
1101
+ })
1102
+ .option('scp.port', {
1103
+ default: 22,
1104
+ describe: 'The port for ssh when scp the result to another server.',
1105
+ group: 'scp'
1106
+ })
1107
+ .option('scp.username', {
1108
+ describe:
1109
+ 'The username. Use username/password or username/privateKey/pem.',
1110
+ group: 'scp'
1111
+ })
1112
+ .option('scp.password', {
1113
+ describe: 'The password if you do not use a pem file.',
1114
+ group: 'scp'
1115
+ })
1116
+ .option('scp.privateKey', {
1117
+ describe: 'Path to the pem file.',
1118
+ group: 'scp'
1119
+ })
1120
+ .option('scp.passphrase', {
1121
+ describe: 'The passphrase for the pem file.',
1122
+ group: 'scp'
1123
+ })
1124
+ .option('scp.removeLocalResult', {
1125
+ default: true,
1126
+ describe:
1127
+ 'Remove the files locally when the files has been copied to the other server.',
1128
+ group: 'scp'
1091
1129
  });
1092
1130
 
1093
1131
  // Grafana CLI options
@@ -25,12 +25,14 @@ function shouldIgnoreMessage(message) {
25
25
  'html.css',
26
26
  'html.pug',
27
27
  's3.finished',
28
+ 'scp.finished',
28
29
  'gcs.finished',
29
30
  'ftp.finished',
30
31
  'graphite.setup',
31
32
  'influxdb.setup',
32
33
  'grafana.setup',
33
- 'sustainable.setup'
34
+ 'sustainable.setup',
35
+ 'scp.setup'
34
36
  ].indexOf(message.type) >= 0
35
37
  );
36
38
  }
@@ -152,6 +152,7 @@ module.exports = {
152
152
  break;
153
153
  }
154
154
  case 'gcs.finished':
155
+ case 'scp.finished':
155
156
  case 'ftp.finished':
156
157
  case 's3.finished': {
157
158
  if (this.waitForUpload && options.messages.indexOf('budget') > -1) {
@@ -0,0 +1,134 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs-extra');
4
+ const path = require('path');
5
+ const { Client } = require('node-scp');
6
+ const readdir = require('recursive-readdir');
7
+ const log = require('intel').getLogger('sitespeedio.plugin.scp');
8
+ const throwIfMissing = require('../../support/util').throwIfMissing;
9
+
10
+ async function getClient(scpOptions) {
11
+ const options = {
12
+ host: scpOptions.host,
13
+ port: scpOptions.port || 22
14
+ };
15
+ if (scpOptions.username) {
16
+ options.username = scpOptions.username;
17
+ }
18
+ if (scpOptions.password) {
19
+ options.password = scpOptions.password;
20
+ }
21
+ if (scpOptions.privateKey) {
22
+ options.privateKey = fs.readFileSync(scpOptions.privateKey);
23
+ }
24
+ if (scpOptions.passphrase) {
25
+ options.passphrase = scpOptions.passphrase;
26
+ }
27
+ return await Client(options);
28
+ }
29
+
30
+ async function upload(dir, scpOptions, prefix) {
31
+ let client;
32
+ try {
33
+ client = await getClient(scpOptions);
34
+ const dirs = prefix.split('/');
35
+ let fullPath = '';
36
+ for (let dir of dirs) {
37
+ fullPath += dir + '/';
38
+ const doThePathExist = await client.exists(
39
+ path.join(scpOptions.destinationPath, fullPath)
40
+ );
41
+ if (!doThePathExist) {
42
+ await client.mkdir(path.join(scpOptions.destinationPath, fullPath));
43
+ }
44
+ }
45
+ await client.uploadDir(dir, path.join(scpOptions.destinationPath, prefix));
46
+ } catch (e) {
47
+ log.error(e);
48
+ throw e;
49
+ } finally {
50
+ if (client) {
51
+ client.close();
52
+ }
53
+ }
54
+ }
55
+
56
+ async function uploadFiles(files, scpOptions, prefix) {
57
+ let client;
58
+ try {
59
+ client = await getClient(scpOptions);
60
+ for (let file of files) {
61
+ await client.uploadFile(
62
+ file,
63
+ path.join(scpOptions.destinationPath, prefix, path.basename(file))
64
+ );
65
+ }
66
+ } catch (e) {
67
+ log.error(e);
68
+ throw e;
69
+ } finally {
70
+ if (client) {
71
+ client.close();
72
+ }
73
+ }
74
+ }
75
+
76
+ async function uploadLatestFiles(dir, scpOptions, prefix) {
77
+ function ignoreDirs(file, stats) {
78
+ return stats.isDirectory();
79
+ }
80
+ const files = await readdir(dir, [ignoreDirs]);
81
+
82
+ return uploadFiles(files, scpOptions, prefix);
83
+ }
84
+
85
+ module.exports = {
86
+ open(context, options) {
87
+ this.scpOptions = options.scp;
88
+ this.options = options;
89
+ this.make = context.messageMaker('scp').make;
90
+ throwIfMissing(
91
+ this.scpOptions,
92
+ ['host', 'destinationPath', 'username'],
93
+ 'scp'
94
+ );
95
+ this.storageManager = context.storageManager;
96
+ },
97
+
98
+ async processMessage(message, queue) {
99
+ if (message.type === 'sitespeedio.setup') {
100
+ // Let other plugins know that the scp plugin is alive
101
+ queue.postMessage(this.make('scp.setup'));
102
+ } else if (message.type === 'html.finished') {
103
+ const make = this.make;
104
+ const baseDir = this.storageManager.getBaseDir();
105
+
106
+ log.info(
107
+ `Uploading ${baseDir} using scp bucket, this can take a while ...`
108
+ );
109
+
110
+ try {
111
+ await upload(
112
+ baseDir,
113
+ this.scpOptions,
114
+ this.storageManager.getStoragePrefix()
115
+ );
116
+ if (this.options.copyLatestFilesToBase) {
117
+ const rootPath = path.resolve(baseDir, '..');
118
+ const prefix = this.storageManager.getStoragePrefix();
119
+ const firstPart = prefix.split('/')[0];
120
+ await uploadLatestFiles(rootPath, this.scpOptions, firstPart);
121
+ }
122
+ log.info('Finished upload using scp');
123
+ if (this.scpOptions.removeLocalResult) {
124
+ await fs.remove(baseDir);
125
+ log.debug(`Removed local files and directory ${baseDir}`);
126
+ }
127
+ } catch (e) {
128
+ queue.postMessage(make('error', e));
129
+ log.error('Could not upload using scp', e);
130
+ }
131
+ queue.postMessage(make('scp.finished'));
132
+ }
133
+ }
134
+ };
@@ -208,6 +208,7 @@ module.exports = {
208
208
 
209
209
  case 'gcs.finished':
210
210
  case 'ftp.finished':
211
+ case 'scp.finished':
211
212
  case 's3.finished': {
212
213
  return send(
213
214
  this.options,
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "sitespeed.io",
3
- "version": "25.4.0",
3
+ "version": "25.5.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "sitespeed.io",
9
- "version": "25.4.0",
9
+ "version": "25.5.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@google-cloud/storage": "5.19.3",
13
13
  "@tgwf/co2": "0.8.0",
14
14
  "aws-sdk": "2.1121.0",
15
15
  "axe-core": "4.4.2",
16
- "browsertime": "16.11.2",
16
+ "browsertime": "16.11.3",
17
17
  "cli-color": "2.0.2",
18
18
  "coach-core": "7.1.2",
19
19
  "concurrent-queue": "7.0.2",
@@ -40,6 +40,7 @@
40
40
  "lodash.set": "4.3.2",
41
41
  "lodash.union": "4.6.0",
42
42
  "markdown": "0.5.0",
43
+ "node-scp": "0.0.18",
43
44
  "node-slack": "0.0.7",
44
45
  "os-name": "4.0.0",
45
46
  "p-limit": "2.2.2",
@@ -886,9 +887,9 @@
886
887
  }
887
888
  },
888
889
  "node_modules/@sitespeed.io/chromedriver": {
889
- "version": "103.0.5060-24",
890
- "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-103.0.5060-24.tgz",
891
- "integrity": "sha512-T4Ho7BFd1REcI85c7Al0IfXHW8hdL5lrFug72Dnl7FG7so5NNqGqEqI8Mba9ap47caQQZKzHON7FDTHHksndow==",
890
+ "version": "103.0.5060-24b",
891
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-103.0.5060-24b.tgz",
892
+ "integrity": "sha512-zxZg05UYPyjFa+6LEB9plmiX3D2oRMAjxdLqWwmEA+Rw9AV1iOGkPF/I/qMMyJwX74oc/81y9VLGsC6X2ZB+sA==",
892
893
  "hasInstallScript": true,
893
894
  "dependencies": {
894
895
  "node-downloader-helper": "2.1.1",
@@ -906,9 +907,9 @@
906
907
  }
907
908
  },
908
909
  "node_modules/@sitespeed.io/geckodriver": {
909
- "version": "0.31.0-b",
910
- "resolved": "https://registry.npmjs.org/@sitespeed.io/geckodriver/-/geckodriver-0.31.0-b.tgz",
911
- "integrity": "sha512-Q5o3YXjz1I+fm55+9GcC5Tg2v66ZGzTgwfngIb6LgnQi94d+zI4DBJKn1PH57JAkgPzomJj6C53JhxTGgQ8Usg==",
910
+ "version": "0.31.0-c",
911
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/geckodriver/-/geckodriver-0.31.0-c.tgz",
912
+ "integrity": "sha512-VLOM5N9TAZYoigx0M/7OyNhdh7xCNEG3NAuwJ6A+5G966nbYELfGbnoxDdCgI5Yo6zKjjU/F2yPLoyrbOmmgYQ==",
912
913
  "hasInstallScript": true,
913
914
  "dependencies": {
914
915
  "node-downloader-helper": "2.1.1",
@@ -1237,9 +1238,12 @@
1237
1238
  "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
1238
1239
  },
1239
1240
  "node_modules/asn1": {
1240
- "version": "0.2.3",
1241
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
1242
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
1241
+ "version": "0.2.6",
1242
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
1243
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
1244
+ "dependencies": {
1245
+ "safer-buffer": "~2.1.0"
1246
+ }
1243
1247
  },
1244
1248
  "node_modules/assert-never": {
1245
1249
  "version": "1.2.1",
@@ -1613,10 +1617,9 @@
1613
1617
  "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
1614
1618
  },
1615
1619
  "node_modules/bcrypt-pbkdf": {
1616
- "version": "1.0.1",
1617
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
1618
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
1619
- "optional": true,
1620
+ "version": "1.0.2",
1621
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
1622
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
1620
1623
  "dependencies": {
1621
1624
  "tweetnacl": "^0.14.3"
1622
1625
  }
@@ -1681,15 +1684,15 @@
1681
1684
  }
1682
1685
  },
1683
1686
  "node_modules/browsertime": {
1684
- "version": "16.11.2",
1685
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.11.2.tgz",
1686
- "integrity": "sha512-a928+ZFh8M0lp+VHw+D8Wd/Q5Ls/z6JytpoH5N8ZqWXW9BJBupo8TT9kshzKtgDPQ9xaluoys07nE/G6bzB5Ww==",
1687
+ "version": "16.11.3",
1688
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.11.3.tgz",
1689
+ "integrity": "sha512-3rdDefKz7nWSdTlPUV4zeqnz1PxoqlikHLQKsp915QszO80UqaI+nhV5G50pJHYZ7qhCVVUOXVNUGESpBkQfBg==",
1687
1690
  "dependencies": {
1688
1691
  "@cypress/xvfb": "1.2.4",
1689
1692
  "@devicefarmer/adbkit": "2.11.3",
1690
- "@sitespeed.io/chromedriver": "103.0.5060-24",
1693
+ "@sitespeed.io/chromedriver": "103.0.5060-24b",
1691
1694
  "@sitespeed.io/edgedriver": "103.0.1264-37",
1692
- "@sitespeed.io/geckodriver": "0.31.0-b",
1695
+ "@sitespeed.io/geckodriver": "0.31.0-c",
1693
1696
  "@sitespeed.io/throttle": "4.0.1",
1694
1697
  "@sitespeed.io/tracium": "0.3.3",
1695
1698
  "btoa": "1.2.1",
@@ -1756,6 +1759,15 @@
1756
1759
  "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
1757
1760
  "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
1758
1761
  },
1762
+ "node_modules/buildcheck": {
1763
+ "version": "0.0.3",
1764
+ "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz",
1765
+ "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==",
1766
+ "optional": true,
1767
+ "engines": {
1768
+ "node": ">=10.0.0"
1769
+ }
1770
+ },
1759
1771
  "node_modules/builtin-modules": {
1760
1772
  "version": "1.1.1",
1761
1773
  "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
@@ -2365,6 +2377,20 @@
2365
2377
  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
2366
2378
  "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
2367
2379
  },
2380
+ "node_modules/cpu-features": {
2381
+ "version": "0.0.4",
2382
+ "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz",
2383
+ "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==",
2384
+ "hasInstallScript": true,
2385
+ "optional": true,
2386
+ "dependencies": {
2387
+ "buildcheck": "0.0.3",
2388
+ "nan": "^2.15.0"
2389
+ },
2390
+ "engines": {
2391
+ "node": ">=10.0.0"
2392
+ }
2393
+ },
2368
2394
  "node_modules/cross-spawn": {
2369
2395
  "version": "7.0.3",
2370
2396
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -5764,6 +5790,12 @@
5764
5790
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
5765
5791
  "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
5766
5792
  },
5793
+ "node_modules/nan": {
5794
+ "version": "2.16.0",
5795
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz",
5796
+ "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==",
5797
+ "optional": true
5798
+ },
5767
5799
  "node_modules/natural-compare": {
5768
5800
  "version": "1.4.0",
5769
5801
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -5819,6 +5851,14 @@
5819
5851
  "node": ">= 6.0.0"
5820
5852
  }
5821
5853
  },
5854
+ "node_modules/node-scp": {
5855
+ "version": "0.0.18",
5856
+ "resolved": "https://registry.npmjs.org/node-scp/-/node-scp-0.0.18.tgz",
5857
+ "integrity": "sha512-PHRXMAb8Wfjtrsr6zz2UbOG+XcyDZUM/r8ZW0aUVxbuXfYex+wR0OD/jqw6TpdkvV+ddNLh+UBNV8oJ3R6Q9RA==",
5858
+ "dependencies": {
5859
+ "ssh2": "^1.6.0"
5860
+ }
5861
+ },
5822
5862
  "node_modules/node-slack": {
5823
5863
  "version": "0.0.7",
5824
5864
  "resolved": "https://registry.npmjs.org/node-slack/-/node-slack-0.0.7.tgz",
@@ -7464,6 +7504,23 @@
7464
7504
  "node": ">=4"
7465
7505
  }
7466
7506
  },
7507
+ "node_modules/ssh2": {
7508
+ "version": "1.11.0",
7509
+ "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz",
7510
+ "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==",
7511
+ "hasInstallScript": true,
7512
+ "dependencies": {
7513
+ "asn1": "^0.2.4",
7514
+ "bcrypt-pbkdf": "^1.0.2"
7515
+ },
7516
+ "engines": {
7517
+ "node": ">=10.16.0"
7518
+ },
7519
+ "optionalDependencies": {
7520
+ "cpu-features": "~0.0.4",
7521
+ "nan": "^2.16.0"
7522
+ }
7523
+ },
7467
7524
  "node_modules/sshpk": {
7468
7525
  "version": "1.14.1",
7469
7526
  "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
@@ -7947,8 +8004,7 @@
7947
8004
  "node_modules/tweetnacl": {
7948
8005
  "version": "0.14.5",
7949
8006
  "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
7950
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
7951
- "optional": true
8007
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
7952
8008
  },
7953
8009
  "node_modules/type": {
7954
8010
  "version": "1.2.0",
@@ -9164,9 +9220,9 @@
9164
9220
  }
9165
9221
  },
9166
9222
  "@sitespeed.io/chromedriver": {
9167
- "version": "103.0.5060-24",
9168
- "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-103.0.5060-24.tgz",
9169
- "integrity": "sha512-T4Ho7BFd1REcI85c7Al0IfXHW8hdL5lrFug72Dnl7FG7so5NNqGqEqI8Mba9ap47caQQZKzHON7FDTHHksndow==",
9223
+ "version": "103.0.5060-24b",
9224
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-103.0.5060-24b.tgz",
9225
+ "integrity": "sha512-zxZg05UYPyjFa+6LEB9plmiX3D2oRMAjxdLqWwmEA+Rw9AV1iOGkPF/I/qMMyJwX74oc/81y9VLGsC6X2ZB+sA==",
9170
9226
  "requires": {
9171
9227
  "node-downloader-helper": "2.1.1",
9172
9228
  "node-stream-zip": "1.15.0"
@@ -9182,9 +9238,9 @@
9182
9238
  }
9183
9239
  },
9184
9240
  "@sitespeed.io/geckodriver": {
9185
- "version": "0.31.0-b",
9186
- "resolved": "https://registry.npmjs.org/@sitespeed.io/geckodriver/-/geckodriver-0.31.0-b.tgz",
9187
- "integrity": "sha512-Q5o3YXjz1I+fm55+9GcC5Tg2v66ZGzTgwfngIb6LgnQi94d+zI4DBJKn1PH57JAkgPzomJj6C53JhxTGgQ8Usg==",
9241
+ "version": "0.31.0-c",
9242
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/geckodriver/-/geckodriver-0.31.0-c.tgz",
9243
+ "integrity": "sha512-VLOM5N9TAZYoigx0M/7OyNhdh7xCNEG3NAuwJ6A+5G966nbYELfGbnoxDdCgI5Yo6zKjjU/F2yPLoyrbOmmgYQ==",
9188
9244
  "requires": {
9189
9245
  "node-downloader-helper": "2.1.1",
9190
9246
  "node-stream-zip": "1.15.0",
@@ -9438,9 +9494,12 @@
9438
9494
  "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
9439
9495
  },
9440
9496
  "asn1": {
9441
- "version": "0.2.3",
9442
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
9443
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
9497
+ "version": "0.2.6",
9498
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
9499
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
9500
+ "requires": {
9501
+ "safer-buffer": "~2.1.0"
9502
+ }
9444
9503
  },
9445
9504
  "assert-never": {
9446
9505
  "version": "1.2.1",
@@ -9719,10 +9778,9 @@
9719
9778
  "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
9720
9779
  },
9721
9780
  "bcrypt-pbkdf": {
9722
- "version": "1.0.1",
9723
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
9724
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
9725
- "optional": true,
9781
+ "version": "1.0.2",
9782
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
9783
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
9726
9784
  "requires": {
9727
9785
  "tweetnacl": "^0.14.3"
9728
9786
  }
@@ -9778,15 +9836,15 @@
9778
9836
  }
9779
9837
  },
9780
9838
  "browsertime": {
9781
- "version": "16.11.2",
9782
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.11.2.tgz",
9783
- "integrity": "sha512-a928+ZFh8M0lp+VHw+D8Wd/Q5Ls/z6JytpoH5N8ZqWXW9BJBupo8TT9kshzKtgDPQ9xaluoys07nE/G6bzB5Ww==",
9839
+ "version": "16.11.3",
9840
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-16.11.3.tgz",
9841
+ "integrity": "sha512-3rdDefKz7nWSdTlPUV4zeqnz1PxoqlikHLQKsp915QszO80UqaI+nhV5G50pJHYZ7qhCVVUOXVNUGESpBkQfBg==",
9784
9842
  "requires": {
9785
9843
  "@cypress/xvfb": "1.2.4",
9786
9844
  "@devicefarmer/adbkit": "2.11.3",
9787
- "@sitespeed.io/chromedriver": "103.0.5060-24",
9845
+ "@sitespeed.io/chromedriver": "103.0.5060-24b",
9788
9846
  "@sitespeed.io/edgedriver": "103.0.1264-37",
9789
- "@sitespeed.io/geckodriver": "0.31.0-b",
9847
+ "@sitespeed.io/geckodriver": "0.31.0-c",
9790
9848
  "@sitespeed.io/throttle": "4.0.1",
9791
9849
  "@sitespeed.io/tracium": "0.3.3",
9792
9850
  "btoa": "1.2.1",
@@ -9836,6 +9894,12 @@
9836
9894
  "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
9837
9895
  "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
9838
9896
  },
9897
+ "buildcheck": {
9898
+ "version": "0.0.3",
9899
+ "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz",
9900
+ "integrity": "sha512-pziaA+p/wdVImfcbsZLNF32EiWyujlQLwolMqUQE8xpKNOH7KmZQaY8sXN7DGOEzPAElo9QTaeNRfGnf3iOJbA==",
9901
+ "optional": true
9902
+ },
9839
9903
  "builtin-modules": {
9840
9904
  "version": "1.1.1",
9841
9905
  "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
@@ -10315,6 +10379,16 @@
10315
10379
  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
10316
10380
  "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
10317
10381
  },
10382
+ "cpu-features": {
10383
+ "version": "0.0.4",
10384
+ "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz",
10385
+ "integrity": "sha512-fKiZ/zp1mUwQbnzb9IghXtHtDoTMtNeb8oYGx6kX2SYfhnG0HNdBEBIzB9b5KlXu5DQPhfy3mInbBxFcgwAr3A==",
10386
+ "optional": true,
10387
+ "requires": {
10388
+ "buildcheck": "0.0.3",
10389
+ "nan": "^2.15.0"
10390
+ }
10391
+ },
10318
10392
  "cross-spawn": {
10319
10393
  "version": "7.0.3",
10320
10394
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -12938,6 +13012,12 @@
12938
13012
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
12939
13013
  "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
12940
13014
  },
13015
+ "nan": {
13016
+ "version": "2.16.0",
13017
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz",
13018
+ "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==",
13019
+ "optional": true
13020
+ },
12941
13021
  "natural-compare": {
12942
13022
  "version": "1.4.0",
12943
13023
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -12973,6 +13053,14 @@
12973
13053
  "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
12974
13054
  "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA=="
12975
13055
  },
13056
+ "node-scp": {
13057
+ "version": "0.0.18",
13058
+ "resolved": "https://registry.npmjs.org/node-scp/-/node-scp-0.0.18.tgz",
13059
+ "integrity": "sha512-PHRXMAb8Wfjtrsr6zz2UbOG+XcyDZUM/r8ZW0aUVxbuXfYex+wR0OD/jqw6TpdkvV+ddNLh+UBNV8oJ3R6Q9RA==",
13060
+ "requires": {
13061
+ "ssh2": "^1.6.0"
13062
+ }
13063
+ },
12976
13064
  "node-slack": {
12977
13065
  "version": "0.0.7",
12978
13066
  "resolved": "https://registry.npmjs.org/node-slack/-/node-slack-0.0.7.tgz",
@@ -14244,6 +14332,17 @@
14244
14332
  "node-addon-api": "^1.3.0"
14245
14333
  }
14246
14334
  },
14335
+ "ssh2": {
14336
+ "version": "1.11.0",
14337
+ "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.11.0.tgz",
14338
+ "integrity": "sha512-nfg0wZWGSsfUe/IBJkXVll3PEZ//YH2guww+mP88gTpuSU4FtZN7zu9JoeTGOyCNx2dTDtT9fOpWwlzyj4uOOw==",
14339
+ "requires": {
14340
+ "asn1": "^0.2.4",
14341
+ "bcrypt-pbkdf": "^1.0.2",
14342
+ "cpu-features": "~0.0.4",
14343
+ "nan": "^2.16.0"
14344
+ }
14345
+ },
14247
14346
  "sshpk": {
14248
14347
  "version": "1.14.1",
14249
14348
  "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
@@ -14621,8 +14720,7 @@
14621
14720
  "tweetnacl": {
14622
14721
  "version": "0.14.5",
14623
14722
  "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
14624
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
14625
- "optional": true
14723
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
14626
14724
  },
14627
14725
  "type": {
14628
14726
  "version": "1.2.0",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "sitespeed.io": "./bin/sitespeed.js",
5
5
  "sitespeed.io-wpr": "./bin/browsertimeWebPageReplay.js"
6
6
  },
7
- "version": "25.4.0",
7
+ "version": "25.5.0",
8
8
  "description": "Analyze the web performance of your site",
9
9
  "keywords": [
10
10
  "performance",
@@ -80,7 +80,7 @@
80
80
  "@tgwf/co2": "0.8.0",
81
81
  "aws-sdk": "2.1121.0",
82
82
  "axe-core": "4.4.2",
83
- "browsertime": "16.11.2",
83
+ "browsertime": "16.11.3",
84
84
  "coach-core": "7.1.2",
85
85
  "cli-color": "2.0.2",
86
86
  "concurrent-queue": "7.0.2",
@@ -107,6 +107,7 @@
107
107
  "lodash.set": "4.3.2",
108
108
  "lodash.union": "4.6.0",
109
109
  "markdown": "0.5.0",
110
+ "node-scp": "0.0.18",
110
111
  "node-slack": "0.0.7",
111
112
  "os-name": "4.0.0",
112
113
  "p-limit": "2.2.2",