@wdio/browserstack-service 7.34.0 → 7.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/build/Percy/Percy-Handler.d.ts +34 -0
  2. package/build/Percy/Percy-Handler.d.ts.map +1 -0
  3. package/build/Percy/Percy-Handler.js +187 -0
  4. package/build/Percy/Percy.d.ts +24 -0
  5. package/build/Percy/Percy.d.ts.map +1 -0
  6. package/build/Percy/Percy.js +128 -0
  7. package/build/Percy/PercyBinary.d.ts +17 -0
  8. package/build/Percy/PercyBinary.d.ts.map +1 -0
  9. package/build/Percy/PercyBinary.js +151 -0
  10. package/build/Percy/PercyCaptureMap.d.ts +9 -0
  11. package/build/Percy/PercyCaptureMap.d.ts.map +1 -0
  12. package/build/Percy/PercyCaptureMap.js +46 -0
  13. package/build/Percy/PercyHelper.d.ts +8 -0
  14. package/build/Percy/PercyHelper.d.ts.map +1 -0
  15. package/build/Percy/PercyHelper.js +78 -0
  16. package/build/Percy/PercyLogger.d.ts +15 -0
  17. package/build/Percy/PercyLogger.d.ts.map +1 -0
  18. package/build/Percy/PercyLogger.js +76 -0
  19. package/build/Percy/PercySDK.d.ts +4 -0
  20. package/build/Percy/PercySDK.d.ts.map +1 -0
  21. package/build/Percy/PercySDK.js +42 -0
  22. package/build/bstackLogger.d.ts +14 -0
  23. package/build/bstackLogger.d.ts.map +1 -0
  24. package/build/bstackLogger.js +52 -0
  25. package/build/cleanup.d.ts +6 -2
  26. package/build/cleanup.d.ts.map +1 -1
  27. package/build/cleanup.js +104 -12
  28. package/build/config.d.ts +23 -0
  29. package/build/config.d.ts.map +1 -0
  30. package/build/config.js +32 -0
  31. package/build/constants.d.ts +20 -0
  32. package/build/constants.d.ts.map +1 -1
  33. package/build/constants.js +45 -1
  34. package/build/crash-reporter.js +1 -1
  35. package/build/data-store.d.ts +3 -0
  36. package/build/data-store.d.ts.map +1 -0
  37. package/build/data-store.js +49 -0
  38. package/build/exitHandler.d.ts +4 -0
  39. package/build/exitHandler.d.ts.map +1 -0
  40. package/build/exitHandler.js +37 -0
  41. package/build/index.d.ts +2 -0
  42. package/build/index.d.ts.map +1 -1
  43. package/build/index.js +15 -1
  44. package/build/insights-handler.d.ts +5 -11
  45. package/build/insights-handler.d.ts.map +1 -1
  46. package/build/insights-handler.js +45 -106
  47. package/build/instrumentation/funnelInstrumentation.d.ts +6 -0
  48. package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -0
  49. package/build/instrumentation/funnelInstrumentation.js +127 -0
  50. package/build/launcher.d.ts +8 -4
  51. package/build/launcher.d.ts.map +1 -1
  52. package/build/launcher.js +87 -18
  53. package/build/reporter.d.ts +3 -3
  54. package/build/reporter.d.ts.map +1 -1
  55. package/build/reporter.js +10 -23
  56. package/build/request-handler.d.ts +5 -13
  57. package/build/request-handler.d.ts.map +1 -1
  58. package/build/request-handler.js +27 -48
  59. package/build/service.d.ts +3 -0
  60. package/build/service.d.ts.map +1 -1
  61. package/build/service.js +50 -18
  62. package/build/testOps/featureStats.d.ts +45 -0
  63. package/build/testOps/featureStats.d.ts.map +1 -0
  64. package/build/testOps/featureStats.js +120 -0
  65. package/build/testOps/featureUsage.d.ts +22 -0
  66. package/build/testOps/featureUsage.d.ts.map +1 -0
  67. package/build/testOps/featureUsage.js +46 -0
  68. package/build/testOps/listener.d.ts +33 -0
  69. package/build/testOps/listener.d.ts.map +1 -0
  70. package/build/testOps/listener.js +228 -0
  71. package/build/testOps/requestUtils.d.ts +4 -0
  72. package/build/testOps/requestUtils.d.ts.map +1 -0
  73. package/build/testOps/requestUtils.js +47 -0
  74. package/build/testOps/testOpsConfig.d.ts +11 -0
  75. package/build/testOps/testOpsConfig.d.ts.map +1 -0
  76. package/build/testOps/testOpsConfig.js +17 -0
  77. package/build/testOps/usageStats.d.ts +404 -0
  78. package/build/testOps/usageStats.d.ts.map +1 -0
  79. package/build/testOps/usageStats.js +110 -0
  80. package/build/types.d.ts +48 -7
  81. package/build/types.d.ts.map +1 -1
  82. package/build/util.d.ts +4 -6
  83. package/build/util.d.ts.map +1 -1
  84. package/build/util.js +82 -67
  85. package/package.json +7 -4
