@wdio/browserstack-service 0.0.0-canary-20260722132416

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/LICENSE-MIT +20 -0
  2. package/README.md +392 -0
  3. package/browserstack-service.d.ts +43 -0
  4. package/build/Percy/Percy-Handler.d.ts +32 -0
  5. package/build/Percy/Percy-Handler.d.ts.map +1 -0
  6. package/build/Percy/Percy-Handler.js +165 -0
  7. package/build/Percy/Percy-Handler.js.map +1 -0
  8. package/build/Percy/Percy.d.ts +19 -0
  9. package/build/Percy/Percy.d.ts.map +1 -0
  10. package/build/Percy/Percy.js +164 -0
  11. package/build/Percy/Percy.js.map +1 -0
  12. package/build/Percy/PercyBinary.d.ts +10 -0
  13. package/build/Percy/PercyBinary.d.ts.map +1 -0
  14. package/build/Percy/PercyBinary.js +161 -0
  15. package/build/Percy/PercyBinary.js.map +1 -0
  16. package/build/Percy/PercyCaptureMap.d.ts +9 -0
  17. package/build/Percy/PercyCaptureMap.d.ts.map +1 -0
  18. package/build/Percy/PercyCaptureMap.js +36 -0
  19. package/build/Percy/PercyCaptureMap.js.map +1 -0
  20. package/build/Percy/PercyHelper.d.ts +8 -0
  21. package/build/Percy/PercyHelper.d.ts.map +1 -0
  22. package/build/Percy/PercyHelper.js +68 -0
  23. package/build/Percy/PercyHelper.js.map +1 -0
  24. package/build/Percy/PercyLogger.d.ts +15 -0
  25. package/build/Percy/PercyLogger.d.ts.map +1 -0
  26. package/build/Percy/PercyLogger.js +68 -0
  27. package/build/Percy/PercyLogger.js.map +1 -0
  28. package/build/Percy/PercySDK.d.ts +4 -0
  29. package/build/Percy/PercySDK.d.ts.map +1 -0
  30. package/build/Percy/PercySDK.js +86 -0
  31. package/build/Percy/PercySDK.js.map +1 -0
  32. package/build/accessibility-handler.d.ts +52 -0
  33. package/build/accessibility-handler.d.ts.map +1 -0
  34. package/build/accessibility-handler.js +361 -0
  35. package/build/accessibility-handler.js.map +1 -0
  36. package/build/ai-handler.d.ts +23 -0
  37. package/build/ai-handler.d.ts.map +1 -0
  38. package/build/ai-handler.js +184 -0
  39. package/build/ai-handler.js.map +1 -0
  40. package/build/bstackLogger.d.ts +16 -0
  41. package/build/bstackLogger.d.ts.map +1 -0
  42. package/build/bstackLogger.js +71 -0
  43. package/build/bstackLogger.js.map +1 -0
  44. package/build/cleanup.d.ts +9 -0
  45. package/build/cleanup.d.ts.map +1 -0
  46. package/build/cleanup.js +101 -0
  47. package/build/cleanup.js.map +1 -0
  48. package/build/cli/apiUtils.d.ts +14 -0
  49. package/build/cli/apiUtils.d.ts.map +1 -0
  50. package/build/cli/apiUtils.js +25 -0
  51. package/build/cli/apiUtils.js.map +1 -0
  52. package/build/cli/cliLogger.d.ts +17 -0
  53. package/build/cli/cliLogger.d.ts.map +1 -0
  54. package/build/cli/cliLogger.js +82 -0
  55. package/build/cli/cliLogger.js.map +1 -0
  56. package/build/cli/cliUtils.d.ts +64 -0
  57. package/build/cli/cliUtils.d.ts.map +1 -0
  58. package/build/cli/cliUtils.js +461 -0
  59. package/build/cli/cliUtils.js.map +1 -0
  60. package/build/cli/eventDispatcher.d.ts +28 -0
  61. package/build/cli/eventDispatcher.d.ts.map +1 -0
  62. package/build/cli/eventDispatcher.js +49 -0
  63. package/build/cli/eventDispatcher.js.map +1 -0
  64. package/build/cli/frameworks/automationFramework.d.ts +89 -0
  65. package/build/cli/frameworks/automationFramework.d.ts.map +1 -0
  66. package/build/cli/frameworks/automationFramework.js +132 -0
  67. package/build/cli/frameworks/automationFramework.js.map +1 -0
  68. package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts +18 -0
  69. package/build/cli/frameworks/constants/automationFrameworkConstants.d.ts.map +1 -0
  70. package/build/cli/frameworks/constants/automationFrameworkConstants.js +18 -0
  71. package/build/cli/frameworks/constants/automationFrameworkConstants.js.map +1 -0
  72. package/build/cli/frameworks/constants/testFrameworkConstants.d.ts +43 -0
  73. package/build/cli/frameworks/constants/testFrameworkConstants.d.ts.map +1 -0
  74. package/build/cli/frameworks/constants/testFrameworkConstants.js +43 -0
  75. package/build/cli/frameworks/constants/testFrameworkConstants.js.map +1 -0
  76. package/build/cli/frameworks/testFramework.d.ts +89 -0
  77. package/build/cli/frameworks/testFramework.d.ts.map +1 -0
  78. package/build/cli/frameworks/testFramework.js +126 -0
  79. package/build/cli/frameworks/testFramework.js.map +1 -0
  80. package/build/cli/frameworks/wdioAutomationFramework.d.ts +28 -0
  81. package/build/cli/frameworks/wdioAutomationFramework.d.ts.map +1 -0
  82. package/build/cli/frameworks/wdioAutomationFramework.js +67 -0
  83. package/build/cli/frameworks/wdioAutomationFramework.js.map +1 -0
  84. package/build/cli/frameworks/wdioMochaTestFramework.d.ts +82 -0
  85. package/build/cli/frameworks/wdioMochaTestFramework.d.ts.map +1 -0
  86. package/build/cli/frameworks/wdioMochaTestFramework.js +322 -0
  87. package/build/cli/frameworks/wdioMochaTestFramework.js.map +1 -0
  88. package/build/cli/grpcClient.d.ts +86 -0
  89. package/build/cli/grpcClient.d.ts.map +1 -0
  90. package/build/cli/grpcClient.js +532 -0
  91. package/build/cli/grpcClient.js.map +1 -0
  92. package/build/cli/index.d.ts +150 -0
  93. package/build/cli/index.d.ts.map +1 -0
  94. package/build/cli/index.js +464 -0
  95. package/build/cli/index.js.map +1 -0
  96. package/build/cli/instances/automationFrameworkInstance.d.ts +33 -0
  97. package/build/cli/instances/automationFrameworkInstance.d.ts.map +1 -0
  98. package/build/cli/instances/automationFrameworkInstance.js +45 -0
  99. package/build/cli/instances/automationFrameworkInstance.js.map +1 -0
  100. package/build/cli/instances/testFrameworkInstance.d.ts +62 -0
  101. package/build/cli/instances/testFrameworkInstance.d.ts.map +1 -0
  102. package/build/cli/instances/testFrameworkInstance.js +97 -0
  103. package/build/cli/instances/testFrameworkInstance.js.map +1 -0
  104. package/build/cli/instances/trackedContext.d.ts +32 -0
  105. package/build/cli/instances/trackedContext.d.ts.map +1 -0
  106. package/build/cli/instances/trackedContext.js +48 -0
  107. package/build/cli/instances/trackedContext.js.map +1 -0
  108. package/build/cli/instances/trackedInstance.d.ts +40 -0
  109. package/build/cli/instances/trackedInstance.d.ts.map +1 -0
  110. package/build/cli/instances/trackedInstance.js +64 -0
  111. package/build/cli/instances/trackedInstance.js.map +1 -0
  112. package/build/cli/modules/accessibilityModule.d.ts +46 -0
  113. package/build/cli/modules/accessibilityModule.d.ts.map +1 -0
  114. package/build/cli/modules/accessibilityModule.js +447 -0
  115. package/build/cli/modules/accessibilityModule.js.map +1 -0
  116. package/build/cli/modules/automateModule.d.ts +26 -0
  117. package/build/cli/modules/automateModule.d.ts.map +1 -0
  118. package/build/cli/modules/automateModule.js +223 -0
  119. package/build/cli/modules/automateModule.js.map +1 -0
  120. package/build/cli/modules/baseModule.d.ts +33 -0
  121. package/build/cli/modules/baseModule.d.ts.map +1 -0
  122. package/build/cli/modules/baseModule.js +52 -0
  123. package/build/cli/modules/baseModule.js.map +1 -0
  124. package/build/cli/modules/observabilityModule.d.ts +22 -0
  125. package/build/cli/modules/observabilityModule.d.ts.map +1 -0
  126. package/build/cli/modules/observabilityModule.js +46 -0
  127. package/build/cli/modules/observabilityModule.js.map +1 -0
  128. package/build/cli/modules/percyModule.d.ts +19 -0
  129. package/build/cli/modules/percyModule.d.ts.map +1 -0
  130. package/build/cli/modules/percyModule.js +78 -0
  131. package/build/cli/modules/percyModule.js.map +1 -0
  132. package/build/cli/modules/testHubModule.d.ts +30 -0
  133. package/build/cli/modules/testHubModule.d.ts.map +1 -0
  134. package/build/cli/modules/testHubModule.js +233 -0
  135. package/build/cli/modules/testHubModule.js.map +1 -0
  136. package/build/cli/modules/webdriverIOModule.d.ts +29 -0
  137. package/build/cli/modules/webdriverIOModule.d.ts.map +1 -0
  138. package/build/cli/modules/webdriverIOModule.js +129 -0
  139. package/build/cli/modules/webdriverIOModule.js.map +1 -0
  140. package/build/cli/states/automationFrameworkState.d.ts +65 -0
  141. package/build/cli/states/automationFrameworkState.d.ts.map +1 -0
  142. package/build/cli/states/automationFrameworkState.js +62 -0
  143. package/build/cli/states/automationFrameworkState.js.map +1 -0
  144. package/build/cli/states/hookState.d.ts +45 -0
  145. package/build/cli/states/hookState.d.ts.map +1 -0
  146. package/build/cli/states/hookState.js +44 -0
  147. package/build/cli/states/hookState.js.map +1 -0
  148. package/build/cli/states/testFrameworkState.d.ts +125 -0
  149. package/build/cli/states/testFrameworkState.d.ts.map +1 -0
  150. package/build/cli/states/testFrameworkState.js +116 -0
  151. package/build/cli/states/testFrameworkState.js.map +1 -0
  152. package/build/config.d.ts +29 -0
  153. package/build/config.d.ts.map +1 -0
  154. package/build/config.js +52 -0
  155. package/build/config.js.map +1 -0
  156. package/build/constants.d.ts +96 -0
  157. package/build/constants.d.ts.map +1 -0
  158. package/build/constants.js +156 -0
  159. package/build/constants.js.map +1 -0
  160. package/build/crash-reporter.d.ts +18 -0
  161. package/build/crash-reporter.d.ts.map +1 -0
  162. package/build/crash-reporter.js +134 -0
  163. package/build/crash-reporter.js.map +1 -0
  164. package/build/cucumber-types.d.ts +194 -0
  165. package/build/cucumber-types.d.ts.map +1 -0
  166. package/build/cucumber-types.js +2 -0
  167. package/build/cucumber-types.js.map +1 -0
  168. package/build/data-store.d.ts +4 -0
  169. package/build/data-store.d.ts.map +1 -0
  170. package/build/data-store.js +42 -0
  171. package/build/data-store.js.map +1 -0
  172. package/build/exitHandler.d.ts +4 -0
  173. package/build/exitHandler.d.ts.map +1 -0
  174. package/build/exitHandler.js +105 -0
  175. package/build/exitHandler.js.map +1 -0
  176. package/build/fileStream.d.ts +9 -0
  177. package/build/fileStream.d.ts.map +1 -0
  178. package/build/fileStream.js +13 -0
  179. package/build/fileStream.js.map +1 -0
  180. package/build/grpc/generated/sdk-messages-accessibility.d.ts +76 -0
  181. package/build/grpc/generated/sdk-messages-accessibility.d.ts.map +1 -0
  182. package/build/grpc/generated/sdk-messages-accessibility.js +908 -0
  183. package/build/grpc/generated/sdk-messages-accessibility.js.map +1 -0
  184. package/build/grpc/generated/sdk-messages-ai.d.ts +52 -0
  185. package/build/grpc/generated/sdk-messages-ai.d.ts.map +1 -0
  186. package/build/grpc/generated/sdk-messages-ai.js +643 -0
  187. package/build/grpc/generated/sdk-messages-ai.js.map +1 -0
  188. package/build/grpc/generated/sdk-messages-observability.d.ts +44 -0
  189. package/build/grpc/generated/sdk-messages-observability.d.ts.map +1 -0
  190. package/build/grpc/generated/sdk-messages-observability.js +505 -0
  191. package/build/grpc/generated/sdk-messages-observability.js.map +1 -0
  192. package/build/grpc/generated/sdk-messages-percy.d.ts +16 -0
  193. package/build/grpc/generated/sdk-messages-percy.d.ts.map +1 -0
  194. package/build/grpc/generated/sdk-messages-percy.js +111 -0
  195. package/build/grpc/generated/sdk-messages-percy.js.map +1 -0
  196. package/build/grpc/generated/sdk-messages-testhub.d.ts +16 -0
  197. package/build/grpc/generated/sdk-messages-testhub.d.ts.map +1 -0
  198. package/build/grpc/generated/sdk-messages-testhub.js +132 -0
  199. package/build/grpc/generated/sdk-messages-testhub.js.map +1 -0
  200. package/build/grpc/generated/sdk-messages.d.ts +288 -0
  201. package/build/grpc/generated/sdk-messages.d.ts.map +1 -0
  202. package/build/grpc/generated/sdk-messages.js +3958 -0
  203. package/build/grpc/generated/sdk-messages.js.map +1 -0
  204. package/build/grpc/generated/sdk.d.ts +282 -0
  205. package/build/grpc/generated/sdk.d.ts.map +1 -0
  206. package/build/grpc/generated/sdk.js +197 -0
  207. package/build/grpc/generated/sdk.js.map +1 -0
  208. package/build/grpc/index.d.ts +43 -0
  209. package/build/grpc/index.d.ts.map +1 -0
  210. package/build/grpc/index.js +154 -0
  211. package/build/grpc/index.js.map +1 -0
  212. package/build/index.d.ts +20 -0
  213. package/build/index.d.ts.map +1 -0
  214. package/build/index.js +13 -0
  215. package/build/index.js.map +1 -0
  216. package/build/insights-handler.d.ts +76 -0
  217. package/build/insights-handler.d.ts.map +1 -0
  218. package/build/insights-handler.js +855 -0
  219. package/build/insights-handler.js.map +1 -0
  220. package/build/instrumentation/funnelInstrumentation.d.ts +8 -0
  221. package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -0
  222. package/build/instrumentation/funnelInstrumentation.js +235 -0
  223. package/build/instrumentation/funnelInstrumentation.js.map +1 -0
  224. package/build/instrumentation/performance/constants.d.ts +151 -0
  225. package/build/instrumentation/performance/constants.d.ts.map +1 -0
  226. package/build/instrumentation/performance/constants.js +158 -0
  227. package/build/instrumentation/performance/constants.js.map +1 -0
  228. package/build/instrumentation/performance/performance-tester.d.ts +55 -0
  229. package/build/instrumentation/performance/performance-tester.d.ts.map +1 -0
  230. package/build/instrumentation/performance/performance-tester.js +403 -0
  231. package/build/instrumentation/performance/performance-tester.js.map +1 -0
  232. package/build/launcher.d.ts +49 -0
  233. package/build/launcher.d.ts.map +1 -0
  234. package/build/launcher.js +1077 -0
  235. package/build/launcher.js.map +1 -0
  236. package/build/log4jsAppender.d.ts +2 -0
  237. package/build/log4jsAppender.d.ts.map +1 -0
  238. package/build/log4jsAppender.js +20 -0
  239. package/build/log4jsAppender.js.map +1 -0
  240. package/build/logPatcher.d.ts +13 -0
  241. package/build/logPatcher.d.ts.map +1 -0
  242. package/build/logPatcher.js +39 -0
  243. package/build/logPatcher.js.map +1 -0
  244. package/build/logReportingAPI.d.ts +12 -0
  245. package/build/logReportingAPI.d.ts.map +1 -0
  246. package/build/logReportingAPI.js +57 -0
  247. package/build/logReportingAPI.js.map +1 -0
  248. package/build/reporter.d.ts +40 -0
  249. package/build/reporter.d.ts.map +1 -0
  250. package/build/reporter.js +254 -0
  251. package/build/reporter.js.map +1 -0
  252. package/build/request-handler.d.ts +19 -0
  253. package/build/request-handler.d.ts.map +1 -0
  254. package/build/request-handler.js +78 -0
  255. package/build/request-handler.js.map +1 -0
  256. package/build/scripts/accessibility-scripts.d.ts +26 -0
  257. package/build/scripts/accessibility-scripts.d.ts.map +1 -0
  258. package/build/scripts/accessibility-scripts.js +91 -0
  259. package/build/scripts/accessibility-scripts.js.map +1 -0
  260. package/build/service.d.ts +68 -0
  261. package/build/service.d.ts.map +1 -0
  262. package/build/service.js +740 -0
  263. package/build/service.js.map +1 -0
  264. package/build/testHub/utils.d.ts +10 -0
  265. package/build/testHub/utils.d.ts.map +1 -0
  266. package/build/testHub/utils.js +67 -0
  267. package/build/testHub/utils.js.map +1 -0
  268. package/build/testOps/featureStats.d.ts +45 -0
  269. package/build/testOps/featureStats.d.ts.map +1 -0
  270. package/build/testOps/featureStats.js +117 -0
  271. package/build/testOps/featureStats.js.map +1 -0
  272. package/build/testOps/featureUsage.d.ts +22 -0
  273. package/build/testOps/featureUsage.d.ts.map +1 -0
  274. package/build/testOps/featureUsage.js +48 -0
  275. package/build/testOps/featureUsage.js.map +1 -0
  276. package/build/testOps/listener.d.ts +40 -0
  277. package/build/testOps/listener.d.ts.map +1 -0
  278. package/build/testOps/listener.js +269 -0
  279. package/build/testOps/listener.js.map +1 -0
  280. package/build/testOps/requestUtils.d.ts +4 -0
  281. package/build/testOps/requestUtils.d.ts.map +1 -0
  282. package/build/testOps/requestUtils.js +41 -0
  283. package/build/testOps/requestUtils.js.map +1 -0
  284. package/build/testOps/testOpsConfig.d.ts +11 -0
  285. package/build/testOps/testOpsConfig.d.ts.map +1 -0
  286. package/build/testOps/testOpsConfig.js +20 -0
  287. package/build/testOps/testOpsConfig.js.map +1 -0
  288. package/build/testOps/usageStats.d.ts +404 -0
  289. package/build/testOps/usageStats.d.ts.map +1 -0
  290. package/build/testOps/usageStats.js +115 -0
  291. package/build/testOps/usageStats.js.map +1 -0
  292. package/build/testorchestration/apply-orchestration.d.ts +7 -0
  293. package/build/testorchestration/apply-orchestration.d.ts.map +1 -0
  294. package/build/testorchestration/apply-orchestration.js +43 -0
  295. package/build/testorchestration/apply-orchestration.js.map +1 -0
  296. package/build/testorchestration/helpers.d.ts +20 -0
  297. package/build/testorchestration/helpers.d.ts.map +1 -0
  298. package/build/testorchestration/helpers.js +413 -0
  299. package/build/testorchestration/helpers.js.map +1 -0
  300. package/build/testorchestration/request-utils.d.ts +23 -0
  301. package/build/testorchestration/request-utils.d.ts.map +1 -0
  302. package/build/testorchestration/request-utils.js +82 -0
  303. package/build/testorchestration/request-utils.js.map +1 -0
  304. package/build/testorchestration/test-ordering-server.d.ts +33 -0
  305. package/build/testorchestration/test-ordering-server.d.ts.map +1 -0
  306. package/build/testorchestration/test-ordering-server.js +169 -0
  307. package/build/testorchestration/test-ordering-server.js.map +1 -0
  308. package/build/testorchestration/testorcherstrationhandler.d.ts +50 -0
  309. package/build/testorchestration/testorcherstrationhandler.d.ts.map +1 -0
  310. package/build/testorchestration/testorcherstrationhandler.js +134 -0
  311. package/build/testorchestration/testorcherstrationhandler.js.map +1 -0
  312. package/build/testorchestration/testorcherstrationutils.d.ts +86 -0
  313. package/build/testorchestration/testorcherstrationutils.d.ts.map +1 -0
  314. package/build/testorchestration/testorcherstrationutils.js +380 -0
  315. package/build/testorchestration/testorcherstrationutils.js.map +1 -0
  316. package/build/types.d.ts +413 -0
  317. package/build/types.d.ts.map +1 -0
  318. package/build/types.js +2 -0
  319. package/build/types.js.map +1 -0
  320. package/build/util.d.ts +241 -0
  321. package/build/util.d.ts.map +1 -0
  322. package/build/util.js +1665 -0
  323. package/build/util.js.map +1 -0
  324. package/package.json +96 -0
  325. package/src/proto/browserstack/sdk/v1/sdk-messages-accessibility.proto +71 -0
  326. package/src/proto/browserstack/sdk/v1/sdk-messages-ai.proto +48 -0
  327. package/src/proto/browserstack/sdk/v1/sdk-messages-observability.proto +39 -0
  328. package/src/proto/browserstack/sdk/v1/sdk-messages-percy.proto +10 -0
  329. package/src/proto/browserstack/sdk/v1/sdk-messages-testhub.proto +10 -0
  330. package/src/proto/browserstack/sdk/v1/sdk-messages.proto +276 -0
  331. package/src/proto/browserstack/sdk/v1/sdk.proto +41 -0
