@wdio/browserstack-service 8.48.0 → 8.49.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 (238) hide show
  1. package/build/Percy/Percy-Handler.js +1 -0
  2. package/build/Percy/Percy-Handler.js.map +1 -0
  3. package/build/Percy/Percy.js +1 -0
  4. package/build/Percy/Percy.js.map +1 -0
  5. package/build/Percy/PercyBinary.js +1 -0
  6. package/build/Percy/PercyBinary.js.map +1 -0
  7. package/build/Percy/PercyCaptureMap.js +1 -0
  8. package/build/Percy/PercyCaptureMap.js.map +1 -0
  9. package/build/Percy/PercyHelper.d.ts.map +1 -1
  10. package/build/Percy/PercyHelper.js +1 -0
  11. package/build/Percy/PercyHelper.js.map +1 -0
  12. package/build/Percy/PercyLogger.js +1 -0
  13. package/build/Percy/PercyLogger.js.map +1 -0
  14. package/build/Percy/PercySDK.js +1 -0
  15. package/build/Percy/PercySDK.js.map +1 -0
  16. package/build/accessibility-handler.d.ts +1 -1
  17. package/build/accessibility-handler.d.ts.map +1 -1
  18. package/build/accessibility-handler.js +14 -11
  19. package/build/accessibility-handler.js.map +1 -0
  20. package/build/ai-handler.d.ts.map +1 -1
  21. package/build/ai-handler.js +12 -0
  22. package/build/ai-handler.js.map +1 -0
  23. package/build/bstackLogger.js +1 -0
  24. package/build/bstackLogger.js.map +1 -0
  25. package/build/cleanup.js +1 -0
  26. package/build/cleanup.js.map +1 -0
  27. package/build/cli/apiUtils.js +1 -0
  28. package/build/cli/apiUtils.js.map +1 -0
  29. package/build/cli/cliLogger.d.ts +1 -0
  30. package/build/cli/cliLogger.d.ts.map +1 -1
  31. package/build/cli/cliLogger.js +24 -12
  32. package/build/cli/cliLogger.js.map +1 -0
  33. package/build/cli/cliUtils.d.ts +18 -0
  34. package/build/cli/cliUtils.d.ts.map +1 -1
  35. package/build/cli/cliUtils.js +30 -0
  36. package/build/cli/cliUtils.js.map +1 -0
  37. package/build/cli/eventDispatcher.js +1 -0
  38. package/build/cli/eventDispatcher.js.map +1 -0
  39. package/build/cli/frameworks/automationFramework.js +1 -0
  40. package/build/cli/frameworks/automationFramework.js.map +1 -0
  41. package/build/cli/frameworks/constants/automationFrameworkConstants.js +1 -0
  42. package/build/cli/frameworks/constants/automationFrameworkConstants.js.map +1 -0
  43. package/build/cli/frameworks/constants/testFrameworkConstants.js +1 -0
  44. package/build/cli/frameworks/constants/testFrameworkConstants.js.map +1 -0
  45. package/build/cli/frameworks/testFramework.js +1 -0
  46. package/build/cli/frameworks/testFramework.js.map +1 -0
  47. package/build/cli/frameworks/wdioAutomationFramework.js +1 -0
  48. package/build/cli/frameworks/wdioAutomationFramework.js.map +1 -0
  49. package/build/cli/frameworks/wdioMochaTestFramework.d.ts.map +1 -1
  50. package/build/cli/frameworks/wdioMochaTestFramework.js +5 -2
  51. package/build/cli/frameworks/wdioMochaTestFramework.js.map +1 -0
  52. package/build/cli/grpcClient.d.ts +21 -5
  53. package/build/cli/grpcClient.d.ts.map +1 -1
  54. package/build/cli/grpcClient.js +135 -22
  55. package/build/cli/grpcClient.js.map +1 -0
  56. package/build/cli/index.d.ts +3 -1
  57. package/build/cli/index.d.ts.map +1 -1
  58. package/build/cli/index.js +53 -4
  59. package/build/cli/index.js.map +1 -0
  60. package/build/cli/instances/automationFrameworkInstance.js +1 -0
  61. package/build/cli/instances/automationFrameworkInstance.js.map +1 -0
  62. package/build/cli/instances/testFrameworkInstance.js +1 -0
  63. package/build/cli/instances/testFrameworkInstance.js.map +1 -0
  64. package/build/cli/instances/trackedContext.js +1 -0
  65. package/build/cli/instances/trackedContext.js.map +1 -0
  66. package/build/cli/instances/trackedInstance.js +1 -0
  67. package/build/cli/instances/trackedInstance.js.map +1 -0
  68. package/build/cli/modules/accessibilityModule.d.ts +4 -1
  69. package/build/cli/modules/accessibilityModule.d.ts.map +1 -1
  70. package/build/cli/modules/accessibilityModule.js +76 -10
  71. package/build/cli/modules/accessibilityModule.js.map +1 -0
  72. package/build/cli/modules/automateModule.js +1 -0
  73. package/build/cli/modules/automateModule.js.map +1 -0
  74. package/build/cli/modules/baseModule.js +1 -0
  75. package/build/cli/modules/baseModule.js.map +1 -0
  76. package/build/cli/modules/observabilityModule.js +1 -0
  77. package/build/cli/modules/observabilityModule.js.map +1 -0
  78. package/build/cli/modules/percyModule.js +1 -0
  79. package/build/cli/modules/percyModule.js.map +1 -0
  80. package/build/cli/modules/testHubModule.js +1 -0
  81. package/build/cli/modules/testHubModule.js.map +1 -0
  82. package/build/cli/modules/webdriverIOModule.js +1 -0
  83. package/build/cli/modules/webdriverIOModule.js.map +1 -0
  84. package/build/cli/states/automationFrameworkState.d.ts.map +1 -1
  85. package/build/cli/states/automationFrameworkState.js +1 -0
  86. package/build/cli/states/automationFrameworkState.js.map +1 -0
  87. package/build/cli/states/hookState.d.ts.map +1 -1
  88. package/build/cli/states/hookState.js +1 -0
  89. package/build/cli/states/hookState.js.map +1 -0
  90. package/build/cli/states/testFrameworkState.d.ts.map +1 -1
  91. package/build/cli/states/testFrameworkState.js +1 -0
  92. package/build/cli/states/testFrameworkState.js.map +1 -0
  93. package/build/config.js +1 -0
  94. package/build/config.js.map +1 -0
  95. package/build/constants.d.ts +28 -0
  96. package/build/constants.d.ts.map +1 -1
  97. package/build/constants.js +38 -1
  98. package/build/constants.js.map +1 -0
  99. package/build/crash-reporter.js +1 -0
  100. package/build/crash-reporter.js.map +1 -0
  101. package/build/cucumber-types.js +1 -0
  102. package/build/cucumber-types.js.map +1 -0
  103. package/build/data-store.js +1 -0
  104. package/build/data-store.js.map +1 -0
  105. package/build/exitHandler.d.ts +1 -1
  106. package/build/exitHandler.d.ts.map +1 -1
  107. package/build/exitHandler.js +7 -5
  108. package/build/exitHandler.js.map +1 -0
  109. package/build/fileStream.js +1 -0
  110. package/build/fileStream.js.map +1 -0
  111. package/build/grpc/generated/sdk-messages-accessibility.d.ts +76 -0
  112. package/build/grpc/generated/sdk-messages-accessibility.d.ts.map +1 -0
  113. package/build/grpc/generated/sdk-messages-accessibility.js +908 -0
  114. package/build/grpc/generated/sdk-messages-accessibility.js.map +1 -0
  115. package/build/grpc/generated/sdk-messages-ai.d.ts +52 -0
  116. package/build/grpc/generated/sdk-messages-ai.d.ts.map +1 -0
  117. package/build/grpc/generated/sdk-messages-ai.js +643 -0
  118. package/build/grpc/generated/sdk-messages-ai.js.map +1 -0
  119. package/build/grpc/generated/sdk-messages-observability.d.ts +44 -0
  120. package/build/grpc/generated/sdk-messages-observability.d.ts.map +1 -0
  121. package/build/grpc/generated/sdk-messages-observability.js +505 -0
  122. package/build/grpc/generated/sdk-messages-observability.js.map +1 -0
  123. package/build/grpc/generated/sdk-messages-percy.d.ts +16 -0
  124. package/build/grpc/generated/sdk-messages-percy.d.ts.map +1 -0
  125. package/build/grpc/generated/sdk-messages-percy.js +111 -0
  126. package/build/grpc/generated/sdk-messages-percy.js.map +1 -0
  127. package/build/grpc/generated/sdk-messages-testhub.d.ts +16 -0
  128. package/build/grpc/generated/sdk-messages-testhub.d.ts.map +1 -0
  129. package/build/grpc/generated/sdk-messages-testhub.js +132 -0
  130. package/build/grpc/generated/sdk-messages-testhub.js.map +1 -0
  131. package/build/grpc/generated/sdk-messages.d.ts +288 -0
  132. package/build/grpc/generated/sdk-messages.d.ts.map +1 -0
  133. package/build/grpc/generated/sdk-messages.js +3958 -0
  134. package/build/grpc/generated/sdk-messages.js.map +1 -0
  135. package/build/grpc/generated/sdk.d.ts +282 -0
  136. package/build/grpc/generated/sdk.d.ts.map +1 -0
  137. package/build/grpc/generated/sdk.js +197 -0
  138. package/build/grpc/generated/sdk.js.map +1 -0
  139. package/build/grpc/index.d.ts +43 -0
  140. package/build/grpc/index.d.ts.map +1 -0
  141. package/build/grpc/index.js +154 -0
  142. package/build/grpc/index.js.map +1 -0
  143. package/build/index.js +1 -0
  144. package/build/index.js.map +1 -0
  145. package/build/insights-handler.d.ts.map +1 -1
  146. package/build/insights-handler.js +38 -8
  147. package/build/insights-handler.js.map +1 -0
  148. package/build/instrumentation/funnelInstrumentation.d.ts +2 -2
  149. package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -1
  150. package/build/instrumentation/funnelInstrumentation.js +31 -8
  151. package/build/instrumentation/funnelInstrumentation.js.map +1 -0
  152. package/build/instrumentation/performance/constants.d.ts +64 -0
  153. package/build/instrumentation/performance/constants.d.ts.map +1 -1
  154. package/build/instrumentation/performance/constants.js +74 -2
  155. package/build/instrumentation/performance/constants.js.map +1 -0
  156. package/build/instrumentation/performance/performance-tester.d.ts +11 -0
  157. package/build/instrumentation/performance/performance-tester.d.ts.map +1 -1
  158. package/build/instrumentation/performance/performance-tester.js +136 -15
  159. package/build/instrumentation/performance/performance-tester.js.map +1 -0
  160. package/build/launcher.d.ts +1 -0
  161. package/build/launcher.d.ts.map +1 -1
  162. package/build/launcher.js +152 -6
  163. package/build/launcher.js.map +1 -0
  164. package/build/log4jsAppender.d.ts.map +1 -1
  165. package/build/log4jsAppender.js +1 -0
  166. package/build/log4jsAppender.js.map +1 -0
  167. package/build/logPatcher.d.ts.map +1 -1
  168. package/build/logPatcher.js +1 -0
  169. package/build/logPatcher.js.map +1 -0
  170. package/build/logReportingAPI.d.ts.map +1 -1
  171. package/build/logReportingAPI.js +1 -0
  172. package/build/logReportingAPI.js.map +1 -0
  173. package/build/reporter.js +1 -0
  174. package/build/reporter.js.map +1 -0
  175. package/build/request-handler.d.ts.map +1 -1
  176. package/build/request-handler.js +4 -0
  177. package/build/request-handler.js.map +1 -0
  178. package/build/scripts/accessibility-scripts.js +1 -0
  179. package/build/scripts/accessibility-scripts.js.map +1 -0
  180. package/build/service.d.ts.map +1 -1
  181. package/build/service.js +78 -5
  182. package/build/service.js.map +1 -0
  183. package/build/testHub/utils.d.ts.map +1 -1
  184. package/build/testHub/utils.js +1 -0
  185. package/build/testHub/utils.js.map +1 -0
  186. package/build/testOps/featureStats.js +1 -0
  187. package/build/testOps/featureStats.js.map +1 -0
  188. package/build/testOps/featureUsage.js +1 -0
  189. package/build/testOps/featureUsage.js.map +1 -0
  190. package/build/testOps/listener.js +1 -0
  191. package/build/testOps/listener.js.map +1 -0
  192. package/build/testOps/requestUtils.js +1 -0
  193. package/build/testOps/requestUtils.js.map +1 -0
  194. package/build/testOps/testOpsConfig.js +1 -0
  195. package/build/testOps/testOpsConfig.js.map +1 -0
  196. package/build/testOps/usageStats.js +1 -0
  197. package/build/testOps/usageStats.js.map +1 -0
  198. package/build/testorchestration/apply-orchestration.d.ts +7 -0
  199. package/build/testorchestration/apply-orchestration.d.ts.map +1 -0
  200. package/build/testorchestration/apply-orchestration.js +43 -0
  201. package/build/testorchestration/apply-orchestration.js.map +1 -0
  202. package/build/testorchestration/helpers.d.ts +20 -0
  203. package/build/testorchestration/helpers.d.ts.map +1 -0
  204. package/build/testorchestration/helpers.js +413 -0
  205. package/build/testorchestration/helpers.js.map +1 -0
  206. package/build/testorchestration/request-utils.d.ts +23 -0
  207. package/build/testorchestration/request-utils.d.ts.map +1 -0
  208. package/build/testorchestration/request-utils.js +82 -0
  209. package/build/testorchestration/request-utils.js.map +1 -0
  210. package/build/testorchestration/test-ordering-server.d.ts +33 -0
  211. package/build/testorchestration/test-ordering-server.d.ts.map +1 -0
  212. package/build/testorchestration/test-ordering-server.js +169 -0
  213. package/build/testorchestration/test-ordering-server.js.map +1 -0
  214. package/build/testorchestration/testorcherstrationhandler.d.ts +50 -0
  215. package/build/testorchestration/testorcherstrationhandler.d.ts.map +1 -0
  216. package/build/testorchestration/testorcherstrationhandler.js +134 -0
  217. package/build/testorchestration/testorcherstrationhandler.js.map +1 -0
  218. package/build/testorchestration/testorcherstrationutils.d.ts +86 -0
  219. package/build/testorchestration/testorcherstrationutils.d.ts.map +1 -0
  220. package/build/testorchestration/testorcherstrationutils.js +380 -0
  221. package/build/testorchestration/testorcherstrationutils.js.map +1 -0
  222. package/build/types.d.ts +21 -0
  223. package/build/types.d.ts.map +1 -1
  224. package/build/types.js +1 -0
  225. package/build/types.js.map +1 -0
  226. package/build/util.d.ts +30 -1
  227. package/build/util.d.ts.map +1 -1
  228. package/build/util.js +103 -4
  229. package/build/util.js.map +1 -0
  230. package/package.json +46 -16
  231. package/src/proto/browserstack/sdk/v1/sdk-messages-accessibility.proto +71 -0
  232. package/src/proto/browserstack/sdk/v1/sdk-messages-ai.proto +48 -0
  233. package/src/proto/browserstack/sdk/v1/sdk-messages-observability.proto +39 -0
  234. package/src/proto/browserstack/sdk/v1/sdk-messages-percy.proto +10 -0
  235. package/src/proto/browserstack/sdk/v1/sdk-messages-testhub.proto +10 -0
  236. package/src/proto/browserstack/sdk/v1/sdk-messages.proto +276 -0
  237. package/src/proto/browserstack/sdk/v1/sdk.proto +41 -0
  238. package/tsconfig.prod.tsbuildinfo +0 -1