@@ -0,0 +1,4 @@
1
+ import type { UploadType } from '../types';
2
+ export declare function uploadEventData(eventData: UploadType | Array<UploadType>, eventUrl?: string): Promise<void>;
3
+ export declare function sendScreenshots(eventData: Array<UploadType>): Promise<void>;
4
+ //# sourceMappingURL=requestUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestUtils.d.ts","sourceRoot":"","sources":["../../src/testOps/requestUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAW1C,wBAAsB,eAAe,CAAE,SAAS,EAAE,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,GAAE,MAA4B,iBAkCvH;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,iBAE3D"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.sendScreenshots = exports.uploadEventData = void 0;
7
+ const constants_1 = require("../constants");
8
+ const bstackLogger_1 = require("../bstackLogger");
9
+ const util_1 = require("../util");
10
+ const got_1 = __importDefault(require("got"));
11
+ async function uploadEventData(eventData, eventUrl = constants_1.DATA_EVENT_ENDPOINT) {
12
+ let logTag = 'BATCH_UPLOAD';
13
+ if (!Array.isArray(eventData)) {
14
+ logTag = (0, util_1.getLogTag)(eventData.event_type);
15
+ }
16
+ if (eventUrl === constants_1.DATA_SCREENSHOT_ENDPOINT) {
17
+ logTag = 'screenshot_upload';
18
+ }
19
+ if (!process.env[constants_1.TESTOPS_BUILD_COMPLETED_ENV]) {
20
+ throw new Error('Build start not completed yet');
21
+ }
22
+ if (!process.env[constants_1.TESTOPS_JWT_ENV]) {
23
+ bstackLogger_1.BStackLogger.debug(`[${logTag}] Missing Authentication Token/ Build ID`);
24
+ throw new Error('Token/buildID is undefined, build creation might have failed');
25
+ }
26
+ try {
27
+ const url = `${constants_1.DATA_ENDPOINT}/${eventUrl}`;
28
+ const data = await got_1.default.post(url, {
29
+ agent: util_1.DEFAULT_REQUEST_CONFIG.agent,
30
+ headers: {
31
+ ...util_1.DEFAULT_REQUEST_CONFIG.headers,
32
+ 'Authorization': `Bearer ${process.env[constants_1.TESTOPS_JWT_ENV]}`
33
+ },
34
+ json: eventData
35
+ }).json();
36
+ bstackLogger_1.BStackLogger.debug(`[${logTag}] Success response: ${JSON.stringify(data)}`);
37
+ }
38
+ catch (error) {
39
+ bstackLogger_1.BStackLogger.debug(`[${logTag}] Failed. Error: ${error}`);
40
+ throw new Error('Request failed with exception: ' + error);
41
+ }
42
+ }
43
+ exports.uploadEventData = uploadEventData;
44
+ function sendScreenshots(eventData) {
45
+ return uploadEventData(eventData, constants_1.DATA_SCREENSHOT_ENDPOINT);
46
+ }
47
+ exports.sendScreenshots = sendScreenshots;
@@ -0,0 +1,11 @@
1
+ declare class TestOpsConfig {
2
+ enabled: boolean;
3
+ manuallySet: boolean;
4
+ private static _instance;
5
+ buildStopped: boolean;
6
+ buildHashedId?: string;
7
+ static getInstance(...args: any[]): TestOpsConfig;
8
+ constructor(enabled?: boolean, manuallySet?: boolean);
9
+ }
10
+ export default TestOpsConfig;
11
+ //# sourceMappingURL=testOpsConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testOpsConfig.d.ts","sourceRoot":"","sources":["../../src/testOps/testOpsConfig.ts"],"names":[],"mappings":"AAAA,cAAM,aAAa;IAaJ,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,OAAO;IAb/B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAe;IAChC,YAAY,EAAE,OAAO,CAAQ;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IAE7B,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;gBAQtB,OAAO,GAAE,OAAc,EACvB,WAAW,GAAE,OAAe;CAI1C;AAED,eAAe,aAAa,CAAA"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class TestOpsConfig {
4
+ static getInstance(...args) {
5
+ if (!this._instance) {
6
+ this._instance = new TestOpsConfig(...args);
7
+ }
8
+ return this._instance;
9
+ }
10
+ constructor(enabled = true, manuallySet = false) {
11
+ this.enabled = enabled;
12
+ this.manuallySet = manuallySet;
13
+ this.buildStopped = false;
14
+ TestOpsConfig._instance = this;
15
+ }
16
+ }
17
+ exports.default = TestOpsConfig;
@@ -0,0 +1,404 @@
1
+ import FeatureStats from './featureStats';
2
+ import FeatureUsage from './featureUsage';
3
+ import type { TOUsageStats } from '../types';
4
+ declare class UsageStats {
5
+ static instance: UsageStats;
6
+ testStartedStats: FeatureStats;
7
+ testFinishedStats: FeatureStats;
8
+ hookStartedStats: FeatureStats;
9
+ hookFinishedStats: FeatureStats;
10
+ cbtSessionStats: FeatureStats;
11
+ logStats: FeatureStats;
12
+ launchBuildUsage: FeatureUsage;
13
+ stopBuildUsage: FeatureUsage;
14
+ static getInstance(): UsageStats;
15
+ constructor();
16
+ add(usageStats: UsageStats): void;
17
+ getFormattedData(workersData: any[]): TOUsageStats;
18
+ addDataFromWorkers(workersData: any[]): void;
19
+ getEventsData(): {
20
+ buildEvents: {
21
+ started: {
22
+ isTriggered: boolean | undefined;
23
+ status: string | undefined;
24
+ error: string | undefined;
25
+ };
26
+ finished: {
27
+ isTriggered: boolean | undefined;
28
+ status: string | undefined;
29
+ error: string | undefined;
30
+ };
31
+ };
32
+ testEvents: {
33
+ triggeredCount: number;
34
+ sentCount: number;
35
+ failedCount: number;
36
+ started: {
37
+ triggeredCount: number;
38
+ sentCount: number;
39
+ failedCount: number;
40
+ } | {
41
+ groups: Record<string, import("../types").FeatureStatsOverview>;
42
+ triggeredCount: number;
43
+ sentCount: number;
44
+ failedCount: number;
45
+ } | {
46
+ [x: string]: import("../types").FeatureStatsOverview;
47
+ } | {
48
+ groups: Record<string, import("../types").FeatureStatsOverview>;
49
+ };
50
+ finished: {
51
+ triggeredCount: number;
52
+ sentCount: number;
53
+ failedCount: number;
54
+ } | {
55
+ groups: Record<string, import("../types").FeatureStatsOverview>;
56
+ triggeredCount: number;
57
+ sentCount: number;
58
+ failedCount: number;
59
+ } | {
60
+ [x: string]: import("../types").FeatureStatsOverview;
61
+ } | {
62
+ groups: Record<string, import("../types").FeatureStatsOverview>;
63
+ };
64
+ } | {
65
+ groups: Record<string, import("../types").FeatureStatsOverview>;
66
+ triggeredCount: number;
67
+ sentCount: number;
68
+ failedCount: number;
69
+ started: {
70
+ triggeredCount: number;
71
+ sentCount: number;
72
+ failedCount: number;
73
+ } | {
74
+ groups: Record<string, import("../types").FeatureStatsOverview>;
75
+ triggeredCount: number;
76
+ sentCount: number;
77
+ failedCount: number;
78
+ } | {
79
+ [x: string]: import("../types").FeatureStatsOverview;
80
+ } | {
81
+ groups: Record<string, import("../types").FeatureStatsOverview>;
82
+ };
83
+ finished: {
84
+ triggeredCount: number;
85
+ sentCount: number;
86
+ failedCount: number;
87
+ } | {
88
+ groups: Record<string, import("../types").FeatureStatsOverview>;
89
+ triggeredCount: number;
90
+ sentCount: number;
91
+ failedCount: number;
92
+ } | {
93
+ [x: string]: import("../types").FeatureStatsOverview;
94
+ } | {
95
+ groups: Record<string, import("../types").FeatureStatsOverview>;
96
+ };
97
+ } | {
98
+ started: {
99
+ triggeredCount: number;
100
+ sentCount: number;
101
+ failedCount: number;
102
+ } | {
103
+ groups: Record<string, import("../types").FeatureStatsOverview>;
104
+ triggeredCount: number;
105
+ sentCount: number;
106
+ failedCount: number;
107
+ } | {
108
+ [x: string]: import("../types").FeatureStatsOverview;
109
+ } | {
110
+ groups: Record<string, import("../types").FeatureStatsOverview>;
111
+ };
112
+ finished: {
113
+ triggeredCount: number;
114
+ sentCount: number;
115
+ failedCount: number;
116
+ } | {
117
+ groups: Record<string, import("../types").FeatureStatsOverview>;
118
+ triggeredCount: number;
119
+ sentCount: number;
120
+ failedCount: number;
121
+ } | {
122
+ [x: string]: import("../types").FeatureStatsOverview;
123
+ } | {
124
+ groups: Record<string, import("../types").FeatureStatsOverview>;
125
+ };
126
+ } | {
127
+ groups: Record<string, import("../types").FeatureStatsOverview>;
128
+ started: {
129
+ triggeredCount: number;
130
+ sentCount: number;
131
+ failedCount: number;
132
+ } | {
133
+ groups: Record<string, import("../types").FeatureStatsOverview>;
134
+ triggeredCount: number;
135
+ sentCount: number;
136
+ failedCount: number;
137
+ } | {
138
+ [x: string]: import("../types").FeatureStatsOverview;
139
+ } | {
140
+ groups: Record<string, import("../types").FeatureStatsOverview>;
141
+ };
142
+ finished: {
143
+ triggeredCount: number;
144
+ sentCount: number;
145
+ failedCount: number;
146
+ } | {
147
+ groups: Record<string, import("../types").FeatureStatsOverview>;
148
+ triggeredCount: number;
149
+ sentCount: number;
150
+ failedCount: number;
151
+ } | {
152
+ [x: string]: import("../types").FeatureStatsOverview;
153
+ } | {
154
+ groups: Record<string, import("../types").FeatureStatsOverview>;
155
+ };
156
+ };
157
+ hookEvents: {
158
+ triggeredCount: number;
159
+ sentCount: number;
160
+ failedCount: number;
161
+ started: {
162
+ triggeredCount: number;
163
+ sentCount: number;
164
+ failedCount: number;
165
+ } | {
166
+ groups: Record<string, import("../types").FeatureStatsOverview>;
167
+ triggeredCount: number;
168
+ sentCount: number;
169
+ failedCount: number;
170
+ } | {
171
+ [x: string]: import("../types").FeatureStatsOverview;
172
+ } | {
173
+ groups: Record<string, import("../types").FeatureStatsOverview>;
174
+ };
175
+ finished: {
176
+ triggeredCount: number;
177
+ sentCount: number;
178
+ failedCount: number;
179
+ } | {
180
+ groups: Record<string, import("../types").FeatureStatsOverview>;
181
+ triggeredCount: number;
182
+ sentCount: number;
183
+ failedCount: number;
184
+ } | {
185
+ [x: string]: import("../types").FeatureStatsOverview;
186
+ } | {
187
+ groups: Record<string, import("../types").FeatureStatsOverview>;
188
+ };
189
+ } | {
190
+ groups: Record<string, import("../types").FeatureStatsOverview>;
191
+ triggeredCount: number;
192
+ sentCount: number;
193
+ failedCount: number;
194
+ started: {
195
+ triggeredCount: number;
196
+ sentCount: number;
197
+ failedCount: number;
198
+ } | {
199
+ groups: Record<string, import("../types").FeatureStatsOverview>;
200
+ triggeredCount: number;
201
+ sentCount: number;
202
+ failedCount: number;
203
+ } | {
204
+ [x: string]: import("../types").FeatureStatsOverview;
205
+ } | {
206
+ groups: Record<string, import("../types").FeatureStatsOverview>;
207
+ };
208
+ finished: {
209
+ triggeredCount: number;
210
+ sentCount: number;
211
+ failedCount: number;
212
+ } | {
213
+ groups: Record<string, import("../types").FeatureStatsOverview>;
214
+ triggeredCount: number;
215
+ sentCount: number;
216
+ failedCount: number;
217
+ } | {
218
+ [x: string]: import("../types").FeatureStatsOverview;
219
+ } | {
220
+ groups: Record<string, import("../types").FeatureStatsOverview>;
221
+ };
222
+ } | {
223
+ started: {
224
+ triggeredCount: number;
225
+ sentCount: number;
226
+ failedCount: number;
227
+ } | {
228
+ groups: Record<string, import("../types").FeatureStatsOverview>;
229
+ triggeredCount: number;
230
+ sentCount: number;
231
+ failedCount: number;
232
+ } | {
233
+ [x: string]: import("../types").FeatureStatsOverview;
234
+ } | {
235
+ groups: Record<string, import("../types").FeatureStatsOverview>;
236
+ };
237
+ finished: {
238
+ triggeredCount: number;
239
+ sentCount: number;
240
+ failedCount: number;
241
+ } | {
242
+ groups: Record<string, import("../types").FeatureStatsOverview>;
243
+ triggeredCount: number;
244
+ sentCount: number;
245
+ failedCount: number;
246
+ } | {
247
+ [x: string]: import("../types").FeatureStatsOverview;
248
+ } | {
249
+ groups: Record<string, import("../types").FeatureStatsOverview>;
250
+ };
251
+ } | {
252
+ groups: Record<string, import("../types").FeatureStatsOverview>;
253
+ started: {
254
+ triggeredCount: number;
255
+ sentCount: number;
256
+ failedCount: number;
257
+ } | {
258
+ groups: Record<string, import("../types").FeatureStatsOverview>;
259
+ triggeredCount: number;
260
+ sentCount: number;
261
+ failedCount: number;
262
+ } | {
263
+ [x: string]: import("../types").FeatureStatsOverview;
264
+ } | {
265
+ groups: Record<string, import("../types").FeatureStatsOverview>;
266
+ };
267
+ finished: {
268
+ triggeredCount: number;
269
+ sentCount: number;
270
+ failedCount: number;
271
+ } | {
272
+ groups: Record<string, import("../types").FeatureStatsOverview>;
273
+ triggeredCount: number;
274
+ sentCount: number;
275
+ failedCount: number;
276
+ } | {
277
+ [x: string]: import("../types").FeatureStatsOverview;
278
+ } | {
279
+ groups: Record<string, import("../types").FeatureStatsOverview>;
280
+ };
281
+ };
282
+ logEvents: {
283
+ triggeredCount: number;
284
+ sentCount: number;
285
+ failedCount: number;
286
+ } | {
287
+ groups: Record<string, import("../types").FeatureStatsOverview>;
288
+ triggeredCount: number;
289
+ sentCount: number;
290
+ failedCount: number;
291
+ } | {
292
+ [x: string]: import("../types").FeatureStatsOverview;
293
+ } | {
294
+ groups: Record<string, import("../types").FeatureStatsOverview>;
295
+ };
296
+ cbtSessionEvents: {
297
+ triggeredCount: number;
298
+ sentCount: number;
299
+ failedCount: number;
300
+ } | {
301
+ groups: Record<string, import("../types").FeatureStatsOverview>;
302
+ triggeredCount: number;
303
+ sentCount: number;
304
+ failedCount: number;
305
+ } | {
306
+ [x: string]: import("../types").FeatureStatsOverview;
307
+ } | {
308
+ groups: Record<string, import("../types").FeatureStatsOverview>;
309
+ };
310
+ };
311
+ getDataToSave(): {
312
+ testEvents: {
313
+ started: {
314
+ triggeredCount: number;
315
+ sentCount: number;
316
+ failedCount: number;
317
+ } | {
318
+ groups: Record<string, import("../types").FeatureStatsOverview>;
319
+ triggeredCount: number;
320
+ sentCount: number;
321
+ failedCount: number;
322
+ } | {
323
+ [x: string]: import("../types").FeatureStatsOverview;
324
+ } | {
325
+ groups: Record<string, import("../types").FeatureStatsOverview>;
326
+ };
327
+ finished: {
328
+ triggeredCount: number;
329
+ sentCount: number;
330
+ failedCount: number;
331
+ } | {
332
+ groups: Record<string, import("../types").FeatureStatsOverview>;
333
+ triggeredCount: number;
334
+ sentCount: number;
335
+ failedCount: number;
336
+ } | {
337
+ [x: string]: import("../types").FeatureStatsOverview;
338
+ } | {
339
+ groups: Record<string, import("../types").FeatureStatsOverview>;
340
+ };
341
+ };
342
+ hookEvents: {
343
+ started: {
344
+ triggeredCount: number;
345
+ sentCount: number;
346
+ failedCount: number;
347
+ } | {
348
+ groups: Record<string, import("../types").FeatureStatsOverview>;
349
+ triggeredCount: number;
350
+ sentCount: number;
351
+ failedCount: number;
352
+ } | {
353
+ [x: string]: import("../types").FeatureStatsOverview;
354
+ } | {
355
+ groups: Record<string, import("../types").FeatureStatsOverview>;
356
+ };
357
+ finished: {
358
+ triggeredCount: number;
359
+ sentCount: number;
360
+ failedCount: number;
361
+ } | {
362
+ groups: Record<string, import("../types").FeatureStatsOverview>;
363
+ triggeredCount: number;
364
+ sentCount: number;
365
+ failedCount: number;
366
+ } | {
367
+ [x: string]: import("../types").FeatureStatsOverview;
368
+ } | {
369
+ groups: Record<string, import("../types").FeatureStatsOverview>;
370
+ };
371
+ };
372
+ logEvents: {
373
+ triggeredCount: number;
374
+ sentCount: number;
375
+ failedCount: number;
376
+ } | {
377
+ groups: Record<string, import("../types").FeatureStatsOverview>;
378
+ triggeredCount: number;
379
+ sentCount: number;
380
+ failedCount: number;
381
+ } | {
382
+ [x: string]: import("../types").FeatureStatsOverview;
383
+ } | {
384
+ groups: Record<string, import("../types").FeatureStatsOverview>;
385
+ };
386
+ cbtSessionEvents: {
387
+ triggeredCount: number;
388
+ sentCount: number;
389
+ failedCount: number;
390
+ } | {
391
+ groups: Record<string, import("../types").FeatureStatsOverview>;
392
+ triggeredCount: number;
393
+ sentCount: number;
394
+ failedCount: number;
395
+ } | {
396
+ [x: string]: import("../types").FeatureStatsOverview;
397
+ } | {
398
+ groups: Record<string, import("../types").FeatureStatsOverview>;
399
+ };
400
+ };
401
+ static fromJSON(data: any): UsageStats;
402
+ }
403
+ export default UsageStats;
404
+ //# sourceMappingURL=usageStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usageStats.d.ts","sourceRoot":"","sources":["../../src/testOps/usageStats.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAGzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,cAAM,UAAU;IACZ,OAAc,QAAQ,EAAE,UAAU,CAAA;IAC3B,gBAAgB,EAAE,YAAY,CAAA;IAC9B,iBAAiB,EAAE,YAAY,CAAA;IAC/B,gBAAgB,EAAE,YAAY,CAAA;IAC9B,iBAAiB,EAAE,YAAY,CAAA;IAC/B,eAAe,EAAE,YAAY,CAAA;IAC7B,QAAQ,EAAE,YAAY,CAAA;IACtB,gBAAgB,EAAE,YAAY,CAAA;IAC9B,cAAc,EAAE,YAAY,CAAA;WAErB,WAAW,IAAI,UAAU;;IAkBhC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IASjC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE;IAsBnC,kBAAkB,CAAC,WAAW,EAAE,GAAG,EAAE;IAWrC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqBb,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAeN,QAAQ,CAAC,IAAI,EAAE,GAAG;CAUnC;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const featureStats_1 = __importDefault(require("./featureStats"));
7
+ const featureUsage_1 = __importDefault(require("./featureUsage"));
8
+ const bstackLogger_1 = require("../bstackLogger");
9
+ const testOpsConfig_1 = __importDefault(require("./testOpsConfig"));
10
+ class UsageStats {
11
+ static getInstance() {
12
+ if (!UsageStats.instance) {
13
+ UsageStats.instance = new UsageStats();
14
+ }
15
+ return UsageStats.instance;
16
+ }
17
+ constructor() {
18
+ this.testStartedStats = new featureStats_1.default();
19
+ this.testFinishedStats = new featureStats_1.default();
20
+ this.hookStartedStats = new featureStats_1.default();
21
+ this.hookFinishedStats = new featureStats_1.default();
22
+ this.cbtSessionStats = new featureStats_1.default();
23
+ this.logStats = new featureStats_1.default();
24
+ this.launchBuildUsage = new featureUsage_1.default();
25
+ this.stopBuildUsage = new featureUsage_1.default();
26
+ }
27
+ add(usageStats) {
28
+ this.testStartedStats.add(usageStats.testStartedStats);
29
+ this.testFinishedStats.add(usageStats.testFinishedStats);
30
+ this.hookStartedStats.add(usageStats.hookStartedStats);
31
+ this.hookFinishedStats.add(usageStats.hookFinishedStats);
32
+ this.cbtSessionStats.add(usageStats.cbtSessionStats);
33
+ this.logStats.add(usageStats.logStats);
34
+ }
35
+ getFormattedData(workersData) {
36
+ this.addDataFromWorkers(workersData);
37
+ const testOpsConfig = testOpsConfig_1.default.getInstance();
38
+ const usage = {
39
+ enabled: testOpsConfig.enabled,
40
+ manuallySet: testOpsConfig.manuallySet,
41
+ buildHashedId: testOpsConfig.buildHashedId
42
+ };
43
+ if (!usage.enabled) {
44
+ return usage;
45
+ }
46
+ try {
47
+ usage.events = this.getEventsData();
48
+ }
49
+ catch (e) {
50
+ bstackLogger_1.BStackLogger.debug('exception in getFormattedData: ' + e);
51
+ }
52
+ return usage;
53
+ }
54
+ addDataFromWorkers(workersData) {
55
+ workersData.map(workerData => {
56
+ try {
57
+ const usageStatsForWorker = UsageStats.fromJSON(workerData.usageStats);
58
+ this.add(usageStatsForWorker);
59
+ }
60
+ catch (e) {
61
+ bstackLogger_1.BStackLogger.debug('Exception in adding workerData: ' + e);
62
+ }
63
+ });
64
+ }
65
+ getEventsData() {
66
+ return {
67
+ buildEvents: {
68
+ started: this.launchBuildUsage.toJSON(),
69
+ finished: this.stopBuildUsage.toJSON()
70
+ },
71
+ testEvents: {
72
+ started: this.testStartedStats.toJSON(),
73
+ finished: this.testFinishedStats.toJSON({ omitGroups: true }),
74
+ ...this.testFinishedStats.toJSON({ onlyGroups: true })
75
+ },
76
+ hookEvents: {
77
+ started: this.hookStartedStats.toJSON(),
78
+ finished: this.hookFinishedStats.toJSON({ omitGroups: true }),
79
+ ...this.hookFinishedStats.toJSON({ onlyGroups: true })
80
+ },
81
+ logEvents: this.logStats.toJSON(),
82
+ cbtSessionEvents: this.cbtSessionStats.toJSON()
83
+ };
84
+ }
85
+ getDataToSave() {
86
+ return {
87
+ testEvents: {
88
+ started: this.testStartedStats.toJSON(),
89
+ finished: this.testFinishedStats.toJSON({ nestedGroups: true }),
90
+ },
91
+ hookEvents: {
92
+ started: this.hookStartedStats.toJSON(),
93
+ finished: this.hookFinishedStats.toJSON({ nestedGroups: true }),
94
+ },
95
+ logEvents: this.logStats.toJSON({ nestedGroups: true }),
96
+ cbtSessionEvents: this.cbtSessionStats.toJSON()
97
+ };
98
+ }
99
+ static fromJSON(data) {
100
+ const usageStats = new UsageStats();
101
+ usageStats.testStartedStats = featureStats_1.default.fromJSON(data.testEvents.started);
102
+ usageStats.testFinishedStats = featureStats_1.default.fromJSON(data.testEvents.finished);
103
+ usageStats.hookStartedStats = featureStats_1.default.fromJSON(data.hookEvents.started);
104
+ usageStats.hookFinishedStats = featureStats_1.default.fromJSON(data.hookEvents.finished);
105
+ usageStats.logStats = featureStats_1.default.fromJSON(data.logEvents);
106
+ usageStats.cbtSessionStats = featureStats_1.default.fromJSON(data.cbtSessionStats);
107
+ return usageStats;
108
+ }
109
+ }
110
+ exports.default = UsageStats;
package/build/types.d.ts CHANGED
@@ -50,6 +50,21 @@ export interface BrowserstackConfig {
50
50
  * For e.g. buildName, projectName, BrowserStack access credentials, etc.
51
51
  */
52
52
  testObservabilityOptions?: TestObservabilityOptions;
53
+ /**
54
+ * Set this to true to enable BrowserStack Percy which will take screenshots
55
+ * and snapshots for your tests run on Browserstack
56
+ * @default false
57
+ */
58
+ percy?: boolean;
59
+ /**
60
+ * Accepts mode as a string to auto capture screenshots at different execution points
61
+ * Accepted values are auto, click, testcase, screenshot & manual
62
+ */
63
+ percyCaptureMode?: string;
64
+ /**
65
+ * Set the Percy related config options under this key.
66
+ */
67
+ percyOptions?: any;
53
68
  /**
54
69
  * Set this to true to enable BrowserStack Accessibility Automation which will
55
70
  * automically conduct accessibility testing on your pre-existing test builds
@@ -211,17 +226,23 @@ export interface UserConfig {
211
226
  export interface UploadType {
212
227
  event_type: string;
213
228
  hook_run?: TestData;
214
- test_run?: TestData;
215
- logs?: any[];
229
+ test_run?: TestData | CBTData;
230
+ logs?: LogData[];
216
231
  }
217
- export interface StdLog {
232
+ export interface LogData {
218
233
  timestamp: string;
219
- kind: string;
220
- level?: string;
221
- message?: string;
222
- http_response?: any;
234
+ kind: 'TEST_LOG' | 'TEST_STEP' | 'HTTP' | 'TEST_SCREENSHOT';
223
235
  test_run_uuid?: string;
224
236
  hook_run_uuid?: string;
237
+ message?: string;
238
+ level?: string;
239
+ http_response?: any;
240
+ }
241
+ export interface StdLog extends LogData {
242
+ kind: 'TEST_LOG';
243
+ }
244
+ export interface ScreenshotLog extends LogData {
245
+ kind: 'TEST_SCREENSHOT';
225
246
  }
226
247
  export interface LaunchResponse {
227
248
  jwt: string;
@@ -267,5 +288,25 @@ interface StepData {
267
288
  interface Failure {
268
289
  backtrace: string[];
269
290
  }
291
+ export interface FeatureStatsOverview {
292
+ triggeredCount: number;
293
+ sentCount: number;
294
+ failedCount: number;
295
+ }
296
+ export interface FeaturesUsageData {
297
+ isTriggered?: boolean;
298
+ status?: string;
299
+ error?: string;
300
+ }
301
+ export interface CBTData {
302
+ uuid: string;
303
+ integrations: IntegrationObject;
304
+ }
305
+ export interface TOUsageStats {
306
+ enabled: boolean;
307
+ manuallySet: boolean;
308
+ buildHashedId?: string;
309
+ events?: any;
310
+ }
270
311
  export {};
271
312
  //# sourceMappingURL=types.d.ts.map