@wdio/browserstack-service 9.29.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.28.0",
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",
@@ -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
@@ -28,7 +28,7 @@ var init_package = __esm({
28
28
  "package.json"() {
29
29
  package_default = {
30
30
  name: "@wdio/browserstack-service",
31
- version: "9.28.0",
31
+ version: "9.29.0",
32
32
  description: "WebdriverIO service for better Browserstack integration",
33
33
  author: "Adam Bjerstedt <abjerstedt@gmail.com>",
34
34
  homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-browserstack-service",
@@ -702,6 +702,7 @@ var init_testFrameworkConstants = __esm({
702
702
  KEY_TEST_FAILURE_REASON: "test_failure_reason",
703
703
  KEY_TEST_LOGS: "test_logs",
704
704
  KEY_TEST_META: "test_meta",
705
+ KEY_CUSTOM_TAGS: "custom_metadata",
705
706
  KEY_TEST_DEFERRED: "test_deferred",
706
707
  KEY_SESSION_NAME: "test_session_name",
707
708
  KEY_AUTOMATE_SESSION_NAME: "automate_session_name",
@@ -7554,6 +7555,186 @@ var init_accessibilityModule = __esm({
7554
7555
  }
7555
7556
  });
7556
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
+
7557
7738
  // src/cli/modules/observabilityModule.ts
7558
7739
  var ObservabilityModule;
7559
7740
  var init_observabilityModule = __esm({
@@ -8304,6 +8485,82 @@ var init_reporter = __esm({
8304
8485
  }
8305
8486
  });
8306
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
+
8307
8564
  // src/insights-handler.ts
8308
8565
  import path16 from "node:path";
8309
8566
  import { v4 as uuidv44 } from "uuid";
@@ -8321,6 +8578,7 @@ var init_insights_handler = __esm({
8321
8578
  init_hookState();
8322
8579
  init_performance_tester();
8323
8580
  init_constants2();
8581
+ init_custom_tags_handler();
8324
8582
  _InsightsHandler = class {
8325
8583
  constructor(_browser, _framework, _userCaps, _options) {
8326
8584
  this._browser = _browser;
@@ -8522,7 +8780,13 @@ var init_insights_handler = __esm({
8522
8780
  const fullTitle = getUniqueIdentifier(test, this._framework);
8523
8781
  this._tests[fullTitle] = {
8524
8782
  uuid: hookUUID,
8525
- 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
8526
8790
  };
8527
8791
  this.setCurrentHook({ uuid: hookUUID });
8528
8792
  this.attachHookData(context, hookUUID);
@@ -8546,7 +8810,12 @@ var init_insights_handler = __esm({
8546
8810
  };
8547
8811
  }
8548
8812
  this.setCurrentHook({ uuid: this._tests[fullTitle].uuid, finished: true });
8549
- 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
+ }
8550
8819
  const hookType = getHookType(test.title);
8551
8820
  if (!result.passed && (hookType === "BEFORE_EACH" || hookType === "BEFORE_ALL" || hookType === "AFTER_EACH")) {
8552
8821
  const sendTestSkip = async (skippedTest) => {
@@ -8622,7 +8891,13 @@ var init_insights_handler = __esm({
8622
8891
  const fullTitle = getUniqueIdentifier(test, this._framework);
8623
8892
  this._tests[fullTitle] = {
8624
8893
  uuid,
8625
- 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
8626
8901
  };
8627
8902
  this.listener.testStarted(this.getRunData(test, "TestRunStarted"));
8628
8903
  }
@@ -8637,6 +8912,10 @@ var init_insights_handler = __esm({
8637
8912
  };
8638
8913
  this.flushCBTDataQueue();
8639
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
+ }
8640
8919
  this.listener.testFinished(testData);
8641
8920
  const testFinishHashCode = generateHashCodeFromFields(
8642
8921
  [
@@ -8652,6 +8931,91 @@ var init_insights_handler = __esm({
8652
8931
  );
8653
8932
  reporter_default.hashCodeToHandleTestSkip[testFinishHashCode] = testData.uuid ?? "";
8654
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
+ }
8655
9019
  /**
8656
9020
  * Cucumber Only
8657
9021
  */
@@ -8870,7 +9234,7 @@ var init_insights_handler = __esm({
8870
9234
  }
8871
9235
  getRunData(test, eventType, results) {
8872
9236
  const fullTitle = getUniqueIdentifier(test, this._framework);
8873
- const testMetaData = this._tests[fullTitle];
9237
+ const testMetaData = this._tests[fullTitle] || {};
8874
9238
  const filename = test.file || this._suiteFile;
8875
9239
  this.currentTestId = testMetaData.uuid;
8876
9240
  if (eventType === "TestRunStarted") {
@@ -8917,6 +9281,10 @@ var init_insights_handler = __esm({
8917
9281
  if (this._hooks[fullTitle]) {
8918
9282
  testData.hooks = this._hooks[fullTitle];
8919
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
+ }
8920
9288
  }
8921
9289
  if (eventType === "TestRunStarted" || eventType === "TestRunSkipped" || eventType === "HookRunStarted") {
8922
9290
  testData.integrations = {};
@@ -9492,6 +9860,7 @@ var init_cli = __esm({
9492
9860
  init_wdioAutomationFramework();
9493
9861
  init_webdriverIOModule();
9494
9862
  init_accessibilityModule();
9863
+ init_customTagsModule();
9495
9864
  init_util();
9496
9865
  init_observabilityModule();
9497
9866
  init_crash_reporter();
@@ -9608,6 +9977,7 @@ var init_cli = __esm({
9608
9977
  this.modules[ObservabilityModule.MODULE_NAME] = new ObservabilityModule(startBinResponse.observability);
9609
9978
  }
9610
9979
  this.modules[TestHubModule.MODULE_NAME] = new TestHubModule(startBinResponse.testhub);
9980
+ this.modules[CustomTagsModule.MODULE_NAME] = new CustomTagsModule();
9611
9981
  if (startBinResponse.accessibility?.success) {
9612
9982
  process.env[BROWSERSTACK_ACCESSIBILITY] = "true";
9613
9983
  const options = this.options;
@@ -13056,6 +13426,7 @@ var AccessibilityHandler = o11yClassErrorHandler(_AccessibilityHandler);
13056
13426
  var accessibility_handler_default = AccessibilityHandler;
13057
13427
 
13058
13428
  // src/service.ts
13429
+ init_custom_tags_handler();
13059
13430
  init_bstackLogger();
13060
13431
  init_Percy_Handler();
13061
13432
  init_listener();
@@ -13127,9 +13498,24 @@ var BrowserstackService = class {
13127
13498
  _specsRan = false;
13128
13499
  _observability;
13129
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();
13130
13515
  _insightsHandler;
13131
13516
  _accessibility;
13132
13517
  _accessibilityHandler;
13518
+ _customTagsHandler;
13133
13519
  _percy;
13134
13520
  _percyCaptureMode = void 0;
13135
13521
  _percyHandler;
@@ -13254,6 +13640,18 @@ var BrowserstackService = class {
13254
13640
  }
13255
13641
  await this._insightsHandler.before();
13256
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
+ }
13257
13655
  if (!BrowserstackCLI.getInstance().isRunning()) {
13258
13656
  this._browser.on("command", async (command) => {
13259
13657
  if (shouldProcessEventForTesthub("")) {
@@ -13343,6 +13741,9 @@ var BrowserstackService = class {
13343
13741
  if (BrowserstackCLI.getInstance().isRunning()) {
13344
13742
  await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.INIT_TEST, HookState.PRE, { test });
13345
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
+ }
13346
13747
  this._insightsHandler?.setTestData(test, uuid);
13347
13748
  await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.TEST, HookState.PRE, { test, suiteTitle });
13348
13749
  return;
@@ -13352,7 +13753,8 @@ var BrowserstackService = class {
13352
13753
  await this._accessibilityHandler?.beforeTest(suiteTitle, test);
13353
13754
  await this._insightsHandler?.beforeTest(test);
13354
13755
  }
13355
- async afterTest(test, context, results) {
13756
+ async afterTest(originalTest, context, results) {
13757
+ const test = originalTest;
13356
13758
  this._specsRan = true;
13357
13759
  const { error, passed, skipped } = results;
13358
13760
  if (!passed && !skipped) {
@@ -13361,8 +13763,19 @@ var BrowserstackService = class {
13361
13763
  this._pureTestFailReasons.push(testError);
13362
13764
  }
13363
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
+ }
13364
13777
  await BrowserstackCLI.getInstance().getTestFramework().trackEvent(TestFrameworkState.LOG_REPORT, HookState.POST, { test, result: results });
13365
- 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 });
13366
13779
  return;
13367
13780
  }
13368
13781
  await this._accessibilityHandler?.afterTest(this._suiteTitle, test);
@@ -13422,6 +13835,12 @@ var BrowserstackService = class {
13422
13835
  });
13423
13836
  }
13424
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();
13425
13844
  PerformanceTester.start(EVENTS.SDK_LISTENER_WORKER_END);
13426
13845
  await listener_default.getInstance().onWorkerEnd();
13427
13846
  PerformanceTester.end(EVENTS.SDK_LISTENER_WORKER_END, true);
@@ -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":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,KAAK,EAAiB,OAAO,EAAE,QAAQ,EAAsB,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAGjK,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAmBzE,OAAO,KAAK,EACR,QAAQ,EACR,QAAQ,EAER,cAAc,EACd,MAAM,EACN,OAAO,EAEV,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAU/C,cAAM,gBAAgB;IAoBL,OAAO,CAAC,QAAQ;IAAwD,OAAO,CAAC,UAAU,CAAC;IAnBxG,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,SAAS,CAA2D;IAC5E,OAAO,CAAC,cAAc,CAAC,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAc,WAAW,EAAE,cAAc,CAAK;IAC9C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAIpB;IACD,OAAO,CAAC,SAAS,CAAC,CAAkD;IACpE,OAAO,CAAC,QAAQ,CAAC,CAA0C;IAC3D,OAAO,CAAC,QAAQ,CAAyB;IAClC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAK;gBAEf,QAAQ,EAAE,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,EAAU,UAAU,CAAC,EAAE,MAAM,YAAA,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC,8BAA8B,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,mBAAmB;IAmB9N,cAAc,IAAI,OAAO;IAMzB,iBAAiB;IAQjB,YAAY,CAAC,QAAQ,EAAE,MAAM;IAIvB,MAAM;IAqBZ,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAC,SAAS;IAchD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAC,SAAS,GAAG,MAAM;IAYvD,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAC,SAAS,GAAG,MAAM,GAAC,IAAI;IAapF,0BAA0B;IAK1B,cAAc,CAAC,WAAW,EAAE,cAAc;IAapC,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;IAyB3E,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU;IA+C5G,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,GAAC,SAAS,EAAE,OAAO,EAAE,OAAO;IA8B1E,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,GAAC,YAAY,GAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU;IAuErF,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU;IA6ChG,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI;IAsBjC,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU;IAmCrE;;;;;;;;;;;;;;OAcG;IACU,eAAe;IAqD5B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;QAEI;IAEE,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM3C,cAAc,CAAE,KAAK,EAAE,sBAAsB;IAmC7C,aAAa,CAAE,KAAK,EAAE,sBAAsB;IAM5C,UAAU,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM;IAoBzD,SAAS,CAAE,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,YAAY;IA4B/F;;OAEG;IAEH,iBAAiB,GAAU,QAAQ,MAAM,mBAiBxC;IAEK,cAAc,CAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,GAAG,sBAAsB;IAqDtI;;;OAGG;IACI,mBAAmB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAiBlE,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,UAAU;IA+FlB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,yBAAyB;IAsGpB,iBAAiB;IAUxB,WAAW;IAsBjB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,aAAa;IAOR,gBAAgB;IAOtB,WAAW,CAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM;CAa1D;AAGD,QAAA,MAAM,eAAe,EAAE,OAAO,gBAA0D,CAAA;AACxF,KAAK,eAAe,GAAG,gBAAgB,CAAA;AAEvC,eAAe,eAAe,CAAA"}
@@ -21,9 +21,24 @@ export default class BrowserstackService implements Services.ServiceInstance {
21
21
  private _specsRan;
22
22
  private _observability;
23
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;
24
38
  private _insightsHandler?;
25
39
  private _accessibility;
26
40
  private _accessibilityHandler?;
41
+ private _customTagsHandler?;
27
42
  private _percy;
28
43
  private _percyCaptureMode;
29
44
  private _percyHandler?;
@@ -43,7 +58,7 @@ export default class BrowserstackService implements Services.ServiceInstance {
43
58
  beforeHook(test: Frameworks.Test | CucumberHook, context: unknown): Promise<void>;
44
59
  afterHook(test: Frameworks.Test | CucumberHook, context: unknown, result: Frameworks.TestResult): Promise<void>;
45
60
  beforeTest(test: Frameworks.Test): Promise<void>;
46
- afterTest(test: Frameworks.Test, context: never, results: Frameworks.TestResult): Promise<void>;
61
+ afterTest(originalTest: Frameworks.Test, context: never, results: Frameworks.TestResult): Promise<void>;
47
62
  after(result: number): Promise<void>;
48
63
  /**
49
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":"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"}
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;
@@ -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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wdio/browserstack-service",
3
- "version": "9.29.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.29.0",
46
- "@wdio/types": "9.29.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.29.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.29.0"
67
+ "@wdio/globals": "9.29.1"
68
68
  },
69
69
  "publishConfig": {
70
70
  "access": "public"
71
71
  },
72
- "gitHead": "c7808c59ca3ab6a677230cebd688454426cba0f2"
72
+ "gitHead": "cea4a759f7e78c798e7dd1a0794ae4aeec5acdbf"
73
73
  }