@@ -8,13 +8,34 @@ import path from 'node:path';
8
8
  import { arch, hostname, platform, type, version } from 'node:os';
9
9
  import got from 'got';
10
10
  import { BStackLogger } from '../../bstackLogger.js';
11
- import { PERF_MEASUREMENT_ENV, PERF_METRICS_WAIT_TIME } from '../../constants.js';
11
+ import { PERF_MEASUREMENT_ENV } from '../../constants.js';
12
12
  import APIUtils from '../../cli/apiUtils.js';
13
+ import { CLIUtils } from '../../cli/cliUtils.js';
14
+ import { EVENTS } from './constants.js';
15
+ // Telemetry must never throw into business logic. Node 18's perf_hooks rejects
16
+ // negative timestamps (e.g. performance.now() under faked timers, or any other
17
+ // edge) with ERR_PERFORMANCE_INVALID_TIMESTAMP; Node 20+ tolerates them. Wrapping
18
+ // mark/measure keeps an instrumentation failure from breaking a caller's hook
19
+ // (e.g. a service before()), and is a no-op on the happy path.
20
+ function safeMark(markName) {
21
+ try {
22
+ performance.mark(markName);
23
+ }
24
+ catch { /* instrumentation must not throw */ }
25
+ }
26
+ function safeMeasure(measureName, start, end) {
27
+ try {
28
+ performance.measure(measureName, start, end);
29
+ }
30
+ catch { /* instrumentation must not throw */ }
31
+ }
13
32
  export default class PerformanceTester {
14
33
  static _observer;
15
34
  static _csvWriter;
16
35
  static _events = [];
17
36
  static _measuredEvents = [];
37
+ static _hasStoppedGeneration = false;
38
+ static _stopGenerateCallCount = 0;
18
39
  static started = false;
19
40
  static details = {};
20
41
  static eventsMap = {};
@@ -34,6 +55,14 @@ export default class PerformanceTester {
34
55
  .forEach(entry => {
35
56
  let finalEntry = entry;
36
57
  finalEntry = entry.toJSON();
58
+ try {
59
+ if (typeof finalEntry.startTime === 'number' && typeof performance.timeOrigin === 'number') {
60
+ finalEntry.startTime = performance.timeOrigin + finalEntry.startTime;
61
+ }
62
+ }
63
+ catch (e) {
64
+ BStackLogger.debug(`Error converting startTime to epoch: ${util.format(e)}`);
65
+ }
37
66
  if (this.details[entry.name]) {
38
67
  finalEntry = Object.assign(finalEntry, this.details[entry.name]);
39
68
  }
@@ -78,7 +107,6 @@ export default class PerformanceTester {
78
107
  if (!this.started) {
79
108
  return;
80
109
  }
81
- await PerformanceTester.sleep(PERF_METRICS_WAIT_TIME); // Wait to ensure all pending measurements are processed by the observer
82
110
  try {
83
111
  const eventsJson = JSON.stringify(this._measuredEvents);
84
112
  // remove enclosing array and add a trailing comma so that we
@@ -93,8 +121,8 @@ export default class PerformanceTester {
93
121
  if (!process.env[PERF_MEASUREMENT_ENV]) {
94
122
  return;
95
123
  }
96
- await PerformanceTester.sleep(PERF_METRICS_WAIT_TIME); // Wait to 2s just to finish any running callbacks for timerify
97
124
  this.started = false;
125
+ // Generate CSV and HTML reports using directly collected events
98
126
  this.generateCSV(this._events);
99
127
  const content = this.generateReport(this._events);
100
128
  const dir = path.join(process.cwd(), filename);
@@ -166,27 +194,78 @@ export default class PerformanceTester {
166
194
  if (!this.started || !this.isEnabled()) {
167
195
  return fn.apply(thisArg, args);
168
196
  }
169
- PerformanceTester.start(label);
170
- this.details && (this.details[label] = details);
197
+ // Generate unique mark names for this specific call to avoid timing conflicts
198
+ const uniqueId = `${Date.now()}-${Math.random().toString(36).substring(7)}`;
199
+ const startMark = `${label}-start-${uniqueId}`;
200
+ const endMark = `${label}-end-${uniqueId}`;
201
+ // Create the start mark with unique ID
202
+ safeMark(startMark);
203
+ // Store details with measurement context
204
+ const detailsWithContext = {
205
+ ...details,
206
+ measurementId: uniqueId
207
+ };
171
208
  try {
172
209
  const returnVal = fn.apply(thisArg, args);
173
210
  if (returnVal instanceof Promise) {
174
211
  return new Promise((resolve, reject) => {
175
212
  returnVal
176
213
  .then(v => {
177
- PerformanceTester.end(label);
214
+ // Use specific marks for this call
215
+ safeMark(endMark);
216
+ safeMeasure(label, startMark, endMark);
217
+ this.details[label] = Object.assign({
218
+ success: true,
219
+ failure: undefined
220
+ }, Object.assign(Object.assign({
221
+ clientWorkerId: PerformanceTester.getClientWorkerId(),
222
+ worker: PerformanceTester.getProcessId(),
223
+ platform: PerformanceTester.browser?.sessionId,
224
+ testName: PerformanceTester.scenarioThatRan?.pop()
225
+ }, detailsWithContext), this.details[label] || {}));
178
226
  resolve(v);
179
227
  }).catch(e => {
180
- PerformanceTester.end(label, false, util.format(e));
228
+ safeMark(endMark);
229
+ safeMeasure(label, startMark, endMark);
230
+ this.details[label] = Object.assign({
231
+ success: false,
232
+ failure: util.format(e)
233
+ }, Object.assign(Object.assign({
234
+ clientWorkerId: PerformanceTester.getClientWorkerId(),
235
+ worker: PerformanceTester.getProcessId(),
236
+ platform: PerformanceTester.browser?.sessionId,
237
+ testName: PerformanceTester.scenarioThatRan?.pop()
238
+ }, detailsWithContext), this.details[label] || {}));
181
239
  reject(e);
182
240
  });
183
241
  });
184
242
  }
185
- PerformanceTester.end(label);
243
+ // Synchronous execution
244
+ safeMark(endMark);
245
+ safeMeasure(label, startMark, endMark);
246
+ this.details[label] = Object.assign({
247
+ success: true,
248
+ failure: undefined
249
+ }, Object.assign(Object.assign({
250
+ clientWorkerId: PerformanceTester.getClientWorkerId(),
251
+ worker: PerformanceTester.getProcessId(),
252
+ platform: PerformanceTester.browser?.sessionId,
253
+ testName: PerformanceTester.scenarioThatRan?.pop()
254
+ }, detailsWithContext), this.details[label] || {}));
186
255
  return returnVal;
187
256
  }
188
257
  catch (er) {
189
- PerformanceTester.end(label, false, util.format(er));
258
+ safeMark(endMark);
259
+ safeMeasure(label, startMark, endMark);
260
+ this.details[label] = Object.assign({
261
+ success: false,
262
+ failure: util.format(er)
263
+ }, Object.assign(Object.assign({
264
+ clientWorkerId: PerformanceTester.getClientWorkerId(),
265
+ worker: PerformanceTester.getProcessId(),
266
+ platform: PerformanceTester.browser?.sessionId,
267
+ testName: PerformanceTester.scenarioThatRan?.pop()
268
+ }, detailsWithContext), this.details[label] || {}));
190
269
  throw er;
191
270
  }
192
271
  }
@@ -195,32 +274,66 @@ export default class PerformanceTester {
195
274
  if (this.eventsMap[finalEvent]) {
196
275
  return;
197
276
  }
198
- performance.mark(finalEvent);
277
+ safeMark(finalEvent);
199
278
  this.eventsMap[finalEvent] = 1;
200
279
  }
201
280
  static end(event, success = true, failure, details = {}) {
202
- performance.mark(event + '-end');
203
- performance.measure(event, event + '-start', event + '-end');
281
+ safeMark(event + '-end');
282
+ safeMeasure(event, event + '-start', event + '-end');
204
283
  this.details[event] = Object.assign({ success, failure: util.format(failure) }, Object.assign(Object.assign({
284
+ clientWorkerId: PerformanceTester.getClientWorkerId(),
205
285
  worker: PerformanceTester.getProcessId(),
206
286
  platform: PerformanceTester.browser?.sessionId,
207
287
  testName: PerformanceTester.scenarioThatRan?.pop()
208
288
  }, details), this.details[event] || {}));
209
289
  }
290
+ /**
291
+ * Get client worker ID in format "threadId-processId".
292
+ * This method provides a consistent identifier across the SDK for tracking
293
+ * worker-specific events and performance metrics.
294
+ *
295
+ * @returns Worker ID string in format "threadId-processId"
296
+ */
297
+ static getClientWorkerId() {
298
+ return CLIUtils.getClientWorkerId();
299
+ }
210
300
  static getProcessId() {
211
301
  return `${process.pid}-${worker.threadId}`;
212
302
  }
213
303
  static sleep = (ms = 100) => new Promise((resolve) => setTimeout(resolve, ms));
214
304
  static async uploadEventsData() {
305
+ // Track overall key metrics operation
306
+ this.start(EVENTS.SDK_SEND_KEY_METRICS);
215
307
  try {
308
+ const workerId = `${process.pid}`;
309
+ BStackLogger.debug(`[Performance Upload] Starting upload for worker ${workerId}`);
310
+ // Track preparation phase (collection and deduplication)
311
+ this.start(EVENTS.SDK_KEY_METRICS_PREPARATION);
312
+ // Collect all measures from performance report files and in-memory events
216
313
  let measures = [];
217
314
  if (await fsPromise.access(this.jsonReportDirPath).then(() => true).catch(() => false)) {
218
315
  const files = (await fsPromise.readdir(this.jsonReportDirPath)).map(file => path.resolve(this.jsonReportDirPath, file));
219
316
  measures = (await Promise.all(files.map((file) => fsPromise.readFile(file, 'utf-8')))).map(el => `[${el.slice(0, -1)}]`).map(el => JSON.parse(el)).flat();
220
317
  }
318
+ BStackLogger.debug(`[Performance Upload] Total events from files: ${measures.length}`);
221
319
  if (this._measuredEvents.length > 0) {
320
+ BStackLogger.debug(`[Performance Upload] Adding ${this._measuredEvents.length} in-memory events`);
222
321
  measures = measures.concat(this._measuredEvents);
223
322
  }
323
+ const ensureEpochTimes = (arr) => {
324
+ const now = Date.now();
325
+ const cutoff = 1e12; // ~year 2001, ms epoch
326
+ const timeOrigin = (typeof performance !== 'undefined' && typeof performance.timeOrigin === 'number')
327
+ ? performance.timeOrigin
328
+ : (now - process.uptime() * 1000);
329
+ return arr.map(entry => {
330
+ if (typeof entry.startTime === 'number' && entry.startTime < cutoff) {
331
+ entry.startTime = timeOrigin + entry.startTime;
332
+ }
333
+ return entry;
334
+ });
335
+ };
336
+ measures = ensureEpochTimes(measures);
224
337
  const date = new Date();
225
338
  // yyyy-MM-dd'T'HH:mm:ss.SSSSSS Z
226
339
  const options = {
@@ -240,6 +353,7 @@ export default class PerformanceTester {
240
353
  .map(({ type, value }) => type === 'timeZoneName' ? 'Z' : value)
241
354
  .join('')
242
355
  .replace(',', 'T');
356
+ this.end(EVENTS.SDK_KEY_METRICS_PREPARATION, true);
243
357
  const payload = {
244
358
  event_type: 'sdk_events',
245
359
  data: {
@@ -262,10 +376,15 @@ export default class PerformanceTester {
262
376
  'content-type': 'application/json'
263
377
  }, json: payload
264
378
  });
265
- BStackLogger.debug(`Successfully uploaded performance events ${util.format(result.body)}`);
379
+ BStackLogger.debug(`[Performance Upload] Successfully uploaded to EDS: ${util.format(result.body)}`);
380
+ this.end(EVENTS.SDK_KEY_METRICS_UPLOAD, true);
381
+ this.end(EVENTS.SDK_SEND_KEY_METRICS, true);
266
382
  }
267
383
  catch (er) {
268
- BStackLogger.debug(`Failed to upload performance events ${util.format(er)}`);
384
+ BStackLogger.debug(`[Performance Upload] Failed to upload events: ${util.format(er)}`);
385
+ this.end(EVENTS.SDK_KEY_METRICS_UPLOAD, false, er);
386
+ this.end(EVENTS.SDK_KEY_METRICS_PREPARATION, false, er);
387
+ this.end(EVENTS.SDK_SEND_KEY_METRICS, false, er);
269
388
  }
270
389
  try {
271
390
  if (await fsPromise.access(this.jsonReportDirPath).then(() => true, () => false)) {
@@ -273,10 +392,12 @@ export default class PerformanceTester {
273
392
  for (const file of files) {
274
393
  await fsPromise.unlink(path.join(this.jsonReportDirPath, file));
275
394
  }
395
+ BStackLogger.debug(`[Performance Upload] Cleaned up ${files.length} temporary report files`);
276
396
  }
277
397
  }
278
398
  catch (er) {
279
- BStackLogger.debug(`Failed to delete performance related files ${util.format(er)}`);
399
+ BStackLogger.debug(`[Performance Upload] Failed to delete temporary files: ${util.format(er)}`);
280
400
  }
281
401
  }
282
402
  }
403
+ //# sourceMappingURL=performance-tester.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-tester.js","sourceRoot":"","sources":["../../../src/instrumentation/performance/performance-tester.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ export default class BrowserstackLauncherService implements Services.ServiceInst
30
30
  */
31
31
  _validateApp(appConfig: AppConfig | string): Promise<App>;
32
32
  _uploadServiceLogs(): Promise<void>;
33
+ private _removeCliOnlyCapabilityOptions;
33
34
  _updateObjectTypeCaps(capabilities?: Capabilities.RemoteCapabilities, capType?: string, value?: {
34
35
  [key: string]: any;
35
36
  }): void;
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,yBAAyB,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAiDxH,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,CAAuB;IACxD,OAAO,CAAC,MAAM,CAAC,CAAO;IACtB,OAAO,CAAC,sBAAsB,CAAC,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;gBAG3C,QAAQ,EAAE,kBAAkB,GAAG,mBAAmB,EAC1D,YAAY,EAAE,YAAY,CAAC,gBAAgB,EACnC,OAAO,EAAE,OAAO,CAAC,UAAU;IAqHjC,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;IAclC,SAAS,CAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,kBAAkB;IAmNpF,UAAU;IA8FV,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU;IA0B7G,SAAS;IAaT,UAAU,CAAC,GAAG,EAAC,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBrD;;;OAGG;IACG,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB1D,kBAAkB;IASxB,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;IA8GtH,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA+H5F,8BAA8B;IAgB9B,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;CAStB"}
1
+ {"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,yBAAyB,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAIlE,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAmDxH,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,CAAuB;IACxD,OAAO,CAAC,MAAM,CAAC,CAAO;IACtB,OAAO,CAAC,sBAAsB,CAAC,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;gBAG3C,QAAQ,EAAE,kBAAkB,GAAG,mBAAmB,EAC1D,YAAY,EAAE,YAAY,CAAC,gBAAgB,EACnC,OAAO,EAAE,OAAO,CAAC,UAAU;IAqHjC,aAAa,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;IAclC,SAAS,CAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,kBAAkB;IA8UpF,UAAU;IAwGV,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU;IA0B7G,SAAS;IAaT,UAAU,CAAC,GAAG,EAAC,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuBrD;;;OAGG;IACG,YAAY,CAAE,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB1D,kBAAkB;IASxB,OAAO,CAAC,+BAA+B;IAmCvC,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;IA8GtH,WAAW,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IA+H5F,8BAA8B;IAgB9B,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;CAStB"}
package/build/launcher.js CHANGED
@@ -16,7 +16,7 @@ import { SevereServiceError } from 'webdriverio';
16
16
  import * as BrowserstackLocalLauncher from 'browserstack-local';
17
17
  import { startPercy, stopPercy, getBestPlatformForPercySnapshot } from './Percy/PercyHelper.js';
18
18
  import { BSTACK_SERVICE_VERSION, NOT_ALLOWED_KEYS_IN_CAPS, PERF_MEASUREMENT_ENV, RERUN_ENV, RERUN_TESTS_ENV, BROWSERSTACK_TESTHUB_UUID, VALID_APP_EXTENSION, BROWSERSTACK_PERCY, BROWSERSTACK_OBSERVABILITY, WDIO_NAMING_PREFIX } from './constants.js';
19
- import { launchTestSession, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, isValidCapsForHealing, getBooleanValueFromString, validateCapsWithNonBstackA11y, mergeChromeOptions, normalizeTestReportingConfig, normalizeTestReportingEnvVariables } from './util.js';
19
+ import { launchTestSession, shouldAddServiceVersion, stopBuildUpstream, getCiInfo, isBStackSession, isUndefined, isAccessibilityAutomationSession, isTrue, getBrowserStackUser, getBrowserStackKey, uploadLogs, ObjectsAreEqual, isValidCapsForHealing, getBooleanValueFromString, validateCapsWithNonBstackA11y, mergeChromeOptions, normalizeTestReportingConfig, normalizeTestReportingEnvVariables, isValidEnabledValue, isMultiRemoteCaps } from './util.js';
20
20
  import { getProductMap } from './testHub/utils.js';
21
21
  import CrashReporter from './crash-reporter.js';
22
22
  import { BStackLogger } from './bstackLogger.js';
@@ -175,19 +175,76 @@ export default class BrowserstackLauncherService {
175
175
  }
176
176
  }
177
177
  async onPrepare(config, capabilities) {
178
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.INIT);
178
179
  // // Send Funnel start request
179
180
  await sendStart(this.browserStackConfig);
181
+ // Convert glob patterns in specs to resolved relative paths
182
+ if (config.specs && Array.isArray(config.specs) && isValidEnabledValue(this._options.testOrchestrationOptions?.runSmartSelection?.enabled)) {
183
+ try {
184
+ // Import glob for expanding file patterns
185
+ const glob = (await import('glob')).sync;
186
+ const path = await import('node:path');
187
+ // Use ConfigParser.getFilePaths equivalent logic to expand specs
188
+ const expandedSpecs = [];
189
+ for (const specPattern of config.specs) {
190
+ if (typeof specPattern === 'string') {
191
+ if (specPattern.startsWith('file://')) {
192
+ expandedSpecs.push(specPattern);
193
+ continue;
194
+ }
195
+ // Expand glob pattern to relative paths
196
+ const pattern = specPattern.replace(/\\/g, '/');
197
+ // Use config.rootDir which is set to the config file's directory
198
+ const rootDir = config.rootDir || process.cwd();
199
+ // Get current working directory for final relative path calculation
200
+ const cwd = process.cwd();
201
+ const filenames = glob(pattern, {
202
+ cwd: rootDir,
203
+ matchBase: true
204
+ }) || [];
205
+ // Convert paths to be relative to the current working directory (where command is run)
206
+ filenames
207
+ .forEach((filename) => {
208
+ let absolutePath = filename;
209
+ // If filename is not absolute, resolve it relative to rootDir (config file's directory)
210
+ if (!path.isAbsolute(filename)) {
211
+ absolutePath = path.resolve(rootDir, filename);
212
+ }
213
+ // Make path relative to current working directory
214
+ let relativePath = path.relative(cwd, absolutePath);
215
+ // Normalize path separators for consistency (Windows compatibility)
216
+ relativePath = relativePath.replace(/\\/g, '/');
217
+ expandedSpecs.push(relativePath);
218
+ });
219
+ }
220
+ }
221
+ if (expandedSpecs.length > 0) {
222
+ BStackLogger.info(`Expanded specs from glob patterns to ${expandedSpecs.length} files`);
223
+ config.specs = expandedSpecs;
224
+ }
225
+ }
226
+ catch (error) {
227
+ BStackLogger.error(`Failed to expand spec patterns: ${error}`);
228
+ }
229
+ }
180
230
  try {
181
- if (CLIUtils.checkCLISupportedFrameworks(config.framework)) {
231
+ // Detect if multi-remote and disable CLI for those sessions
232
+ const isMultiremote = isMultiRemoteCaps(capabilities);
233
+ process.env.BROWSERSTACK_IS_MULTIREMOTE = String(isMultiremote);
234
+ if (CLIUtils.checkCLISupportedFrameworks(config.framework) && !isMultiremote) {
235
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.START);
182
236
  CLIUtils.setFrameworkDetail(WDIO_NAMING_PREFIX + config.framework, 'WebdriverIO'); // TODO: make this constant
183
237
  const binconfig = CLIUtils.getBinConfig(config, capabilities, this._options, this._buildTag);
184
238
  await BrowserstackCLI.getInstance().bootstrap(this._options, config, binconfig);
185
239
  BStackLogger.debug(`Is CLI running ${BrowserstackCLI.getInstance().isRunning()}`);
240
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.START);
186
241
  }
187
242
  }
188
243
  catch (err) {
189
244
  BStackLogger.error(`Error while starting CLI ${err}`);
245
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.START, false, util.format(err));
190
246
  }
247
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.INIT);
191
248
  // Setting up healing for those sessions where we don't add the service version capability as it indicates that the session is not being run on BrowserStack
192
249
  if (!shouldAddServiceVersion(this._config, this._options.testObservability, capabilities)) {
193
250
  try {
@@ -301,6 +358,7 @@ export default class BrowserstackLauncherService {
301
358
  else if (isAccessibilityAutomationSession(this._accessibilityAutomation)) {
302
359
  this._updateObjectTypeCaps(capabilities, 'accessibilityOptions', {});
303
360
  }
361
+ this._removeCliOnlyCapabilityOptions(capabilities);
304
362
  if (shouldSetupPercy) {
305
363
  try {
306
364
  const bestPlatformPercyCaps = getBestPlatformForPercySnapshot(capabilities);
@@ -319,6 +377,51 @@ export default class BrowserstackLauncherService {
319
377
  // send testhub build uuid and product map instrumentation
320
378
  this._updateCaps(capabilities, 'testhubBuildUuid');
321
379
  this._updateCaps(capabilities, 'buildProductMap');
380
+ if (isValidEnabledValue(this._options.testOrchestrationOptions?.runSmartSelection?.enabled)) {
381
+ // Helper function to convert specs from cwd-relative to rootDir-relative
382
+ const convertToRootDirRelative = (specs) => {
383
+ const rootDir = config.rootDir || process.cwd();
384
+ const cwd = process.cwd();
385
+ return specs.map((spec) => {
386
+ if (typeof spec !== 'string') {
387
+ return spec;
388
+ }
389
+ // Convert from cwd-relative to absolute
390
+ const absolutePath = path.isAbsolute(spec) ? spec : path.resolve(cwd, spec);
391
+ // Then make it relative to rootDir (config file's directory)
392
+ const relativePath = path.relative(rootDir, absolutePath);
393
+ // Normalize path separators
394
+ return relativePath.replace(/\\/g, '/');
395
+ });
396
+ };
397
+ // Apply test orchestration if enabled
398
+ try {
399
+ // Import dynamically to avoid circular dependencies
400
+ const { applyOrchestrationIfEnabled } = await import('./testorchestration/apply-orchestration.js');
401
+ if (config.specs && config.specs.length > 0 && this._options.testObservability && isValidEnabledValue(this._options.testOrchestrationOptions?.runSmartSelection?.enabled)) {
402
+ BStackLogger.info('Applying test orchestration');
403
+ // Ensure we're passing string[] to applyOrchestrationIfEnabled
404
+ const specs = config.specs.filter(spec => typeof spec === 'string');
405
+ console.log(`Specs before orchestration: ${specs}`);
406
+ const orderedSpecs = await applyOrchestrationIfEnabled(specs, this._options);
407
+ console.log(`Specs after orchestration before conversion: ${orderedSpecs}`);
408
+ // Use ordered specs if available, otherwise use original specs
409
+ const specsToConvert = orderedSpecs && orderedSpecs.length > 0 ? orderedSpecs : specs;
410
+ config.specs = convertToRootDirRelative(specsToConvert);
411
+ console.log(`Specs after orchestration: ${config.specs}`);
412
+ BStackLogger.info('Test specs updated with orchestrated order');
413
+ }
414
+ }
415
+ catch (error) {
416
+ BStackLogger.error(`Error applying test orchestration: ${error}`);
417
+ // On error, we still need to convert specs from cwd-relative to rootDir-relative
418
+ if (config.specs && config.specs.length > 0) {
419
+ const specs = config.specs.filter(spec => typeof spec === 'string');
420
+ config.specs = convertToRootDirRelative(specs);
421
+ BStackLogger.debug(`Specs converted back to rootDir-relative after error: ${config.specs}`);
422
+ }
423
+ }
424
+ }
322
425
  // local binary will be handled by CLI
323
426
  if (BrowserstackCLI.getInstance().isRunning()) {
324
427
  return;
@@ -368,14 +471,19 @@ export default class BrowserstackLauncherService {
368
471
  }
369
472
  async onComplete() {
370
473
  PerformanceTester.start(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP);
474
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_ON_STOP);
475
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.STOP);
371
476
  try {
372
477
  BStackLogger.debug('Inside OnComplete hook..');
373
478
  BStackLogger.debug('Sending stop launch event');
479
+ const isCLIEnabled = BrowserstackCLI.getInstance().isRunning();
374
480
  try {
375
- await (BrowserstackCLI.getInstance().isRunning() ? BrowserstackCLI.getInstance().stop() : stopBuildUpstream());
481
+ await (isCLIEnabled ? BrowserstackCLI.getInstance().stop() : stopBuildUpstream());
482
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.STOP);
376
483
  }
377
484
  catch (err) {
378
- BStackLogger.error(`Error while stoping CLI ${err}`);
485
+ BStackLogger.error(`Error while stopping CLI ${err}`);
486
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.FRAMEWORK_EVENTS.STOP, false, util.format(err));
379
487
  }
380
488
  if (process.env[BROWSERSTACK_OBSERVABILITY] && process.env[BROWSERSTACK_TESTHUB_UUID]) {
381
489
  console.log(`\nVisit https://automation.browserstack.com/builds/${process.env[BROWSERSTACK_TESTHUB_UUID]} to view build report, insights, and many more debugging information all at one place!\n`);
@@ -392,17 +500,22 @@ export default class BrowserstackLauncherService {
392
500
  BStackLogger.info(`Total duration is ${duration / 1000} s`);
393
501
  }
394
502
  BStackLogger.info(`BrowserStack service run ended for id: ${this.browserStackConfig?.sdkRunID} testhub id: ${TestOpsConfig.getInstance()?.buildHashedId}`);
395
- await sendFinish(this.browserStackConfig);
503
+ await sendFinish(this.browserStackConfig, isCLIEnabled);
396
504
  try {
505
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_SEND_LOGS);
397
506
  await this._uploadServiceLogs();
507
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_SEND_LOGS);
398
508
  }
399
509
  catch (error) {
400
510
  BStackLogger.debug(`Failed to upload BrowserStack WDIO Service logs ${error}`);
511
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_SEND_LOGS, false, util.format(error));
401
512
  }
513
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_ON_STOP);
402
514
  PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP);
403
515
  await PerformanceTester.stopAndGenerate('performance-launcher.html');
404
516
  }
405
517
  catch (error) {
518
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_ON_STOP, false, util.format(error));
406
519
  PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLEANUP, false, util.format(error));
407
520
  await PerformanceTester.stopAndGenerate('performance-launcher.html');
408
521
  BStackLogger.error(`Error in onComplete hook: ${error}`);
@@ -532,11 +645,43 @@ export default class BrowserstackLauncherService {
532
645
  }
533
646
  async _uploadServiceLogs() {
534
647
  const clientBuildUuid = this._getClientBuildUuid();
535
- await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_AUTO_CAPTURE, async () => {
648
+ await PerformanceTester.measureWrapper(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_UPLOAD_LOGS, async () => {
536
649
  const response = await uploadLogs(getBrowserStackUser(this._config), getBrowserStackKey(this._config), clientBuildUuid);
537
650
  BStackLogger.logToFile(`Response - ${format(response)}`, 'debug');
538
651
  })();
539
652
  }
653
+ _removeCliOnlyCapabilityOptions(capabilities) {
654
+ if (!capabilities || typeof capabilities !== 'object') {
655
+ return;
656
+ }
657
+ const strip = (capability) => {
658
+ const capabilityRecord = capability;
659
+ const bstackOptions = capabilityRecord['bstack:options'];
660
+ if (bstackOptions && typeof bstackOptions === 'object') {
661
+ NOT_ALLOWED_KEYS_IN_CAPS.forEach(key => delete bstackOptions[key]);
662
+ }
663
+ NOT_ALLOWED_KEYS_IN_CAPS.forEach(key => delete capabilityRecord[`browserstack.${key}`]);
664
+ const alwaysMatch = capability.alwaysMatch;
665
+ if (alwaysMatch && typeof alwaysMatch === 'object') {
666
+ strip(alwaysMatch);
667
+ }
668
+ };
669
+ if (Array.isArray(capabilities)) {
670
+ capabilities
671
+ .flatMap((c) => {
672
+ if (Object.values(c).length > 0 && Object.values(c).every(c => typeof c === 'object' && c.capabilities)) {
673
+ return Object.values(c).map((o) => o.capabilities);
674
+ }
675
+ return c;
676
+ })
677
+ .forEach(strip);
678
+ }
679
+ else {
680
+ Object.entries(capabilities).forEach(([, caps]) => {
681
+ strip(caps.capabilities);
682
+ });
683
+ }
684
+ }
540
685
  _updateObjectTypeCaps(capabilities, capType, value) {
541
686
  try {
542
687
  if (Array.isArray(capabilities)) {
@@ -929,3 +1074,4 @@ __decorate([
929
1074
  __decorate([
930
1075
  PerformanceTester.Measure(PERFORMANCE_SDK_EVENTS.APP_AUTOMATE_EVENTS.APP_UPLOAD)
931
1076
  ], BrowserstackLauncherService.prototype, "_uploadApp", null);
1077
+ //# sourceMappingURL=launcher.js.map