@wdio/browserstack-service 9.28.0 → 9.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/cleanup.js CHANGED
@@ -70,7 +70,7 @@ import logger from "@wdio/logger";
70
70
  // package.json
71
71
  var package_default = {
72
72
  name: "@wdio/browserstack-service",
73
- version: "9.27.2",
73
+ version: "9.29.0",
74
74
  description: "WebdriverIO service for better Browserstack integration",
75
75
  author: "Adam Bjerstedt <abjerstedt@gmail.com>",
76
76
  homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
@@ -591,6 +591,7 @@ var TestFrameworkConstants = {
591
591
  KEY_TEST_FAILURE_REASON: "test_failure_reason",
592
592
  KEY_TEST_LOGS: "test_logs",
593
593
  KEY_TEST_META: "test_meta",
594
+ KEY_CUSTOM_TAGS: "custom_metadata",
594
595
  KEY_TEST_DEFERRED: "test_deferred",
595
596
  KEY_SESSION_NAME: "test_session_name",
596
597
  KEY_AUTOMATE_SESSION_NAME: "automate_session_name",
@@ -2505,6 +2506,8 @@ var TestOpsConfig = class _TestOpsConfig {
2505
2506
  this.manuallySet = manuallySet;
2506
2507
  _TestOpsConfig._instance = this;
2507
2508
  }
2509
+ enabled;
2510
+ manuallySet;
2508
2511
  static _instance;
2509
2512
  buildStopped = false;
2510
2513
  buildHashedId;
@@ -21,6 +21,7 @@ export declare const TestFrameworkConstants: {
21
21
  KEY_TEST_FAILURE_REASON: string;
22
22
  KEY_TEST_LOGS: string;
23
23
  KEY_TEST_META: string;
24
+ KEY_CUSTOM_TAGS: string;
24
25
  KEY_TEST_DEFERRED: string;
25
26
  KEY_SESSION_NAME: string;
26
27
  KEY_AUTOMATE_SESSION_NAME: string;
@@ -1 +1 @@
1
- {"version":3,"file":"testFrameworkConstants.d.ts","sourceRoot":"","sources":["../../../../src/cli/frameworks/constants/testFrameworkConstants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyClC,CAAA"}
1
+ {"version":3,"file":"testFrameworkConstants.d.ts","sourceRoot":"","sources":["../../../../src/cli/frameworks/constants/testFrameworkConstants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0ClC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAK7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACtF,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,sBAAsB,MAAM,wCAAwC,CAAA;AAC3E,OAAO,uBAAuB,MAAM,yCAAyC,CAAA;AAK7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAkB,MAAM,aAAa,CAAA;AAK1F;;;;;GAKG;AACH,qBAAa,eAAe;;IAExB,MAAM,CAAC,OAAO,UAAQ;IACtB,WAAW,EAAC,OAAO,CAAA;IACnB,MAAM,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAC,MAAM,CAAA;IACd,kBAAkB,EAAE,OAAO,CAAC,UAAU,GAAC,EAAE,CAAA;IACzC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAO;IACnC,eAAe,UAAQ;IACvB,gBAAgB,UAAQ;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAO;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAK;IACxC,aAAa,EAAE,sBAAsB,GAAC,IAAI,CAAO;IACjD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAO;IAC/C,mBAAmB,EAAE,uBAAuB,GAAC,IAAI,CAAO;IACxD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAO;IACtC,MAAM,sBAAe;IACrB,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,EAAE,CAAA;;IAWtD;;;OAGG;IACH,MAAM,CAAC,WAAW;IAOlB;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,SAAG;IA2B7G;;;OAGG;IACG,SAAS;IAYf;;;OAGG;IACH,WAAW,CAAC,gBAAgB,EAAE,uBAAuB;IAwDrD;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACG,gBAAgB;IAUtB;;;;OAIG;IACG,KAAK;IA6DX;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAyD3B;;;OAGG;IACG,IAAI;IAiDV;;;;OAIG;IACG,kBAAkB;IASxB;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAM5C;;;;OAIG;IACG,UAAU,CAAC,YAAY,EAAE,MAAM;IAkBrC;;;OAGG;IACH,SAAS;IAWT;;;OAGG;IACH,qBAAqB;IAIrB;;;;OAIG;IACH,qBAAqB,CAAC,kBAAkB,EAAC,OAAO,CAAC,UAAU;IAI3D;;;OAGG;IACG,aAAa;IAOnB;;;OAGG;IACH,YAAY;IAIZ;;;OAGG;IACH,SAAS;IAIT;;;;MAIE;IACF,SAAS,CAAC,QAAQ,EAAE,uBAAuB;IAW3C;;;OAGG;IACH,kBAAkB;IAOlB;;;OAGG;IACH,wBAAwB;IAOxB;;;OAGG;IACH,gBAAgB;IAIhB;;;OAGG;IACH,sBAAsB;CAGzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAK7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;AACtF,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,sBAAsB,MAAM,wCAAwC,CAAA;AAC3E,OAAO,uBAAuB,MAAM,yCAAyC,CAAA;AAM7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAkB,MAAM,aAAa,CAAA;AAK1F;;;;;GAKG;AACH,qBAAa,eAAe;;IAExB,MAAM,CAAC,OAAO,UAAQ;IACtB,WAAW,EAAC,OAAO,CAAA;IACnB,MAAM,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAC,MAAM,CAAA;IACd,kBAAkB,EAAE,OAAO,CAAC,UAAU,GAAC,EAAE,CAAA;IACzC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAO;IACnC,eAAe,UAAQ;IACvB,gBAAgB,UAAQ;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAO;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAK;IACxC,aAAa,EAAE,sBAAsB,GAAC,IAAI,CAAO;IACjD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAO;IAC/C,mBAAmB,EAAE,uBAAuB,GAAC,IAAI,CAAO;IACxD,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAO;IACtC,MAAM,sBAAe;IACrB,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,EAAE,CAAA;;IAWtD;;;OAGG;IACH,MAAM,CAAC,WAAW;IAOlB;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,UAAU,SAAG;IA2B7G;;;OAGG;IACG,SAAS;IAYf;;;OAGG;IACH,WAAW,CAAC,gBAAgB,EAAE,uBAAuB;IA4DrD;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAgBtB;;;OAGG;IACG,gBAAgB;IAUtB;;;;OAIG;IACG,KAAK;IA6DX;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAyD3B;;;OAGG;IACG,IAAI;IAiDV;;;;OAIG;IACG,kBAAkB;IASxB;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAM5C;;;;OAIG;IACG,UAAU,CAAC,YAAY,EAAE,MAAM;IAkBrC;;;OAGG;IACH,SAAS;IAWT;;;OAGG;IACH,qBAAqB;IAIrB;;;;OAIG;IACH,qBAAqB,CAAC,kBAAkB,EAAC,OAAO,CAAC,UAAU;IAI3D;;;OAGG;IACG,aAAa;IAOnB;;;OAGG;IACH,YAAY;IAIZ;;;OAGG;IACH,SAAS;IAIT;;;;MAIE;IACF,SAAS,CAAC,QAAQ,EAAE,uBAAuB;IAW3C;;;OAGG;IACH,kBAAkB;IAOlB;;;OAGG;IACH,wBAAwB;IAOxB;;;OAGG;IACH,gBAAgB;IAIhB;;;OAGG;IACH,sBAAsB;CAGzB"}
@@ -0,0 +1,31 @@
1
+ import BaseModule from './baseModule.js';
2
+ import { BStackLogger } from '../cliLogger.js';
3
+ /**
4
+ * CustomTagsModule — CLI/gRPC path registration for `browser.setCustomTags`.
5
+ *
6
+ * Mirrors AccessibilityModule: registers the browser method in onBeforeExecute()
7
+ * (observer-bound to AutomationFrameworkState.CREATE / HookState.POST), instantiated
8
+ * from BrowserstackCLI.loadModules() whenever the binary is up.
9
+ *
10
+ * The per-test custom_metadata is merged directly into the tracked
11
+ * TestFrameworkInstance map under KEY_CUSTOM_TAGS ('custom_metadata'). That whole
12
+ * map is serialized verbatim into event_json (testHubModule.sendTestFrameworkEvent),
13
+ * so the binary reads it as event.custom_metadata. The instance is created fresh
14
+ * per test, so per-instance merge gives test-scoped union/dedupe; the binary is a
15
+ * strict pass-through and does NOT consolidate across events.
16
+ */
17
+ export default class CustomTagsModule extends BaseModule {
18
+ logger: typeof BStackLogger;
19
+ name: string;
20
+ static MODULE_NAME: string;
21
+ constructor();
22
+ getModuleName(): string;
23
+ onBeforeExecute(): Promise<void>;
24
+ /**
25
+ * If the test framework is currently inside a hook, merge custom_metadata onto
26
+ * the last-started hook record so the binary receives hook.custom_metadata.
27
+ * Best-effort: silently no-ops when no active hook is resolvable.
28
+ */
29
+ private applyToActiveHook;
30
+ }
31
+ //# sourceMappingURL=customTagsModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customTagsModule.d.ts","sourceRoot":"","sources":["../../../src/cli/modules/customTagsModule.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAa9C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAU;IAEpD,MAAM,sBAAe;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,WAAW,SAAqB;;IAQvC,aAAa;IAIP,eAAe;IAsDrB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAiB5B"}
@@ -0,0 +1,29 @@
1
+ import { CustomTagAccumulator } from './customTags.js';
2
+ import type { CustomMetadata } from './customTags.js';
3
+ /**
4
+ * Legacy/Listener-path handler for `browser.setCustomTags`.
5
+ *
6
+ * Registered from service.ts in the `!BrowserstackCLI.getInstance().isRunning()`
7
+ * branch (alongside AccessibilityHandler.before() / InsightsHandler.before()).
8
+ * Deliberately NOT folded into InsightsHandler.before() — that method registers
9
+ * no browser methods and is SKIPPED when the CLI is running.
10
+ *
11
+ * Accumulates (key, value) pairs per active test, keyed on
12
+ * InsightsHandler.currentTest.uuid (set in beforeTest / setTestData). The
13
+ * accumulator is static so InsightsHandler.getRunData can drain it into the
14
+ * TestData.custom_metadata field at TestRunFinished (flushed in afterTest).
15
+ */
16
+ declare class _CustomTagsHandler {
17
+ private _browser;
18
+ private _caps;
19
+ private _framework?;
20
+ static accumulator: CustomTagAccumulator;
21
+ constructor(_browser: WebdriverIO.Browser | WebdriverIO.MultiRemoteBrowser, _caps: WebdriverIO.Capabilities | Record<string, unknown>, _framework?: string | undefined);
22
+ before(): void;
23
+ /** Drain the accumulated custom_metadata for a test uuid; clears after read. */
24
+ static drain(testUuid: string | undefined): CustomMetadata | undefined;
25
+ }
26
+ declare const CustomTagsHandler: typeof _CustomTagsHandler;
27
+ type CustomTagsHandler = _CustomTagsHandler;
28
+ export default CustomTagsHandler;
29
+ //# sourceMappingURL=custom-tags-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-tags-handler.d.ts","sourceRoot":"","sources":["../src/custom-tags-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAIrD;;;;;;;;;;;;GAYG;AACH,cAAM,kBAAkB;IAMhB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,UAAU,CAAC;IALvB,OAAc,WAAW,EAAE,oBAAoB,CAA6B;gBAGhE,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,EAC9D,KAAK,EAAE,WAAW,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,UAAU,CAAC,EAAE,MAAM,YAAA;IAG/B,MAAM;IA+CN,gFAAgF;IAChF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS;CAKzE;AAGD,QAAA,MAAM,iBAAiB,EAAE,OAAO,kBAA8D,CAAA;AAC9F,KAAK,iBAAiB,GAAG,kBAAkB,CAAA;AAE3C,eAAe,iBAAiB,CAAA"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Helpers for one-to-many custom-tag (Test-Case-ID) tagging.
3
+ *
4
+ * Both runtime paths (CLI/gRPC module + legacy listener handler) funnel through
5
+ * the same tokenizer + merge engine so they produce an identical `custom_metadata`
6
+ * payload shape:
7
+ * { [key]: { field_type: 'multi_dropdown', values: [...] } }
8
+ *
9
+ * The binary is a strict pass-through for per-test/per-hook `custom_metadata` — it
10
+ * does NOT merge or dedupe across events — so the union+dedupe (set semantics)
11
+ * MUST be completed SDK-side before serialization. Value parsing mirrors the
12
+ * node-agent quote-aware tokenizer (helper.js `parseCommaSeparatedValues`).
13
+ */
14
+ export interface CustomMetadataEntry {
15
+ field_type: 'multi_dropdown';
16
+ values: string[];
17
+ }
18
+ export type CustomMetadata = Record<string, CustomMetadataEntry>;
19
+ /**
20
+ * Quote-aware comma split. Mirrors node-agent `helper.js` tokenizer
21
+ * `/\s*"([^"]*)"\s*|[^,]+/g` — a quoted body is preserved verbatim (so an
22
+ * embedded comma is kept), otherwise the raw token is trimmed; empties dropped.
23
+ * '"checkout,cart", header' -> ['checkout,cart', 'header']
24
+ * 'TC-1, TC-2' -> ['TC-1', 'TC-2']
25
+ * Backward compatible: unquoted input tokenizes identically to a naive
26
+ * split(',').map(trim).filter(Boolean).
27
+ */
28
+ export declare function parseCommaSeparatedValues(value: string | string[] | undefined | null): string[];
29
+ /**
30
+ * Union + dedupe, existing-first ordering. Mirrors node-agent
31
+ * `CustomTagManager.mergeValues` — repeated calls accumulate, they do not override.
32
+ */
33
+ export declare function mergeValues(existingValues: string[] | undefined | null, incomingValues: string[] | undefined | null): string[];
34
+ /**
35
+ * Create-or-merge a single tag key inside a `custom_metadata` container.
36
+ * Always produces `{ field_type: 'multi_dropdown', values: [...] }`; merges values
37
+ * via mergeValues. The container is mutated in place and returned for chaining.
38
+ * Mirrors node-agent `CustomTagManager.mergeIntoTags`.
39
+ */
40
+ export declare function mergeIntoTags(tagsContainer: CustomMetadata, key: string, incomingValues: string[]): CustomMetadata;
41
+ /**
42
+ * Per-test-uuid accumulator. Both paths key on `InsightsHandler.currentTest.uuid`
43
+ * so repeated `setCustomTags` calls within a single test union into one entry, and
44
+ * the flush sink reads the final consolidated map for that test.
45
+ */
46
+ export declare class CustomTagAccumulator {
47
+ private store;
48
+ /**
49
+ * Add (key, value) for a test uuid. value is quote-aware comma-split; the
50
+ * resulting values union+dedupe into the test's custom_metadata for that key.
51
+ * Returns false (no-op) when uuid/key/value resolve to nothing.
52
+ */
53
+ add(testUuid: string | undefined, key: string, value: string): boolean;
54
+ /** Final consolidated custom_metadata for a test uuid, or undefined if none. */
55
+ get(testUuid: string | undefined): CustomMetadata | undefined;
56
+ /** Drop the accumulated entry once flushed (avoid unbounded growth). */
57
+ clear(testUuid: string | undefined): void;
58
+ }
59
+ //# sourceMappingURL=customTags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customTags.d.ts","sourceRoot":"","sources":["../src/customTags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAEhE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,CAyB/F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,CAE9H;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,cAAc,CAkBlH;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,KAAK,CAAyC;IAEtD;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IActE,gFAAgF;IAChF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS;IAO7D,wEAAwE;IACxE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAK5C"}
package/build/index.js CHANGED
@@ -1,8 +1,13 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __esm = (fn, res) => function __init() {
5
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
4
+ var __esm = (fn, res, err) => function __init() {
5
+ if (err) throw err[0];
6
+ try {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ } catch (e) {
9
+ throw err = [e], e;
10
+ }
6
11
  };
7
12
  var __export = (target, all) => {
8
13
  for (var name in all)
@@ -23,7 +28,7 @@ var init_package = __esm({
23
28
  "package.json"() {
24
29
  package_default = {
25
30
  name: "@wdio/browserstack-service",
26
- version: "9.27.2",
31
+ version: "9.29.0",
27
32
  description: "WebdriverIO service for better Browserstack integration",
28
33
  author: "Adam Bjerstedt <abjerstedt@gmail.com>",
29
34
  homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
@@ -697,6 +702,7 @@ var init_testFrameworkConstants = __esm({
697
702
  KEY_TEST_FAILURE_REASON: "test_failure_reason",
698
703
  KEY_TEST_LOGS: "test_logs",
699
704
  KEY_TEST_META: "test_meta",
705
+ KEY_CUSTOM_TAGS: "custom_metadata",
700
706
  KEY_TEST_DEFERRED: "test_deferred",
701
707
  KEY_SESSION_NAME: "test_session_name",
702
708
  KEY_AUTOMATE_SESSION_NAME: "automate_session_name",
@@ -2650,6 +2656,8 @@ var init_testOpsConfig = __esm({
2650
2656
  this.manuallySet = manuallySet;
2651
2657
  _TestOpsConfig._instance = this;
2652
2658
  }
2659
+ enabled;
2660
+ manuallySet;
2653
2661
  static _instance;
2654
2662
  buildStopped = false;
2655
2663
  buildHashedId;
@@ -7547,6 +7555,186 @@ var init_accessibilityModule = __esm({
7547
7555
  }
7548
7556
  });
7549
7557
 
7558
+ // src/customTags.ts
7559
+ function parseCommaSeparatedValues(value) {
7560
+ if (!value) {
7561
+ return [];
7562
+ }
7563
+ if (Array.isArray(value)) {
7564
+ return value;
7565
+ }
7566
+ const str = value.toString();
7567
+ if (str.trim() === "") {
7568
+ return [];
7569
+ }
7570
+ const tokenizer = /\s*"([^"]*)"\s*|[^,]+/g;
7571
+ const out = [];
7572
+ let match;
7573
+ while ((match = tokenizer.exec(str)) !== null) {
7574
+ const token = match[1] !== void 0 ? match[1] : match[0].trim();
7575
+ if (token !== "") {
7576
+ out.push(token);
7577
+ }
7578
+ }
7579
+ return out;
7580
+ }
7581
+ function mergeValues(existingValues, incomingValues) {
7582
+ return Array.from(/* @__PURE__ */ new Set([...existingValues || [], ...incomingValues || []]));
7583
+ }
7584
+ function mergeIntoTags(tagsContainer, key, incomingValues) {
7585
+ if (!tagsContainer[key]) {
7586
+ tagsContainer[key] = {
7587
+ field_type: "multi_dropdown",
7588
+ values: [...incomingValues || []]
7589
+ };
7590
+ } else {
7591
+ if (!tagsContainer[key].field_type) {
7592
+ tagsContainer[key].field_type = "multi_dropdown";
7593
+ }
7594
+ if (!Array.isArray(tagsContainer[key].values)) {
7595
+ tagsContainer[key].values = [];
7596
+ }
7597
+ tagsContainer[key].values = mergeValues(tagsContainer[key].values, incomingValues);
7598
+ }
7599
+ return tagsContainer;
7600
+ }
7601
+ var CustomTagAccumulator;
7602
+ var init_customTags = __esm({
7603
+ "src/customTags.ts"() {
7604
+ "use strict";
7605
+ CustomTagAccumulator = class {
7606
+ store = /* @__PURE__ */ new Map();
7607
+ /**
7608
+ * Add (key, value) for a test uuid. value is quote-aware comma-split; the
7609
+ * resulting values union+dedupe into the test's custom_metadata for that key.
7610
+ * Returns false (no-op) when uuid/key/value resolve to nothing.
7611
+ */
7612
+ add(testUuid, key, value) {
7613
+ if (!testUuid || !key) {
7614
+ return false;
7615
+ }
7616
+ const values = parseCommaSeparatedValues(value);
7617
+ if (values.length === 0) {
7618
+ return false;
7619
+ }
7620
+ const container = this.store.get(testUuid) || {};
7621
+ mergeIntoTags(container, key, values);
7622
+ this.store.set(testUuid, container);
7623
+ return true;
7624
+ }
7625
+ /** Final consolidated custom_metadata for a test uuid, or undefined if none. */
7626
+ get(testUuid) {
7627
+ if (!testUuid) {
7628
+ return void 0;
7629
+ }
7630
+ return this.store.get(testUuid);
7631
+ }
7632
+ /** Drop the accumulated entry once flushed (avoid unbounded growth). */
7633
+ clear(testUuid) {
7634
+ if (testUuid) {
7635
+ this.store.delete(testUuid);
7636
+ }
7637
+ }
7638
+ };
7639
+ }
7640
+ });
7641
+
7642
+ // src/cli/modules/customTagsModule.ts
7643
+ var CustomTagsModule;
7644
+ var init_customTagsModule = __esm({
7645
+ "src/cli/modules/customTagsModule.ts"() {
7646
+ "use strict";
7647
+ init_baseModule();
7648
+ init_cliLogger();
7649
+ init_testFramework();
7650
+ init_automationFramework();
7651
+ init_automationFrameworkState();
7652
+ init_hookState();
7653
+ init_testFrameworkConstants();
7654
+ init_cliUtils();
7655
+ init_wdioMochaTestFramework();
7656
+ init_customTags();
7657
+ CustomTagsModule = class _CustomTagsModule extends BaseModule {
7658
+ logger = BStackLogger2;
7659
+ name;
7660
+ static MODULE_NAME = "CustomTagsModule";
7661
+ constructor() {
7662
+ super();
7663
+ this.name = "CustomTagsModule";
7664
+ AutomationFramework.registerObserver(AutomationFrameworkState.CREATE, HookState.POST, this.onBeforeExecute.bind(this));
7665
+ }
7666
+ getModuleName() {
7667
+ return _CustomTagsModule.MODULE_NAME;
7668
+ }
7669
+ async onBeforeExecute() {
7670
+ try {
7671
+ const autoInstance = AutomationFramework.getTrackedInstance();
7672
+ if (!autoInstance) {
7673
+ this.logger.debug("CustomTagsModule: No tracked automation instance found!");
7674
+ return;
7675
+ }
7676
+ const browser = AutomationFramework.getDriver(autoInstance);
7677
+ if (!browser) {
7678
+ this.logger.debug("CustomTagsModule: No browser instance found for setCustomTags registration");
7679
+ return;
7680
+ }
7681
+ browser.setCustomTags = async (key, value) => {
7682
+ try {
7683
+ if (!key || !value) {
7684
+ this.logger.warn("setCustomTags: key and value are required; ignoring call");
7685
+ return;
7686
+ }
7687
+ const testInstance = TestFramework.getTrackedInstance();
7688
+ if (!testInstance) {
7689
+ this.logger.warn("setCustomTags called outside of a resolvable test context; ignoring");
7690
+ return;
7691
+ }
7692
+ const values = parseCommaSeparatedValues(value);
7693
+ if (values.length === 0) {
7694
+ this.logger.warn(`setCustomTags: no usable values parsed from "${value}"; ignoring call`);
7695
+ return;
7696
+ }
7697
+ const existing = TestFramework.getState(testInstance, TestFrameworkConstants.KEY_CUSTOM_TAGS) || {};
7698
+ mergeIntoTags(existing, key, values);
7699
+ testInstance.updateMultipleEntries({
7700
+ [TestFrameworkConstants.KEY_CUSTOM_TAGS]: existing
7701
+ });
7702
+ this.applyToActiveHook(testInstance, key, values);
7703
+ this.logger.debug(`setCustomTags: merged key=${key} values=${JSON.stringify(values)}`);
7704
+ } catch (error) {
7705
+ this.logger.warn(`setCustomTags: error while recording custom tags: ${error}`);
7706
+ }
7707
+ };
7708
+ } catch (error) {
7709
+ this.logger.error(`Error in CustomTagsModule.onBeforeExecute: ${error}`);
7710
+ }
7711
+ }
7712
+ /**
7713
+ * If the test framework is currently inside a hook, merge custom_metadata onto
7714
+ * the last-started hook record so the binary receives hook.custom_metadata.
7715
+ * Best-effort: silently no-ops when no active hook is resolvable.
7716
+ */
7717
+ applyToActiveHook(testInstance, key, values) {
7718
+ try {
7719
+ const currentState = testInstance.getCurrentTestState().toString();
7720
+ if (!CLIUtils.matchHookRegex(currentState)) {
7721
+ return;
7722
+ }
7723
+ const hook = WdioMochaTestFramework.lastActiveHook(testInstance, WdioMochaTestFramework.KEY_HOOK_LAST_STARTED);
7724
+ if (!hook) {
7725
+ return;
7726
+ }
7727
+ const hookTags = hook[TestFrameworkConstants.KEY_CUSTOM_TAGS] || {};
7728
+ mergeIntoTags(hookTags, key, values);
7729
+ hook[TestFrameworkConstants.KEY_CUSTOM_TAGS] = hookTags;
7730
+ } catch (error) {
7731
+ this.logger.debug(`setCustomTags: could not apply to active hook: ${error}`);
7732
+ }
7733
+ }
7734
+ };
7735
+ }
7736
+ });
7737
+
7550
7738
  // src/cli/modules/observabilityModule.ts
7551
7739
  var ObservabilityModule;
7552
7740
  var init_observabilityModule = __esm({
@@ -8297,6 +8485,82 @@ var init_reporter = __esm({
8297
8485
  }
8298
8486
  });
8299
8487
 
8488
+ // src/custom-tags-handler.ts
8489
+ var _CustomTagsHandler, CustomTagsHandler, custom_tags_handler_default;
8490
+ var init_custom_tags_handler = __esm({
8491
+ "src/custom-tags-handler.ts"() {
8492
+ "use strict";
8493
+ init_insights_handler();
8494
+ init_customTags();
8495
+ init_util();
8496
+ init_bstackLogger();
8497
+ _CustomTagsHandler = class __CustomTagsHandler {
8498
+ constructor(_browser, _caps, _framework) {
8499
+ this._browser = _browser;
8500
+ this._caps = _caps;
8501
+ this._framework = _framework;
8502
+ }
8503
+ _browser;
8504
+ _caps;
8505
+ _framework;
8506
+ // Static so the flush sink (InsightsHandler.getRunData) can read it without a
8507
+ // handler reference. Keyed on the per-test uuid.
8508
+ static accumulator = new CustomTagAccumulator();
8509
+ before() {
8510
+ const register = (browser) => {
8511
+ browser.setCustomTags = async (key, value) => {
8512
+ try {
8513
+ if (this._framework !== "mocha") {
8514
+ BStackLogger.warn("setCustomTags is only supported for the mocha framework; ignoring call");
8515
+ return;
8516
+ }
8517
+ if (!key || !value) {
8518
+ BStackLogger.warn("setCustomTags: key and value are required; ignoring call");
8519
+ return;
8520
+ }
8521
+ const testUuid = insights_handler_default.currentTest.uuid;
8522
+ if (!testUuid) {
8523
+ BStackLogger.warn("setCustomTags called outside of a resolvable test context; ignoring");
8524
+ return;
8525
+ }
8526
+ const added = __CustomTagsHandler.accumulator.add(testUuid, key, value);
8527
+ if (!added) {
8528
+ BStackLogger.warn(`setCustomTags: no usable values parsed from "${value}"; ignoring call`);
8529
+ return;
8530
+ }
8531
+ BStackLogger.debug(`setCustomTags: recorded key=${key} value="${value}" for test=${testUuid}`);
8532
+ } catch (error) {
8533
+ BStackLogger.warn(`setCustomTags: error while recording custom tags: ${error}`);
8534
+ }
8535
+ };
8536
+ };
8537
+ register(this._browser);
8538
+ if (this._browser.isMultiremote) {
8539
+ const multiRemoteBrowser = this._browser;
8540
+ Object.keys(this._caps).forEach((browserName) => {
8541
+ try {
8542
+ const instance = multiRemoteBrowser.getInstance(browserName);
8543
+ if (instance) {
8544
+ register(instance);
8545
+ }
8546
+ } catch (error) {
8547
+ BStackLogger.debug(`setCustomTags: could not register on multiremote instance ${browserName}: ${error}`);
8548
+ }
8549
+ });
8550
+ }
8551
+ }
8552
+ /** Drain the accumulated custom_metadata for a test uuid; clears after read. */
8553
+ static drain(testUuid) {
8554
+ const data = __CustomTagsHandler.accumulator.get(testUuid);
8555
+ __CustomTagsHandler.accumulator.clear(testUuid);
8556
+ return data;
8557
+ }
8558
+ };
8559
+ CustomTagsHandler = o11yClassErrorHandler(_CustomTagsHandler);
8560
+ custom_tags_handler_default = CustomTagsHandler;
8561
+ }
8562
+ });
8563
+
8300
8564
  // src/insights-handler.ts
8301
8565
  import path16 from "node:path";
8302
8566
  import { v4 as uuidv44 } from "uuid";
@@ -8314,6 +8578,7 @@ var init_insights_handler = __esm({
8314
8578
  init_hookState();
8315
8579
  init_performance_tester();
8316
8580
  init_constants2();
8581
+ init_custom_tags_handler();
8317
8582
  _InsightsHandler = class {
8318
8583
  constructor(_browser, _framework, _userCaps, _options) {
8319
8584
  this._browser = _browser;
@@ -8332,6 +8597,8 @@ var init_insights_handler = __esm({
8332
8597
  };
8333
8598
  this.registerListeners();
8334
8599
  }
8600
+ _browser;
8601
+ _framework;
8335
8602
  _tests = {};
8336
8603
  _hooks = {};
8337
8604
  _platformMeta;
@@ -8513,7 +8780,13 @@ var init_insights_handler = __esm({
8513
8780
  const fullTitle = getUniqueIdentifier(test, this._framework);
8514
8781
  this._tests[fullTitle] = {
8515
8782
  uuid: hookUUID,
8516
- startedAt: (/* @__PURE__ */ new Date()).toISOString()
8783
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
8784
+ // Tag as a hook and stash identity so a teardown sweep can synthesise a terminal
8785
+ // HookRunFinished if this hook never returns (e.g. a hang with timeouts disabled).
8786
+ kind: "hook",
8787
+ name: test.title || test.description,
8788
+ scopes: this.getHierarchy(test),
8789
+ fileName: test.file || this._suiteFile
8517
8790
  };
8518
8791
  this.setCurrentHook({ uuid: hookUUID });
8519
8792
  this.attachHookData(context, hookUUID);
@@ -8537,7 +8810,12 @@ var init_insights_handler = __esm({
8537
8810
  };
8538
8811
  }
8539
8812
  this.setCurrentHook({ uuid: this._tests[fullTitle].uuid, finished: true });
8540
- this.listener.hookFinished(this.getRunData(test, "HookRunFinished", result));
8813
+ const hookData = this.getRunData(test, "HookRunFinished", result);
8814
+ if (hookData.uuid) {
8815
+ this.listener.hookFinished(hookData);
8816
+ } else {
8817
+ BStackLogger.warn(`Skipping HookRunFinished for '${fullTitle}' \u2014 resolved uuid is missing; not emitting an unmatched finish.`);
8818
+ }
8541
8819
  const hookType = getHookType(test.title);
8542
8820
  if (!result.passed && (hookType === "BEFORE_EACH" || hookType === "BEFORE_ALL" || hookType === "AFTER_EACH")) {
8543
8821
  const sendTestSkip = async (skippedTest) => {
@@ -8613,7 +8891,13 @@ var init_insights_handler = __esm({
8613
8891
  const fullTitle = getUniqueIdentifier(test, this._framework);
8614
8892
  this._tests[fullTitle] = {
8615
8893
  uuid,
8616
- startedAt: (/* @__PURE__ */ new Date()).toISOString()
8894
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
8895
+ // Tag as a test and stash identity so a teardown sweep can synthesise a terminal
8896
+ // TestRunFinished if this test never reaches afterTest (e.g. mocha advanced past a hang).
8897
+ kind: "test",
8898
+ name: test.title || test.description,
8899
+ scopes: this.getHierarchy(test),
8900
+ fileName: test.file || this._suiteFile
8617
8901
  };
8618
8902
  this.listener.testStarted(this.getRunData(test, "TestRunStarted"));
8619
8903
  }
@@ -8628,6 +8912,10 @@ var init_insights_handler = __esm({
8628
8912
  };
8629
8913
  this.flushCBTDataQueue();
8630
8914
  const testData = this.getRunData(test, "TestRunFinished", result);
8915
+ if (!testData.uuid) {
8916
+ BStackLogger.warn(`Skipping TestRunFinished for '${getUniqueIdentifier(test, this._framework)}' \u2014 resolved uuid is missing; not emitting an unmatched finish.`);
8917
+ return;
8918
+ }
8631
8919
  this.listener.testFinished(testData);
8632
8920
  const testFinishHashCode = generateHashCodeFromFields(
8633
8921
  [
@@ -8643,6 +8931,91 @@ var init_insights_handler = __esm({
8643
8931
  );
8644
8932
  reporter_default.hashCodeToHandleTestSkip[testFinishHashCode] = testData.uuid ?? "";
8645
8933
  }
8934
+ /**
8935
+ * Teardown safety net: synthesise a terminal finish for any started-but-unfinished
8936
+ * test/hook so the backend closes the entity instead of leaving it in_progress and
8937
+ * letting the build watchdog inflate the duration.
8938
+ *
8939
+ * Scoped to mocha. Cucumber hooks are keyed differently (getCucumberHookUniqueId) and
8940
+ * their lifecycle differs, so they are intentionally left out here — closing them safely
8941
+ * would need cucumber-specific keying and is a known gap for a follow-up.
8942
+ *
8943
+ * Each entry was tagged with kind at start time so we emit HookRunFinished for hooks and
8944
+ * TestRunFinished for tests without re-deriving the kind from the title. Entries without a
8945
+ * uuid are skipped (same null-uuid guard as afterTest): a finish the backend can't match to a
8946
+ * start is worse than none. The result is marked failed/incomplete via getFailureObject so the
8947
+ * entity lands in a terminal state rather than pending.
8948
+ */
8949
+ async sweepUnfinished() {
8950
+ if (this._framework !== "mocha") {
8951
+ return;
8952
+ }
8953
+ for (const fullTitle of Object.keys(this._tests)) {
8954
+ const meta = this._tests[fullTitle];
8955
+ if (!meta || meta.finishedAt || meta.kind !== "hook" && meta.kind !== "test") {
8956
+ continue;
8957
+ }
8958
+ if (!meta.startedAt) {
8959
+ continue;
8960
+ }
8961
+ if (!meta.uuid) {
8962
+ BStackLogger.warn("Skipping synthetic finish for " + fullTitle + " \u2014 stashed uuid is missing.");
8963
+ continue;
8964
+ }
8965
+ const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
8966
+ try {
8967
+ const testData = this.buildSweepFinishData(fullTitle, meta, finishedAt);
8968
+ if (meta.kind === "hook") {
8969
+ this.listener.hookFinished(testData);
8970
+ } else {
8971
+ this.listener.testFinished(testData);
8972
+ }
8973
+ meta.finishedAt = finishedAt;
8974
+ BStackLogger.debug("Emitted synthetic " + (meta.kind === "hook" ? "HookRunFinished" : "TestRunFinished") + " for unfinished " + fullTitle + ".");
8975
+ } catch (err) {
8976
+ BStackLogger.warn("Failed to emit synthetic finish while sweeping unfinished " + fullTitle + ": " + err);
8977
+ }
8978
+ }
8979
+ }
8980
+ /**
8981
+ * Build a terminal (failed/incomplete) finish payload for a swept entry directly from the
8982
+ * stashed TestMeta, since the live framework test object is no longer available at teardown.
8983
+ */
8984
+ buildSweepFinishData(fullTitle, meta, finishedAt) {
8985
+ const filename = meta.fileName;
8986
+ const testData = {
8987
+ uuid: meta.uuid,
8988
+ type: meta.kind === "hook" ? "hook" : "test",
8989
+ name: meta.name,
8990
+ body: {
8991
+ lang: "webdriverio",
8992
+ code: null
8993
+ },
8994
+ scope: fullTitle,
8995
+ scopes: meta.scopes,
8996
+ identifier: fullTitle,
8997
+ file_name: filename ? path16.relative(process.cwd(), filename) : void 0,
8998
+ location: filename ? path16.relative(process.cwd(), filename) : void 0,
8999
+ vc_filepath: this._gitConfigPath && filename ? path16.relative(this._gitConfigPath, filename) : void 0,
9000
+ started_at: meta.startedAt,
9001
+ finished_at: finishedAt,
9002
+ framework: this._framework,
9003
+ // getFailureObject only returns failure/failure_reason/failure_type — never a result
9004
+ // key — but set result AFTER the spread so the synthetic 'failed' status stays
9005
+ // authoritative even if that ever changes.
9006
+ ...getFailureObject(new Error("Test/hook did not finish before the session ended (incomplete).")),
9007
+ result: "failed"
9008
+ };
9009
+ testData.integrations = {};
9010
+ if (this._browser && this._platformMeta) {
9011
+ const provider = getCloudProvider(this._browser);
9012
+ testData.integrations[provider] = this.getIntegrationsObject();
9013
+ }
9014
+ if (meta.kind === "hook") {
9015
+ testData.hook_type = meta.name ? getHookType(meta.name.toLowerCase()) : "undefined";
9016
+ }
9017
+ return testData;
9018
+ }
8646
9019
  /**
8647
9020
  * Cucumber Only
8648
9021
  */
@@ -8861,7 +9234,7 @@ var init_insights_handler = __esm({
8861
9234
  }
8862
9235
  getRunData(test, eventType, results) {
8863
9236
  const fullTitle = getUniqueIdentifier(test, this._framework);
8864
- const testMetaData = this._tests[fullTitle];
9237
+ const testMetaData = this._tests[fullTitle] || {};
8865
9238
  const filename = test.file || this._suiteFile;
8866
9239
  this.currentTestId = testMetaData.uuid;
8867
9240
  if (eventType === "TestRunStarted") {
@@ -8908,6 +9281,10 @@ var init_insights_handler = __esm({
8908
9281
  if (this._hooks[fullTitle]) {
8909
9282
  testData.hooks = this._hooks[fullTitle];
8910
9283
  }
9284
+ const customMetadata = custom_tags_handler_default.drain(testMetaData.uuid);
9285
+ if (customMetadata && Object.keys(customMetadata).length > 0) {
9286
+ testData.custom_metadata = customMetadata;
9287
+ }
8911
9288
  }
8912
9289
  if (eventType === "TestRunStarted" || eventType === "TestRunSkipped" || eventType === "HookRunStarted") {
8913
9290
  testData.integrations = {};
@@ -9240,6 +9617,11 @@ var init_Percy_Handler = __esm({
9240
9617
  this._percyAutoCaptureMode = "auto";
9241
9618
  }
9242
9619
  }
9620
+ _percyAutoCaptureMode;
9621
+ _browser;
9622
+ _capabilities;
9623
+ _isAppAutomate;
9624
+ _framework;
9243
9625
  _sessionName;
9244
9626
  _isPercyCleanupProcessingUnderway = false;
9245
9627
  _percyScreenshotCounter = 0;
@@ -9478,6 +9860,7 @@ var init_cli = __esm({
9478
9860
  init_wdioAutomationFramework();
9479
9861
  init_webdriverIOModule();
9480
9862
  init_accessibilityModule();
9863
+ init_customTagsModule();
9481
9864
  init_util();
9482
9865
  init_observabilityModule();
9483
9866
  init_crash_reporter();
@@ -9594,6 +9977,7 @@ var init_cli = __esm({
9594
9977
  this.modules[ObservabilityModule.MODULE_NAME] = new ObservabilityModule(startBinResponse.observability);
9595
9978
  }
9596
9979
  this.modules[TestHubModule.MODULE_NAME] = new TestHubModule(startBinResponse.testhub);
9980
+ this.modules[CustomTagsModule.MODULE_NAME] = new CustomTagsModule();
9597
9981
  if (startBinResponse.accessibility?.success) {
9598
9982
  process.env[BROWSERSTACK_ACCESSIBILITY] = "true";
9599
9983
  const options = this.options;
@@ -11393,6 +11777,10 @@ function buildEventData(eventType, config, isCLIEnabled = false) {
11393
11777
  if (process.env.BSTACK_A11Y_POLLING_TIMEOUT) {
11394
11778
  eventProperties.pollingTimeout = process.env.BSTACK_A11Y_POLLING_TIMEOUT;
11395
11779
  }
11780
+ const reloadHappened = workerData.some((worker2) => worker2.reloadHappened === true);
11781
+ if (reloadHappened) {
11782
+ eventProperties.finishedMetadata = { reason: "session_reloaded" };
11783
+ }
11396
11784
  }
11397
11785
  return {
11398
11786
  userName: config.userName,
@@ -11867,6 +12255,8 @@ var BrowserstackLauncherService = class {
11867
12255
  BStackLogger.error(`[Crash_Report_Upload] Config processing failed due to ${error}`);
11868
12256
  }
11869
12257
  }
12258
+ _options;
12259
+ _config;
11870
12260
  browserstackLocal;
11871
12261
  _buildName;
11872
12262
  _projectName;
@@ -12719,6 +13109,9 @@ var _AccessibilityHandler = class {
12719
13109
  this._config = _config;
12720
13110
  this._turboscale = isTrue(_turboscale);
12721
13111
  }
13112
+ _browser;
13113
+ isAppAutomate;
13114
+ _framework;
12722
13115
  _platformA11yMeta;
12723
13116
  _caps;
12724
13117
  _suiteFile;
@@ -13033,6 +13426,7 @@ var AccessibilityHandler = o11yClassErrorHandler(_AccessibilityHandler);
13033
13426
  var accessibility_handler_default = AccessibilityHandler;
13034
13427
 
13035
13428
  // src/service.ts
13429
+ init_custom_tags_handler();
13036
13430
  init_bstackLogger();
13037
13431
  init_Percy_Handler();
13038
13432
  init_listener();
@@ -13082,6 +13476,8 @@ var BrowserstackService = class {
13082
13476
  process.env.PERCY_SNAPSHOT = "true";
13083
13477
  }
13084
13478
  }
13479
+ _caps;
13480
+ _config;
13085
13481
  _sessionBaseUrl = "https://api.browserstack.com/automate/sessions";
13086
13482
  _failReasons = [];
13087
13483
  _hookFailReasons = [];
@@ -13091,6 +13487,8 @@ var BrowserstackService = class {
13091
13487
  // Track last scenario for preferScenarioName feature
13092
13488
  _scenariosRanCount = 0;
13093
13489
  // Count of non-skipped scenarios
13490
+ _reloadHappened = false;
13491
+ // Set when browser.reloadSession() is called; surfaced as finishedMetadata on SDKTestSuccessful so reload-orphaned builds can be excluded from session-linking
13094
13492
  _failureStatuses = ["failed", "ambiguous", "undefined", "unknown"];
13095
13493
  _browser;
13096
13494
  _suiteTitle;
@@ -13100,9 +13498,24 @@ var BrowserstackService = class {
13100
13498
  _specsRan = false;
13101
13499
  _observability;
13102
13500
  _currentTest;
13501
+ /**
13502
+ * CLI/gRPC path: map of test identity -> the test_uuid minted for it at
13503
+ * INIT_TEST/PRE. The CLI mints a fresh uuid into a SINGLE mutable per-worker tracked instance
13504
+ * (`trackWdioMochaInstance` overwrites `TestFramework.instances[ctxId]` wholesale on every
13505
+ * INIT_TEST), and the gRPC test-finish reads the uuid from that single slot. When a test hangs
13506
+ * past the mocha timeout, the NEXT test's INIT_TEST overwrites the slot before the hung test's
13507
+ * afterTest POST fires, so the POST would carry the wrong (next) test's uuid and the binary
13508
+ * would close the wrong test_run — orphaning the hung one. We snapshot each test's uuid here,
13509
+ * keyed by the same identity the legacy `_tests` map uses, and at afterTest we restore the
13510
+ * finishing test's minted uuid onto the tracked instance before the POST so it closes the
13511
+ * correct test_run. The finishing identity is `originalTest` (already snapshotted pre-await by
13512
+ * the testFnWrapper, so it is the timed-out runnable's own identity, not the next test's).
13513
+ */
13514
+ _cliTestUuids = /* @__PURE__ */ new Map();
13103
13515
  _insightsHandler;
13104
13516
  _accessibility;
13105
13517
  _accessibilityHandler;
13518
+ _customTagsHandler;
13106
13519
  _percy;
13107
13520
  _percyCaptureMode = void 0;
13108
13521
  _percyHandler;
@@ -13227,6 +13640,18 @@ var BrowserstackService = class {
13227
13640
  }
13228
13641
  await this._insightsHandler.before();
13229
13642
  }
13643
+ if (!BrowserstackCLI.getInstance().isRunning()) {
13644
+ try {
13645
+ this._customTagsHandler = new custom_tags_handler_default(
13646
+ this._browser,
13647
+ this._caps,
13648
+ this._config.framework
13649
+ );
13650
+ this._customTagsHandler.before();
13651
+ } catch (err) {
13652
+ BStackLogger.error(`[Custom Tags] Error registering setCustomTags: ${err}`);
13653
+ }
13654
+ }
13230
13655
  if (!BrowserstackCLI.getInstance().isRunning()) {
13231
13656
  this._browser.on("command", async (command) => {
13232
13657
  if (shouldProcessEventForTesthub("")) {
@@ -13316,6 +13741,9 @@ var BrowserstackService = class {
13316
13741
  if (BrowserstackCLI.getInstance().isRunning()) {
13317
13742
  await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.INIT_TEST, HookState.PRE, { test });
13318
13743
  const uuid = TestFramework.getState(TestFramework.getTrackedInstance(), TestFrameworkConstants.KEY_TEST_UUID);
13744
+ if (this._config.framework === "mocha" && uuid) {
13745
+ this._cliTestUuids.set(getUniqueIdentifier(test, this._config.framework), uuid);
13746
+ }
13319
13747
  this._insightsHandler?.setTestData(test, uuid);
13320
13748
  await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.TEST, HookState.PRE, { test, suiteTitle });
13321
13749
  return;
@@ -13325,7 +13753,8 @@ var BrowserstackService = class {
13325
13753
  await this._accessibilityHandler?.beforeTest(suiteTitle, test);
13326
13754
  await this._insightsHandler?.beforeTest(test);
13327
13755
  }
13328
- async afterTest(test, context, results) {
13756
+ async afterTest(originalTest, context, results) {
13757
+ const test = originalTest;
13329
13758
  this._specsRan = true;
13330
13759
  const { error, passed, skipped } = results;
13331
13760
  if (!passed && !skipped) {
@@ -13334,8 +13763,19 @@ var BrowserstackService = class {
13334
13763
  this._pureTestFailReasons.push(testError);
13335
13764
  }
13336
13765
  if (BrowserstackCLI.getInstance().isRunning()) {
13766
+ if (this._config.framework === "mocha") {
13767
+ const identifier = getUniqueIdentifier(test, this._config.framework);
13768
+ const resolvedUuid = this._cliTestUuids.get(identifier);
13769
+ if (resolvedUuid) {
13770
+ const trackedInstance = TestFramework.getTrackedInstance();
13771
+ if (trackedInstance) {
13772
+ TestFramework.setState(trackedInstance, TestFrameworkConstants.KEY_TEST_UUID, resolvedUuid);
13773
+ }
13774
+ this._cliTestUuids.delete(identifier);
13775
+ }
13776
+ }
13337
13777
  await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.LOG_REPORT, HookState.POST, { test, result: results });
13338
- await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.TEST, HookState.POST, { test, result: results, suiteTite: this._suiteTitle });
13778
+ await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.TEST, HookState.POST, { test, result: results, suiteTitle: this._suiteTitle });
13339
13779
  return;
13340
13780
  }
13341
13781
  await this._accessibilityHandler?.afterTest(this._suiteTitle, test);
@@ -13395,6 +13835,12 @@ var BrowserstackService = class {
13395
13835
  });
13396
13836
  }
13397
13837
  })();
13838
+ try {
13839
+ await this._insightsHandler?.sweepUnfinished();
13840
+ } catch (sweepErr) {
13841
+ BStackLogger.debug("Exception in sweepUnfinished during after(): " + util12.format(sweepErr));
13842
+ }
13843
+ this._cliTestUuids.clear();
13398
13844
  PerformanceTester.start(EVENTS.SDK_LISTENER_WORKER_END);
13399
13845
  await listener_default.getInstance().onWorkerEnd();
13400
13846
  PerformanceTester.end(EVENTS.SDK_LISTENER_WORKER_END, true);
@@ -13495,6 +13941,7 @@ var BrowserstackService = class {
13495
13941
  if (!this._browser) {
13496
13942
  return Promise.resolve();
13497
13943
  }
13944
+ this._reloadHappened = true;
13498
13945
  const { setSessionName, setSessionStatus } = this._options;
13499
13946
  const ignoreHooksStatus = this._options.testObservabilityOptions?.ignoreHooksStatus === true;
13500
13947
  let sessionStatus;
@@ -13669,7 +14116,8 @@ var BrowserstackService = class {
13669
14116
  }
13670
14117
  saveWorkerData() {
13671
14118
  saveWorkerData({
13672
- usageStats: usageStats_default.getInstance().getDataToSave()
14119
+ usageStats: usageStats_default.getInstance().getDataToSave(),
14120
+ reloadHappened: this._reloadHappened
13673
14121
  });
13674
14122
  }
13675
14123
  };
@@ -38,6 +38,27 @@ declare class _InsightsHandler {
38
38
  getHookRunDataForCucumber(hookData: TestMeta, eventType: string, result?: Frameworks.TestResult): TestData;
39
39
  beforeTest(test: Frameworks.Test): Promise<void>;
40
40
  afterTest(test: Frameworks.Test, result: Frameworks.TestResult): Promise<void>;
41
+ /**
42
+ * Teardown safety net: synthesise a terminal finish for any started-but-unfinished
43
+ * test/hook so the backend closes the entity instead of leaving it in_progress and
44
+ * letting the build watchdog inflate the duration.
45
+ *
46
+ * Scoped to mocha. Cucumber hooks are keyed differently (getCucumberHookUniqueId) and
47
+ * their lifecycle differs, so they are intentionally left out here — closing them safely
48
+ * would need cucumber-specific keying and is a known gap for a follow-up.
49
+ *
50
+ * Each entry was tagged with kind at start time so we emit HookRunFinished for hooks and
51
+ * TestRunFinished for tests without re-deriving the kind from the title. Entries without a
52
+ * uuid are skipped (same null-uuid guard as afterTest): a finish the backend can't match to a
53
+ * start is worse than none. The result is marked failed/incomplete via getFailureObject so the
54
+ * entity lands in a terminal state rather than pending.
55
+ */
56
+ sweepUnfinished(): Promise<void>;
57
+ /**
58
+ * Build a terminal (failed/incomplete) finish payload for a swept entry directly from the
59
+ * stashed TestMeta, since the live framework test object is no longer available at teardown.
60
+ */
61
+ private buildSweepFinishData;
41
62
  /**
42
63
  * Cucumber Only
43
64
  */
@@ -1 +1 @@
1
- {"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"insights-handler.d.ts","sourceRoot":"","sources":["../src/insights-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"funnelInstrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/funnelInstrumentation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,kBAAkB,MAAM,cAAc,CAAA;AAMlD,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAA;AAsB9D,wBAAsB,SAAS,CAAC,MAAM,EAAE,kBAAkB,iBAWzD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,YAAY,UAAQ,iBAUhF;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,UAAQ,GAAG,MAAM,CAO1G;AAeD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvE;AA0JD,UAAU,UAAU;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,OAAO,CAAA;CAC5B;AAED,wBAAgB,4BAA4B,CACxC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,OAAO,GAAG,SAAS,QAiCzC"}
1
+ {"version":3,"file":"funnelInstrumentation.d.ts","sourceRoot":"","sources":["../../src/instrumentation/funnelInstrumentation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,kBAAkB,MAAM,cAAc,CAAA;AAMlD,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAA;AAsB9D,wBAAsB,SAAS,CAAC,MAAM,EAAE,kBAAkB,iBAWzD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,YAAY,UAAQ,iBAUhF;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,UAAQ,GAAG,MAAM,CAO1G;AAeD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBvE;AAiKD,UAAU,UAAU;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,OAAO,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,OAAO,CAAA;CAC5B;AAED,wBAAgB,4BAA4B,CACxC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,kBAAkB,EAC1B,iBAAiB,EAAE,OAAO,GAAG,SAAS,QAiCzC"}
@@ -11,6 +11,7 @@ export default class BrowserstackService implements Services.ServiceInstance {
11
11
  private _scenariosThatRan;
12
12
  private _lastScenarioName?;
13
13
  private _scenariosRanCount;
14
+ private _reloadHappened;
14
15
  private _failureStatuses;
15
16
  private _browser?;
16
17
  private _suiteTitle?;
@@ -20,9 +21,24 @@ export default class BrowserstackService implements Services.ServiceInstance {
20
21
  private _specsRan;
21
22
  private _observability;
22
23
  private _currentTest?;
24
+ /**
25
+ * CLI/gRPC path: map of test identity -> the test_uuid minted for it at
26
+ * INIT_TEST/PRE. The CLI mints a fresh uuid into a SINGLE mutable per-worker tracked instance
27
+ * (`trackWdioMochaInstance` overwrites `TestFramework.instances[ctxId]` wholesale on every
28
+ * INIT_TEST), and the gRPC test-finish reads the uuid from that single slot. When a test hangs
29
+ * past the mocha timeout, the NEXT test's INIT_TEST overwrites the slot before the hung test's
30
+ * afterTest POST fires, so the POST would carry the wrong (next) test's uuid and the binary
31
+ * would close the wrong test_run — orphaning the hung one. We snapshot each test's uuid here,
32
+ * keyed by the same identity the legacy `_tests` map uses, and at afterTest we restore the
33
+ * finishing test's minted uuid onto the tracked instance before the POST so it closes the
34
+ * correct test_run. The finishing identity is `originalTest` (already snapshotted pre-await by
35
+ * the testFnWrapper, so it is the timed-out runnable's own identity, not the next test's).
36
+ */
37
+ private _cliTestUuids;
23
38
  private _insightsHandler?;
24
39
  private _accessibility;
25
40
  private _accessibilityHandler?;
41
+ private _customTagsHandler?;
26
42
  private _percy;
27
43
  private _percyCaptureMode;
28
44
  private _percyHandler?;
@@ -42,7 +58,7 @@ export default class BrowserstackService implements Services.ServiceInstance {
42
58
  beforeHook(test: Frameworks.Test | CucumberHook, context: unknown): Promise<void>;
43
59
  afterHook(test: Frameworks.Test | CucumberHook, context: unknown, result: Frameworks.TestResult): Promise<void>;
44
60
  beforeTest(test: Frameworks.Test): Promise<void>;
45
- afterTest(test: Frameworks.Test, context: never, results: Frameworks.TestResult): Promise<void>;
61
+ afterTest(originalTest: Frameworks.Test, context: never, results: Frameworks.TestResult): Promise<void>;
46
62
  after(result: number): Promise<void>;
47
63
  /**
48
64
  * For CucumberJS
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAY9E,OAAO,KAAK,EAAE,kBAAkB,EAAuB,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC5F,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAiChG,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,QAAQ,CAAC,eAAe;IA2CpE,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IA3CnB,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,oBAAoB,CAAe;IAC3C,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,iBAAiB,CAAC,CAAQ;IAClC,OAAO,CAAC,kBAAkB,CAAY;IACtC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,gBAAgB,CAA4D;IACpF,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAA;IACtB,OAAO,CAAC,YAAY,CAAC,CAA0C;IAC/D;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,gBAAgB,CAAC,CAAiB;IAC1C,OAAO,CAAC,cAAc,CAAA;IACtB,OAAO,CAAC,qBAAqB,CAAC,CAAsB;IACpD,OAAO,CAAC,kBAAkB,CAAC,CAAmB;IAC9C,OAAO,CAAC,MAAM,CAAA;IACd,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,aAAa,CAAC,CAAc;IACpC,OAAO,CAAC,WAAW,CAAA;gBAGf,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,EACxC,KAAK,EAAE,YAAY,CAAC,8BAA8B,EAClD,OAAO,EAAE,OAAO,CAAC,UAAU;IAuCvC,WAAW,CAAE,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,KAAK,IAAI;IAWnD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY;IAkEtG,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,8BAA8B,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO;IAmK7G;;;;;;OAMG;IAEG,WAAW,CAAE,KAAK,EAAE,UAAU,CAAC,KAAK;IAapC,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,EAAE,OAAO,EAAE,OAAO;IAQhE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU;IAe/F,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAoCjC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,UAAU;IA6CvF,KAAK,CAAE,MAAM,EAAE,MAAM;IAwJ3B;;OAEG;IAGG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAOjD;;;OAGG;IAEG,cAAc,CAAE,KAAK,EAAE,sBAAsB;IAS7C,aAAa,CAAE,KAAK,EAAE,sBAAsB;IA2C5C,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM;IAMzD,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,YAAY;IAKzF,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAuDzD,cAAc,IAAI,OAAO;IAUzB,UAAU,CAAE,WAAW,EAAE,OAAO;IAUhC,kBAAkB,CAAE,MAAM,EAAE,iBAAiB;IAqB7C,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;IA4BzC,gBAAgB;YA0CR,eAAe;IAgC7B,OAAO,CAAC,cAAc;YAIR,eAAe;IAsB7B,OAAO,CAAC,cAAc;CAMzB"}
package/build/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Capabilities, Options, Frameworks } from '@wdio/types';
2
2
  import type { Options as BSOptions } from 'browserstack-local';
3
+ import type { CustomMetadata } from './customTags.js';
3
4
  export type MultiRemoteAction = (sessionId: string, browserName?: string) => Promise<unknown>;
4
5
  export type AppConfig = {
5
6
  id?: string;
@@ -238,6 +239,10 @@ export interface TestMeta {
238
239
  examples?: string[];
239
240
  hookType?: string;
240
241
  testRunId?: string;
242
+ kind?: 'hook' | 'test';
243
+ name?: string;
244
+ scopes?: string[];
245
+ fileName?: string;
241
246
  }
242
247
  export interface CurrentRunInfo {
243
248
  uuid?: string;
@@ -277,6 +282,7 @@ export interface TestData {
277
282
  tags?: string[];
278
283
  test_run_id?: string;
279
284
  product_map?: {};
285
+ custom_metadata?: CustomMetadata;
280
286
  }
281
287
  export interface UserConfig {
282
288
  buildName?: string;
@@ -434,6 +440,9 @@ export interface EventProperties {
434
440
  };
435
441
  };
436
442
  isCLIEnabled?: boolean;
443
+ finishedMetadata?: {
444
+ reason: string;
445
+ };
437
446
  }
438
447
  export interface FunnelData {
439
448
  userName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,MAAM,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAE7F,MAAM,MAAM,SAAS,GAAG;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,GAAG;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,wBAAwB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAGD,MAAM,WAAW,oBAAoB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACrC,iBAAiB,CAAC,EAAE,wBAAwB,CAAA;CAC/C;AAED,MAAM,WAAW,mBAAoB,SAAQ,OAAO,CAAC,UAAU;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAC/B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD;;;OAGG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;MAEE;IACF,YAAY,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;;MAKE;IACF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;MAGE;IACF,oBAAoB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAAE,CAAC;IACnD;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAChB,MAAM,EAAE,OAAO,CAAC,UAAU,EAC1B,YAAY,EAAE,YAAY,CAAC,8BAA8B,EACzD,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,KACjB,MAAM,CAAA;IACX;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAC/C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;MAIE;IACF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;MAGE;IACF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACtE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAA;KAAE,CAAC;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,EAAE,CAAC;IACjB,eAAe,CAAC,EAAE,cAAc,CAAA;CACnC;AAED,MAAM,WAAW,UAAU;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAAE,CAAA;CACrD;AAED,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,GAAC,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,OAAO;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,UAAU,GAAC,WAAW,GAAC,MAAM,GAAC,iBAAiB,CAAA;IACrD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,MAAO,SAAQ,OAAO;IACnC,IAAI,EAAE,UAAU,CAAA;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO;IAC1C,IAAI,EAAE,iBAAiB,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE;YACL,iBAAiB,CAAC,EAAE,OAAO,CAAC;SAC/B,CAAC;QACF,MAAM,CAAC,EAAE;YACL,GAAG,EAAE,MAAM,CAAC;YACZ,OAAO,EAAE,MAAM,CAAC;SACnB,EAAE,CAAC;KACP,CAAC;IACF,aAAa,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE;YACL,GAAG,EAAE,MAAM,CAAC;YACZ,OAAO,EAAE,MAAM,CAAC;SACnB,EAAE,CAAC;QACJ,OAAO,EAAE;YACL,MAAM,EAAE,MAAM,CAAC;YACf,cAAc,EAAE;gBACZ,YAAY,EAAE,MAAM,EAAE,CAAC;gBACvB,QAAQ,EAAE,OAAO,EAAE,CAAC;aACvB,CAAC;YACF,OAAO,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC;aACnB,EAAE,CAAC;YACJ,YAAY,EAAE;gBACV,IAAI,EAAE,MAAM,CAAC;gBACb,KAAK,EAAE,OAAO,CAAA;aACjB,EAAE,CAAC;SACP,CAAA;KACJ,CAAC;CACL;AAED,MAAM,WAAW,sBAAsB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC;IACxC,GAAG,CAAC,EAAE;QACF,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;QACzC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9C,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KACnC,CAAA;CACJ;AAED,MAAM,WAAW,+BAA+B;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAC9B,YAAY,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,YAAY;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,UAAU,QAAQ;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,OAAO;IACb,SAAS,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACjC,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAA;KAAE,CAAA;CACvD;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IACtC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE;QACX,iBAAiB,EAAE;YACf,MAAM,EAAE;gBACJ,WAAW,EAAE;oBACT,QAAQ,EAAE;wBACN,MAAM,EAAE,MAAM,CAAA;wBACd,KAAK,CAAC,EAAE,MAAM,CAAA;wBACd,WAAW,EAAE,MAAM,CAAA;qBACtB,CAAA;iBACJ,CAAA;aACJ,CAAA;SACJ,CAAA;KACJ,CAAA;IACD,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE;QACf,MAAM,EAAE,MAAM,CAAA;KACjB,CAAA;CACJ;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,eAAe,CAAA;CACpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wdio/browserstack-service",
3
- "version": "9.28.0",
3
+ "version": "9.29.1",
4
4
  "description": "WebdriverIO service for better Browserstack integration",
5
5
  "author": "Adam Bjerstedt <abjerstedt@gmail.com>",
6
6
  "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
@@ -41,9 +41,9 @@
41
41
  "@percy/appium-app": "^2.0.9",
42
42
  "@percy/selenium-webdriver": "^2.2.2",
43
43
  "@types/gitconfiglocal": "^2.0.1",
44
- "@wdio/logger": "9.18.0",
45
- "@wdio/reporter": "9.28.0",
46
- "@wdio/types": "9.28.0",
44
+ "@wdio/logger": "9.29.1",
45
+ "@wdio/reporter": "9.29.1",
46
+ "@wdio/types": "9.29.1",
47
47
  "browserstack-local": "^1.5.1",
48
48
  "chalk": "^5.3.0",
49
49
  "csv-writer": "^1.6.0",
@@ -53,7 +53,7 @@
53
53
  "tar": "^7.5.11",
54
54
  "undici": "^6.24.0",
55
55
  "uuid": "^11.1.0",
56
- "webdriverio": "9.28.0",
56
+ "webdriverio": "9.29.1",
57
57
  "winston-transport": "^4.5.0",
58
58
  "yauzl": "^3.0.0"
59
59
  },
@@ -64,10 +64,10 @@
64
64
  "@types/node": "^20.1.0",
65
65
  "@types/tar": "^7.0.87",
66
66
  "@types/yauzl": "^2.10.3",
67
- "@wdio/globals": "9.28.0"
67
+ "@wdio/globals": "9.29.1"
68
68
  },
69
69
  "publishConfig": {
70
70
  "access": "public"
71
71
  },
72
- "gitHead": "66baa0049385cd9161677e1e6728fde90db56f35"
72
+ "gitHead": "cea4a759f7e78c798e7dd1a0794ae4aeec5acdbf"
73
73
  }