@wdio/browserstack-service 8.34.1 → 9.0.0-alpha.9
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/build/Percy/Percy.js +1 -1
- package/build/Percy/PercyBinary.d.ts +2 -3
- package/build/Percy/PercyBinary.d.ts.map +1 -1
- package/build/Percy/PercyBinary.js +41 -48
- package/build/config.d.ts +1 -1
- package/build/config.d.ts.map +1 -1
- package/build/constants.d.ts.map +1 -1
- package/build/crash-reporter.d.ts.map +1 -1
- package/build/crash-reporter.js +15 -9
- package/build/data-store.d.ts +0 -1
- package/build/data-store.d.ts.map +1 -1
- package/build/data-store.js +1 -1
- package/build/exitHandler.d.ts.map +1 -1
- package/build/exitHandler.js +0 -3
- package/build/fetchWrapper.d.ts +6 -0
- package/build/fetchWrapper.d.ts.map +1 -0
- package/build/fetchWrapper.js +14 -0
- package/build/insights-handler.d.ts.map +1 -1
- package/build/insights-handler.js +0 -2
- package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -1
- package/build/instrumentation/funnelInstrumentation.js +11 -10
- package/build/launcher.d.ts.map +1 -1
- package/build/launcher.js +15 -11
- package/build/reporter.d.ts.map +1 -1
- package/build/reporter.js +3 -0
- package/build/request-handler.d.ts +1 -1
- package/build/request-handler.d.ts.map +1 -1
- package/build/request-handler.js +1 -1
- package/build/service.d.ts +1 -1
- package/build/service.d.ts.map +1 -1
- package/build/service.js +29 -17
- package/build/testOps/requestUtils.js +7 -7
- package/build/types.d.ts +0 -13
- package/build/types.d.ts.map +1 -1
- package/build/util.d.ts +2 -11
- package/build/util.d.ts.map +1 -1
- package/build/util.js +57 -52
- package/package.json +9 -9
package/build/Percy/Percy.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type { Options } from '@wdio/types';
|
|
2
1
|
declare class PercyBinary {
|
|
3
2
|
#private;
|
|
4
3
|
constructor();
|
|
5
|
-
getBinaryPath(
|
|
4
|
+
getBinaryPath(): Promise<string>;
|
|
6
5
|
validateBinary(binaryPath: string): Promise<unknown>;
|
|
7
|
-
download(
|
|
6
|
+
download(destParentDir: any): Promise<string>;
|
|
8
7
|
}
|
|
9
8
|
export default PercyBinary;
|
|
10
9
|
//# sourceMappingURL=PercyBinary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PercyBinary.d.ts","sourceRoot":"","sources":["../../src/Percy/PercyBinary.ts"],"names":[],"mappings":"AAUA,
|
|
1
|
+
{"version":3,"file":"PercyBinary.d.ts","sourceRoot":"","sources":["../../src/Percy/PercyBinary.ts"],"names":[],"mappings":"AAUA,cAAM,WAAW;;;IAmDP,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBhC,cAAc,CAAC,UAAU,EAAE,MAAM;IAiBjC,QAAQ,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;CA6DtD;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import url from 'node:url';
|
|
2
1
|
import yauzl from 'yauzl';
|
|
3
2
|
import fs from 'node:fs';
|
|
4
3
|
import fsp from 'node:fs/promises';
|
|
5
|
-
import
|
|
4
|
+
import { pipeline } from 'node:stream/promises';
|
|
6
5
|
import path from 'node:path';
|
|
7
6
|
import os from 'node:os';
|
|
8
7
|
import { spawn } from 'node:child_process';
|
|
@@ -55,18 +54,18 @@ class PercyBinary {
|
|
|
55
54
|
}
|
|
56
55
|
throw new Error('Error trying to download percy binary');
|
|
57
56
|
}
|
|
58
|
-
async getBinaryPath(
|
|
57
|
+
async getBinaryPath() {
|
|
59
58
|
const destParentDir = await this.#getAvailableDirs();
|
|
60
59
|
const binaryPath = path.join(destParentDir, this.#binaryName);
|
|
61
60
|
if (await this.#checkPath(binaryPath)) {
|
|
62
61
|
return binaryPath;
|
|
63
62
|
}
|
|
64
|
-
const downloadedBinaryPath = await this.download(
|
|
63
|
+
const downloadedBinaryPath = await this.download(destParentDir);
|
|
65
64
|
const isValid = await this.validateBinary(downloadedBinaryPath);
|
|
66
65
|
if (!isValid) {
|
|
67
66
|
// retry once
|
|
68
67
|
PercyLogger.error('Corrupt percy binary, retrying');
|
|
69
|
-
return await this.download(
|
|
68
|
+
return await this.download(destParentDir);
|
|
70
69
|
}
|
|
71
70
|
return downloadedBinaryPath;
|
|
72
71
|
}
|
|
@@ -85,7 +84,7 @@ class PercyBinary {
|
|
|
85
84
|
});
|
|
86
85
|
});
|
|
87
86
|
}
|
|
88
|
-
async download(
|
|
87
|
+
async download(destParentDir) {
|
|
89
88
|
if (!await this.#checkPath(destParentDir)) {
|
|
90
89
|
await fsp.mkdir(destParentDir);
|
|
91
90
|
}
|
|
@@ -93,54 +92,48 @@ class PercyBinary {
|
|
|
93
92
|
const zipFilePath = path.join(destParentDir, binaryName + '.zip');
|
|
94
93
|
const binaryPath = path.join(destParentDir, binaryName);
|
|
95
94
|
const downloadedFileStream = fs.createWriteStream(zipFilePath);
|
|
96
|
-
const
|
|
95
|
+
const response = await fetch(this.#httpPath);
|
|
96
|
+
await pipeline(response.body, downloadedFileStream);
|
|
97
97
|
return new Promise((resolve, reject) => {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
.on('
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
yauzl.open(zipFilePath, { lazyEntries: true }, function (err, zipfile) {
|
|
99
|
+
if (err) {
|
|
100
|
+
return reject(err);
|
|
101
|
+
}
|
|
102
|
+
zipfile.readEntry();
|
|
103
|
+
zipfile.on('entry', (entry) => {
|
|
104
|
+
if (/\/$/.test(entry.fileName)) {
|
|
105
|
+
// Directory file names end with '/'.
|
|
106
|
+
zipfile.readEntry();
|
|
107
107
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
zipfile.readEntry();
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
// file entry
|
|
116
|
-
const writeStream = fs.createWriteStream(path.join(destParentDir, entry.fileName));
|
|
117
|
-
zipfile.openReadStream(entry, function (zipErr, readStream) {
|
|
118
|
-
if (zipErr) {
|
|
119
|
-
reject(err);
|
|
120
|
-
}
|
|
121
|
-
readStream.on('end', function () {
|
|
122
|
-
writeStream.close();
|
|
123
|
-
zipfile.readEntry();
|
|
124
|
-
});
|
|
125
|
-
readStream.pipe(writeStream);
|
|
126
|
-
});
|
|
127
|
-
if (entry.fileName === binaryName) {
|
|
128
|
-
zipfile.close();
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
zipfile.on('error', (zipErr) => {
|
|
133
|
-
reject(zipErr);
|
|
134
|
-
});
|
|
135
|
-
zipfile.once('end', () => {
|
|
136
|
-
fs.chmod(binaryPath, '0755', function (zipErr) {
|
|
108
|
+
else {
|
|
109
|
+
// file entry
|
|
110
|
+
const writeStream = fs.createWriteStream(path.join(destParentDir, entry.fileName));
|
|
111
|
+
zipfile.openReadStream(entry, function (zipErr, readStream) {
|
|
137
112
|
if (zipErr) {
|
|
138
|
-
reject(
|
|
113
|
+
reject(err);
|
|
139
114
|
}
|
|
140
|
-
|
|
115
|
+
readStream.on('end', function () {
|
|
116
|
+
writeStream.close();
|
|
117
|
+
zipfile.readEntry();
|
|
118
|
+
});
|
|
119
|
+
readStream.pipe(writeStream);
|
|
141
120
|
});
|
|
142
|
-
|
|
121
|
+
if (entry.fileName === binaryName) {
|
|
122
|
+
zipfile.close();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
zipfile.on('error', (zipErr) => {
|
|
127
|
+
reject(zipErr);
|
|
128
|
+
});
|
|
129
|
+
zipfile.once('end', () => {
|
|
130
|
+
fs.chmod(binaryPath, '0755', function (zipErr) {
|
|
131
|
+
if (zipErr) {
|
|
132
|
+
reject(zipErr);
|
|
133
|
+
}
|
|
134
|
+
resolve(binaryPath);
|
|
143
135
|
});
|
|
136
|
+
zipfile.close();
|
|
144
137
|
});
|
|
145
138
|
});
|
|
146
139
|
});
|
package/build/config.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ declare class BrowserStackConfig {
|
|
|
16
16
|
appAutomate: boolean;
|
|
17
17
|
automate: boolean;
|
|
18
18
|
funnelDataSent: boolean;
|
|
19
|
-
|
|
19
|
+
constructor(options: BrowserstackConfig & Options.Testrunner, config: Options.Testrunner);
|
|
20
20
|
sentFunnelData(): void;
|
|
21
21
|
}
|
|
22
22
|
export default BrowserStackConfig;
|
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAGtD,cAAM,kBAAkB;IACpB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,GAAG,kBAAkB;IAO/G,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,aAAa,CAAA;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,aAAa,EAAE,OAAO,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,GAAC,SAAS,CAAA;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoB;IACrC,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,OAAO,CAAQ;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAGtD,cAAM,kBAAkB;IACpB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,GAAG,kBAAkB;IAO/G,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,aAAa,CAAA;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,aAAa,EAAE,OAAO,CAAA;IACtB,GAAG,CAAC,EAAE,MAAM,GAAC,SAAS,CAAA;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoB;IACrC,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,OAAO,CAAQ;gBAE1B,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU;IAaxF,cAAc;CAIjB;AAED,eAAe,kBAAkB,CAAA"}
|
package/build/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKpD,eAAO,MAAM,mBAAmB,qHAStB,CAAA;AAEV,eAAO,MAAM,mBAAmB,UAI/B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,kBAAkB,CAKvD,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,OAAO,OAAoC,CAAA;AAEvE,eAAO,MAAM,aAAa,qDAAqD,CAAA;AAC/E,eAAO,MAAM,mBAAmB,iBAAiB,CAAA;AACjD,eAAO,MAAM,mBAAmB,iBAAiB,CAAA;AACjD,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAC5D,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,mBAAmB,OAAO,CAAA;AACvC,eAAO,MAAM,iBAAiB,UAAgH,CAAA;AAC9I,eAAO,MAAM,wCAAwC,OAAO,CAAA;AAC5D,eAAO,MAAM,yCAAyC,MAAM,CAAA;AAC5D,eAAO,MAAM,sBAAsB,KAAuB,CAAA;AAE1D,eAAO,MAAM,qBAAqB,+CAA+C,CAAA;AACjF,eAAO,MAAM,wBAAwB,UAA6D,CAAA;AAElG,eAAO,MAAM,SAAS,iCAAiC,CAAA;AACvD,eAAO,MAAM,mBAAmB,kDAAkD,CAAA;AAClF,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AAExD,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAE/C,eAAO,MAAM,qCAAqC,UAQjD,CAAA;AAED,eAAO,MAAM,aAAa,UAAwD,CAAA;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKpD,eAAO,MAAM,mBAAmB,qHAStB,CAAA;AAEV,eAAO,MAAM,mBAAmB,UAI/B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,kBAAkB,CAKvD,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,OAAO,OAAoC,CAAA;AAEvE,eAAO,MAAM,aAAa,qDAAqD,CAAA;AAC/E,eAAO,MAAM,mBAAmB,iBAAiB,CAAA;AACjD,eAAO,MAAM,mBAAmB,iBAAiB,CAAA;AACjD,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAC5D,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,mBAAmB,OAAO,CAAA;AACvC,eAAO,MAAM,iBAAiB,UAAgH,CAAA;AAC9I,eAAO,MAAM,wCAAwC,OAAO,CAAA;AAC5D,eAAO,MAAM,yCAAyC,MAAM,CAAA;AAC5D,eAAO,MAAM,sBAAsB,KAAuB,CAAA;AAE1D,eAAO,MAAM,qBAAqB,+CAA+C,CAAA;AACjF,eAAO,MAAM,wBAAwB,UAA6D,CAAA;AAElG,eAAO,MAAM,SAAS,iCAAiC,CAAA;AACvD,eAAO,MAAM,mBAAmB,kDAAkD,CAAA;AAClF,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AAExD,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAE/C,eAAO,MAAM,qCAAqC,UAQjD,CAAA;AAED,eAAO,MAAM,aAAa,UAAwD,CAAA;AAClF,eAAO,MAAM,kBAAkB;;;;;CAK9B,CAAA;AAED,eAAO,MAAM,0BAA0B,8CAA8C,CAAA;AAKrF,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAG/C,eAAO,MAAM,sBAAsB,iCAAiC,CAAA;AAGpE,eAAO,MAAM,oBAAoB,+BAA+B,CAAA;AAGhE,eAAO,MAAM,oBAAoB,uCAAuC,CAAA;AAGxE,eAAO,MAAM,eAAe,6BAA6B,CAAA;AAGzD,eAAO,MAAM,SAAS,uBAAuB,CAAA;AAG7C,eAAO,MAAM,2BAA2B,+BAA+B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crash-reporter.d.ts","sourceRoot":"","sources":["../src/crash-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"crash-reporter.d.ts","sourceRoot":"","sources":["../src/crash-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAGxD,OAAO,KAAK,EAAE,kBAAkB,EAAmC,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAI7G,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE/B,MAAM,CAAC,OAAO,OAAO,aAAa;IAE9B,OAAc,sBAAsB,EAAE,sBAAsB,CAAK;IAEjE,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAsC;IAEpF,MAAM,CAAC,kCAAkC,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU;IAQtH,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,gBAAgB,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU;WAiBxI,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;IAsDjE,MAAM,CAAC,+BAA+B,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;IAiB9E,MAAM,CAAC,uBAAuB,CAAC,GAAG,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IAOxD,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,gBAAgB;IAMrE,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU;CAyBlD"}
|
package/build/crash-reporter.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import got from 'got';
|
|
2
1
|
import { BSTACK_SERVICE_VERSION, DATA_ENDPOINT, TESTOPS_BUILD_ID_ENV } from './constants.js';
|
|
3
2
|
import { DEFAULT_REQUEST_CONFIG, getObservabilityKey, getObservabilityUser } from './util.js';
|
|
4
3
|
import { BStackLogger } from './bstackLogger.js';
|
|
@@ -64,15 +63,22 @@ export default class CrashReporter {
|
|
|
64
63
|
config: this.userConfigForReporting
|
|
65
64
|
};
|
|
66
65
|
const url = `${DATA_ENDPOINT}/api/v1/analytics`;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
...
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
66
|
+
const encodedAuth = Buffer.from(`${this.credentialsForCrashReportUpload.username}:${this.credentialsForCrashReportUpload.password}`, 'utf8').toString('base64');
|
|
67
|
+
const headers = {
|
|
68
|
+
...DEFAULT_REQUEST_CONFIG.headers,
|
|
69
|
+
Authorization: `Basic ${encodedAuth}`,
|
|
70
|
+
};
|
|
71
|
+
const response = await fetch(url, {
|
|
72
|
+
method: 'POST',
|
|
73
|
+
body: JSON.stringify(data),
|
|
74
|
+
headers
|
|
75
75
|
});
|
|
76
|
+
if (response.ok) {
|
|
77
|
+
BStackLogger.debug(`[Crash_Report_Upload] Success response: ${JSON.stringify(await response.json())}`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
BStackLogger.error(`[Crash_Report_Upload] Failed due to ${response.body}`);
|
|
81
|
+
}
|
|
76
82
|
}
|
|
77
83
|
static recursivelyRedactKeysFromObject(obj, keys) {
|
|
78
84
|
if (!obj) {
|
package/build/data-store.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-store.d.ts","sourceRoot":"","sources":["../src/data-store.ts"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,6BAoBjC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QASvD
|
|
1
|
+
{"version":3,"file":"data-store.d.ts","sourceRoot":"","sources":["../src/data-store.ts"],"names":[],"mappings":"AAOA,wBAAgB,kBAAkB,6BAoBjC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QASvD"}
|
package/build/data-store.js
CHANGED
|
@@ -29,7 +29,7 @@ export function saveWorkerData(data) {
|
|
|
29
29
|
BStackLogger.debug('Exception in saving worker data: ' + e);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
function removeWorkersDataDir() {
|
|
33
33
|
fs.rmSync(workersDataDirPath, { recursive: true, force: true });
|
|
34
34
|
return true;
|
|
35
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exitHandler.d.ts","sourceRoot":"","sources":["../src/exitHandler.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"exitHandler.d.ts","sourceRoot":"","sources":["../src/exitHandler.ts"],"names":[],"mappings":"AAEA,OAAO,kBAAkB,MAAM,aAAa,CAAA;AAQ5C,wBAAgB,iBAAiB,SAShC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAYtE"}
|
package/build/exitHandler.js
CHANGED
|
@@ -4,15 +4,12 @@ import BrowserStackConfig from './config.js';
|
|
|
4
4
|
import { saveFunnelData } from './instrumentation/funnelInstrumentation.js';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { TESTOPS_JWT_ENV } from './constants.js';
|
|
7
|
-
import { BStackLogger } from './bstackLogger.js';
|
|
8
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
9
8
|
const __dirname = path.dirname(__filename);
|
|
10
9
|
export function setupExitHandlers() {
|
|
11
10
|
process.on('exit', (code) => {
|
|
12
|
-
BStackLogger.debug('Exit hook called');
|
|
13
11
|
const args = shouldCallCleanup(BrowserStackConfig.getInstance());
|
|
14
12
|
if (Array.isArray(args) && args.length) {
|
|
15
|
-
BStackLogger.debug('Spawning cleanup with args ' + args.toString());
|
|
16
13
|
const childProcess = spawn('node', [`${path.join(__dirname, 'cleanup.js')}`, ...args], { detached: true, stdio: 'inherit', env: { ...process.env } });
|
|
17
14
|
childProcess.unref();
|
|
18
15
|
process.exit(code);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare class ResponseError extends Error {
|
|
2
|
+
response: Response;
|
|
3
|
+
constructor(message: string, res: Response);
|
|
4
|
+
}
|
|
5
|
+
export default function fetchWrap(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
|
|
6
|
+
//# sourceMappingURL=fetchWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchWrapper.d.ts","sourceRoot":"","sources":["../src/fetchWrapper.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;IAC7B,QAAQ,EAAE,QAAQ,CAAA;gBACb,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ;CAI7C;AAED,wBAA8B,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,qBAMnF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class ResponseError extends Error {
|
|
2
|
+
response;
|
|
3
|
+
constructor(message, res) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.response = res;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export default async function fetchWrap(input, init) {
|
|
9
|
+
const res = await fetch(input, init);
|
|
10
|
+
if (!res.ok) {
|
|
11
|
+
throw new ResponseError(`Error response from server ${res.status}: ${await res.text()}`, res);
|
|
12
|
+
}
|
|
13
|
+
return res;
|
|
14
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,KAAK,EAAiB,OAAO,EAAE,QAAQ,EAAsB,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAgBjK,OAAO,KAAK,EACR,QAAQ,EACR,QAAQ,EAER,cAAc,EACd,MAAM,EACT,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,cAAM,gBAAgB;IAiBL,OAAO,CAAC,QAAQ;IAAiF,OAAO,CAAC,UAAU,CAAC;IAhBjI,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,SAAS,CAA2D;IAC5E,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAIpB;IACD,OAAO,CAAC,SAAS,CAAC,CAAoC;IACtD,OAAO,CAAC,QAAQ,CAAyB;gBAEpB,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,EAAE,aAAa,CAAC,EAAE,OAAO,EAAU,UAAU,CAAC,oBAAQ,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,gBAAgB;IAkBpL,iBAAiB;IAQjB,YAAY,CAAC,QAAQ,EAAE,MAAM;IAIvB,MAAM;IAiBZ,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAC,SAAS;IAchD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAC,SAAS,GAAG,MAAM;IAYvD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAC,SAAS,GAAG,MAAM,GAAC,IAAI;IAapF,0BAA0B;IAK1B,cAAc,CAAC,WAAW,EAAE,cAAc;IAapC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;IAyB3E,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU;IA+C5G,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,GAAC,SAAS,EAAE,OAAO,EAAE,GAAG;IAwBtE,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,GAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU;IA2DrF,yBAAyB,
|
|
1
|
+
{"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,KAAK,EAAiB,OAAO,EAAE,QAAQ,EAAsB,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAgBjK,OAAO,KAAK,EACR,QAAQ,EACR,QAAQ,EAER,cAAc,EACd,MAAM,EACT,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,cAAM,gBAAgB;IAiBL,OAAO,CAAC,QAAQ;IAAiF,OAAO,CAAC,UAAU,CAAC;IAhBjI,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,SAAS,CAA2D;IAC5E,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAIpB;IACD,OAAO,CAAC,SAAS,CAAC,CAAoC;IACtD,OAAO,CAAC,QAAQ,CAAyB;gBAEpB,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,EAAE,aAAa,CAAC,EAAE,OAAO,EAAU,UAAU,CAAC,oBAAQ,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,gBAAgB;IAkBpL,iBAAiB;IAQjB,YAAY,CAAC,QAAQ,EAAE,MAAM;IAIvB,MAAM;IAiBZ,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAC,SAAS;IAchD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAC,SAAS,GAAG,MAAM;IAYvD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAC,SAAS,GAAG,MAAM,GAAC,IAAI;IAapF,0BAA0B;IAK1B,cAAc,CAAC,WAAW,EAAE,cAAc;IAapC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;IAyB3E,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU;IA+C5G,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,GAAC,SAAS,EAAE,OAAO,EAAE,GAAG;IAwBtE,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,GAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU;IA2DrF,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU;IA6ChG,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAgBjC,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU;IAYrE;;QAEI;IAEE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM3C,cAAc,CAAE,KAAK,EAAE,sBAAsB;IAmC7C,aAAa,CAAE,KAAK,EAAE,sBAAsB;IAK5C,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM;IAoBzD,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,YAAY;IA4B/F;;OAEG;IAEH,iBAAiB,WAAkB,MAAM,mBAaxC;IAEK,cAAc,CAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,GAAG,sBAAsB;IAqDtI,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,UAAU;IAqElB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,yBAAyB;IAqFjC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,aAAa;CAMxB;AAGD,QAAA,MAAM,eAAe,EAAE,OAAO,gBAA0D,CAAA;AACxF,KAAK,eAAe,GAAG,gBAAgB,CAAA;AAEvC,eAAe,eAAe,CAAA"}
|
|
@@ -324,7 +324,6 @@ class _InsightsHandler {
|
|
|
324
324
|
...(this._tests[fullTitle] || {}),
|
|
325
325
|
finishedAt: (new Date()).toISOString()
|
|
326
326
|
};
|
|
327
|
-
BStackLogger.debug('calling testFinished');
|
|
328
327
|
this.listener.testFinished(this.getRunData(test, 'TestRunFinished', result));
|
|
329
328
|
}
|
|
330
329
|
/**
|
|
@@ -692,7 +691,6 @@ class _InsightsHandler {
|
|
|
692
691
|
}
|
|
693
692
|
if (eventType === 'TestRunSkipped') {
|
|
694
693
|
testData.result = 'skipped';
|
|
695
|
-
eventType = 'TestRunFinished';
|
|
696
694
|
}
|
|
697
695
|
return testData;
|
|
698
696
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnelInstrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/funnelInstrumentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"funnelInstrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/funnelInstrumentation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,kBAAkB,MAAM,cAAc,CAAA;AAqBlD,wBAAsB,SAAS,CAAC,MAAM,EAAE,kBAAkB,iBAEzD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,kBAAkB,iBAE1D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAOpF;AAGD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAahE"}
|
|
@@ -2,11 +2,11 @@ import os from 'node:os';
|
|
|
2
2
|
import util from 'node:util';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import fs from 'node:fs';
|
|
5
|
-
import got from 'got';
|
|
6
5
|
import UsageStats from '../testOps/usageStats.js';
|
|
7
6
|
import { BStackLogger } from '../bstackLogger.js';
|
|
8
7
|
import { BSTACK_SERVICE_VERSION, FUNNEL_INSTRUMENTATION_URL } from '../constants.js';
|
|
9
|
-
import { getDataFromWorkers
|
|
8
|
+
import { getDataFromWorkers } from '../data-store.js';
|
|
9
|
+
import fetchWrap from '../fetchWrapper.js';
|
|
10
10
|
async function fireFunnelTestEvent(eventType, config) {
|
|
11
11
|
if (!config.userName || !config.accessKey) {
|
|
12
12
|
BStackLogger.debug('username/accesskey not passed');
|
|
@@ -16,17 +16,13 @@ async function fireFunnelTestEvent(eventType, config) {
|
|
|
16
16
|
const data = buildEventData(eventType, config);
|
|
17
17
|
await fireFunnelRequest(data);
|
|
18
18
|
BStackLogger.debug('Funnel event success');
|
|
19
|
-
|
|
20
|
-
config.sentFunnelData();
|
|
21
|
-
}
|
|
19
|
+
config.sentFunnelData();
|
|
22
20
|
}
|
|
23
21
|
catch (error) {
|
|
24
22
|
BStackLogger.debug('Exception in sending funnel data: ' + error);
|
|
25
23
|
}
|
|
26
24
|
}
|
|
27
25
|
export async function sendStart(config) {
|
|
28
|
-
// Remove Workers folder if exists
|
|
29
|
-
removeWorkersDataDir();
|
|
30
26
|
await fireFunnelTestEvent('SDKTestAttempted', config);
|
|
31
27
|
}
|
|
32
28
|
export async function sendFinish(config) {
|
|
@@ -42,11 +38,16 @@ export function saveFunnelData(eventType, config) {
|
|
|
42
38
|
// Called from two different process
|
|
43
39
|
export async function fireFunnelRequest(data) {
|
|
44
40
|
BStackLogger.debug('Sending SDK event with data ' + util.inspect(data, { depth: 6 }));
|
|
45
|
-
|
|
41
|
+
const encodedAuth = Buffer.from(`${data.userName}:${data.accessKey}`, 'utf8').toString('base64');
|
|
42
|
+
const response = await fetchWrap(FUNNEL_INSTRUMENTATION_URL, {
|
|
43
|
+
method: 'POST',
|
|
46
44
|
headers: {
|
|
47
|
-
'content-type': 'application/json'
|
|
48
|
-
|
|
45
|
+
'content-type': 'application/json',
|
|
46
|
+
Authorization: `Basic ${encodedAuth}`,
|
|
47
|
+
},
|
|
48
|
+
body: JSON.stringify(data)
|
|
49
49
|
});
|
|
50
|
+
BStackLogger.debug('Funnel Event Response: ' + JSON.stringify(await response.text()));
|
|
50
51
|
}
|
|
51
52
|
function getProductList(config) {
|
|
52
53
|
const products = [];
|
package/build/launcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,yBAAyB,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAKlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAgCnG,KAAK,iBAAiB,GAAG,yBAAyB,CAAC,KAAK,GAAG;IACvD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;CAC9C,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,2BAA4B,YAAW,QAAQ,CAAC,eAAe;IAY5E,OAAO,CAAC,QAAQ;IAEhB,OAAO,CAAC,OAAO;IAbnB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAQ;IACjC,OAAO,CAAC,wBAAwB,CAAC,CAAS;IAC1C,OAAO,CAAC,MAAM,CAAC,CAAO;IACtB,OAAO,CAAC,sBAAsB,CAAC,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;gBAG3C,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EACzD,YAAY,EAAE,YAAY,CAAC,gBAAgB,EACnC,OAAO,EAAE,OAAO,CAAC,UAAU;IA8GjC,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;IAalC,SAAS,CAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB;IA0JtF,UAAU;IA6EV,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU;IAwB7G,SAAS;IAYT,UAAU,CAAC,GAAG,EAAC,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6BrD;;;OAGG;IACG,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB1D,kBAAkB;IAOxB,qBAAqB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAiFtH,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA2F5F,sBAAsB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB;IAyCrE;;;OAGG;IACH,oBAAoB;IA6BpB,sBAAsB,CAAC,QAAQ,CAAC,EAAC,MAAM,EAAE,SAAS,CAAC,EAAC,MAAM,EAAE,eAAe,CAAC,EAAC,MAAM;IASnF,mBAAmB;CAQtB"}
|
package/build/launcher.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import got from 'got';
|
|
2
1
|
import { FormData } from 'formdata-node';
|
|
3
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
4
3
|
import fs from 'node:fs';
|
|
@@ -11,14 +10,14 @@ import * as BrowserstackLocalLauncher from 'browserstack-local';
|
|
|
11
10
|
import PerformanceTester from './performance-tester.js';
|
|
12
11
|
import { startPercy, stopPercy, getBestPlatformForPercySnapshot } from './Percy/PercyHelper.js';
|
|
13
12
|
import { BSTACK_SERVICE_VERSION, NOT_ALLOWED_KEYS_IN_CAPS, PERF_MEASUREMENT_ENV, RERUN_ENV, RERUN_TESTS_ENV, TESTOPS_BUILD_ID_ENV, VALID_APP_EXTENSION } from './constants.js';
|
|
14
|
-
import { launchTestSession, createAccessibilityTestRun, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, stopAccessibilityTestRun, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, } from './util.js';
|
|
13
|
+
import { launchTestSession, createAccessibilityTestRun, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, stopAccessibilityTestRun, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, getBasicAuthHeader, } from './util.js';
|
|
15
14
|
import CrashReporter from './crash-reporter.js';
|
|
16
15
|
import { BStackLogger } from './bstackLogger.js';
|
|
17
16
|
import { PercyLogger } from './Percy/PercyLogger.js';
|
|
18
17
|
import { FileStream } from './fileStream.js';
|
|
19
|
-
import { sendStart, sendFinish } from './instrumentation/funnelInstrumentation.js';
|
|
20
18
|
import BrowserStackConfig from './config.js';
|
|
21
19
|
import { setupExitHandlers } from './exitHandler.js';
|
|
20
|
+
import { sendFinish, sendStart } from './instrumentation/funnelInstrumentation.js';
|
|
22
21
|
export default class BrowserstackLauncherService {
|
|
23
22
|
_options;
|
|
24
23
|
_config;
|
|
@@ -157,7 +156,7 @@ export default class BrowserstackLauncherService {
|
|
|
157
156
|
}
|
|
158
157
|
}
|
|
159
158
|
async onPrepare(config, capabilities) {
|
|
160
|
-
//
|
|
159
|
+
// Send Funnel start request
|
|
161
160
|
await sendStart(this.browserStackConfig);
|
|
162
161
|
/**
|
|
163
162
|
* Upload app to BrowserStack if valid file path to app is given.
|
|
@@ -325,12 +324,12 @@ export default class BrowserstackLauncherService {
|
|
|
325
324
|
catch (error) {
|
|
326
325
|
BStackLogger.debug(`Failed to upload BrowserStack WDIO Service logs ${error}`);
|
|
327
326
|
}
|
|
328
|
-
await sendFinish(this.browserStackConfig);
|
|
329
327
|
BStackLogger.clearLogger();
|
|
330
328
|
if (this._options.percy) {
|
|
331
329
|
await this.stopPercy();
|
|
332
330
|
}
|
|
333
331
|
PercyLogger.clearLogger();
|
|
332
|
+
await sendFinish(this.browserStackConfig);
|
|
334
333
|
if (!this.browserstackLocal || !this.browserstackLocal.isRunning()) {
|
|
335
334
|
return;
|
|
336
335
|
}
|
|
@@ -404,14 +403,19 @@ export default class BrowserstackLauncherService {
|
|
|
404
403
|
if (app.customId) {
|
|
405
404
|
form.append('custom_id', app.customId);
|
|
406
405
|
}
|
|
407
|
-
const
|
|
406
|
+
const headers = {
|
|
407
|
+
'Content-Type': 'multipart/form-data',
|
|
408
|
+
Authorization: getBasicAuthHeader(this._config.user, this._config.key),
|
|
409
|
+
};
|
|
410
|
+
const res = await fetch('https://api-cloud.browserstack.com/app-automate/upload', {
|
|
411
|
+
method: 'POST',
|
|
408
412
|
body: form,
|
|
409
|
-
|
|
410
|
-
password: this._config.key
|
|
411
|
-
}).json().catch((err) => {
|
|
412
|
-
throw new SevereServiceError(`app upload failed ${err.message}`);
|
|
413
|
+
headers
|
|
413
414
|
});
|
|
414
|
-
|
|
415
|
+
if (!res.ok) {
|
|
416
|
+
throw new SevereServiceError(`app upload failed ${res.body}`);
|
|
417
|
+
}
|
|
418
|
+
return await res.json();
|
|
415
419
|
}
|
|
416
420
|
/**
|
|
417
421
|
* @param {String | AppConfig} appConfig <string>: should be "app file path" or "app_url" or "custom_id" or "shareable_id".
|
package/build/reporter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACnF,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAKzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExD,OAAO,KAAK,EAAsB,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAaxE,cAAM,aAAc,SAAQ,YAAY;IACpC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,OAAO,CAAC,CAAyC;IACzD,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAA+B;IACpD,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,SAAS,CAAC,CAAoC;IACtD,OAAO,CAAC,QAAQ,CAAyB;IAEnC,aAAa,CAAE,WAAW,EAAE,WAAW;IAY7C,OAAO,CAAC,WAAW;IAInB,iBAAiB;IAQJ,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAW7C,cAAc,CAAC,WAAW,EAAE,cAAc;IAapC,YAAY;IAWlB,MAAM,CAAC,QAAQ;IAIf,YAAY,CAAE,UAAU,EAAE,UAAU;IAoBpC,UAAU;IAIV,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAe1C,SAAS,CAAC,SAAS,EAAE,SAAS;IAY9B,WAAW,CAAC,SAAS,EAAE,SAAS;IAgBhC,WAAW,CAAC,SAAS,EAAE,SAAS;IAehC,SAAS,CAAC,SAAS,EAAE,SAAS;IAoBpC,iBAAiB,CAAC,SAAS,EAAE,SAAS;IAIhC,UAAU,CAAE,SAAS,EAAE,SAAS;IAWhC,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACnF,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAKzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExD,OAAO,KAAK,EAAsB,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAaxE,cAAM,aAAc,SAAQ,YAAY;IACpC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,OAAO,CAAC,CAAyC;IACzD,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAA+B;IACpD,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,SAAS,CAAC,CAAoC;IACtD,OAAO,CAAC,QAAQ,CAAyB;IAEnC,aAAa,CAAE,WAAW,EAAE,WAAW;IAY7C,OAAO,CAAC,WAAW;IAInB,iBAAiB;IAQJ,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAW7C,cAAc,CAAC,WAAW,EAAE,cAAc;IAapC,YAAY;IAWlB,MAAM,CAAC,QAAQ;IAIf,YAAY,CAAE,UAAU,EAAE,UAAU;IAoBpC,UAAU;IAIV,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAe1C,SAAS,CAAC,SAAS,EAAE,SAAS;IAY9B,WAAW,CAAC,SAAS,EAAE,SAAS;IAgBhC,WAAW,CAAC,SAAS,EAAE,SAAS;IAehC,SAAS,CAAC,SAAS,EAAE,SAAS;IAoBpC,iBAAiB,CAAC,SAAS,EAAE,SAAS;IAIhC,UAAU,CAAE,SAAS,EAAE,SAAS;IAWhC,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM;CAuEvE;AAED,QAAA,MAAM,YAAY,EAAE,OAAO,aAAoD,CAAA;AAC/E,KAAK,YAAY,GAAG,aAAa,CAAA;AACjC,eAAe,YAAY,CAAA"}
|
package/build/reporter.js
CHANGED
|
@@ -237,6 +237,9 @@ class _TestReporter extends WDIOReporter {
|
|
|
237
237
|
}
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
|
+
if (eventType === 'TestRunSkipped') {
|
|
241
|
+
eventType = 'TestRunFinished';
|
|
242
|
+
}
|
|
240
243
|
if (eventType.match(/HookRun/)) {
|
|
241
244
|
testData.hook_type = testData.name?.toLowerCase() ? getHookType(testData.name.toLowerCase()) : 'undefined';
|
|
242
245
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { UploadType } from './types.js';
|
|
2
2
|
export default class RequestQueueHandler {
|
|
3
3
|
private queue;
|
|
4
|
+
private readonly callback;
|
|
4
5
|
private pollEventBatchInterval?;
|
|
5
|
-
private readonly callback?;
|
|
6
6
|
static tearDownInvoked: boolean;
|
|
7
7
|
static instance: RequestQueueHandler;
|
|
8
8
|
private constructor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-handler.d.ts","sourceRoot":"","sources":["../src/request-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request-handler.d.ts","sourceRoot":"","sources":["../src/request-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACpC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,sBAAsB,CAAC,CAAgC;IAC/D,OAAc,eAAe,UAAQ;IAErC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAA;IAGpC,OAAO;WAKO,WAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,mBAAmB;IAOnE,GAAG,CAAE,KAAK,EAAE,UAAU;IAehB,QAAQ;IAUd,sBAAsB;IAIhB,SAAS;IASf,YAAY,SAAgB,UAAU,EAAE,QAAQ,MAAM,mBAGrD;IAED,sBAAsB;IAKtB,uBAAuB,CAAE,GAAG,EAAE,MAAM;IAOpC,aAAa;CAOhB"}
|
package/build/request-handler.js
CHANGED
|
@@ -2,8 +2,8 @@ import { DATA_BATCH_SIZE, DATA_BATCH_INTERVAL, TESTOPS_BUILD_COMPLETED_ENV } fro
|
|
|
2
2
|
import { BStackLogger } from './bstackLogger.js';
|
|
3
3
|
export default class RequestQueueHandler {
|
|
4
4
|
queue = [];
|
|
5
|
-
pollEventBatchInterval;
|
|
6
5
|
callback;
|
|
6
|
+
pollEventBatchInterval;
|
|
7
7
|
static tearDownInvoked = false;
|
|
8
8
|
static instance;
|
|
9
9
|
// making it private to use singleton pattern
|
package/build/service.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export default class BrowserstackService implements Services.ServiceInstance {
|
|
|
55
55
|
_isAppAutomate(): boolean;
|
|
56
56
|
_updateJob(requestBody: any): Promise<any>;
|
|
57
57
|
_multiRemoteAction(action: MultiRemoteAction): Promise<any>;
|
|
58
|
-
_update(sessionId: string, requestBody: any): Promise<void> |
|
|
58
|
+
_update(sessionId: string, requestBody: any): Promise<void> | Promise<Response>;
|
|
59
59
|
_printSessionURL(): Promise<void>;
|
|
60
60
|
private _setSessionName;
|
|
61
61
|
private _setAnnotation;
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/build/service.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import got from 'got';
|
|
2
1
|
import PerformanceTester from './performance-tester.js';
|
|
3
2
|
import { getBrowserDescription, getBrowserCapabilities, isBrowserstackCapability, getParentSuiteName, isBrowserstackSession, patchConsoleLogs } from './util.js';
|
|
4
3
|
import InsightsHandler from './insights-handler.js';
|
|
@@ -328,17 +327,22 @@ export default class BrowserstackService {
|
|
|
328
327
|
}
|
|
329
328
|
const sessionUrl = `${this._sessionBaseUrl}/${sessionId}.json`;
|
|
330
329
|
BStackLogger.debug(`Updating Browserstack session at ${sessionUrl} with request body: `, requestBody);
|
|
330
|
+
const encodedAuth = Buffer.from(`${this._config.user}:${this._config.key}`, 'utf8').toString('base64');
|
|
331
|
+
const headers = {
|
|
332
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
333
|
+
Authorization: `Basic ${encodedAuth}`,
|
|
334
|
+
};
|
|
331
335
|
if (this._turboScale) {
|
|
332
|
-
return
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
+
return fetch(sessionUrl, {
|
|
337
|
+
method: 'PATCH',
|
|
338
|
+
body: JSON.stringify(requestBody),
|
|
339
|
+
headers
|
|
336
340
|
});
|
|
337
341
|
}
|
|
338
|
-
return
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
+
return fetch(sessionUrl, {
|
|
343
|
+
method: 'PUT',
|
|
344
|
+
body: JSON.stringify(requestBody),
|
|
345
|
+
headers
|
|
342
346
|
});
|
|
343
347
|
}
|
|
344
348
|
async _printSessionURL() {
|
|
@@ -349,18 +353,26 @@ export default class BrowserstackService {
|
|
|
349
353
|
const sessionUrl = `${this._sessionBaseUrl}/${sessionId}.json`;
|
|
350
354
|
BStackLogger.debug(`Requesting Browserstack session URL at ${sessionUrl}`);
|
|
351
355
|
let browserUrl;
|
|
352
|
-
const
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
+
const encodedAuth = Buffer.from(`${this._config.user}:${this._config.key}`, 'utf8').toString('base64');
|
|
357
|
+
const headers = {
|
|
358
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
359
|
+
Authorization: `Basic ${encodedAuth}`,
|
|
356
360
|
};
|
|
357
361
|
if (this._turboScale) {
|
|
358
|
-
const response = await
|
|
359
|
-
|
|
362
|
+
const response = await fetch(sessionUrl, {
|
|
363
|
+
method: 'GET',
|
|
364
|
+
headers
|
|
365
|
+
});
|
|
366
|
+
const res = response.clone();
|
|
367
|
+
browserUrl = (await res.json()).url;
|
|
360
368
|
}
|
|
361
369
|
else {
|
|
362
|
-
const response = await
|
|
363
|
-
|
|
370
|
+
const response = await fetch(sessionUrl, {
|
|
371
|
+
method: 'GET',
|
|
372
|
+
headers
|
|
373
|
+
});
|
|
374
|
+
const res = response.clone();
|
|
375
|
+
browserUrl = (await res.json()).automation_session.browser_url;
|
|
364
376
|
}
|
|
365
377
|
if (!this._browser) {
|
|
366
378
|
return;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DATA_ENDPOINT, DATA_EVENT_ENDPOINT, DATA_SCREENSHOT_ENDPOINT, TESTOPS_BUILD_COMPLETED_ENV, TESTOPS_JWT_ENV } from '../constants.js';
|
|
2
2
|
import { BStackLogger } from '../bstackLogger.js';
|
|
3
3
|
import { DEFAULT_REQUEST_CONFIG, getLogTag } from '../util.js';
|
|
4
|
-
import
|
|
4
|
+
import fetchWrap from '../fetchWrapper.js';
|
|
5
5
|
export async function uploadEventData(eventData, eventUrl = DATA_EVENT_ENDPOINT) {
|
|
6
6
|
let logTag = 'BATCH_UPLOAD';
|
|
7
7
|
if (!Array.isArray(eventData)) {
|
|
@@ -19,19 +19,19 @@ export async function uploadEventData(eventData, eventUrl = DATA_EVENT_ENDPOINT)
|
|
|
19
19
|
}
|
|
20
20
|
try {
|
|
21
21
|
const url = `${DATA_ENDPOINT}/${eventUrl}`;
|
|
22
|
-
const data = await
|
|
23
|
-
|
|
22
|
+
const data = await fetchWrap(url, {
|
|
23
|
+
method: 'POST',
|
|
24
24
|
headers: {
|
|
25
25
|
...DEFAULT_REQUEST_CONFIG.headers,
|
|
26
26
|
'Authorization': `Bearer ${process.env[TESTOPS_JWT_ENV]}`
|
|
27
27
|
},
|
|
28
|
-
|
|
29
|
-
})
|
|
30
|
-
BStackLogger.debug(`[${logTag}] Success response: ${JSON.stringify(data)}`);
|
|
28
|
+
body: JSON.stringify(eventData)
|
|
29
|
+
});
|
|
30
|
+
BStackLogger.debug(`[${logTag}] Success response: ${JSON.stringify(await data.json())}`);
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
33
33
|
BStackLogger.debug(`[${logTag}] Failed. Error: ${error}`);
|
|
34
|
-
throw
|
|
34
|
+
throw error;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
export function sendScreenshots(eventData) {
|
package/build/types.d.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import type { Capabilities, Options, Frameworks } from '@wdio/types';
|
|
2
2
|
import type { Options as BSOptions } from 'browserstack-local';
|
|
3
|
-
export interface SessionResponse {
|
|
4
|
-
automation_session: {
|
|
5
|
-
browser_url: string;
|
|
6
|
-
};
|
|
7
|
-
}
|
|
8
|
-
export interface TurboScaleSessionResponse {
|
|
9
|
-
url: string;
|
|
10
|
-
}
|
|
11
3
|
export type MultiRemoteAction = (sessionId: string, browserName?: string) => Promise<any>;
|
|
12
4
|
export type AppConfig = {
|
|
13
5
|
id?: string;
|
|
@@ -298,11 +290,6 @@ export interface FeatureStatsOverview {
|
|
|
298
290
|
sentCount: number;
|
|
299
291
|
failedCount: number;
|
|
300
292
|
}
|
|
301
|
-
export interface FeaturesUsageData {
|
|
302
|
-
isTriggered?: boolean;
|
|
303
|
-
status?: string;
|
|
304
|
-
error?: string;
|
|
305
|
-
}
|
|
306
293
|
export interface CBTData {
|
|
307
294
|
uuid: string;
|
|
308
295
|
integrations: IntegrationObject;
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE9D,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/build/util.d.ts
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import http from 'node:http';
|
|
4
|
-
import https from 'node:https';
|
|
5
1
|
import type { Capabilities, Frameworks, Options } from '@wdio/types';
|
|
6
2
|
import type { BeforeCommandArgs, AfterCommandArgs } from '@wdio/reporter';
|
|
7
|
-
import type { Method } from 'got';
|
|
8
3
|
import type { ColorName } from 'chalk';
|
|
9
4
|
import type { UploadType, BrowserstackConfig } from './types.js';
|
|
10
5
|
import type { ITestCaseHookParameter } from './cucumber-types.js';
|
|
11
6
|
export declare const DEFAULT_REQUEST_CONFIG: {
|
|
12
|
-
agent: {
|
|
13
|
-
http: http.Agent;
|
|
14
|
-
https: https.Agent;
|
|
15
|
-
};
|
|
16
7
|
headers: {
|
|
17
8
|
'Content-Type': string;
|
|
18
9
|
'X-BSTACK-OBS': string;
|
|
@@ -39,7 +30,7 @@ export declare function isBrowserstackCapability(cap?: WebdriverIO.Capabilities)
|
|
|
39
30
|
export declare function getParentSuiteName(fullTitle: string, testSuiteTitle: string): string;
|
|
40
31
|
export declare function o11yErrorHandler(fn: Function): (...args: any) => any;
|
|
41
32
|
export declare function errorHandler(fn: Function): (...args: any) => any;
|
|
42
|
-
export declare function nodeRequest(requestType:
|
|
33
|
+
export declare function nodeRequest(requestType: string, apiEndpoint: string, options: any, apiUrl: string, timeout?: number): Promise<any>;
|
|
43
34
|
type ClassType = {
|
|
44
35
|
new (...args: any[]): any;
|
|
45
36
|
};
|
|
@@ -140,7 +131,6 @@ export declare function getBrowserStackUser(config: Options.Testrunner): string
|
|
|
140
131
|
export declare function getBrowserStackKey(config: Options.Testrunner): string | undefined;
|
|
141
132
|
export declare function isUndefined(value: any): boolean;
|
|
142
133
|
export declare function isTrue(value?: any): boolean;
|
|
143
|
-
export declare function isFalse(value?: any): boolean;
|
|
144
134
|
export declare function frameworkSupportsHook(hook: string, framework?: string): boolean;
|
|
145
135
|
export declare function patchConsoleLogs(): void;
|
|
146
136
|
export declare function getFailureObject(error: string | Error): {
|
|
@@ -155,6 +145,7 @@ export declare function uploadLogs(user: string | undefined, key: string | undef
|
|
|
155
145
|
export declare const isObject: (object: any) => boolean;
|
|
156
146
|
export declare const ObjectsAreEqual: (object1: any, object2: any) => boolean;
|
|
157
147
|
export declare const getPlatformVersion: (...args: any) => any;
|
|
148
|
+
export declare const getBasicAuthHeader: (username: string, password: string) => string;
|
|
158
149
|
export declare const isObjectEmpty: (objectName: unknown) => unknown;
|
|
159
150
|
export declare const getErrorString: (err: unknown) => string | undefined;
|
|
160
151
|
export {};
|
package/build/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/build/util.js
CHANGED
|
@@ -2,29 +2,22 @@ import { hostname, platform, type, version, arch } from 'node:os';
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import zlib from 'node:zlib';
|
|
4
4
|
import { promisify } from 'node:util';
|
|
5
|
-
import http from 'node:http';
|
|
6
|
-
import https from 'node:https';
|
|
7
5
|
import path from 'node:path';
|
|
8
6
|
import util from 'node:util';
|
|
9
|
-
import got, { HTTPError } from 'got';
|
|
10
7
|
import gitRepoInfo from 'git-repo-info';
|
|
11
8
|
import gitconfig from 'gitconfiglocal';
|
|
12
9
|
import { FormData } from 'formdata-node';
|
|
13
10
|
import logPatcher from './logPatcher.js';
|
|
14
11
|
import PerformanceTester from './performance-tester.js';
|
|
15
|
-
import { ACCESSIBILITY_API_URL, BROWSER_DESCRIPTION, DATA_ENDPOINT, UPLOAD_LOGS_ADDRESS, UPLOAD_LOGS_ENDPOINT, consoleHolder, TESTOPS_SCREENSHOT_ENV, TESTOPS_BUILD_ID_ENV, PERF_MEASUREMENT_ENV, RERUN_ENV
|
|
12
|
+
import { ACCESSIBILITY_API_URL, BROWSER_DESCRIPTION, DATA_ENDPOINT, UPLOAD_LOGS_ADDRESS, UPLOAD_LOGS_ENDPOINT, consoleHolder, TESTOPS_BUILD_COMPLETED_ENV, TESTOPS_JWT_ENV, TESTOPS_SCREENSHOT_ENV, TESTOPS_BUILD_ID_ENV, PERF_MEASUREMENT_ENV, RERUN_ENV } from './constants.js';
|
|
16
13
|
import CrashReporter from './crash-reporter.js';
|
|
17
14
|
import { BStackLogger } from './bstackLogger.js';
|
|
18
15
|
import { FileStream } from './fileStream.js';
|
|
19
|
-
import AccessibilityScripts from './scripts/accessibility-scripts.js';
|
|
20
16
|
import UsageStats from './testOps/usageStats.js';
|
|
21
17
|
import TestOpsConfig from './testOps/testOpsConfig.js';
|
|
18
|
+
import AccessibilityScripts from './scripts/accessibility-scripts.js';
|
|
22
19
|
const pGitconfig = promisify(gitconfig);
|
|
23
20
|
export const DEFAULT_REQUEST_CONFIG = {
|
|
24
|
-
agent: {
|
|
25
|
-
http: new http.Agent({ keepAlive: true }),
|
|
26
|
-
https: new https.Agent({ keepAlive: true }),
|
|
27
|
-
},
|
|
28
21
|
headers: {
|
|
29
22
|
'Content-Type': 'application/json',
|
|
30
23
|
'X-BSTACK-OBS': 'true'
|
|
@@ -139,18 +132,20 @@ export function errorHandler(fn) {
|
|
|
139
132
|
}
|
|
140
133
|
export async function nodeRequest(requestType, apiEndpoint, options, apiUrl, timeout = 120000) {
|
|
141
134
|
try {
|
|
142
|
-
const
|
|
135
|
+
const controller = new AbortController();
|
|
136
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
137
|
+
const response = await fetch(`${apiUrl}/${apiEndpoint}`, {
|
|
143
138
|
method: requestType,
|
|
144
|
-
|
|
145
|
-
request: timeout
|
|
146
|
-
},
|
|
139
|
+
signal: controller.signal,
|
|
147
140
|
...options
|
|
148
|
-
})
|
|
149
|
-
|
|
141
|
+
});
|
|
142
|
+
// Clear the timeout as the request completed successfully
|
|
143
|
+
clearTimeout(timeoutId);
|
|
144
|
+
return await response.json();
|
|
150
145
|
}
|
|
151
146
|
catch (error) {
|
|
152
147
|
const isLogUpload = apiEndpoint === UPLOAD_LOGS_ENDPOINT;
|
|
153
|
-
if (error
|
|
148
|
+
if (error && error.response) {
|
|
154
149
|
const errorMessageJson = error.response.body ? JSON.parse(error.response.body.toString()) : null;
|
|
155
150
|
const errorMessage = errorMessageJson ? errorMessageJson.message : null;
|
|
156
151
|
if (errorMessage) {
|
|
@@ -240,29 +235,34 @@ export const launchTestSession = o11yErrorHandler(async function launchTestSessi
|
|
|
240
235
|
data.config = CrashReporter.userConfigForReporting;
|
|
241
236
|
try {
|
|
242
237
|
const url = `${DATA_ENDPOINT}/api/v1/builds`;
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
238
|
+
const encodedAuth = Buffer.from(`${getObservabilityUser(options, config)}:${getObservabilityKey(options, config)}`, 'utf8').toString('base64');
|
|
239
|
+
const headers = {
|
|
240
|
+
...DEFAULT_REQUEST_CONFIG.headers,
|
|
241
|
+
Authorization: `Basic ${encodedAuth}`,
|
|
242
|
+
};
|
|
243
|
+
const response = await fetch(url, {
|
|
244
|
+
method: 'POST',
|
|
245
|
+
headers,
|
|
246
|
+
body: JSON.stringify(data)
|
|
247
|
+
});
|
|
248
|
+
const jsonResponse = await response.json();
|
|
249
|
+
BStackLogger.debug(`[Start_Build] Success response: ${JSON.stringify(jsonResponse)}`);
|
|
250
250
|
process.env[TESTOPS_BUILD_COMPLETED_ENV] = 'true';
|
|
251
|
-
if (
|
|
251
|
+
if (jsonResponse.jwt) {
|
|
252
|
+
process.env[TESTOPS_JWT_ENV] = jsonResponse.jwt;
|
|
252
253
|
launchBuildUsage.success();
|
|
253
|
-
process.env[TESTOPS_JWT_ENV] = response.jwt;
|
|
254
254
|
}
|
|
255
|
-
if (
|
|
256
|
-
process.env[TESTOPS_BUILD_ID_ENV] =
|
|
257
|
-
TestOpsConfig.getInstance().buildHashedId =
|
|
255
|
+
if (jsonResponse.build_hashed_id) {
|
|
256
|
+
process.env[TESTOPS_BUILD_ID_ENV] = jsonResponse.build_hashed_id;
|
|
257
|
+
TestOpsConfig.getInstance().buildHashedId = jsonResponse.build_hashed_id;
|
|
258
258
|
}
|
|
259
|
-
if (
|
|
260
|
-
process.env[TESTOPS_SCREENSHOT_ENV] =
|
|
259
|
+
if (jsonResponse.allow_screenshots) {
|
|
260
|
+
process.env[TESTOPS_SCREENSHOT_ENV] = jsonResponse.allow_screenshots.toString();
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
catch (error) {
|
|
264
264
|
launchBuildUsage.failed(error);
|
|
265
|
-
if (error
|
|
265
|
+
if (error && error.response) {
|
|
266
266
|
const errorMessageJson = error.response.body ? JSON.parse(error.response.body.toString()) : null;
|
|
267
267
|
const errorMessage = errorMessageJson ? errorMessageJson.message : null, errorType = errorMessageJson ? errorMessageJson.errorType : null;
|
|
268
268
|
switch (errorType) {
|
|
@@ -374,10 +374,14 @@ export const createAccessibilityTestRun = errorHandler(async function createAcce
|
|
|
374
374
|
},
|
|
375
375
|
'browserstackAutomation': true,
|
|
376
376
|
};
|
|
377
|
+
const encodedAuth = Buffer.from(`${getBrowserStackUser(config)}:${getBrowserStackKey(config)}`, 'utf8').toString('base64');
|
|
378
|
+
const headers = {
|
|
379
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
380
|
+
Authorization: `Basic ${encodedAuth}`,
|
|
381
|
+
};
|
|
377
382
|
const requestOptions = {
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
password: getBrowserStackKey(config),
|
|
383
|
+
body: JSON.stringify(data),
|
|
384
|
+
headers
|
|
381
385
|
};
|
|
382
386
|
try {
|
|
383
387
|
const response = await nodeRequest('POST', 'v2/test_runs', requestOptions, ACCESSIBILITY_API_URL);
|
|
@@ -526,8 +530,7 @@ export const stopBuildUpstream = o11yErrorHandler(async function stopBuildUpstre
|
|
|
526
530
|
message: 'Build is not completed yet'
|
|
527
531
|
};
|
|
528
532
|
}
|
|
529
|
-
|
|
530
|
-
if (!jwtToken) {
|
|
533
|
+
if (!process.env[TESTOPS_JWT_ENV]) {
|
|
531
534
|
stopBuildUsage.failed('Token/buildID is undefined, build creation might have failed');
|
|
532
535
|
BStackLogger.debug('[STOP_BUILD] Missing Authentication Token/ Build ID');
|
|
533
536
|
return {
|
|
@@ -540,15 +543,15 @@ export const stopBuildUpstream = o11yErrorHandler(async function stopBuildUpstre
|
|
|
540
543
|
};
|
|
541
544
|
try {
|
|
542
545
|
const url = `${DATA_ENDPOINT}/api/v1/builds/${process.env[TESTOPS_BUILD_ID_ENV]}/stop`;
|
|
543
|
-
const response = await
|
|
544
|
-
|
|
546
|
+
const response = await fetch(url, {
|
|
547
|
+
method: 'PUT',
|
|
545
548
|
headers: {
|
|
546
549
|
...DEFAULT_REQUEST_CONFIG.headers,
|
|
547
|
-
'Authorization': `Bearer ${
|
|
550
|
+
'Authorization': `Bearer ${process.env[TESTOPS_JWT_ENV]}`
|
|
548
551
|
},
|
|
549
|
-
|
|
550
|
-
})
|
|
551
|
-
BStackLogger.debug(`[STOP_BUILD] Success response: ${
|
|
552
|
+
body: JSON.stringify(data)
|
|
553
|
+
});
|
|
554
|
+
BStackLogger.debug(`[STOP_BUILD] Success response: ${await response.text()}`);
|
|
552
555
|
stopBuildUsage.success();
|
|
553
556
|
return {
|
|
554
557
|
status: 'success',
|
|
@@ -936,15 +939,15 @@ export async function batchAndPostEvents(eventUrl, kind, data) {
|
|
|
936
939
|
}
|
|
937
940
|
try {
|
|
938
941
|
const url = `${DATA_ENDPOINT}/${eventUrl}`;
|
|
939
|
-
const response = await
|
|
940
|
-
|
|
942
|
+
const response = await fetch(url, {
|
|
943
|
+
method: 'POST',
|
|
941
944
|
headers: {
|
|
942
945
|
...DEFAULT_REQUEST_CONFIG.headers,
|
|
943
946
|
'Authorization': `Bearer ${jwtToken}`
|
|
944
947
|
},
|
|
945
|
-
|
|
946
|
-
})
|
|
947
|
-
BStackLogger.debug(`[${kind}] Success response: ${JSON.stringify(response)}`);
|
|
948
|
+
body: JSON.stringify(data)
|
|
949
|
+
});
|
|
950
|
+
BStackLogger.debug(`[${kind}] Success response: ${JSON.stringify(await response.json())}`);
|
|
948
951
|
}
|
|
949
952
|
catch (error) {
|
|
950
953
|
BStackLogger.debug(`[${kind}] EXCEPTION IN ${kind} REQUEST TO TEST OBSERVABILITY : ${error}`);
|
|
@@ -1017,9 +1020,6 @@ export function isUndefined(value) {
|
|
|
1017
1020
|
export function isTrue(value) {
|
|
1018
1021
|
return (value + '').toLowerCase() === 'true';
|
|
1019
1022
|
}
|
|
1020
|
-
export function isFalse(value) {
|
|
1021
|
-
return (value + '').toLowerCase() === 'false';
|
|
1022
|
-
}
|
|
1023
1023
|
export function frameworkSupportsHook(hook, framework) {
|
|
1024
1024
|
if (framework === 'mocha' && (hook === 'before' || hook === 'after' || hook === 'beforeEach' || hook === 'afterEach')) {
|
|
1025
1025
|
return true;
|
|
@@ -1068,8 +1068,9 @@ export async function uploadLogs(user, key, clientBuildUuid) {
|
|
|
1068
1068
|
formData.append('clientBuildUuid', clientBuildUuid);
|
|
1069
1069
|
const requestOptions = {
|
|
1070
1070
|
body: formData,
|
|
1071
|
-
|
|
1072
|
-
|
|
1071
|
+
headers: {
|
|
1072
|
+
'Authorization': getBasicAuthHeader(user, key)
|
|
1073
|
+
}
|
|
1073
1074
|
};
|
|
1074
1075
|
const response = await nodeRequest('POST', UPLOAD_LOGS_ENDPOINT, requestOptions, uploadAddress);
|
|
1075
1076
|
return response;
|
|
@@ -1109,6 +1110,10 @@ export const getPlatformVersion = o11yErrorHandler(function getPlatformVersion(c
|
|
|
1109
1110
|
}
|
|
1110
1111
|
return undefined;
|
|
1111
1112
|
});
|
|
1113
|
+
export const getBasicAuthHeader = (username, password) => {
|
|
1114
|
+
const encodedAuth = Buffer.from(`${username}:${password}`, 'utf8').toString('base64');
|
|
1115
|
+
return `Basic ${encodedAuth}`;
|
|
1116
|
+
};
|
|
1112
1117
|
export const isObjectEmpty = (objectName) => {
|
|
1113
1118
|
return (objectName &&
|
|
1114
1119
|
Object.keys(objectName).length === 0 &&
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/browserstack-service",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0-alpha.9+9220932b7",
|
|
4
4
|
"description": "WebdriverIO service for better Browserstack integration",
|
|
5
5
|
"author": "Adam Bjerstedt <abjerstedt@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"engines": {
|
|
9
|
-
"node": "
|
|
9
|
+
"node": ">=18"
|
|
10
10
|
},
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
@@ -33,18 +33,17 @@
|
|
|
33
33
|
"@percy/appium-app": "^2.0.1",
|
|
34
34
|
"@percy/selenium-webdriver": "^2.0.3",
|
|
35
35
|
"@types/gitconfiglocal": "^2.0.1",
|
|
36
|
-
"@wdio/logger": "
|
|
37
|
-
"@wdio/reporter": "
|
|
38
|
-
"@wdio/types": "
|
|
36
|
+
"@wdio/logger": "9.0.0-alpha.9+9220932b7",
|
|
37
|
+
"@wdio/reporter": "9.0.0-alpha.9+9220932b7",
|
|
38
|
+
"@wdio/types": "9.0.0-alpha.9+9220932b7",
|
|
39
39
|
"browserstack-local": "^1.5.1",
|
|
40
40
|
"chalk": "^5.3.0",
|
|
41
41
|
"csv-writer": "^1.6.0",
|
|
42
42
|
"formdata-node": "5.0.1",
|
|
43
43
|
"git-repo-info": "^2.1.1",
|
|
44
44
|
"gitconfiglocal": "^2.1.0",
|
|
45
|
-
"got": "^12.6.1",
|
|
46
45
|
"uuid": "^9.0.0",
|
|
47
|
-
"webdriverio": "
|
|
46
|
+
"webdriverio": "9.0.0-alpha.9+9220932b7",
|
|
48
47
|
"winston-transport": "^4.5.0",
|
|
49
48
|
"yauzl": "^3.0.0"
|
|
50
49
|
},
|
|
@@ -53,10 +52,11 @@
|
|
|
53
52
|
},
|
|
54
53
|
"devDependencies": {
|
|
55
54
|
"@types/node": "^20.1.0",
|
|
56
|
-
"@
|
|
55
|
+
"@types/yauzl": "^2.10.3",
|
|
56
|
+
"@wdio/globals": "9.0.0-alpha.9+9220932b7"
|
|
57
57
|
},
|
|
58
58
|
"publishConfig": {
|
|
59
59
|
"access": "public"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "9220932b7048d9b5b6c8397dda54842625be7ef2"
|
|
62
62
|
}
|