@testim/testim-cli 3.252.0 → 3.254.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/OverrideTestDataBuilder.js +1 -1
- package/agent/routers/cliJsCode/index.js +4 -4
- package/agent/routers/cliJsCode/router.js +46 -42
- package/agent/routers/cliJsCode/service.js +18 -13
- package/agent/routers/codim/router.js +14 -17
- package/agent/routers/codim/router.test.js +15 -14
- package/agent/routers/codim/service.js +1 -1
- package/agent/routers/general/index.js +4 -8
- package/agent/routers/hybrid/registerRoutes.js +18 -18
- package/agent/routers/index.js +9 -8
- package/agent/routers/playground/router.js +12 -11
- package/agent/routers/playground/service.js +19 -18
- package/agent/routers/standalone-browser/registerRoutes.js +10 -10
- package/cdpTestRunner.js +4 -3
- package/chromiumInstaller.js +4 -5
- package/cli/onExit.js +2 -2
- package/cli.js +7 -6
- package/cliAgentMode.js +4 -5
- package/codim/codim-cli.js +11 -10
- package/codim/hybrid-utils.js +1 -1
- package/codim/measure-perf.js +9 -6
- package/codim/template.js/tests/examples/01-simple-text-validation.test.js +6 -6
- package/codim/template.js/tests/examples/02-using-locators.test.js +13 -15
- package/codim/template.js/tests/examples/03-using-hooks.test.js +17 -19
- package/codim/template.js/tests/examples/04-skip-and-only.test.js +16 -17
- package/codim/template.js/tests/examples/05-multiple-windows.test.js +16 -17
- package/codim/template.js/webpack.config.js +1 -1
- package/codim/template.ts/webpack.config.js +3 -3
- package/commons/AbortError.js +4 -4
- package/commons/chrome-launcher.js +6 -6
- package/commons/constants.js +2 -0
- package/commons/detectDebugger.js +4 -2
- package/commons/getSessionPlayerRequire.js +2 -20
- package/commons/initializeUserWithAuth.js +2 -2
- package/commons/lazyRequire.js +10 -9
- package/commons/logger.js +4 -4
- package/commons/performance-logger.js +14 -8
- package/commons/prepareRunnerAndTestimStartUtils.js +6 -7
- package/commons/socket/baseSocketServiceSocketIO.js +32 -34
- package/commons/socket/realDataService.js +6 -5
- package/commons/socket/realDataServiceSocketIO.js +4 -4
- package/commons/socket/remoteStepService.js +4 -3
- package/commons/socket/remoteStepServiceSocketIO.js +11 -12
- package/commons/socket/socketService.js +50 -52
- package/commons/socket/testResultServiceSocketIO.js +11 -11
- package/commons/testimDesiredCapabilitiesBuilder.js +44 -0
- package/commons/testimNgrok.js +2 -2
- package/commons/testimNgrok.test.js +1 -1
- package/commons/testimServicesApi.js +37 -21
- package/commons/xhr2.js +97 -100
- package/credentialsManager.js +17 -20
- package/errors.js +5 -0
- package/fixLocalBuild.js +2 -0
- package/npm-shrinkwrap.json +4455 -1576
- package/package.json +9 -7
- package/player/WebdriverioWebDriverApi.js +7 -2
- package/player/appiumTestPlayer.js +102 -0
- package/player/chromeLauncherTestPlayer.js +0 -1
- package/player/seleniumTestPlayer.js +3 -2
- package/player/services/frameLocator.js +2 -1
- package/player/services/mobileFrameLocatorMock.js +32 -0
- package/player/services/playbackTimeoutCalculator.js +1 -0
- package/player/services/portSelector.js +10 -8
- package/player/services/tabService.js +29 -0
- package/player/services/tabServiceMock.js +166 -0
- package/player/stepActions/navigationStepAction.js +11 -10
- package/player/stepActions/sleepStepAction.js +4 -5
- package/player/stepActions/stepAction.js +15 -1
- package/player/stepActions/textStepAction.js +4 -11
- package/player/utils/stepActionUtils.js +4 -2
- package/player/utils/windowUtils.js +139 -125
- package/player/webdriver.js +40 -26
- package/processHandler.js +3 -3
- package/processHandler.test.js +1 -1
- package/reports/consoleReporter.js +3 -2
- package/reports/debugReporter.js +41 -39
- package/reports/jsonReporter.js +53 -50
- package/reports/junitReporter.js +1 -2
- package/reports/reporter.js +135 -136
- package/runOptions.js +8 -7
- package/runner.js +13 -0
- package/runners/ParallelWorkerManager.js +2 -0
- package/runners/TestPlanRunner.js +142 -74
- package/runners/buildCodeTests.js +38 -37
- package/runners/runnerUtils.js +3 -3
- package/services/lambdatestService.js +3 -5
- package/stepPlayers/cliJsStepPlayback.js +22 -17
- package/testRunHandler.js +8 -0
- package/testRunStatus.js +458 -460
- package/{utils.js → utils/index.js} +25 -117
- package/utils/promiseUtils.js +78 -0
- package/utils/stringUtils.js +96 -0
- package/{utils.test.js → utils/utils.test.js} +2 -2
- package/workers/BaseWorker.js +29 -20
- package/workers/WorkerAppium.js +123 -0
- package/workers/WorkerExtensionSingleBrowser.js +4 -4
- package/workers/WorkerSelenium.js +5 -2
package/commons/xhr2.js
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
const FormData = require('form-data');
|
|
2
3
|
|
|
3
4
|
(function () {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
function ctor() {
|
|
12
|
-
this.constructor = child;
|
|
5
|
+
let InvalidStateError; let NetworkError; let ProgressEvent; let SecurityError; let SyntaxError; let XMLHttpRequest; let XMLHttpRequestEventTarget; let XMLHttpRequestUpload; let http; let https; let os; let url;
|
|
6
|
+
const extend = function (child, parent) {
|
|
7
|
+
for (const key in parent) {
|
|
8
|
+
if (hasProp.call(parent, key)) {
|
|
9
|
+
child[key] = parent[key];
|
|
13
10
|
}
|
|
11
|
+
}
|
|
12
|
+
function ctor() {
|
|
13
|
+
this.constructor = child;
|
|
14
|
+
}
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
ctor.prototype = parent.prototype;
|
|
17
|
+
child.prototype = new ctor();
|
|
18
|
+
child.__super__ = parent.prototype;
|
|
19
|
+
return child;
|
|
20
|
+
};
|
|
21
|
+
var hasProp = {}.hasOwnProperty;
|
|
21
22
|
|
|
22
23
|
XMLHttpRequestEventTarget = (function () {
|
|
23
24
|
function XMLHttpRequestEventTarget() {
|
|
@@ -46,7 +47,7 @@ var FormData = require('form-data');
|
|
|
46
47
|
XMLHttpRequestEventTarget.prototype.onloadend = null;
|
|
47
48
|
|
|
48
49
|
XMLHttpRequestEventTarget.prototype.addEventListener = function (eventType, listener) {
|
|
49
|
-
|
|
50
|
+
let base;
|
|
50
51
|
eventType = eventType.toLowerCase();
|
|
51
52
|
(base = this._listeners)[eventType] || (base[eventType] = []);
|
|
52
53
|
this._listeners[eventType].push(listener);
|
|
@@ -54,7 +55,7 @@ var FormData = require('form-data');
|
|
|
54
55
|
};
|
|
55
56
|
|
|
56
57
|
XMLHttpRequestEventTarget.prototype.removeEventListener = function (eventType, listener) {
|
|
57
|
-
|
|
58
|
+
let index;
|
|
58
59
|
eventType = eventType.toLowerCase();
|
|
59
60
|
if (this._listeners[eventType]) {
|
|
60
61
|
index = this._listeners[eventType].indexOf(listener);
|
|
@@ -66,7 +67,8 @@ var FormData = require('form-data');
|
|
|
66
67
|
};
|
|
67
68
|
|
|
68
69
|
XMLHttpRequestEventTarget.prototype.dispatchEvent = function (event) {
|
|
69
|
-
|
|
70
|
+
let eventType; let j; let len; let listener; let
|
|
71
|
+
listeners;
|
|
70
72
|
event.currentTarget = event.target = this;
|
|
71
73
|
eventType = event.type;
|
|
72
74
|
if (listeners = this._listeners[eventType]) {
|
|
@@ -75,15 +77,14 @@ var FormData = require('form-data');
|
|
|
75
77
|
listener.call(this, event);
|
|
76
78
|
}
|
|
77
79
|
}
|
|
78
|
-
if (listener = this[
|
|
80
|
+
if (listener = this[`on${eventType}`]) {
|
|
79
81
|
listener.call(this, event);
|
|
80
82
|
}
|
|
81
83
|
return void 0;
|
|
82
84
|
};
|
|
83
85
|
|
|
84
86
|
return XMLHttpRequestEventTarget;
|
|
85
|
-
|
|
86
|
-
})();
|
|
87
|
+
}());
|
|
87
88
|
|
|
88
89
|
http = require('http');
|
|
89
90
|
|
|
@@ -142,10 +143,10 @@ var FormData = require('form-data');
|
|
|
142
143
|
XMLHttpRequest.prototype.upload = null;
|
|
143
144
|
|
|
144
145
|
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
|
|
145
|
-
|
|
146
|
+
let xhrUrl;
|
|
146
147
|
method = method.toUpperCase();
|
|
147
148
|
if (method in this._restrictedMethods) {
|
|
148
|
-
throw new SecurityError(
|
|
149
|
+
throw new SecurityError(`HTTP method ${method} is not allowed in XHR`);
|
|
149
150
|
}
|
|
150
151
|
xhrUrl = this._parseUrl(url);
|
|
151
152
|
if (async === void 0) {
|
|
@@ -181,9 +182,9 @@ var FormData = require('form-data');
|
|
|
181
182
|
};
|
|
182
183
|
|
|
183
184
|
XMLHttpRequest.prototype.setRequestHeader = function (name, value) {
|
|
184
|
-
|
|
185
|
+
let loweredName;
|
|
185
186
|
if (this.readyState !== XMLHttpRequest.OPENED) {
|
|
186
|
-
throw new InvalidStateError(
|
|
187
|
+
throw new InvalidStateError('XHR readyState must be OPENED');
|
|
187
188
|
}
|
|
188
189
|
loweredName = name.toLowerCase();
|
|
189
190
|
if (this._restrictedHeaders[loweredName] || /^sec\-/.test(loweredName) || /^proxy-/.test(loweredName)) {
|
|
@@ -192,7 +193,7 @@ var FormData = require('form-data');
|
|
|
192
193
|
value = value.toString();
|
|
193
194
|
if (loweredName in this._loweredHeaders) {
|
|
194
195
|
name = this._loweredHeaders[loweredName];
|
|
195
|
-
this._headers[name] = this._headers[name]
|
|
196
|
+
this._headers[name] = `${this._headers[name]}, ${value}`;
|
|
196
197
|
} else {
|
|
197
198
|
this._loweredHeaders[loweredName] = name;
|
|
198
199
|
this._headers[name] = value;
|
|
@@ -202,10 +203,10 @@ var FormData = require('form-data');
|
|
|
202
203
|
|
|
203
204
|
XMLHttpRequest.prototype.send = function (data) {
|
|
204
205
|
if (this.readyState !== XMLHttpRequest.OPENED) {
|
|
205
|
-
throw new InvalidStateError(
|
|
206
|
+
throw new InvalidStateError('XHR readyState must be OPENED');
|
|
206
207
|
}
|
|
207
208
|
if (this._request) {
|
|
208
|
-
throw new InvalidStateError(
|
|
209
|
+
throw new InvalidStateError('send() already called');
|
|
209
210
|
}
|
|
210
211
|
switch (this._url.protocol) {
|
|
211
212
|
case 'file:':
|
|
@@ -216,7 +217,7 @@ var FormData = require('form-data');
|
|
|
216
217
|
this._sendHttp(data);
|
|
217
218
|
break;
|
|
218
219
|
default:
|
|
219
|
-
throw new NetworkError(
|
|
220
|
+
throw new NetworkError(`Unsupported protocol ${this._url.protocol}`);
|
|
220
221
|
}
|
|
221
222
|
return void 0;
|
|
222
223
|
};
|
|
@@ -233,46 +234,48 @@ var FormData = require('form-data');
|
|
|
233
234
|
};
|
|
234
235
|
|
|
235
236
|
XMLHttpRequest.prototype.getResponseHeader = function (name) {
|
|
236
|
-
|
|
237
|
+
let loweredName;
|
|
237
238
|
if (!this._responseHeaders) {
|
|
238
239
|
return null;
|
|
239
240
|
}
|
|
240
241
|
loweredName = name.toLowerCase();
|
|
241
242
|
if (loweredName in this._responseHeaders) {
|
|
242
243
|
return this._responseHeaders[loweredName];
|
|
243
|
-
} else {
|
|
244
|
-
return null;
|
|
245
244
|
}
|
|
245
|
+
return null;
|
|
246
246
|
};
|
|
247
247
|
|
|
248
248
|
XMLHttpRequest.prototype.getAllResponseHeaders = function () {
|
|
249
|
-
|
|
249
|
+
let lines; let name; let
|
|
250
|
+
value;
|
|
250
251
|
if (!this._responseHeaders) {
|
|
251
252
|
return '';
|
|
252
253
|
}
|
|
253
254
|
lines = (function () {
|
|
254
|
-
|
|
255
|
+
let ref; let
|
|
256
|
+
results;
|
|
255
257
|
ref = this._responseHeaders;
|
|
256
258
|
results = [];
|
|
257
259
|
for (name in ref) {
|
|
258
260
|
value = ref[name];
|
|
259
|
-
results.push(name
|
|
261
|
+
results.push(`${name}: ${value}`);
|
|
260
262
|
}
|
|
261
263
|
return results;
|
|
262
264
|
}).call(this);
|
|
263
|
-
return lines.join(
|
|
265
|
+
return lines.join('\r\n');
|
|
264
266
|
};
|
|
265
267
|
|
|
266
268
|
XMLHttpRequest.prototype.overrideMimeType = function (newMimeType) {
|
|
267
269
|
if (this.readyState === XMLHttpRequest.LOADING || this.readyState === XMLHttpRequest.DONE) {
|
|
268
|
-
throw new InvalidStateError(
|
|
270
|
+
throw new InvalidStateError('overrideMimeType() not allowed in LOADING or DONE');
|
|
269
271
|
}
|
|
270
272
|
this._mimeOverride = newMimeType.toLowerCase();
|
|
271
273
|
return void 0;
|
|
272
274
|
};
|
|
273
275
|
|
|
274
276
|
XMLHttpRequest.prototype.nodejsSet = function (options) {
|
|
275
|
-
|
|
277
|
+
let baseUrl; let
|
|
278
|
+
parsedUrl;
|
|
276
279
|
if ('httpAgent' in options) {
|
|
277
280
|
this.nodejsHttpAgent = options.httpAgent;
|
|
278
281
|
}
|
|
@@ -284,7 +287,7 @@ var FormData = require('form-data');
|
|
|
284
287
|
if (baseUrl !== null) {
|
|
285
288
|
parsedUrl = url.parse(baseUrl, false, true);
|
|
286
289
|
if (!parsedUrl.protocol) {
|
|
287
|
-
throw new SyntaxError(
|
|
290
|
+
throw new SyntaxError('baseUrl must be an absolute URL');
|
|
288
291
|
}
|
|
289
292
|
}
|
|
290
293
|
this.nodejsBaseUrl = baseUrl;
|
|
@@ -326,7 +329,7 @@ var FormData = require('form-data');
|
|
|
326
329
|
XMLHttpRequest.prototype._restrictedMethods = {
|
|
327
330
|
CONNECT: true,
|
|
328
331
|
TRACE: true,
|
|
329
|
-
TRACK: true
|
|
332
|
+
TRACK: true,
|
|
330
333
|
};
|
|
331
334
|
|
|
332
335
|
XMLHttpRequest.prototype._restrictedHeaders = {
|
|
@@ -350,18 +353,18 @@ var FormData = require('form-data');
|
|
|
350
353
|
'transfer-encoding': true,
|
|
351
354
|
upgrade: true,
|
|
352
355
|
'user-agent': true,
|
|
353
|
-
via: true
|
|
356
|
+
via: true,
|
|
354
357
|
};
|
|
355
358
|
|
|
356
359
|
XMLHttpRequest.prototype._privateHeaders = {
|
|
357
360
|
'set-cookie': false,
|
|
358
|
-
'set-cookie2': false
|
|
361
|
+
'set-cookie2': false,
|
|
359
362
|
};
|
|
360
363
|
|
|
361
|
-
XMLHttpRequest.prototype._userAgent =
|
|
364
|
+
XMLHttpRequest.prototype._userAgent = `Mozilla/5.0 (${os.type()} ${os.arch()}) ` + `node.js/${process.versions.node} v8/${process.versions.v8}`;
|
|
362
365
|
|
|
363
366
|
XMLHttpRequest.prototype._setReadyState = function (newReadyState) {
|
|
364
|
-
|
|
367
|
+
let event;
|
|
365
368
|
this.readyState = newReadyState;
|
|
366
369
|
event = new ProgressEvent('readystatechange');
|
|
367
370
|
this.dispatchEvent(event);
|
|
@@ -372,12 +375,12 @@ var FormData = require('form-data');
|
|
|
372
375
|
if (this._url.method !== 'GET') {
|
|
373
376
|
throw new NetworkError('The file protocol only supports GET');
|
|
374
377
|
}
|
|
375
|
-
throw new Error(
|
|
378
|
+
throw new Error('Protocol file: not implemented');
|
|
376
379
|
};
|
|
377
380
|
|
|
378
381
|
XMLHttpRequest.prototype._sendHttp = function (data) {
|
|
379
382
|
if (this._sync) {
|
|
380
|
-
throw new Error(
|
|
383
|
+
throw new Error('Synchronous XHR processing not implemented');
|
|
381
384
|
}
|
|
382
385
|
if ((data != null) && (this._method === 'GET' || this._method === 'HEAD')) {
|
|
383
386
|
data = null;
|
|
@@ -391,7 +394,8 @@ var FormData = require('form-data');
|
|
|
391
394
|
};
|
|
392
395
|
|
|
393
396
|
XMLHttpRequest.prototype._sendHxxpRequest = function (data) {
|
|
394
|
-
|
|
397
|
+
let agent; let hxxp; let
|
|
398
|
+
request;
|
|
395
399
|
if (this._url.protocol === 'http:') {
|
|
396
400
|
hxxp = http;
|
|
397
401
|
agent = this.nodejsHttpAgent;
|
|
@@ -406,7 +410,7 @@ var FormData = require('form-data');
|
|
|
406
410
|
auth: this._url.auth,
|
|
407
411
|
method: this._method,
|
|
408
412
|
headers: this._headers,
|
|
409
|
-
agent
|
|
413
|
+
agent,
|
|
410
414
|
});
|
|
411
415
|
|
|
412
416
|
if (typeof data === 'object' && data instanceof FormData) {
|
|
@@ -419,18 +423,18 @@ var FormData = require('form-data');
|
|
|
419
423
|
return function () {
|
|
420
424
|
return _this._onHttpTimeout(request);
|
|
421
425
|
};
|
|
422
|
-
}
|
|
426
|
+
}(this)));
|
|
423
427
|
}
|
|
424
428
|
request.on('response', (function (_this) {
|
|
425
429
|
return function (response) {
|
|
426
430
|
return _this._onHttpResponse(request, response);
|
|
427
431
|
};
|
|
428
|
-
}
|
|
432
|
+
}(this)));
|
|
429
433
|
request.on('error', (function (_this) {
|
|
430
434
|
return function (error) {
|
|
431
435
|
return _this._onHttpRequestError(request, error);
|
|
432
436
|
};
|
|
433
|
-
}
|
|
437
|
+
}(this)));
|
|
434
438
|
this.upload._startUpload(request);
|
|
435
439
|
if (this._request === request) {
|
|
436
440
|
this._dispatchProgress('loadstart');
|
|
@@ -442,10 +446,10 @@ var FormData = require('form-data');
|
|
|
442
446
|
if (typeof data === 'object' && data instanceof FormData) {
|
|
443
447
|
Object.assign(this._headers, data.getHeaders());
|
|
444
448
|
}
|
|
445
|
-
this._headers
|
|
446
|
-
this._headers
|
|
449
|
+
this._headers.Connection = 'keep-alive';
|
|
450
|
+
this._headers.Host = this._url.host;
|
|
447
451
|
if (this._anonymous) {
|
|
448
|
-
this._headers
|
|
452
|
+
this._headers.Referer = 'about:blank';
|
|
449
453
|
}
|
|
450
454
|
this._headers['User-Agent'] = this._userAgent;
|
|
451
455
|
this.upload._finalizeHeaders(this._headers, this._loweredHeaders);
|
|
@@ -453,7 +457,7 @@ var FormData = require('form-data');
|
|
|
453
457
|
};
|
|
454
458
|
|
|
455
459
|
XMLHttpRequest.prototype._onHttpResponse = function (request, response) {
|
|
456
|
-
|
|
460
|
+
let lengthString;
|
|
457
461
|
if (this._request !== request) {
|
|
458
462
|
return;
|
|
459
463
|
}
|
|
@@ -463,7 +467,7 @@ var FormData = require('form-data');
|
|
|
463
467
|
case 303:
|
|
464
468
|
case 307:
|
|
465
469
|
case 308:
|
|
466
|
-
this._url = this._parseUrl(response.headers
|
|
470
|
+
this._url = this._parseUrl(response.headers.location);
|
|
467
471
|
this._method = 'GET';
|
|
468
472
|
if ('content-type' in this._loweredHeaders) {
|
|
469
473
|
delete this._headers[this._loweredHeaders['content-type']];
|
|
@@ -483,17 +487,17 @@ var FormData = require('form-data');
|
|
|
483
487
|
return function (data) {
|
|
484
488
|
return _this._onHttpResponseData(response, data);
|
|
485
489
|
};
|
|
486
|
-
}
|
|
490
|
+
}(this)));
|
|
487
491
|
this._response.on('end', (function (_this) {
|
|
488
492
|
return function () {
|
|
489
493
|
return _this._onHttpResponseEnd(response);
|
|
490
494
|
};
|
|
491
|
-
}
|
|
495
|
+
}(this)));
|
|
492
496
|
this._response.on('close', (function (_this) {
|
|
493
497
|
return function () {
|
|
494
498
|
return _this._onHttpResponseClose(response);
|
|
495
499
|
};
|
|
496
|
-
}
|
|
500
|
+
}(this)));
|
|
497
501
|
this.status = this._response.statusCode;
|
|
498
502
|
this.statusText = http.STATUS_CODES[this.status];
|
|
499
503
|
this._parseResponseHeaders(response);
|
|
@@ -531,7 +535,7 @@ var FormData = require('form-data');
|
|
|
531
535
|
};
|
|
532
536
|
|
|
533
537
|
XMLHttpRequest.prototype._onHttpResponseClose = function (response) {
|
|
534
|
-
|
|
538
|
+
let request;
|
|
535
539
|
if (this._response !== response) {
|
|
536
540
|
return;
|
|
537
541
|
}
|
|
@@ -566,7 +570,7 @@ var FormData = require('form-data');
|
|
|
566
570
|
};
|
|
567
571
|
|
|
568
572
|
XMLHttpRequest.prototype._dispatchProgress = function (eventType) {
|
|
569
|
-
|
|
573
|
+
let event;
|
|
570
574
|
event = new ProgressEvent(eventType);
|
|
571
575
|
event.lengthComputable = this._lengthComputable;
|
|
572
576
|
event.loaded = this._loadedBytes;
|
|
@@ -584,7 +588,8 @@ var FormData = require('form-data');
|
|
|
584
588
|
};
|
|
585
589
|
|
|
586
590
|
XMLHttpRequest.prototype._parseUrl = function (urlString) {
|
|
587
|
-
|
|
591
|
+
let absoluteUrlString; let index; let password; let user; let
|
|
592
|
+
xhrUrl;
|
|
588
593
|
if (this.nodejsBaseUrl === null) {
|
|
589
594
|
absoluteUrlString = urlString;
|
|
590
595
|
} else {
|
|
@@ -592,7 +597,7 @@ var FormData = require('form-data');
|
|
|
592
597
|
}
|
|
593
598
|
xhrUrl = url.parse(absoluteUrlString, false, true);
|
|
594
599
|
xhrUrl.hash = null;
|
|
595
|
-
if (xhrUrl.auth && ((typeof user !==
|
|
600
|
+
if (xhrUrl.auth && ((typeof user !== 'undefined' && user !== null) || (typeof password !== 'undefined' && password !== null))) {
|
|
596
601
|
index = xhrUrl.auth.indexOf(':');
|
|
597
602
|
if (index === -1) {
|
|
598
603
|
if (!user) {
|
|
@@ -608,13 +613,14 @@ var FormData = require('form-data');
|
|
|
608
613
|
}
|
|
609
614
|
}
|
|
610
615
|
if (user || password) {
|
|
611
|
-
xhrUrl.auth = user
|
|
616
|
+
xhrUrl.auth = `${user}:${password}`;
|
|
612
617
|
}
|
|
613
618
|
return xhrUrl;
|
|
614
619
|
};
|
|
615
620
|
|
|
616
621
|
XMLHttpRequest.prototype._parseResponseHeaders = function (response) {
|
|
617
|
-
|
|
622
|
+
let loweredName; let name; let ref; let
|
|
623
|
+
value;
|
|
618
624
|
this._responseHeaders = {};
|
|
619
625
|
ref = response.headers;
|
|
620
626
|
for (name in ref) {
|
|
@@ -635,7 +641,8 @@ var FormData = require('form-data');
|
|
|
635
641
|
};
|
|
636
642
|
|
|
637
643
|
XMLHttpRequest.prototype._parseResponse = function () {
|
|
638
|
-
|
|
644
|
+
let arrayBuffer; let buffer; let i; let j; let jsonError; let ref; let
|
|
645
|
+
view;
|
|
639
646
|
if (Buffer.concat) {
|
|
640
647
|
buffer = Buffer.concat(this._responseParts);
|
|
641
648
|
} else {
|
|
@@ -667,7 +674,7 @@ var FormData = require('form-data');
|
|
|
667
674
|
this.responseText = null;
|
|
668
675
|
arrayBuffer = new ArrayBuffer(buffer.length);
|
|
669
676
|
view = new Uint8Array(arrayBuffer);
|
|
670
|
-
for (i = j = 0, ref = buffer.length;
|
|
677
|
+
for (i = j = 0, ref = buffer.length; ref >= 0 ? j < ref : j > ref; i = ref >= 0 ? ++j : --j) {
|
|
671
678
|
view[i] = buffer[i];
|
|
672
679
|
}
|
|
673
680
|
this.response = arrayBuffer;
|
|
@@ -679,7 +686,7 @@ var FormData = require('form-data');
|
|
|
679
686
|
};
|
|
680
687
|
|
|
681
688
|
XMLHttpRequest.prototype._parseTextResponse = function (buffer) {
|
|
682
|
-
|
|
689
|
+
let e;
|
|
683
690
|
try {
|
|
684
691
|
this.responseText = buffer.toString(this._parseResponseEncoding());
|
|
685
692
|
} catch (_error) {
|
|
@@ -691,18 +698,18 @@ var FormData = require('form-data');
|
|
|
691
698
|
};
|
|
692
699
|
|
|
693
700
|
XMLHttpRequest.prototype._parseResponseEncoding = function () {
|
|
694
|
-
|
|
701
|
+
let contentType; let encoding; let
|
|
702
|
+
match;
|
|
695
703
|
encoding = null;
|
|
696
|
-
if (contentType = this._responseHeaders['content-type']) {
|
|
697
|
-
|
|
698
|
-
return match[1];
|
|
699
|
-
}
|
|
704
|
+
if ((contentType = this._responseHeaders['content-type']) && (match = /\;\s*charset\=(.*)$/.exec(contentType))) {
|
|
705
|
+
return match[1];
|
|
700
706
|
}
|
|
701
707
|
return 'utf-8';
|
|
702
708
|
};
|
|
703
709
|
|
|
704
710
|
XMLHttpRequest.prototype._concatBuffers = function (buffers) {
|
|
705
|
-
|
|
711
|
+
let buffer; let j; let k; let len; let len1; let length; let
|
|
712
|
+
target;
|
|
706
713
|
if (buffers.length === 0) {
|
|
707
714
|
return Buffer.alloc(0);
|
|
708
715
|
}
|
|
@@ -725,8 +732,7 @@ var FormData = require('form-data');
|
|
|
725
732
|
};
|
|
726
733
|
|
|
727
734
|
return XMLHttpRequest;
|
|
728
|
-
|
|
729
|
-
})(XMLHttpRequestEventTarget);
|
|
735
|
+
}(XMLHttpRequestEventTarget));
|
|
730
736
|
|
|
731
737
|
module.exports = XMLHttpRequest;
|
|
732
738
|
|
|
@@ -740,8 +746,7 @@ var FormData = require('form-data');
|
|
|
740
746
|
}
|
|
741
747
|
|
|
742
748
|
return SecurityError;
|
|
743
|
-
|
|
744
|
-
})(Error);
|
|
749
|
+
}(Error));
|
|
745
750
|
|
|
746
751
|
XMLHttpRequest.SecurityError = SecurityError;
|
|
747
752
|
|
|
@@ -753,8 +758,7 @@ var FormData = require('form-data');
|
|
|
753
758
|
}
|
|
754
759
|
|
|
755
760
|
return InvalidStateError;
|
|
756
|
-
|
|
757
|
-
})(Error);
|
|
761
|
+
}(Error));
|
|
758
762
|
|
|
759
763
|
InvalidStateError = (function (superClass) {
|
|
760
764
|
extend(InvalidStateError, superClass);
|
|
@@ -764,8 +768,7 @@ var FormData = require('form-data');
|
|
|
764
768
|
}
|
|
765
769
|
|
|
766
770
|
return InvalidStateError;
|
|
767
|
-
|
|
768
|
-
})(Error);
|
|
771
|
+
}(Error));
|
|
769
772
|
|
|
770
773
|
XMLHttpRequest.InvalidStateError = InvalidStateError;
|
|
771
774
|
|
|
@@ -777,8 +780,7 @@ var FormData = require('form-data');
|
|
|
777
780
|
}
|
|
778
781
|
|
|
779
782
|
return NetworkError;
|
|
780
|
-
|
|
781
|
-
})(Error);
|
|
783
|
+
}(Error));
|
|
782
784
|
|
|
783
785
|
XMLHttpRequest.SyntaxError = SyntaxError;
|
|
784
786
|
|
|
@@ -790,8 +792,7 @@ var FormData = require('form-data');
|
|
|
790
792
|
}
|
|
791
793
|
|
|
792
794
|
return SyntaxError;
|
|
793
|
-
|
|
794
|
-
})(Error);
|
|
795
|
+
}(Error));
|
|
795
796
|
|
|
796
797
|
ProgressEvent = (function () {
|
|
797
798
|
function ProgressEvent(type) {
|
|
@@ -816,8 +817,7 @@ var FormData = require('form-data');
|
|
|
816
817
|
ProgressEvent.prototype.total = null;
|
|
817
818
|
|
|
818
819
|
return ProgressEvent;
|
|
819
|
-
|
|
820
|
-
})();
|
|
820
|
+
}());
|
|
821
821
|
|
|
822
822
|
XMLHttpRequest.ProgressEvent = ProgressEvent;
|
|
823
823
|
|
|
@@ -837,7 +837,8 @@ var FormData = require('form-data');
|
|
|
837
837
|
};
|
|
838
838
|
|
|
839
839
|
XMLHttpRequestUpload.prototype._setData = function (data) {
|
|
840
|
-
|
|
840
|
+
let body; let i; let j; let k; let offset; let ref; let ref1; let
|
|
841
|
+
view;
|
|
841
842
|
if (typeof data === 'undefined' || data === null) {
|
|
842
843
|
return;
|
|
843
844
|
}
|
|
@@ -851,7 +852,7 @@ var FormData = require('form-data');
|
|
|
851
852
|
} else if (data instanceof ArrayBuffer) {
|
|
852
853
|
body = Buffer.alloc(data.byteLength);
|
|
853
854
|
view = new Uint8Array(data);
|
|
854
|
-
for (i = j = 0, ref = data.byteLength;
|
|
855
|
+
for (i = j = 0, ref = data.byteLength; ref >= 0 ? j < ref : j > ref; i = ref >= 0 ? ++j : --j) {
|
|
855
856
|
body[i] = view[i];
|
|
856
857
|
}
|
|
857
858
|
this._body = body;
|
|
@@ -859,23 +860,21 @@ var FormData = require('form-data');
|
|
|
859
860
|
body = Buffer.alloc(data.byteLength);
|
|
860
861
|
offset = data.byteOffset;
|
|
861
862
|
view = new Uint8Array(data.buffer);
|
|
862
|
-
for (i = k = 0, ref1 = data.byteLength;
|
|
863
|
+
for (i = k = 0, ref1 = data.byteLength; ref1 >= 0 ? k < ref1 : k > ref1; i = ref1 >= 0 ? ++k : --k) {
|
|
863
864
|
body[i] = view[i + offset];
|
|
864
865
|
}
|
|
865
866
|
this._body = body;
|
|
866
867
|
} else if (typeof data === 'object' && data instanceof FormData) {
|
|
867
868
|
this._body = null;
|
|
868
869
|
} else {
|
|
869
|
-
throw new Error(
|
|
870
|
+
throw new Error(`Unsupported send() data ${data}`);
|
|
870
871
|
}
|
|
871
872
|
return void 0;
|
|
872
873
|
};
|
|
873
874
|
|
|
874
875
|
XMLHttpRequestUpload.prototype._finalizeHeaders = function (headers, loweredHeaders) {
|
|
875
|
-
if (this._contentType) {
|
|
876
|
-
|
|
877
|
-
headers['Content-Type'] = this._contentType;
|
|
878
|
-
}
|
|
876
|
+
if (this._contentType && !('content-type' in loweredHeaders)) {
|
|
877
|
+
headers['Content-Type'] = this._contentType;
|
|
879
878
|
}
|
|
880
879
|
if (this._body) {
|
|
881
880
|
headers['Content-Length'] = this._body.length.toString();
|
|
@@ -892,9 +891,7 @@ var FormData = require('form-data');
|
|
|
892
891
|
};
|
|
893
892
|
|
|
894
893
|
return XMLHttpRequestUpload;
|
|
895
|
-
|
|
896
|
-
})(XMLHttpRequestEventTarget);
|
|
894
|
+
}(XMLHttpRequestEventTarget));
|
|
897
895
|
|
|
898
896
|
XMLHttpRequest.XMLHttpRequestUpload = XMLHttpRequestUpload;
|
|
899
|
-
|
|
900
897
|
}).call(this);
|
package/credentialsManager.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
2
|
|
|
3
3
|
const fse = require('fs-extra');
|
|
4
4
|
const path = require('path');
|
|
@@ -26,10 +26,8 @@ async function getCredentialsFromChrome() {
|
|
|
26
26
|
return timeout(new Promise(resolve => app.get('/loginInfo', (req, res) => {
|
|
27
27
|
resolve(JSON.parse(Buffer.from(req.query.info, 'base64').toString()));
|
|
28
28
|
res.status(200).end();
|
|
29
|
-
})), 60000).catch(() =>
|
|
30
|
-
|
|
31
|
-
});
|
|
32
|
-
})();
|
|
29
|
+
})), 60000).catch(() => null);
|
|
30
|
+
}());
|
|
33
31
|
await new Promise((resolve, reject) => {
|
|
34
32
|
const server = app.listen(42543, (err) => {
|
|
35
33
|
if (err) {
|
|
@@ -45,6 +43,7 @@ async function getCredentialsFromChrome() {
|
|
|
45
43
|
const url = await getEditorUrl();
|
|
46
44
|
launchChrome(`${url}/#/new-test`);
|
|
47
45
|
} catch (err) {
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
48
47
|
console.log('Unable to open Testim automatically - please manually go to https://app.testim.io');
|
|
49
48
|
}
|
|
50
49
|
|
|
@@ -52,7 +51,7 @@ async function getCredentialsFromChrome() {
|
|
|
52
51
|
return data;
|
|
53
52
|
}
|
|
54
53
|
|
|
55
|
-
async function doLogin({overwriteExisting = true, projects = null} = {}) {
|
|
54
|
+
async function doLogin({ overwriteExisting = true, projects = null } = {}) {
|
|
56
55
|
const homedir = os.homedir();
|
|
57
56
|
|
|
58
57
|
const testimCredentialsFile = path.join(homedir, '.testim');
|
|
@@ -63,17 +62,15 @@ async function doLogin({overwriteExisting = true, projects = null} = {}) {
|
|
|
63
62
|
return;
|
|
64
63
|
}
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
const credentials = {};
|
|
67
66
|
|
|
68
67
|
const prompts = require('prompts');
|
|
69
68
|
const ora = require('ora');
|
|
70
69
|
|
|
71
|
-
|
|
70
|
+
const spinner = ora('Getting credentials from Testim extension ...').start();
|
|
72
71
|
|
|
73
72
|
if (!projects) {
|
|
74
|
-
projects = await timeout(Promise.resolve(getCredentialsFromChrome()), 62000).catch(e =>
|
|
75
|
-
return null;
|
|
76
|
-
});
|
|
73
|
+
projects = await timeout(Promise.resolve(getCredentialsFromChrome()), 62000).catch(e => null);
|
|
77
74
|
}
|
|
78
75
|
|
|
79
76
|
if (projects && projects.token) { // V1(legacy) of the login extension API
|
|
@@ -83,19 +80,18 @@ async function doLogin({overwriteExisting = true, projects = null} = {}) {
|
|
|
83
80
|
|
|
84
81
|
await writeCredentials(testimCredentialsFile, credentials);
|
|
85
82
|
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
83
|
+
} if (projects && projects.length) { // V2(current) of the login extension API
|
|
88
84
|
spinner.succeed();
|
|
89
85
|
|
|
90
86
|
const response = projects.length === 1 ?
|
|
91
|
-
{ project: projects[0]} :
|
|
87
|
+
{ project: projects[0] } :
|
|
92
88
|
await prompts({
|
|
93
89
|
type: 'select',
|
|
94
90
|
name: 'project',
|
|
95
91
|
message: 'There are multiple projects associated with your user account. Please select the project you would like to connect to:',
|
|
96
|
-
choices: projects.map(p => ({title: p.name, value: p}))
|
|
92
|
+
choices: projects.map(p => ({ title: p.name, value: p })),
|
|
97
93
|
}
|
|
98
|
-
|
|
94
|
+
);
|
|
99
95
|
|
|
100
96
|
credentials.token = response.project.ci.token;
|
|
101
97
|
credentials.projectId = response.project.id;
|
|
@@ -104,13 +100,14 @@ async function doLogin({overwriteExisting = true, projects = null} = {}) {
|
|
|
104
100
|
}
|
|
105
101
|
|
|
106
102
|
spinner.fail();
|
|
103
|
+
// eslint-disable-next-line no-console
|
|
107
104
|
console.log('Error getting credentials - please pass `--token` and `--project` to the CLI or try again');
|
|
108
|
-
|
|
109
105
|
}
|
|
110
106
|
|
|
111
107
|
async function writeCredentials(testimCredentialsFile, credentials) {
|
|
112
108
|
await fse.writeFile(testimCredentialsFile, YAML.stringify(credentials));
|
|
113
|
-
|
|
109
|
+
// eslint-disable-next-line no-console
|
|
110
|
+
console.log(`Testim credentials saved in '${testimCredentialsFile}'`);
|
|
114
111
|
}
|
|
115
112
|
|
|
116
113
|
async function getCredentialProperty(property) {
|
|
@@ -139,5 +136,5 @@ async function getCredentialProperty(property) {
|
|
|
139
136
|
module.exports = {
|
|
140
137
|
getProjectId,
|
|
141
138
|
getToken,
|
|
142
|
-
doLogin
|
|
143
|
-
}
|
|
139
|
+
doLogin,
|
|
140
|
+
};
|