@@ -0,0 +1,64 @@
1
+ import fs from 'node:fs';
2
+ import type { Options, Capabilities } from '@wdio/types';
3
+ import type { BrowserstackConfig, BrowserstackOptions, TestObservabilityOptions } from '../types.js';
4
+ export declare class CLIUtils {
5
+ static automationFrameworkDetail: {};
6
+ static testFrameworkDetail: {};
7
+ static CLISupportedFrameworks: string[];
8
+ static isDevelopmentEnv(): boolean;
9
+ static getCLIParamsForDevEnv(): Record<string, string>;
10
+ /**
11
+ * Build config object for binary session request
12
+ * @returns {string}
13
+ * @throws {Error}
14
+ */
15
+ static getBinConfig(config: Options.Testrunner, capabilities: Capabilities.RemoteCapabilities, options: BrowserstackConfig & BrowserstackOptions, buildTag?: string): string;
16
+ static getSdkVersion(): any;
17
+ static getSdkLanguage(): string;
18
+ static setupCliPath(config: Options.Testrunner): Promise<string | null>;
19
+ static checkAndUpdateCli(existingCliPath: string, cliDir: string, config: Options.Testrunner): Promise<string | null>;
20
+ static getCliDir(): string;
21
+ static getWritableDir(): string | null | undefined;
22
+ static getExistingCliPath(cliDir: string): string;
23
+ static requestToUpdateCLI: (queryParams: Record<string, string>, config: Options.Testrunner) => Promise<any>;
24
+ static runShellCommand(cmdCommand: string, workingDir?: string): Promise<string>;
25
+ static downloadLatestBinary: (binDownloadUrl: string, cliDir: string) => Promise<string | null>;
26
+ static downloadFileStream(downloadedFileStream: fs.WriteStream, binaryName: string | null, zipFilePath: string, cliDir: string, resolve: (path: string) => void, reject: (reason?: Error) => void): void;
27
+ static getTestFrameworkDetail(): any;
28
+ static getAutomationFrameworkDetail(): any;
29
+ static setFrameworkDetail(testFramework: string, automationFramework: string): void;
30
+ /**
31
+ * Get the current instance name using thread id and processId
32
+ * @returns {string}
33
+ */
34
+ static getCurrentInstanceName(): string;
35
+ /**
36
+ * Generate a unique client worker identifier combining thread ID and process ID.
37
+ * This identifier is used to track worker-specific events and performance metrics
38
+ * across distributed test execution. Format matches the Python SDK implementation
39
+ * for consistency across SDKs.
40
+ *
41
+ * Format: "threadId-processId"
42
+ *
43
+ * @param context - Optional execution context with threadId and processId
44
+ * @returns Worker ID string in format "threadId-processId"
45
+ * @example
46
+ * const workerId = CLIUtils.getClientWorkerId() // Returns "1-12345"
47
+ * const workerId = CLIUtils.getClientWorkerId({ threadId: 123, processId: 456 }) // Returns "123-456"
48
+ */
49
+ static getClientWorkerId(context?: {
50
+ threadId?: string | number;
51
+ processId?: string | number;
52
+ }): string;
53
+ /**
54
+ *
55
+ * @param {TestFrameworkState | AutomationFrameworkState} frameworkState
56
+ * @param {HookState} hookState
57
+ * @returns {string}
58
+ */
59
+ static getHookRegistryKey(frameworkState: State, hookState: State): string;
60
+ static matchHookRegex(hookState: string): boolean;
61
+ static getObservabilityBuildTags(observabilityOptions: TestObservabilityOptions, bstackBuildTag?: string): string[];
62
+ static checkCLISupportedFrameworks(framework: string | undefined): boolean;
63
+ }
64
+ //# sourceMappingURL=cliUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliUtils.d.ts","sourceRoot":"","sources":["../../src/cli/cliUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAiCxB,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAyB,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAI3H,qBAAa,QAAQ;IACjB,MAAM,CAAC,yBAAyB,KAAK;IACrC,MAAM,CAAC,mBAAmB,KAAK;IAC/B,MAAM,CAAC,sBAAsB,WAAY;IAEzC,MAAM,CAAC,gBAAgB;IAIvB,MAAM,CAAC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOtD;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,EAAE,QAAQ,CAAC,EAAE,MAAM;IAqFnK,MAAM,CAAC,aAAa;IAIpB,MAAM,CAAC,cAAc;WAIR,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC;WAuB9D,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC;IAgCzH,MAAM,CAAC,SAAS;IAiBhB,MAAM,CAAC,cAAc;IAsCrB,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAyCxC,MAAM,CAAC,kBAAkB,GAAU,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,OAAO,CAAC,UAAU,kBAejG;IAED,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB5E,MAAM,CAAC,oBAAoB,GAAU,gBAAgB,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CAmCjG;IAED,MAAM,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,GAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,IAAI;IA4D/L,MAAM,CAAC,sBAAsB;IAO7B,MAAM,CAAC,4BAA4B;IAOnC,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM;IAmB5E;;;OAGG;IACH,MAAM,CAAC,sBAAsB;IAI7B;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,MAAM;IAMvG;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;IAIjE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM;IAMvC,MAAM,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,wBAAwB,EAAE,cAAc,CAAC,EAAE,MAAM;IAaxG,MAAM,CAAC,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;CAOnE"}
@@ -0,0 +1,461 @@
1
+ import fs from 'node:fs';
2
+ import fsp from 'node:fs/promises';
3
+ import { platform, arch, homedir } from 'node:os';
4
+ import path from 'node:path';
5
+ import util, { promisify } from 'node:util';
6
+ import { exec } from 'node:child_process';
7
+ import yauzl from 'yauzl';
8
+ import got from 'got';
9
+ import { threadId } from 'node:worker_threads';
10
+ import { createRequire } from 'node:module';
11
+ const require = createRequire(import.meta.url);
12
+ const { version: bstackServiceVersion } = require('../../package.json');
13
+ import { isNullOrEmpty, nestedKeyValue, createDir, isWritable, setReadWriteAccess, isTrue, nodeRequest, getBrowserStackUser, getBrowserStackKey, isFalse, isTurboScale, shouldAddServiceVersion, } from '../util.js';
14
+ import PerformanceTester from '../instrumentation/performance/performance-tester.js';
15
+ import { EVENTS as PerformanceEvents } from '../instrumentation/performance/constants.js';
16
+ import { BStackLogger as logger } from './cliLogger.js';
17
+ import { UPDATED_CLI_ENDPOINT } from '../constants.js';
18
+ import { TestFrameworkConstants } from './frameworks/constants/testFrameworkConstants.js';
19
+ import APIUtils from './apiUtils.js';
20
+ export class CLIUtils {
21
+ static automationFrameworkDetail = {};
22
+ static testFrameworkDetail = {};
23
+ static CLISupportedFrameworks = ['mocha'];
24
+ static isDevelopmentEnv() {
25
+ return process.env.BROWSERSTACK_CLI_ENV === 'development';
26
+ }
27
+ static getCLIParamsForDevEnv() {
28
+ return {
29
+ id: process.env.BROWSERSTACK_CLI_ENV || '',
30
+ listen: `unix:/tmp/sdk-platform-${process.env.BROWSERSTACK_CLI_ENV}.sock`
31
+ };
32
+ }
33
+ /**
34
+ * Build config object for binary session request
35
+ * @returns {string}
36
+ * @throws {Error}
37
+ */
38
+ static getBinConfig(config, capabilities, options, buildTag) {
39
+ const modifiedOpts = { ...options };
40
+ if (modifiedOpts.opts) {
41
+ modifiedOpts.browserStackLocalOptions = modifiedOpts.opts;
42
+ delete modifiedOpts.opts;
43
+ }
44
+ delete modifiedOpts.testManagementOptions;
45
+ modifiedOpts.testContextOptions = {
46
+ skipSessionName: isFalse(modifiedOpts.setSessionName),
47
+ skipSessionStatus: isFalse(modifiedOpts.setSessionStatus),
48
+ sessionNameOmitTestTitle: modifiedOpts.sessionNameOmitTestTitle || false,
49
+ sessionNamePrependTopLevelSuiteTitle: modifiedOpts.sessionNamePrependTopLevelSuiteTitle || false,
50
+ sessionNameFormat: modifiedOpts.sessionNameFormat || ''
51
+ };
52
+ const commonBstackOptions = (() => {
53
+ const caps = config.capabilities;
54
+ if (caps &&
55
+ !Array.isArray(caps) &&
56
+ typeof caps === 'object' &&
57
+ 'bstack:options' in caps) {
58
+ // Cast after guard to satisfy TypeScript
59
+ return caps['bstack:options'] || {};
60
+ }
61
+ return {};
62
+ })();
63
+ const isNonBstackA11y = isTurboScale(options) || !shouldAddServiceVersion(config, options.testObservability);
64
+ const observabilityOptions = options.testObservabilityOptions || {};
65
+ const testManagementOptions = options.testManagementOptions || {};
66
+ const testPlanId = typeof testManagementOptions.testPlanId === 'string'
67
+ ? testManagementOptions.testPlanId.trim()
68
+ : '';
69
+ const binconfig = {
70
+ userName: observabilityOptions.user || config.user,
71
+ accessKey: observabilityOptions.key || config.key,
72
+ platforms: [],
73
+ isNonBstackA11yWDIO: isNonBstackA11y,
74
+ ...modifiedOpts,
75
+ ...commonBstackOptions,
76
+ };
77
+ binconfig.buildName = observabilityOptions.buildName || binconfig.buildName;
78
+ binconfig.projectName = observabilityOptions.projectName || binconfig.projectName;
79
+ binconfig.buildTag = this.getObservabilityBuildTags(observabilityOptions, buildTag) || [];
80
+ if (testPlanId.length > 0) {
81
+ binconfig.testManagementOptions = {
82
+ testPlanId
83
+ };
84
+ }
85
+ let caps = capabilities;
86
+ if (capabilities && !Array.isArray(capabilities)) {
87
+ caps = [capabilities];
88
+ }
89
+ if (Array.isArray(caps)) {
90
+ for (const cap of caps) {
91
+ const platform = {};
92
+ const capability = cap;
93
+ Object.keys(capability)
94
+ .filter((key) => (key !== 'bstack:options'))
95
+ .forEach((key) => {
96
+ if (binconfig[key] === undefined) {
97
+ platform[key] = capability[key];
98
+ }
99
+ });
100
+ if (capability['bstack:options']) {
101
+ Object.keys(capability['bstack:options'])
102
+ .forEach((key) => {
103
+ if (binconfig[key] === undefined) {
104
+ platform[key] = capability['bstack:options'][key];
105
+ }
106
+ });
107
+ }
108
+ binconfig.platforms.push(platform);
109
+ }
110
+ }
111
+ return JSON.stringify(binconfig);
112
+ }
113
+ static getSdkVersion() {
114
+ return bstackServiceVersion;
115
+ }
116
+ static getSdkLanguage() {
117
+ return 'ECMAScript';
118
+ }
119
+ static async setupCliPath(config) {
120
+ logger.debug('Configuring Cli path.');
121
+ const developmentBinaryPath = process.env.SDK_CLI_BIN_PATH || null;
122
+ if (!isNullOrEmpty(developmentBinaryPath)) {
123
+ logger.debug(`Development Cli Path: ${developmentBinaryPath}`);
124
+ return developmentBinaryPath;
125
+ }
126
+ try {
127
+ const cliDir = this.getCliDir();
128
+ if (isNullOrEmpty(cliDir)) {
129
+ throw new Error('No writable directory available for the CLI');
130
+ }
131
+ const existingCliPath = this.getExistingCliPath(cliDir);
132
+ const finalBinaryPath = await this.checkAndUpdateCli(existingCliPath, cliDir, config);
133
+ logger.debug(`Resolved binary path: ${finalBinaryPath}`);
134
+ return finalBinaryPath;
135
+ }
136
+ catch (err) {
137
+ logger.debug(`Error in setting up cli path directory, Exception: ${util.format(err)}`);
138
+ }
139
+ return null;
140
+ }
141
+ static async checkAndUpdateCli(existingCliPath, cliDir, config) {
142
+ PerformanceTester.start(PerformanceEvents.SDK_CLI_CHECK_UPDATE);
143
+ logger.info(`Current CLI Path Found: ${existingCliPath}`);
144
+ const queryParams = {
145
+ sdk_version: CLIUtils.getSdkVersion(),
146
+ os: platform(),
147
+ os_arch: arch(),
148
+ cli_version: '0',
149
+ sdk_language: this.getSdkLanguage(),
150
+ };
151
+ if (!isNullOrEmpty(existingCliPath)) {
152
+ const nullDevice = platform() === 'win32' ? 'NUL' : '/dev/null';
153
+ queryParams.cli_version = await this.runShellCommand(`${existingCliPath} version 2>${nullDevice}`);
154
+ }
155
+ const response = await this.requestToUpdateCLI(queryParams, config);
156
+ if (nestedKeyValue(response, ['updated_cli_version'])) {
157
+ logger.debug(`Need to update binary, current binary version: ${queryParams.cli_version}`);
158
+ const browserStackBinaryUrl = process.env.BROWSERSTACK_BINARY_URL || null;
159
+ if (!isNullOrEmpty(browserStackBinaryUrl)) {
160
+ logger.debug(`Using BROWSERSTACK_BINARY_URL: ${browserStackBinaryUrl}`);
161
+ response.url = browserStackBinaryUrl;
162
+ }
163
+ const finalBinaryPath = await this.downloadLatestBinary(nestedKeyValue(response, ['url']), cliDir);
164
+ PerformanceTester.end(PerformanceEvents.SDK_CLI_CHECK_UPDATE);
165
+ return finalBinaryPath;
166
+ }
167
+ PerformanceTester.end(PerformanceEvents.SDK_CLI_CHECK_UPDATE);
168
+ return existingCliPath;
169
+ }
170
+ static getCliDir() {
171
+ const writableDir = this.getWritableDir();
172
+ try {
173
+ if (isNullOrEmpty(writableDir)) {
174
+ throw new Error('No writable directory available for the CLI');
175
+ }
176
+ const cliDirPath = path.join(writableDir, 'cli');
177
+ if (!fs.existsSync(cliDirPath)) {
178
+ createDir(cliDirPath);
179
+ }
180
+ return cliDirPath;
181
+ }
182
+ catch (err) {
183
+ logger.error(`Error in getting writable directory, writableDir=${util.format(err)}`);
184
+ return '';
185
+ }
186
+ }
187
+ static getWritableDir() {
188
+ const writableDirOptions = [
189
+ process.env.BROWSERSTACK_FILES_DIR,
190
+ path.join(homedir(), '.browserstack'),
191
+ path.join('tmp', '.browserstack'),
192
+ ];
193
+ for (const path of writableDirOptions) {
194
+ if (isNullOrEmpty(path)) {
195
+ continue;
196
+ }
197
+ try {
198
+ if (fs.existsSync(path)) {
199
+ logger.debug(`File ${path} already exist`);
200
+ if (!isWritable(path)) {
201
+ logger.debug(`Giving write permission to ${path}`);
202
+ const success = setReadWriteAccess(path);
203
+ if (!isTrue(success)) {
204
+ logger.warn(`Unable to provide write permission to ${path}`);
205
+ }
206
+ }
207
+ }
208
+ else {
209
+ logger.debug(`File does not exist: ${path}`);
210
+ createDir(path);
211
+ logger.debug(`Giving write permission to ${path}`);
212
+ const success = setReadWriteAccess(path);
213
+ if (!isTrue(success)) {
214
+ logger.warn(`Unable to provide write permission to ${path}`);
215
+ }
216
+ }
217
+ return path;
218
+ }
219
+ catch (err) {
220
+ logger.error(`Unable to get writable directory, exception ${util.format(err)}`);
221
+ }
222
+ }
223
+ return null;
224
+ }
225
+ static getExistingCliPath(cliDir) {
226
+ try {
227
+ // Check if the path exists and is a directory
228
+ if (!fs.existsSync(cliDir) || !fs.statSync(cliDir).isDirectory()) {
229
+ return '';
230
+ }
231
+ // List all files in the directory that start with "binary-"
232
+ const allBinaries = fs
233
+ .readdirSync(cliDir)
234
+ .map((file) => path.join(cliDir, file))
235
+ .filter((filePath) => fs.statSync(filePath).isFile() && path.basename(filePath).startsWith('binary-'));
236
+ if (allBinaries.length > 0) {
237
+ // Get the latest binary by comparing the last modified time
238
+ const latestBinary = allBinaries
239
+ .map((filePath) => ({
240
+ filePath,
241
+ mtime: fs.statSync(filePath).mtime,
242
+ }))
243
+ .reduce((latest, current) => {
244
+ if (!latest || !latest.mtime) {
245
+ return current;
246
+ }
247
+ if (current.mtime > latest.mtime) {
248
+ return current;
249
+ }
250
+ return latest;
251
+ }, null);
252
+ return latestBinary ? latestBinary.filePath : '';
253
+ }
254
+ return ''; // No binary present
255
+ }
256
+ catch (err) {
257
+ logger.error(`Error while reading CLI path: ${util.format(err)}`);
258
+ return '';
259
+ }
260
+ }
261
+ static requestToUpdateCLI = async (queryParams, config) => {
262
+ const params = new URLSearchParams(queryParams);
263
+ const requestInit = {
264
+ headers: {
265
+ Authorization: `Basic ${Buffer.from(`${getBrowserStackUser(config)}:${getBrowserStackKey(config)}`).toString('base64')}`,
266
+ },
267
+ };
268
+ const response = await nodeRequest('GET', `${UPDATED_CLI_ENDPOINT}?${params.toString()}`, requestInit, APIUtils.BROWSERSTACK_AUTOMATE_API_URL);
269
+ logger.debug(`response ${JSON.stringify(response)}`);
270
+ return response;
271
+ };
272
+ static runShellCommand(cmdCommand, workingDir = '') {
273
+ return new Promise((resolve) => {
274
+ const process = exec(cmdCommand, { cwd: workingDir, timeout: 5000 }, (error, stdout, stderr) => {
275
+ if (error) {
276
+ resolve(stderr.trim() || 'SHELL_EXECUTE_ERROR');
277
+ }
278
+ else {
279
+ resolve(stdout.trim());
280
+ }
281
+ });
282
+ // Ensure the process is killed if it exceeds the timeout
283
+ process.on('error', () => {
284
+ resolve('SHELL_EXECUTE_ERROR');
285
+ });
286
+ });
287
+ }
288
+ static downloadLatestBinary = async (binDownloadUrl, cliDir) => {
289
+ PerformanceTester.start(PerformanceEvents.SDK_CLI_DOWNLOAD);
290
+ logger.debug(`Downloading SDK binary from: ${binDownloadUrl}`);
291
+ try {
292
+ const zipFilePath = path.join(cliDir, 'downloaded_file.zip');
293
+ const downloadedFileStream = fs.createWriteStream(zipFilePath);
294
+ return new Promise((resolve, reject) => {
295
+ const binaryName = null;
296
+ const stream = got.stream(binDownloadUrl, {
297
+ followRedirect: true
298
+ });
299
+ stream.pipe(downloadedFileStream);
300
+ downloadedFileStream.on('error', function (err) {
301
+ logger.error('Got Error while downloading percy binary file' + err);
302
+ PerformanceTester.end(PerformanceEvents.SDK_CLI_DOWNLOAD, false, util.format(err));
303
+ reject(err);
304
+ });
305
+ stream.on('error', (err) => {
306
+ logger.error(`Got Error in cli binary downloading request ${util.format(err)}`);
307
+ PerformanceTester.end(PerformanceEvents.SDK_CLI_DOWNLOAD, false, util.format(err));
308
+ reject(err);
309
+ });
310
+ CLIUtils.downloadFileStream(downloadedFileStream, binaryName, zipFilePath, cliDir, resolve, reject);
311
+ PerformanceTester.end(PerformanceEvents.SDK_CLI_DOWNLOAD);
312
+ });
313
+ }
314
+ catch (err) {
315
+ PerformanceTester.end(PerformanceEvents.SDK_CLI_DOWNLOAD, false, util.format(err));
316
+ logger.debug(`Failed to download binary, Exception: ${util.format(err)}`);
317
+ return null;
318
+ }
319
+ };
320
+ static downloadFileStream(downloadedFileStream, binaryName, zipFilePath, cliDir, resolve, reject) {
321
+ downloadedFileStream.on('close', async function () {
322
+ const yauzlOpenPromise = promisify(yauzl.open);
323
+ try {
324
+ const zipfile = await yauzlOpenPromise(zipFilePath, { lazyEntries: true });
325
+ zipfile.readEntry();
326
+ zipfile.on('entry', async (entry) => {
327
+ if (!binaryName) {
328
+ binaryName = entry.fileName;
329
+ }
330
+ if (/\/$/.test(entry.fileName)) {
331
+ // Directory file names end with '/'.
332
+ zipfile.readEntry();
333
+ }
334
+ else {
335
+ // file entry
336
+ const writeStream = fs.createWriteStream(path.join(cliDir, entry.fileName));
337
+ const openReadStreamPromise = promisify(zipfile.openReadStream).bind(zipfile);
338
+ try {
339
+ const readStream = await openReadStreamPromise(entry);
340
+ readStream.on('end', function () {
341
+ writeStream.close();
342
+ zipfile.readEntry();
343
+ });
344
+ readStream.pipe(writeStream);
345
+ }
346
+ catch (zipErr) {
347
+ reject(zipErr);
348
+ }
349
+ if (entry.fileName === binaryName) {
350
+ zipfile.close();
351
+ }
352
+ }
353
+ });
354
+ zipfile.on('error', (zipErr) => {
355
+ reject(zipErr);
356
+ });
357
+ zipfile.once('end', () => {
358
+ fsp.unlink(zipFilePath)
359
+ .catch(() => {
360
+ logger.warn(`Failed to delete zip file: ${zipFilePath}`);
361
+ });
362
+ fsp.chmod(`${cliDir}/${binaryName}`, '0755')
363
+ .then(() => {
364
+ resolve(`${cliDir}/${binaryName}`);
365
+ }).catch((err) => {
366
+ reject(err);
367
+ });
368
+ zipfile.close();
369
+ });
370
+ }
371
+ catch (err) {
372
+ reject(err);
373
+ }
374
+ });
375
+ }
376
+ static getTestFrameworkDetail() {
377
+ if (process.env.BROWSERSTACK_TEST_FRAMEWORK_DETAIL) {
378
+ return JSON.parse(process.env.BROWSERSTACK_TEST_FRAMEWORK_DETAIL);
379
+ }
380
+ return this.testFrameworkDetail;
381
+ }
382
+ static getAutomationFrameworkDetail() {
383
+ if (process.env.BROWSERSTACK_AUTOMATION_FRAMEWORK_DETAIL) {
384
+ return JSON.parse(process.env.BROWSERSTACK_AUTOMATION_FRAMEWORK_DETAIL);
385
+ }
386
+ return this.automationFrameworkDetail;
387
+ }
388
+ static setFrameworkDetail(testFramework, automationFramework) {
389
+ if (!testFramework || !automationFramework) {
390
+ logger.debug(`Test or Automation framework not provided testFramework=${testFramework}, automationFramework=${automationFramework}`);
391
+ }
392
+ this.testFrameworkDetail = {
393
+ name: testFramework,
394
+ version: { [testFramework]: CLIUtils.getSdkVersion() },
395
+ };
396
+ this.automationFrameworkDetail = {
397
+ name: automationFramework,
398
+ version: { [automationFramework]: CLIUtils.getSdkVersion() },
399
+ };
400
+ process.env.BROWSERSTACK_AUTOMATION_FRAMEWORK_DETAIL = JSON.stringify(this.automationFrameworkDetail);
401
+ process.env.BROWSERSTACK_TEST_FRAMEWORK_DETAIL = JSON.stringify(this.testFrameworkDetail);
402
+ }
403
+ /**
404
+ * Get the current instance name using thread id and processId
405
+ * @returns {string}
406
+ */
407
+ static getCurrentInstanceName() {
408
+ return `${process.pid}:${threadId}`;
409
+ }
410
+ /**
411
+ * Generate a unique client worker identifier combining thread ID and process ID.
412
+ * This identifier is used to track worker-specific events and performance metrics
413
+ * across distributed test execution. Format matches the Python SDK implementation
414
+ * for consistency across SDKs.
415
+ *
416
+ * Format: "threadId-processId"
417
+ *
418
+ * @param context - Optional execution context with threadId and processId
419
+ * @returns Worker ID string in format "threadId-processId"
420
+ * @example
421
+ * const workerId = CLIUtils.getClientWorkerId() // Returns "1-12345"
422
+ * const workerId = CLIUtils.getClientWorkerId({ threadId: 123, processId: 456 }) // Returns "123-456"
423
+ */
424
+ static getClientWorkerId(context) {
425
+ const workerThreadId = context?.threadId?.toString() || threadId.toString();
426
+ const workerProcessId = context?.processId?.toString() || process.pid.toString();
427
+ return `${workerThreadId}-${workerProcessId}`;
428
+ }
429
+ /**
430
+ *
431
+ * @param {TestFrameworkState | AutomationFrameworkState} frameworkState
432
+ * @param {HookState} hookState
433
+ * @returns {string}
434
+ */
435
+ static getHookRegistryKey(frameworkState, hookState) {
436
+ return `${frameworkState}:${hookState}`;
437
+ }
438
+ static matchHookRegex(hookState) {
439
+ const pattern = new RegExp(TestFrameworkConstants.HOOK_REGEX);
440
+ return pattern.test(hookState);
441
+ }
442
+ static getObservabilityBuildTags(observabilityOptions, bstackBuildTag) {
443
+ if (process.env.TEST_OBSERVABILITY_BUILD_TAG) {
444
+ return process.env.TEST_OBSERVABILITY_BUILD_TAG.split(',');
445
+ }
446
+ if (observabilityOptions.buildTag) {
447
+ return observabilityOptions.buildTag;
448
+ }
449
+ if (bstackBuildTag) {
450
+ return [bstackBuildTag];
451
+ }
452
+ return [];
453
+ }
454
+ static checkCLISupportedFrameworks(framework) {
455
+ if (framework === undefined) {
456
+ return false;
457
+ }
458
+ return this.CLISupportedFrameworks.includes(framework);
459
+ }
460
+ }
461
+ //# sourceMappingURL=cliUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliUtils.js","sourceRoot":"","sources":["../../src/cli/cliUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * EventDispatcher - Singleton class for event handling
3
+ */
4
+ declare class EventDispatcher {
5
+ #private;
6
+ observers: Record<string, Function[]>;
7
+ constructor();
8
+ /**
9
+ * Get the EventDispatcher singleton instance
10
+ * @returns {EventDispatcher} The singleton instance
11
+ */
12
+ static getInstance(): EventDispatcher;
13
+ /**
14
+ * Add event observer
15
+ * @param {string} event - Event name
16
+ * @param {Function} callback - Callback function
17
+ */
18
+ registerObserver(hookRegistryKey: string, callback: Function): void;
19
+ /**
20
+ * Notify registered observers on an event
21
+ * @param {string} event - Event name
22
+ * @param {*} data - Event data
23
+ */
24
+ notifyObserver(event: string, args: unknown): Promise<void>;
25
+ }
26
+ export declare const eventDispatcher: EventDispatcher;
27
+ export {};
28
+ //# sourceMappingURL=eventDispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventDispatcher.d.ts","sourceRoot":"","sources":["../../src/cli/eventDispatcher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAM,eAAe;;IAGjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;;IAMrC;;;KAGC;IACD,MAAM,CAAC,WAAW;IAOlB;;;;KAIC;IACD,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAQ5D;;;;KAIC;IACK,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;CAQpD;AAGD,eAAO,MAAM,eAAe,iBAAgC,CAAA"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * EventDispatcher - Singleton class for event handling
3
+ */
4
+ class EventDispatcher {
5
+ static #instance = null;
6
+ observers;
7
+ constructor() {
8
+ this.observers = {};
9
+ }
10
+ /**
11
+ * Get the EventDispatcher singleton instance
12
+ * @returns {EventDispatcher} The singleton instance
13
+ */
14
+ static getInstance() {
15
+ if (!EventDispatcher.#instance) {
16
+ EventDispatcher.#instance = new EventDispatcher();
17
+ }
18
+ return EventDispatcher.#instance;
19
+ }
20
+ /**
21
+ * Add event observer
22
+ * @param {string} event - Event name
23
+ * @param {Function} callback - Callback function
24
+ */
25
+ registerObserver(hookRegistryKey, callback) {
26
+ if (!this.observers[hookRegistryKey]) {
27
+ this.observers[hookRegistryKey] = [];
28
+ }
29
+ this.observers[hookRegistryKey].push(callback);
30
+ }
31
+ /**
32
+ * Notify registered observers on an event
33
+ * @param {string} event - Event name
34
+ * @param {*} data - Event data
35
+ */
36
+ async notifyObserver(event, args) {
37
+ if (this.observers[event]) {
38
+ for (const callback of this.observers[event]) {
39
+ await callback(args);
40
+ }
41
+ return;
42
+ }
43
+ }
44
+ }
45
+ // Create the singleton instance
46
+ export const eventDispatcher = EventDispatcher.getInstance();
47
+ // Object.freeze to prevent modification of the instance
48
+ Object.freeze(eventDispatcher);
49
+ //# sourceMappingURL=eventDispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventDispatcher.js","sourceRoot":"","sources":["../../src/cli/eventDispatcher.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,eAAe;IAEjB,MAAM,CAAC,SAAS,GAAyB,IAAI,CAAA;IAC7C,SAAS,CAA4B;IAErC;QACI,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;IACvB,CAAC;IAED;;;KAGC;IACD,MAAM,CAAC,WAAW;QACd,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAC7B,eAAe,CAAC,SAAS,GAAG,IAAI,eAAe,EAAE,CAAA;QACrD,CAAC;QACD,OAAO,eAAe,CAAC,SAAS,CAAA;IACpC,CAAC;IAED;;;;KAIC;IACD,gBAAgB,CAAC,eAAuB,EAAE,QAAkB;QACxD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,CAAA;QACxC,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAClD,CAAC;IAED;;;;KAIC;IACD,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,IAAa;QAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;YACD,OAAM;QACV,CAAC;IACL,CAAC;;AAGL,gCAAgC;AAChC,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,EAAE,CAAA;AAE5D,wDAAwD;AACxD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA"}