@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,532 @@
1
+ import path from 'node:path';
2
+ import util, { promisify } from 'node:util';
3
+ import { CLIUtils } from './cliUtils.js';
4
+ import { SDKClient, grpcCredentials, grpcChannel, StartBinSessionRequestConstructor, StopBinSessionRequestConstructor, ConnectBinSessionRequestConstructor, TestFrameworkEventRequestConstructor, TestSessionEventRequestConstructor, ExecutionContextConstructor, LogCreatedEventRequestConstructor,
5
+ // eslint-disable-next-line camelcase
6
+ LogCreatedEventRequest_LogEntryConstructor, AutomationSessionConstructor, DriverInitRequestConstructor, FetchDriverExecuteParamsEventRequestConstructor } from '../grpc/index.js';
7
+ import PerformanceTester from '../instrumentation/performance/performance-tester.js';
8
+ import * as PERFORMANCE_SDK_EVENTS from '../instrumentation/performance/constants.js';
9
+ import { BStackLogger } from './cliLogger.js';
10
+ // Increased from default 4 MB to accommodate large extension payloads
11
+ const GRPC_MESSAGE_LIMIT = 20 * 1024 * 1024; // 20 MB in bytes
12
+ /**
13
+ * GrpcClient - Singleton class for managing gRPC client connections
14
+ *
15
+ * This class uses the singleton pattern to ensure only one gRPC client instance exists
16
+ * throughout the application lifecycle.
17
+ */
18
+ export class GrpcClient {
19
+ static #instance = null;
20
+ binSessionId;
21
+ listenAddress;
22
+ channel = null;
23
+ client = null;
24
+ logger = BStackLogger;
25
+ constructor() { }
26
+ /**
27
+ * Get the singleton instance of GrpcClient
28
+ * @returns {GrpcClient} The singleton instance
29
+ */
30
+ static getInstance() {
31
+ if (!GrpcClient.#instance) {
32
+ GrpcClient.#instance = new GrpcClient();
33
+ }
34
+ return GrpcClient.#instance;
35
+ }
36
+ /**
37
+ * Helper method to get client worker ID from execution context or current context.
38
+ * This provides a consistent way to extract worker identification across all gRPC calls.
39
+ *
40
+ * @param executionContext - Optional execution context with threadId and processId
41
+ * @returns Worker ID string in format "threadId-processId"
42
+ */
43
+ getClientWorkerIdFromContext(executionContext) {
44
+ return CLIUtils.getClientWorkerId(executionContext);
45
+ }
46
+ /**
47
+ * Initialize the gRPC client connection
48
+ * @param {string} host The gRPC server host
49
+ * @param {number} port The gRPC server port
50
+ */
51
+ init(params) {
52
+ const { id, listen } = params;
53
+ if (!id || !listen) {
54
+ throw new Error(`Unable to find listen addr or bin session id binSessionId: ${id} listenAddr: ${listen}`);
55
+ }
56
+ this.binSessionId = id;
57
+ this.listenAddress = listen;
58
+ process.env.BROWSERSTACK_CLI_BIN_SESSION_ID = this.binSessionId;
59
+ process.env.BROWSERSTACK_CLI_BIN_LISTEN_ADDR = this.listenAddress;
60
+ this.connect();
61
+ this.logger.info(`Initialized gRPC client with bin session id: ${this.binSessionId} and listen address: ${this.listenAddress}`);
62
+ }
63
+ /**
64
+ * Connect to the gRPC server
65
+ * @returns {void}
66
+ */
67
+ connect() {
68
+ let listenAddress = this.listenAddress;
69
+ if (!listenAddress) {
70
+ listenAddress = process.env.BROWSERSTACK_CLI_BIN_LISTEN_ADDR;
71
+ }
72
+ if (!this.binSessionId) {
73
+ this.binSessionId = this.binSessionId || process.env.BROWSERSTACK_CLI_BIN_SESSION_ID;
74
+ }
75
+ if (!listenAddress) {
76
+ throw new Error('Unable to determine gRPC server listen address');
77
+ }
78
+ const channelOptions = {
79
+ 'grpc.keepalive_time_ms': 10000,
80
+ 'grpc.max_send_message_length': GRPC_MESSAGE_LIMIT,
81
+ 'grpc.max_receive_message_length': GRPC_MESSAGE_LIMIT,
82
+ };
83
+ // Create a channel
84
+ this.channel = new grpcChannel(listenAddress, grpcCredentials.createInsecure(), channelOptions);
85
+ // Create a client using the channel
86
+ this.client = new SDKClient(listenAddress, grpcCredentials.createInsecure(), channelOptions);
87
+ this.logger.info(`Connected to gRPC server at ${listenAddress}`);
88
+ }
89
+ async startBinSession(wdioConfig) {
90
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_START_BIN_SESSION);
91
+ this.logger.debug('startBinSession: Calling startBinSession');
92
+ try {
93
+ if (!this.client) {
94
+ this.logger.info('No gRPC client not initialized.');
95
+ }
96
+ const packageVersion = CLIUtils.getSdkVersion();
97
+ const automationFrameworkDetail = CLIUtils.getAutomationFrameworkDetail();
98
+ const testFrameworkDetail = CLIUtils.getTestFrameworkDetail();
99
+ const frameworkVersions = {
100
+ ...automationFrameworkDetail.version,
101
+ ...testFrameworkDetail.version
102
+ };
103
+ // Create StartBinSessionRequest
104
+ const clientWorkerId = CLIUtils.getClientWorkerId();
105
+ const request = StartBinSessionRequestConstructor.create({
106
+ binSessionId: this.binSessionId,
107
+ sdkLanguage: CLIUtils.getSdkLanguage(),
108
+ sdkVersion: packageVersion,
109
+ pathProject: process.cwd(),
110
+ pathConfig: path.resolve(process.cwd(), 'browserstack.yml'),
111
+ cliArgs: process.argv.slice(2),
112
+ frameworks: [automationFrameworkDetail.name, testFrameworkDetail.name],
113
+ frameworkVersions,
114
+ language: CLIUtils.getSdkLanguage(),
115
+ testFramework: testFrameworkDetail.name,
116
+ wdioConfig: wdioConfig,
117
+ });
118
+ request.clientWorkerId = clientWorkerId;
119
+ request.platformIndex = '0'; // Default platform index for main process
120
+ this.logger.debug(`StartBinSession with clientWorkerId: ${clientWorkerId}, platformIndex: 0`);
121
+ const startBinSessionPromise = promisify(this.client.startBinSession).bind(this.client);
122
+ try {
123
+ const response = await startBinSessionPromise(request);
124
+ this.logger.info('StartBinSession successful');
125
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_START_BIN_SESSION);
126
+ return response;
127
+ }
128
+ catch (error) {
129
+ this.logger.error(`StartBinSession error: ${util.format(error)}`);
130
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_START_BIN_SESSION, false, util.format(error));
131
+ throw error;
132
+ }
133
+ }
134
+ catch (error) {
135
+ this.logger.error(`Error in startBinSession: ${util.format(error)}`);
136
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_START_BIN_SESSION, false, util.format(error));
137
+ throw error;
138
+ }
139
+ }
140
+ /**
141
+ * Connect to the bin session
142
+ * @returns {Promise<Object>} The response from the gRPC call
143
+ */
144
+ async connectBinSession() {
145
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CONNECT_BIN_SESSION);
146
+ this.logger.debug('Connecting bin session');
147
+ try {
148
+ if (!this.client) {
149
+ this.logger.info('No gRPC client not initialized.');
150
+ }
151
+ const clientWorkerId = CLIUtils.getClientWorkerId();
152
+ const request = ConnectBinSessionRequestConstructor.create({
153
+ binSessionId: this.binSessionId,
154
+ });
155
+ request.clientWorkerId = clientWorkerId;
156
+ this.logger.debug(`ConnectBinSession with clientWorkerId: ${clientWorkerId}`);
157
+ const connectBinSessionPromise = promisify(this.client.connectBinSession).bind(this.client);
158
+ try {
159
+ const response = await connectBinSessionPromise(request);
160
+ this.logger.info('ConnectBinSession successful');
161
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CONNECT_BIN_SESSION);
162
+ return response;
163
+ }
164
+ catch (error) {
165
+ const errorMessage = util.format(error);
166
+ this.logger.error(`ConnectBinSession error: ${errorMessage}`);
167
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CONNECT_BIN_SESSION, false, errorMessage);
168
+ throw error;
169
+ }
170
+ }
171
+ catch (error) {
172
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CONNECT_BIN_SESSION, false, util.format(error));
173
+ this.logger.error(`Error in connectBinSession: ${util.format(error)}`);
174
+ throw error;
175
+ }
176
+ }
177
+ /**
178
+ * Stop the bin session
179
+ * @returns {Promise<void>}
180
+ * @private
181
+ */
182
+ async stopBinSession() {
183
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLI_ON_STOP);
184
+ this.logger.debug('Stopping bin session');
185
+ try {
186
+ if (!this.binSessionId) {
187
+ throw new Error('Missing binSessionId');
188
+ }
189
+ if (!this.client) {
190
+ this.logger.info('No gRPC client not initialized.');
191
+ }
192
+ const clientWorkerId = CLIUtils.getClientWorkerId();
193
+ const request = StopBinSessionRequestConstructor.create({
194
+ binSessionId: this.binSessionId
195
+ });
196
+ request.clientWorkerId = clientWorkerId;
197
+ this.logger.debug(`StopBinSession with clientWorkerId: ${clientWorkerId}`);
198
+ // Get response from gRPC call
199
+ const stopBinSessionPromise = promisify(this.client.stopBinSession).bind(this.client);
200
+ try {
201
+ const response = await stopBinSessionPromise(request);
202
+ this.logger.info('StopBinSession successful');
203
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLI_ON_STOP);
204
+ return response;
205
+ }
206
+ catch (error) {
207
+ const errorMessage = util.format(error);
208
+ this.logger.error(`StopBinSession error: ${errorMessage}`);
209
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLI_ON_STOP, false, errorMessage);
210
+ throw error;
211
+ }
212
+ }
213
+ catch (error) {
214
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.EVENTS.SDK_CLI_ON_STOP, false, util.format(error));
215
+ this.logger.error(`Error in stopBinSession: ${util.format(error)}`);
216
+ }
217
+ }
218
+ async testSessionEvent(data) {
219
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.TEST_SESSION);
220
+ const workerId = this.getClientWorkerIdFromContext(data.executionContext);
221
+ this.logger.info(`Sending TestSessionEvent for worker: ${workerId}`);
222
+ try {
223
+ if (!this.client) {
224
+ this.logger.info('No gRPC client not initialized.');
225
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.TEST_SESSION, false, 'gRPC client not initialized');
226
+ return;
227
+ }
228
+ const { platformIndex, testFrameworkName, testFrameworkVersion, testFrameworkState, testHookState, testUuid, automationSessions, capabilities, executionContext } = data;
229
+ const sessions = automationSessions.map((automationSession) => {
230
+ return AutomationSessionConstructor.create({
231
+ provider: automationSession.provider,
232
+ frameworkName: automationSession.frameworkName,
233
+ frameworkVersion: automationSession.frameworkVersion,
234
+ frameworkSessionId: automationSession.frameworkSessionId,
235
+ ref: automationSession.ref,
236
+ hubUrl: automationSession.hubUrl
237
+ });
238
+ });
239
+ const executionContextBuilder = ExecutionContextConstructor.create({
240
+ processId: executionContext?.processId,
241
+ threadId: executionContext?.threadId,
242
+ hash: executionContext?.hash
243
+ });
244
+ const request = TestSessionEventRequestConstructor.create({
245
+ binSessionId: this.binSessionId,
246
+ platformIndex: platformIndex,
247
+ testFrameworkName: testFrameworkName,
248
+ testFrameworkVersion: testFrameworkVersion,
249
+ testFrameworkState: testFrameworkState,
250
+ testHookState: testHookState,
251
+ testUuid: testUuid,
252
+ capabilities: capabilities,
253
+ automationSessions: sessions,
254
+ executionContext: executionContextBuilder,
255
+ });
256
+ request.clientWorkerId = workerId;
257
+ const testSessionEventPromise = promisify(this.client.testSessionEvent).bind(this.client);
258
+ try {
259
+ const response = await testSessionEventPromise(request);
260
+ this.logger.info(`testSessionEvent successful for worker: ${workerId}`);
261
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.TEST_SESSION);
262
+ return response;
263
+ }
264
+ catch (error) {
265
+ const errorMessage = util.format(error);
266
+ this.logger.error(`testSessionEvent error: ${errorMessage}`);
267
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.TEST_SESSION, false, errorMessage);
268
+ throw error;
269
+ }
270
+ }
271
+ catch (error) {
272
+ this.logger.error(`Error in TestSessionEvent: ${util.format(error)}`);
273
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.TEST_SESSION, false, util.format(error));
274
+ throw error;
275
+ }
276
+ }
277
+ /**
278
+ *
279
+ * Send TestFrameworkEvent
280
+ */
281
+ async testFrameworkEvent(data) {
282
+ // Generate unique event ID per call to avoid timing conflicts
283
+ const uniqueEventId = `${PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.TEST_FRAMEWORK}-${Date.now()}-${Math.random().toString(36).substring(7)}`;
284
+ PerformanceTester.start(uniqueEventId);
285
+ const workerId = this.getClientWorkerIdFromContext(data.executionContext);
286
+ this.logger.info(`Sending TestFrameworkEvent for worker: ${workerId}`);
287
+ try {
288
+ if (!this.client) {
289
+ this.logger.info('No gRPC client not initialized.');
290
+ PerformanceTester.end(uniqueEventId, false, 'gRPC client not initialized');
291
+ return;
292
+ }
293
+ const { platformIndex, testFrameworkName, testFrameworkVersion, testFrameworkState, testHookState, startedAt, endedAt, uuid, eventJson, executionContext } = data;
294
+ const executionContextBuilder = ExecutionContextConstructor.create({
295
+ processId: executionContext?.processId,
296
+ threadId: executionContext?.threadId,
297
+ hash: executionContext?.hash
298
+ });
299
+ const request = TestFrameworkEventRequestConstructor.create({
300
+ binSessionId: this.binSessionId,
301
+ platformIndex: platformIndex,
302
+ testFrameworkName: testFrameworkName,
303
+ testFrameworkVersion: testFrameworkVersion,
304
+ testFrameworkState: testFrameworkState,
305
+ testHookState: testHookState,
306
+ startedAt: startedAt,
307
+ endedAt: endedAt,
308
+ uuid: uuid,
309
+ eventJson: eventJson,
310
+ executionContext: executionContextBuilder,
311
+ });
312
+ request.clientWorkerId = workerId;
313
+ const testFrameworkEventPromise = promisify(this.client.testFrameworkEvent).bind(this.client);
314
+ try {
315
+ const response = await testFrameworkEventPromise(request);
316
+ this.logger.info(`testFrameworkEvent successful for worker: ${workerId}`);
317
+ // End with additional context for debugging
318
+ PerformanceTester.end(uniqueEventId, true, undefined, {
319
+ testState: testFrameworkState,
320
+ hookState: testHookState,
321
+ uuid: uuid,
322
+ worker: workerId
323
+ });
324
+ return response;
325
+ }
326
+ catch (error) {
327
+ const errorMessage = util.format(error);
328
+ this.logger.error(`testFrameworkEvent error: ${errorMessage}`);
329
+ PerformanceTester.end(uniqueEventId, false, errorMessage);
330
+ throw error;
331
+ }
332
+ }
333
+ catch (error) {
334
+ this.logger.error(`Error in TestFrameworkEvent: ${util.format(error)}`);
335
+ PerformanceTester.end(uniqueEventId, false, util.format(error));
336
+ throw error;
337
+ }
338
+ }
339
+ /**
340
+ *
341
+ * Send driverInitEvent
342
+ */
343
+ async driverInitEvent(data) {
344
+ this.logger.info('Sending driverInitEvent');
345
+ try {
346
+ if (!this.client) {
347
+ this.logger.info('No gRPC client not initialized.');
348
+ }
349
+ const { platformIndex, ref, userInputParams } = data;
350
+ const clientWorkerId = CLIUtils.getClientWorkerId();
351
+ const request = DriverInitRequestConstructor.create({
352
+ binSessionId: this.binSessionId,
353
+ platformIndex: platformIndex,
354
+ ref: ref,
355
+ userInputParams: userInputParams,
356
+ });
357
+ // Add clientWorkerId to request (proto field 500)
358
+ request.clientWorkerId = clientWorkerId;
359
+ this.logger.debug(`DriverInitEvent with clientWorkerId: ${clientWorkerId}`);
360
+ const driverInitEventPromise = promisify(this.client.driverInit).bind(this.client);
361
+ try {
362
+ const response = await driverInitEventPromise(request);
363
+ this.logger.info('driverInitEvent successful');
364
+ return response;
365
+ }
366
+ catch (error) {
367
+ const errorMessage = util.format(error);
368
+ this.logger.error(`driverInitEvent error: ${errorMessage}`);
369
+ throw error;
370
+ }
371
+ }
372
+ catch (error) {
373
+ this.logger.error(`Error in driverInitEvent: ${util.format(error)}`);
374
+ throw error;
375
+ }
376
+ }
377
+ async logCreatedEvent(data) {
378
+ PerformanceTester.start(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.LOG_CREATED);
379
+ this.logger.info('Sending LogCreatedEvent');
380
+ try {
381
+ if (!this.client) {
382
+ this.logger.info('No gRPC client not initialized.');
383
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.LOG_CREATED, false, 'gRPC client not initialized');
384
+ return;
385
+ }
386
+ const { platformIndex, logs, executionContext } = data;
387
+ const clientWorkerId = this.getClientWorkerIdFromContext(executionContext);
388
+ const executionContextBuilder = ExecutionContextConstructor.create({
389
+ processId: executionContext?.processId,
390
+ threadId: executionContext?.threadId,
391
+ hash: executionContext?.hash
392
+ });
393
+ // eslint-disable-next-line camelcase
394
+ const logEntries = [];
395
+ for (const log of logs) {
396
+ // eslint-disable-next-line camelcase
397
+ const logEntry = LogCreatedEventRequest_LogEntryConstructor.create({
398
+ testFrameworkName: log.testFrameworkName,
399
+ testFrameworkVersion: log.testFrameworkVersion,
400
+ testFrameworkState: log.testFrameworkState,
401
+ uuid: log.uuid,
402
+ kind: log.kind,
403
+ message: log.message,
404
+ timestamp: log.timestamp,
405
+ level: log.level,
406
+ });
407
+ logEntries.push(logEntry);
408
+ }
409
+ const request = LogCreatedEventRequestConstructor.create({
410
+ binSessionId: this.binSessionId,
411
+ platformIndex: platformIndex,
412
+ logs: logEntries,
413
+ executionContext: executionContextBuilder,
414
+ });
415
+ request.clientWorkerId = clientWorkerId;
416
+ this.logger.debug(`LogCreatedEvent with clientWorkerId: ${clientWorkerId}`);
417
+ const logCreatedEventPromise = promisify(this.client.logCreatedEvent).bind(this.client);
418
+ try {
419
+ this.logger.debug('logCreatedEvent payload:' + JSON.stringify(request));
420
+ const response = await logCreatedEventPromise(request);
421
+ this.logger.info('logCreatedEvent successful');
422
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.LOG_CREATED);
423
+ return response;
424
+ }
425
+ catch (error) {
426
+ const errorMessage = util.format(error);
427
+ this.logger.error(`logCreatedEvent error: ${errorMessage}`);
428
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.LOG_CREATED, false, errorMessage);
429
+ throw error;
430
+ }
431
+ }
432
+ catch (error) {
433
+ this.logger.error(`Error in LogCreatedEvent: ${util.format(error)}`);
434
+ PerformanceTester.end(PERFORMANCE_SDK_EVENTS.DISPATCHER_EVENTS.LOG_CREATED, false, util.format(error));
435
+ throw error;
436
+ }
437
+ }
438
+ async fetchDriverExecuteParamsEvent(data) {
439
+ this.logger.info('Sending fetchDriverExecuteParamsEvent');
440
+ try {
441
+ if (!this.client) {
442
+ this.logger.info('No gRPC client not initialized.');
443
+ }
444
+ const { product, scriptName } = data;
445
+ const platformIndex = data.platformIndex || '0'; // Extract platformIndex if provided
446
+ const clientWorkerId = CLIUtils.getClientWorkerId();
447
+ const request = FetchDriverExecuteParamsEventRequestConstructor.create({
448
+ binSessionId: this.binSessionId,
449
+ product: product,
450
+ scriptName: scriptName,
451
+ });
452
+ request.clientWorkerId = clientWorkerId;
453
+ request.platformIndex = platformIndex;
454
+ this.logger.debug(`FetchDriverExecuteParamsEvent with clientWorkerId: ${clientWorkerId}, platformIndex: ${platformIndex}`);
455
+ const fetchDriverExecuteParamsEventPromise = promisify(this.client.fetchDriverExecuteParamsEvent).bind(this.client);
456
+ try {
457
+ const response = await fetchDriverExecuteParamsEventPromise(request);
458
+ this.logger.info('fetchDriverExecuteParamsEvent successful');
459
+ return response;
460
+ }
461
+ catch (error) {
462
+ const errorMessage = util.format(error);
463
+ this.logger.error(`fetchDriverExecuteParamsEvent error: ${errorMessage}`);
464
+ throw error;
465
+ }
466
+ }
467
+ catch (error) {
468
+ this.logger.error(`Error in fetchDriverExecuteParamsEvent: ${util.format(error)}`);
469
+ throw error;
470
+ }
471
+ }
472
+ /**
473
+ * Send TestOrchestration request to get ordered test files
474
+ * @param {string[]} testFiles - Array of test file paths
475
+ * @param {string} orchestrationStrategy - The orchestration strategy to use
476
+ * @param {string} orchestrationMetadata - Additional metadata for orchestration
477
+ * @returns {Promise<string[]|null>} Array of ordered test files or null if failed
478
+ */
479
+ async testOrchestrationSession(testFiles, orchestrationStrategy, orchestrationMetadata) {
480
+ try {
481
+ if (!this.client) {
482
+ this.logger.error('gRPC client is not initialized. Cannot perform test orchestration.');
483
+ return null;
484
+ }
485
+ if (!this.binSessionId) {
486
+ this.logger.error('binSessionId is not available. Cannot perform test orchestration.');
487
+ return null;
488
+ }
489
+ // Create TestOrchestrationRequest
490
+ const request = {
491
+ binSessionId: this.binSessionId,
492
+ orchestrationStrategy: orchestrationStrategy,
493
+ testFiles: testFiles,
494
+ orchestrationMetadata: orchestrationMetadata
495
+ };
496
+ const testOrchestrationPromise = promisify(this.client.testOrchestration).bind(this.client);
497
+ try {
498
+ const response = await testOrchestrationPromise(request);
499
+ this.logger.debug(`test-orchestration-session=${JSON.stringify(response)}`);
500
+ if (response.success) {
501
+ return Array.from(response.orderedTestFiles || []);
502
+ }
503
+ this.logger.warn('Test orchestration was not successful');
504
+ return null;
505
+ }
506
+ catch (error) {
507
+ const errorMessage = util.format(error);
508
+ this.logger.error(`TestOrchestration error: ${errorMessage}`);
509
+ throw error;
510
+ }
511
+ }
512
+ catch (error) {
513
+ this.logger.error(`Error in testOrchestrationSession: ${util.format(error)}`);
514
+ return null;
515
+ }
516
+ }
517
+ /**
518
+ * Get the gRPC channel
519
+ * @returns {grpc.Channel} The gRPC channel
520
+ */
521
+ getClient() {
522
+ return this.client;
523
+ }
524
+ /**
525
+ * Get the gRPC channel
526
+ * @returns {grpc.Channel} The gRPC channel
527
+ */
528
+ getChannel() {
529
+ return this.channel;
530
+ }
531
+ }
532
+ //# sourceMappingURL=grpcClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpcClient.js","sourceRoot":"","sources":["../../src/cli/grpcClient.ts"],"names":[],"mappings":"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"}