@testim/testim-cli 3.289.0 → 3.290.0-beta

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 (217) hide show
  1. package/cli.js +22390 -122
  2. package/cli.js.map +1 -0
  3. package/npm-shrinkwrap.json +8 -29129
  4. package/package.json +16 -10
  5. package/OverrideTestDataBuilder.js +0 -117
  6. package/agent/routers/cliJsCode/index.js +0 -13
  7. package/agent/routers/cliJsCode/router.js +0 -63
  8. package/agent/routers/cliJsCode/service.js +0 -705
  9. package/agent/routers/codim/router.js +0 -69
  10. package/agent/routers/codim/router.test.js +0 -60
  11. package/agent/routers/codim/service.js +0 -193
  12. package/agent/routers/general/index.js +0 -36
  13. package/agent/routers/hybrid/registerRoutes.js +0 -81
  14. package/agent/routers/index.js +0 -56
  15. package/agent/routers/playground/router.js +0 -77
  16. package/agent/routers/playground/service.js +0 -96
  17. package/agent/routers/standalone-browser/registerRoutes.js +0 -47
  18. package/agent/server.js +0 -150
  19. package/cdpTestRunner.js +0 -86
  20. package/chromiumInstaller.js +0 -91
  21. package/cli/isCiRun.js +0 -10
  22. package/cli/onExit.js +0 -65
  23. package/cli/writeStackTrace.js +0 -27
  24. package/cliAgentMode.js +0 -384
  25. package/codim/codim-cli.js +0 -91
  26. package/codim/codim-npm-package/index.ts +0 -427
  27. package/codim/codim-npm-package/package-lock.json +0 -14
  28. package/codim/codim-npm-package/package.json +0 -14
  29. package/codim/hybrid-utils.js +0 -28
  30. package/codim/measure-perf.js +0 -41
  31. package/codim/template.js/.idea/workspace.xml +0 -57
  32. package/codim/template.js/.vscode/launch.json +0 -53
  33. package/codim/template.ts/.idea/workspace.xml +0 -57
  34. package/codim/template.ts/.vscode/launch.json +0 -55
  35. package/commons/AbortError.js +0 -12
  36. package/commons/SeleniumPerfStats.js +0 -58
  37. package/commons/chrome-launcher.js +0 -15
  38. package/commons/chromedriverWrapper.js +0 -70
  39. package/commons/config.js +0 -39
  40. package/commons/constants.js +0 -67
  41. package/commons/detectDebugger.js +0 -19
  42. package/commons/featureAvailabilityService.js +0 -26
  43. package/commons/featureFlags.js +0 -132
  44. package/commons/getSessionPlayerRequire.js +0 -28
  45. package/commons/httpRequest.js +0 -261
  46. package/commons/httpRequestCounters.js +0 -98
  47. package/commons/httpRequestCounters.test.js +0 -38
  48. package/commons/initializeUserWithAuth.js +0 -55
  49. package/commons/lazyRequire.js +0 -105
  50. package/commons/logUtils.js +0 -15
  51. package/commons/logUtils.test.js +0 -21
  52. package/commons/logger.js +0 -178
  53. package/commons/mockNetworkRuleFileSchema.json +0 -140
  54. package/commons/npmWrapper.js +0 -174
  55. package/commons/npmWrapper.test.js +0 -374
  56. package/commons/performance-logger.js +0 -71
  57. package/commons/preloadTests.js +0 -29
  58. package/commons/prepareRunner.js +0 -85
  59. package/commons/prepareRunner.test.js +0 -144
  60. package/commons/prepareRunnerAndTestimStartUtils.js +0 -198
  61. package/commons/prepareRunnerAndTestimStartUtils.test.js +0 -73
  62. package/commons/requireWithFallback.js +0 -25
  63. package/commons/runnerFileCache.js +0 -204
  64. package/commons/socket/baseSocketServiceSocketIO.js +0 -197
  65. package/commons/socket/realDataService.js +0 -59
  66. package/commons/socket/realDataServiceSocketIO.js +0 -33
  67. package/commons/socket/remoteStepService.js +0 -55
  68. package/commons/socket/remoteStepServiceSocketIO.js +0 -61
  69. package/commons/socket/socketService.js +0 -175
  70. package/commons/socket/testResultService.js +0 -62
  71. package/commons/socket/testResultServiceSocketIO.js +0 -64
  72. package/commons/testimAnalytics.js +0 -40
  73. package/commons/testimCloudflare.js +0 -83
  74. package/commons/testimCloudflare.test.js +0 -185
  75. package/commons/testimCustomToken.js +0 -124
  76. package/commons/testimDesiredCapabilitiesBuilder.js +0 -647
  77. package/commons/testimNgrok.js +0 -90
  78. package/commons/testimNgrok.test.js +0 -140
  79. package/commons/testimServicesApi.js +0 -631
  80. package/commons/testimTunnel.js +0 -73
  81. package/commons/testimTunnel.test.js +0 -172
  82. package/commons/xhr2.js +0 -897
  83. package/coverage/SummaryToObjectReport.js +0 -19
  84. package/coverage/jsCoverage.js +0 -252
  85. package/credentialsManager.js +0 -142
  86. package/errors.js +0 -161
  87. package/executionQueue.js +0 -37
  88. package/fixLocalBuild.js +0 -24
  89. package/inputFileUtils.js +0 -103
  90. package/lib/coralogix-winston.transport.js +0 -99
  91. package/player/SeleniumProtocolError.js +0 -100
  92. package/player/WebDriverHttpRequest.js +0 -177
  93. package/player/WebdriverioWebDriverApi.js +0 -671
  94. package/player/appiumTestPlayer.js +0 -90
  95. package/player/chromeLauncherTestPlayer.js +0 -67
  96. package/player/constants.js +0 -332
  97. package/player/extensionTestPlayer.js +0 -32
  98. package/player/findElementStrategy.js +0 -154
  99. package/player/scripts/isElementDisplayed.js +0 -252
  100. package/player/seleniumTestPlayer.js +0 -140
  101. package/player/services/frameLocator.js +0 -170
  102. package/player/services/mobileFrameLocatorMock.js +0 -32
  103. package/player/services/playbackTimeoutCalculator.js +0 -175
  104. package/player/services/portSelector.js +0 -19
  105. package/player/services/tabService.js +0 -551
  106. package/player/services/tabServiceMock.js +0 -167
  107. package/player/services/windowCreationListener.js +0 -8
  108. package/player/stepActions/RefreshStepAction.js +0 -16
  109. package/player/stepActions/apiStepAction.js +0 -89
  110. package/player/stepActions/baseCliJsStepAction.js +0 -51
  111. package/player/stepActions/baseJsStepAction.js +0 -277
  112. package/player/stepActions/cliConditionStepAction.js +0 -11
  113. package/player/stepActions/cliJsStepAction.js +0 -11
  114. package/player/stepActions/dropFileStepAction.js +0 -34
  115. package/player/stepActions/evaluateExpressionStepAction.js +0 -52
  116. package/player/stepActions/extensionOnlyStepAction.js +0 -12
  117. package/player/stepActions/extractTextStepAction.js +0 -19
  118. package/player/stepActions/hoverStepAction.js +0 -55
  119. package/player/stepActions/inputFileStepAction.js +0 -199
  120. package/player/stepActions/jsCodeStepAction.js +0 -11
  121. package/player/stepActions/jsConditionStepAction.js +0 -11
  122. package/player/stepActions/locateStepAction.js +0 -159
  123. package/player/stepActions/mouseStepAction.js +0 -370
  124. package/player/stepActions/navigationStepAction.js +0 -29
  125. package/player/stepActions/nodePackageStepAction.js +0 -47
  126. package/player/stepActions/pixelValidationStepAction.js +0 -39
  127. package/player/stepActions/scripts/dispatchEvents.js +0 -282
  128. package/player/stepActions/scripts/doClick.js +0 -221
  129. package/player/stepActions/scripts/doDragPath.js +0 -225
  130. package/player/stepActions/scripts/doubleClick.js +0 -119
  131. package/player/stepActions/scripts/dropEvent.js +0 -63
  132. package/player/stepActions/scripts/focusElement.js +0 -46
  133. package/player/stepActions/scripts/html5dragAction.js +0 -56
  134. package/player/stepActions/scripts/html5dragActionV2.js +0 -312
  135. package/player/stepActions/scripts/runCode.js +0 -147
  136. package/player/stepActions/scripts/scroll.js +0 -90
  137. package/player/stepActions/scripts/selectOption.js +0 -51
  138. package/player/stepActions/scripts/setText.js +0 -415
  139. package/player/stepActions/scripts/wheel.js +0 -61
  140. package/player/stepActions/scrollStepAction.js +0 -96
  141. package/player/stepActions/selectOptionStepAction.js +0 -49
  142. package/player/stepActions/sfdcRecordedStepAction.js +0 -24
  143. package/player/stepActions/sfdcStepAction.js +0 -28
  144. package/player/stepActions/sleepStepAction.js +0 -12
  145. package/player/stepActions/specialKeyStepAction.js +0 -52
  146. package/player/stepActions/stepAction.js +0 -73
  147. package/player/stepActions/stepActionRegistrar.js +0 -111
  148. package/player/stepActions/submitStepAction.js +0 -12
  149. package/player/stepActions/tdkHybridStepAction.js +0 -18
  150. package/player/stepActions/textStepAction.js +0 -110
  151. package/player/stepActions/textValidationStepAction.js +0 -64
  152. package/player/stepActions/wheelStepAction.js +0 -41
  153. package/player/utils/cookieUtils.js +0 -39
  154. package/player/utils/eyeSdkService.js +0 -250
  155. package/player/utils/imageCaptureUtils.js +0 -267
  156. package/player/utils/screenshotUtils.js +0 -68
  157. package/player/utils/stepActionUtils.js +0 -90
  158. package/player/utils/windowUtils.js +0 -195
  159. package/player/webDriverUtils.js +0 -40
  160. package/player/webDriverUtils.test.js +0 -116
  161. package/player/webdriver.js +0 -976
  162. package/polyfills/Array.prototype.at.js +0 -13
  163. package/polyfills/index.js +0 -13
  164. package/processHandler.js +0 -79
  165. package/processHandler.test.js +0 -55
  166. package/reports/chromeReporter.js +0 -17
  167. package/reports/consoleReporter.js +0 -190
  168. package/reports/debugReporter.js +0 -82
  169. package/reports/jsonReporter.js +0 -55
  170. package/reports/junitReporter.js +0 -183
  171. package/reports/reporter.js +0 -166
  172. package/reports/reporterUtils.js +0 -54
  173. package/reports/teamCityReporter.js +0 -73
  174. package/runOptions.d.ts +0 -305
  175. package/runOptions.js +0 -1288
  176. package/runOptionsAgentFlow.js +0 -87
  177. package/runOptionsUtils.js +0 -60
  178. package/runner.js +0 -355
  179. package/runners/ParallelWorkerManager.js +0 -284
  180. package/runners/TestPlanRunner.js +0 -419
  181. package/runners/buildCodeTests.js +0 -159
  182. package/runners/runnerUtils.js +0 -81
  183. package/services/analyticsService.js +0 -96
  184. package/services/branchService.js +0 -29
  185. package/services/gridService.js +0 -357
  186. package/services/gridService.test.js +0 -357
  187. package/services/labFeaturesService.js +0 -64
  188. package/services/lambdatestService.js +0 -227
  189. package/services/lambdatestService.test.js +0 -353
  190. package/services/localRCASaver.js +0 -124
  191. package/stepPlayers/cliJsStepPlayback.js +0 -40
  192. package/stepPlayers/hybridStepPlayback.js +0 -140
  193. package/stepPlayers/nodePackageStepPlayback.js +0 -28
  194. package/stepPlayers/playwrightHybridStepPlayback.js +0 -61
  195. package/stepPlayers/puppeteerHybridStepPlayback.js +0 -76
  196. package/stepPlayers/remoteStepPlayback.js +0 -80
  197. package/stepPlayers/seleniumHybridStepPlayback.js +0 -84
  198. package/stepPlayers/tdkHybridStepPlayback.js +0 -112
  199. package/testRunHandler.js +0 -603
  200. package/testRunStatus.js +0 -567
  201. package/testimNpmDriver.js +0 -52
  202. package/utils/argsUtils.js +0 -91
  203. package/utils/argsUtils.test.js +0 -32
  204. package/utils/fsUtils.js +0 -174
  205. package/utils/index.js +0 -197
  206. package/utils/promiseUtils.js +0 -85
  207. package/utils/stringUtils.js +0 -98
  208. package/utils/stringUtils.test.js +0 -22
  209. package/utils/timeUtils.js +0 -25
  210. package/utils/utils.test.js +0 -27
  211. package/workers/BaseWorker.js +0 -498
  212. package/workers/BaseWorker.test.js +0 -186
  213. package/workers/WorkerAppium.js +0 -180
  214. package/workers/WorkerExtension.js +0 -192
  215. package/workers/WorkerExtensionSingleBrowser.js +0 -77
  216. package/workers/WorkerSelenium.js +0 -253
  217. package/workers/workerUtils.js +0 -20
package/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/polyfills/Array.prototype.at.js","../src/commons/xhr2.js","../src/commons/performance-logger.js","../src/commons/constants.js","../src/utils/stringUtils.js","../package.json","../src/commons/config.js","../src/lib/coralogix-winston.transport.js","../src/commons/logger.ts","../src/errors.js","../src/utils/promiseUtils.ts","../src/commons/httpRequestCounters.js","../src/commons/httpRequest.js","../src/utils/fsUtils.js","../src/utils/argsUtils.js","../src/utils/timeUtils.js","../src/player/constants.js","../src/utils/index.js","../src/commons/logUtils.js","../src/commons/runnerFileCache.js","../src/commons/requireWithFallback.js","../src/commons/npmWrapper.js","../src/commons/chromedriverWrapper.js","../src/commons/prepareRunnerAndTestimStartUtils.js","../src/commons/mockNetworkRuleFileSchema.json","../src/commons/testimCustomToken.js","../src/cli/isCiRun.js","../src/commons/testimServicesApi.js","../src/commons/getSessionPlayerRequire.ts","../src/commons/initializeUserWithAuth.js","../src/chromiumInstaller.js","../src/commons/prepareRunner.js","../src/processHandler.js","../src/cli/writeStackTrace.js","../src/cli/onExit.js","../src/runOptionsUtils.js","../src/commons/testimAnalytics.js","../src/runOptionsAgentFlow.js","../src/commons/chrome-launcher.js","../src/credentialsManager.js","../src/runOptions.js","../src/fixLocalBuild.js","../src/commons/lazyRequire.js","../src/codim/codim-cli.ts","../src/commons/preloadTests.js","../src/reports/debugReporter.js","../src/commons/featureAvailabilityService.js","../src/reports/reporterUtils.js","../src/reports/consoleReporter.js","../src/reports/junitReporter.js","../src/reports/teamCityReporter.js","../src/reports/jsonReporter.js","../src/reports/chromeReporter.js","../src/reports/reporter.js","../src/testimNpmDriver.js","../src/commons/testimNgrok.js","../src/commons/testimCloudflare.js","../src/commons/featureFlags.js","../src/services/lambdatestService.js","../src/commons/testimTunnel.js","../src/services/gridService.js","../src/services/branchService.js","../src/OverrideTestDataBuilder.js","../src/coverage/SummaryToObjectReport.js","../src/coverage/jsCoverage.js","../src/commons/SeleniumPerfStats.js","../src/services/localRCASaver.js","../src/testRunStatus.js","../src/services/analyticsService.js","../src/agent/routers/cliJsCode/service.js","../src/stepPlayers/cliJsStepPlayback.js","../src/commons/testimDesiredCapabilitiesBuilder.js","../src/player/scripts/isElementDisplayed.js","../src/player/webDriverUtils.js","../src/player/WebdriverioWebDriverApi.js","../src/player/stepActions/scripts/doubleClick.js","../src/player/stepActions/scripts/focusElement.js","../src/player/webdriver.js","../src/player/utils/cookieUtils.js","../src/player/utils/windowUtils.js","../src/player/utils/screenshotUtils.js","../src/player/utils/imageCaptureUtils.js","../src/player/services/tabService.js","../src/player/services/portSelector.js","../src/player/utils/stepActionUtils.js","../src/player/services/frameLocator.js","../src/commons/socket/baseSocketServiceSocketIO.js","../src/commons/socket/testResultServiceSocketIO.js","../src/commons/socket/socketService.js","../src/commons/socket/testResultService.js","../src/player/services/windowCreationListener.js","../src/player/services/playbackTimeoutCalculator.js","../src/commons/detectDebugger.js","../src/player/stepActions/stepAction.js","../src/player/stepActions/locateStepAction.js","../src/player/stepActions/scripts/scroll.js","../src/player/stepActions/scrollStepAction.js","../src/player/stepActions/scripts/doClick.js","../src/player/stepActions/scripts/doDragPath.js","../src/player/stepActions/scripts/html5dragAction.js","../src/player/stepActions/scripts/html5dragActionV2.js","../src/player/stepActions/mouseStepAction.js","../src/player/stepActions/textValidationStepAction.js","../src/player/stepActions/evaluateExpressionStepAction.js","../src/player/stepActions/scripts/setText.js","../src/player/stepActions/textStepAction.js","../src/player/stepActions/scripts/runCode.js","../src/player/stepActions/baseJsStepAction.js","../src/player/stepActions/jsCodeStepAction.js","../src/player/stepActions/jsConditionStepAction.js","../src/player/stepActions/specialKeyStepAction.js","../src/player/stepActions/scripts/selectOption.js","../src/player/stepActions/selectOptionStepAction.js","../src/player/stepActions/submitStepAction.js","../src/player/stepActions/hoverStepAction.js","../src/player/stepActions/scripts/wheel.js","../src/player/stepActions/wheelStepAction.js","../src/player/stepActions/scripts/dropEvent.js","../src/player/stepActions/dropFileStepAction.js","../src/inputFileUtils.js","../src/player/stepActions/inputFileStepAction.js","../src/player/stepActions/navigationStepAction.js","../src/player/stepActions/sleepStepAction.js","../src/player/stepActions/RefreshStepAction.js","../src/player/stepActions/apiStepAction.js","../src/player/stepActions/extractTextStepAction.js","../src/player/stepActions/tdkHybridStepAction.js","../src/player/utils/eyeSdkService.js","../src/player/stepActions/pixelValidationStepAction.js","../src/player/stepActions/baseCliJsStepAction.js","../src/player/stepActions/cliJsStepAction.js","../src/player/stepActions/cliConditionStepAction.js","../src/player/stepActions/nodePackageStepAction.js","../src/player/stepActions/extensionOnlyStepAction.js","../src/player/stepActions/sfdcStepAction.js","../src/player/stepActions/sfdcRecordedStepAction.js","../src/player/stepActions/stepActionRegistrar.js","../src/player/seleniumTestPlayer.js","../src/commons/AbortError.js","../src/runners/buildCodeTests.js","../src/agent/routers/codim/service.js","../src/codim/hybrid-utils.js","../src/stepPlayers/seleniumHybridStepPlayback.js","../src/stepPlayers/puppeteerHybridStepPlayback.js","../src/stepPlayers/playwrightHybridStepPlayback.js","../src/stepPlayers/tdkHybridStepPlayback.js","../src/stepPlayers/hybridStepPlayback.js","../src/stepPlayers/nodePackageStepPlayback.js","../src/stepPlayers/remoteStepPlayback.js","../src/commons/socket/remoteStepServiceSocketIO.js","../src/commons/socket/remoteStepService.js","../src/testRunHandler.js","../src/executionQueue.js","../src/services/labFeaturesService.js","../src/workers/workerUtils.js","../src/workers/BaseWorker.js","../src/workers/WorkerSelenium.js","../src/player/services/tabServiceMock.js","../src/player/services/mobileFrameLocatorMock.js","../src/player/appiumTestPlayer.js","../src/workers/WorkerAppium.js","../src/player/extensionTestPlayer.js","../src/cdpTestRunner.js","../src/player/chromeLauncherTestPlayer.js","../src/workers/WorkerExtension.js","../src/workers/WorkerExtensionSingleBrowser.js","../src/runners/ParallelWorkerManager.js","../src/commons/socket/realDataServiceSocketIO.js","../src/commons/socket/realDataService.js","../src/runners/runnerUtils.js","../src/runners/TestPlanRunner.js","../src/runner.js","../src/agent/routers/general/index.js","../src/agent/routers/codim/router.js","../src/agent/routers/playground/service.js","../src/agent/routers/playground/router.js","../src/agent/routers/cliJsCode/router.js","../src/agent/routers/cliJsCode/index.js","../src/agent/routers/standalone-browser/registerRoutes.js","../src/agent/routers/hybrid/registerRoutes.js","../src/agent/routers/index.js","../src/agent/server.js","../src/cliAgentMode.js","../src/cli.ts","../src/polyfills/index.js"],"sourcesContent":["/* eslint-disable no-extend-native */\n\nArray.prototype.at = Array.prototype.at || function (index) {\n const relativeIndex = Number.isInteger(index) ? index : 0;\n\n const indexToRead = relativeIndex >= 0 ? relativeIndex : this.length + relativeIndex;\n\n if (indexToRead < 0 || indexToRead >= this.length) {\n return undefined;\n }\n\n return this[indexToRead];\n};\n","/* eslint-disable */\nconst FormData = require('form-data');\n\n(function () {\n let InvalidStateError; let NetworkError; let ProgressEvent; let SecurityError; let SyntaxError; let XMLHttpRequest; let XMLHttpRequestEventTarget; let XMLHttpRequestUpload; let http; let https; let os; let url;\n const extend = function (child, parent) {\n for (const key in parent) {\n if (hasProp.call(parent, key)) {\n child[key] = parent[key];\n }\n }\n function ctor() {\n this.constructor = child;\n }\n\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.__super__ = parent.prototype;\n return child;\n };\n var hasProp = {}.hasOwnProperty;\n\n XMLHttpRequestEventTarget = (function () {\n function XMLHttpRequestEventTarget() {\n this.onloadstart = null;\n this.onprogress = null;\n this.onabort = null;\n this.onerror = null;\n this.onload = null;\n this.ontimeout = null;\n this.onloadend = null;\n this._listeners = {};\n }\n\n XMLHttpRequestEventTarget.prototype.onloadstart = null;\n\n XMLHttpRequestEventTarget.prototype.onprogress = null;\n\n XMLHttpRequestEventTarget.prototype.onabort = null;\n\n XMLHttpRequestEventTarget.prototype.onerror = null;\n\n XMLHttpRequestEventTarget.prototype.onload = null;\n\n XMLHttpRequestEventTarget.prototype.ontimeout = null;\n\n XMLHttpRequestEventTarget.prototype.onloadend = null;\n\n XMLHttpRequestEventTarget.prototype.addEventListener = function (eventType, listener) {\n let base;\n eventType = eventType.toLowerCase();\n (base = this._listeners)[eventType] || (base[eventType] = []);\n this._listeners[eventType].push(listener);\n return void 0;\n };\n\n XMLHttpRequestEventTarget.prototype.removeEventListener = function (eventType, listener) {\n let index;\n eventType = eventType.toLowerCase();\n if (this._listeners[eventType]) {\n index = this._listeners[eventType].indexOf(listener);\n if (index !== -1) {\n this._listeners[eventType].splice(index, 1);\n }\n }\n return void 0;\n };\n\n XMLHttpRequestEventTarget.prototype.dispatchEvent = function (event) {\n let eventType; let j; let len; let listener; let\n listeners;\n event.currentTarget = event.target = this;\n eventType = event.type;\n if (listeners = this._listeners[eventType]) {\n for (j = 0, len = listeners.length; j < len; j++) {\n listener = listeners[j];\n listener.call(this, event);\n }\n }\n if (listener = this[`on${eventType}`]) {\n listener.call(this, event);\n }\n return void 0;\n };\n\n return XMLHttpRequestEventTarget;\n }());\n\n http = require('http');\n\n https = require('https');\n\n os = require('os');\n\n url = require('url');\n\n XMLHttpRequest = (function (superClass) {\n extend(XMLHttpRequest, superClass);\n\n function XMLHttpRequest(options) {\n XMLHttpRequest.__super__.constructor.call(this);\n this.onreadystatechange = null;\n this._anonymous = options && options.anon;\n this.readyState = XMLHttpRequest.UNSENT;\n this.response = null;\n this.responseText = '';\n this.responseType = '';\n this.status = 0;\n this.statusText = '';\n this.timeout = 0;\n this.upload = new XMLHttpRequestUpload(this);\n this._method = null;\n this._url = null;\n this._sync = false;\n this._headers = null;\n this._loweredHeaders = null;\n this._mimeOverride = null;\n this._request = null;\n this._response = null;\n this._responseParts = null;\n this._responseHeaders = null;\n this._aborting = null;\n this._error = null;\n this._loadedBytes = 0;\n this._totalBytes = 0;\n this._lengthComputable = false;\n }\n\n XMLHttpRequest.prototype.onreadystatechange = null;\n\n XMLHttpRequest.prototype.readyState = null;\n\n XMLHttpRequest.prototype.response = null;\n\n XMLHttpRequest.prototype.responseText = null;\n\n XMLHttpRequest.prototype.responseType = null;\n\n XMLHttpRequest.prototype.status = null;\n\n XMLHttpRequest.prototype.timeout = null;\n\n XMLHttpRequest.prototype.upload = null;\n\n XMLHttpRequest.prototype.open = function (method, url, async, user, password) {\n let xhrUrl;\n method = method.toUpperCase();\n if (method in this._restrictedMethods) {\n throw new SecurityError(`HTTP method ${method} is not allowed in XHR`);\n }\n xhrUrl = this._parseUrl(url);\n if (async === void 0) {\n async = true;\n }\n switch (this.readyState) {\n case XMLHttpRequest.UNSENT:\n case XMLHttpRequest.OPENED:\n case XMLHttpRequest.DONE:\n null;\n break;\n case XMLHttpRequest.HEADERS_RECEIVED:\n case XMLHttpRequest.LOADING:\n null;\n }\n this._method = method;\n this._url = xhrUrl;\n this._sync = !async;\n this._headers = {};\n this._loweredHeaders = {};\n this._mimeOverride = null;\n this._setReadyState(XMLHttpRequest.OPENED);\n this._request = null;\n this._response = null;\n this.status = 0;\n this.statusText = '';\n this._responseParts = [];\n this._responseHeaders = null;\n this._loadedBytes = 0;\n this._totalBytes = 0;\n this._lengthComputable = false;\n return void 0;\n };\n\n XMLHttpRequest.prototype.setRequestHeader = function (name, value) {\n let loweredName;\n if (this.readyState !== XMLHttpRequest.OPENED) {\n throw new InvalidStateError('XHR readyState must be OPENED');\n }\n loweredName = name.toLowerCase();\n if (this._restrictedHeaders[loweredName] || /^sec\\-/.test(loweredName) || /^proxy-/.test(loweredName)) {\n return void 0;\n }\n value = value.toString();\n if (loweredName in this._loweredHeaders) {\n name = this._loweredHeaders[loweredName];\n this._headers[name] = `${this._headers[name]}, ${value}`;\n } else {\n this._loweredHeaders[loweredName] = name;\n this._headers[name] = value;\n }\n return void 0;\n };\n\n XMLHttpRequest.prototype.send = function (data) {\n if (this.readyState !== XMLHttpRequest.OPENED) {\n throw new InvalidStateError('XHR readyState must be OPENED');\n }\n if (this._request) {\n throw new InvalidStateError('send() already called');\n }\n switch (this._url.protocol) {\n case 'file:':\n this._sendFile(data);\n break;\n case 'http:':\n case 'https:':\n this._sendHttp(data);\n break;\n default:\n throw new NetworkError(`Unsupported protocol ${this._url.protocol}`);\n }\n return void 0;\n };\n\n XMLHttpRequest.prototype.abort = function () {\n if (!this._request) {\n return;\n }\n this._request.abort();\n this._setError();\n this._dispatchProgress('abort');\n this._dispatchProgress('loadend');\n return void 0;\n };\n\n XMLHttpRequest.prototype.getResponseHeader = function (name) {\n let loweredName;\n if (!this._responseHeaders) {\n return null;\n }\n loweredName = name.toLowerCase();\n if (loweredName in this._responseHeaders) {\n return this._responseHeaders[loweredName];\n }\n return null;\n };\n\n XMLHttpRequest.prototype.getAllResponseHeaders = function () {\n let lines; let name; let\n value;\n if (!this._responseHeaders) {\n return '';\n }\n lines = (function () {\n let ref; let\n results;\n ref = this._responseHeaders;\n results = [];\n for (name in ref) {\n value = ref[name];\n results.push(`${name}: ${value}`);\n }\n return results;\n }).call(this);\n return lines.join('\\r\\n');\n };\n\n XMLHttpRequest.prototype.overrideMimeType = function (newMimeType) {\n if (this.readyState === XMLHttpRequest.LOADING || this.readyState === XMLHttpRequest.DONE) {\n throw new InvalidStateError('overrideMimeType() not allowed in LOADING or DONE');\n }\n this._mimeOverride = newMimeType.toLowerCase();\n return void 0;\n };\n\n XMLHttpRequest.prototype.nodejsSet = function (options) {\n let baseUrl; let\n parsedUrl;\n if ('httpAgent' in options) {\n this.nodejsHttpAgent = options.httpAgent;\n }\n if ('httpsAgent' in options) {\n this.nodejsHttpsAgent = options.httpsAgent;\n }\n if ('baseUrl' in options) {\n baseUrl = options.baseUrl;\n if (baseUrl !== null) {\n parsedUrl = url.parse(baseUrl, false, true);\n if (!parsedUrl.protocol) {\n throw new SyntaxError('baseUrl must be an absolute URL');\n }\n }\n this.nodejsBaseUrl = baseUrl;\n }\n return void 0;\n };\n\n XMLHttpRequest.nodejsSet = function (options) {\n XMLHttpRequest.prototype.nodejsSet(options);\n return void 0;\n };\n\n XMLHttpRequest.prototype.UNSENT = 0;\n\n XMLHttpRequest.UNSENT = 0;\n\n XMLHttpRequest.prototype.OPENED = 1;\n\n XMLHttpRequest.OPENED = 1;\n\n XMLHttpRequest.prototype.HEADERS_RECEIVED = 2;\n\n XMLHttpRequest.HEADERS_RECEIVED = 2;\n\n XMLHttpRequest.prototype.LOADING = 3;\n\n XMLHttpRequest.LOADING = 3;\n\n XMLHttpRequest.prototype.DONE = 4;\n\n XMLHttpRequest.DONE = 4;\n\n XMLHttpRequest.prototype.nodejsHttpAgent = http.globalAgent;\n\n XMLHttpRequest.prototype.nodejsHttpsAgent = https.globalAgent;\n\n XMLHttpRequest.prototype.nodejsBaseUrl = null;\n\n XMLHttpRequest.prototype._restrictedMethods = {\n CONNECT: true,\n TRACE: true,\n TRACK: true,\n };\n\n XMLHttpRequest.prototype._restrictedHeaders = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n cookie2: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n 'user-agent': true,\n via: true,\n };\n\n XMLHttpRequest.prototype._privateHeaders = {\n 'set-cookie': false,\n 'set-cookie2': false,\n };\n\n XMLHttpRequest.prototype._userAgent = `Mozilla/5.0 (${os.type()} ${os.arch()}) ` + `node.js/${process.versions.node} v8/${process.versions.v8}`;\n\n XMLHttpRequest.prototype._setReadyState = function (newReadyState) {\n let event;\n this.readyState = newReadyState;\n event = new ProgressEvent('readystatechange');\n this.dispatchEvent(event);\n return void 0;\n };\n\n XMLHttpRequest.prototype._sendFile = function () {\n if (this._url.method !== 'GET') {\n throw new NetworkError('The file protocol only supports GET');\n }\n throw new Error('Protocol file: not implemented');\n };\n\n XMLHttpRequest.prototype._sendHttp = function (data) {\n if (this._sync) {\n throw new Error('Synchronous XHR processing not implemented');\n }\n if ((data != null) && (this._method === 'GET' || this._method === 'HEAD')) {\n data = null;\n } else {\n data || (data = '');\n }\n this.upload._setData(data);\n this._finalizeHeaders(data);\n this._sendHxxpRequest(data);\n return void 0;\n };\n\n XMLHttpRequest.prototype._sendHxxpRequest = function (data) {\n let agent; let hxxp; let\n request;\n if (this._url.protocol === 'http:') {\n hxxp = http;\n agent = this.nodejsHttpAgent;\n } else {\n hxxp = https;\n agent = this.nodejsHttpsAgent;\n }\n request = hxxp.request({\n hostname: this._url.hostname,\n port: this._url.port,\n path: this._url.path,\n auth: this._url.auth,\n method: this._method,\n headers: this._headers,\n agent,\n });\n\n if (typeof data === 'object' && data instanceof FormData) {\n data.pipe(request);\n }\n\n this._request = request;\n if (this.timeout) {\n request.setTimeout(this.timeout, (function (_this) {\n return function () {\n return _this._onHttpTimeout(request);\n };\n }(this)));\n }\n request.on('response', (function (_this) {\n return function (response) {\n return _this._onHttpResponse(request, response);\n };\n }(this)));\n request.on('error', (function (_this) {\n return function (error) {\n return _this._onHttpRequestError(request, error);\n };\n }(this)));\n this.upload._startUpload(request);\n if (this._request === request) {\n this._dispatchProgress('loadstart');\n }\n return void 0;\n };\n\n XMLHttpRequest.prototype._finalizeHeaders = function (data) {\n if (typeof data === 'object' && data instanceof FormData) {\n Object.assign(this._headers, data.getHeaders());\n }\n this._headers.Connection = 'keep-alive';\n this._headers.Host = this._url.host;\n if (this._anonymous) {\n this._headers.Referer = 'about:blank';\n }\n this._headers['User-Agent'] = this._userAgent;\n this.upload._finalizeHeaders(this._headers, this._loweredHeaders);\n return void 0;\n };\n\n XMLHttpRequest.prototype._onHttpResponse = function (request, response) {\n let lengthString;\n if (this._request !== request) {\n return;\n }\n switch (response.statusCode) {\n case 301:\n case 302:\n case 303:\n case 307:\n case 308:\n this._url = this._parseUrl(response.headers.location);\n this._method = 'GET';\n if ('content-type' in this._loweredHeaders) {\n delete this._headers[this._loweredHeaders['content-type']];\n delete this._loweredHeaders['content-type'];\n }\n if ('Content-Type' in this._headers) {\n delete this._headers['Content-Type'];\n }\n delete this._headers['Content-Length'];\n this.upload._reset();\n this._finalizeHeaders();\n this._sendHxxpRequest();\n return;\n }\n this._response = response;\n this._response.on('data', (function (_this) {\n return function (data) {\n return _this._onHttpResponseData(response, data);\n };\n }(this)));\n this._response.on('end', (function (_this) {\n return function () {\n return _this._onHttpResponseEnd(response);\n };\n }(this)));\n this._response.on('close', (function (_this) {\n return function () {\n return _this._onHttpResponseClose(response);\n };\n }(this)));\n this.status = this._response.statusCode;\n this.statusText = http.STATUS_CODES[this.status];\n this._parseResponseHeaders(response);\n if (lengthString = this._responseHeaders['content-length']) {\n this._totalBytes = parseInt(lengthString);\n this._lengthComputable = true;\n } else {\n this._lengthComputable = false;\n }\n return this._setReadyState(XMLHttpRequest.HEADERS_RECEIVED);\n };\n\n XMLHttpRequest.prototype._onHttpResponseData = function (response, data) {\n if (this._response !== response) {\n return;\n }\n this._responseParts.push(data);\n this._loadedBytes += data.length;\n if (this.readyState !== XMLHttpRequest.LOADING) {\n this._setReadyState(XMLHttpRequest.LOADING);\n }\n return this._dispatchProgress('progress');\n };\n\n XMLHttpRequest.prototype._onHttpResponseEnd = function (response) {\n if (this._response !== response) {\n return;\n }\n this._parseResponse();\n this._request = null;\n this._response = null;\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('load');\n return this._dispatchProgress('loadend');\n };\n\n XMLHttpRequest.prototype._onHttpResponseClose = function (response) {\n let request;\n if (this._response !== response) {\n return;\n }\n request = this._request;\n this._setError();\n request.abort();\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('error');\n return this._dispatchProgress('loadend');\n };\n\n XMLHttpRequest.prototype._onHttpTimeout = function (request) {\n if (this._request !== request) {\n return;\n }\n this._setError();\n request.abort();\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('timeout');\n return this._dispatchProgress('loadend');\n };\n\n XMLHttpRequest.prototype._onHttpRequestError = function (request, error) {\n if (this._request !== request) {\n return;\n }\n this._setError();\n request.abort();\n this._setReadyState(XMLHttpRequest.DONE);\n this._dispatchProgress('error');\n return this._dispatchProgress('loadend');\n };\n\n XMLHttpRequest.prototype._dispatchProgress = function (eventType) {\n let event;\n event = new ProgressEvent(eventType);\n event.lengthComputable = this._lengthComputable;\n event.loaded = this._loadedBytes;\n event.total = this._totalBytes;\n this.dispatchEvent(event);\n return void 0;\n };\n\n XMLHttpRequest.prototype._setError = function () {\n this._request = null;\n this._response = null;\n this._responseHeaders = null;\n this._responseParts = null;\n return void 0;\n };\n\n XMLHttpRequest.prototype._parseUrl = function (urlString) {\n let absoluteUrlString; let index; let password; let user; let\n xhrUrl;\n if (this.nodejsBaseUrl === null) {\n absoluteUrlString = urlString;\n } else {\n absoluteUrlString = url.resolve(this.nodejsBaseUrl, urlString);\n }\n xhrUrl = url.parse(absoluteUrlString, false, true);\n xhrUrl.hash = null;\n if (xhrUrl.auth && ((typeof user !== 'undefined' && user !== null) || (typeof password !== 'undefined' && password !== null))) {\n index = xhrUrl.auth.indexOf(':');\n if (index === -1) {\n if (!user) {\n user = xhrUrl.auth;\n }\n } else {\n if (!user) {\n user = xhrUrl.substring(0, index);\n }\n if (!password) {\n password = xhrUrl.substring(index + 1);\n }\n }\n }\n if (user || password) {\n xhrUrl.auth = `${user}:${password}`;\n }\n return xhrUrl;\n };\n\n XMLHttpRequest.prototype._parseResponseHeaders = function (response) {\n let loweredName; let name; let ref; let\n value;\n this._responseHeaders = {};\n ref = response.headers;\n for (name in ref) {\n value = ref[name];\n loweredName = name.toLowerCase();\n if (this._privateHeaders[loweredName]) {\n continue;\n }\n if (this._mimeOverride !== null && loweredName === 'content-type') {\n value = this._mimeOverride;\n }\n this._responseHeaders[loweredName] = value;\n }\n if (this._mimeOverride !== null && !('content-type' in this._responseHeaders)) {\n this._responseHeaders['content-type'] = this._mimeOverride;\n }\n return void 0;\n };\n\n XMLHttpRequest.prototype._parseResponse = function () {\n let arrayBuffer; let buffer; let i; let j; let jsonError; let ref; let\n view;\n if (Buffer.concat) {\n buffer = Buffer.concat(this._responseParts);\n } else {\n buffer = this._concatBuffers(this._responseParts);\n }\n // temporary workaround for transport encoding parsing\n if (this._responseHeaders['content-encoding'] && this._responseHeaders['content-encoding'] === 'gzip') {\n buffer = require('zlib').gunzipSync(buffer);\n }\n this._responseParts = null;\n switch (this.responseType) {\n case 'text':\n this._parseTextResponse(buffer);\n break;\n case 'json':\n this.responseText = null;\n try {\n this.response = JSON.parse(buffer.toString('utf-8'));\n } catch (_error) {\n jsonError = _error;\n this.response = null;\n }\n break;\n case 'buffer':\n this.responseText = null;\n this.response = buffer;\n break;\n case 'arraybuffer':\n this.responseText = null;\n arrayBuffer = new ArrayBuffer(buffer.length);\n view = new Uint8Array(arrayBuffer);\n for (i = j = 0, ref = buffer.length; ref >= 0 ? j < ref : j > ref; i = ref >= 0 ? ++j : --j) {\n view[i] = buffer[i];\n }\n this.response = arrayBuffer;\n break;\n default:\n this._parseTextResponse(buffer);\n }\n return void 0;\n };\n\n XMLHttpRequest.prototype._parseTextResponse = function (buffer) {\n let e;\n try {\n this.responseText = buffer.toString(this._parseResponseEncoding());\n } catch (_error) {\n e = _error;\n this.responseText = buffer.toString('binary');\n }\n this.response = this.responseText;\n return void 0;\n };\n\n XMLHttpRequest.prototype._parseResponseEncoding = function () {\n let contentType; let encoding; let\n match;\n encoding = null;\n if ((contentType = this._responseHeaders['content-type']) && (match = /\\;\\s*charset\\=(.*)$/.exec(contentType))) {\n return match[1];\n }\n return 'utf-8';\n };\n\n XMLHttpRequest.prototype._concatBuffers = function (buffers) {\n let buffer; let j; let k; let len; let len1; let length; let\n target;\n if (buffers.length === 0) {\n return Buffer.alloc(0);\n }\n if (buffers.length === 1) {\n return buffers[0];\n }\n length = 0;\n for (j = 0, len = buffers.length; j < len; j++) {\n buffer = buffers[j];\n length += buffer.length;\n }\n target = Buffer.alloc(length);\n length = 0;\n for (k = 0, len1 = buffers.length; k < len1; k++) {\n buffer = buffers[k];\n buffer.copy(target, length);\n length += buffer.length;\n }\n return target;\n };\n\n return XMLHttpRequest;\n }(XMLHttpRequestEventTarget));\n\n module.exports = XMLHttpRequest;\n\n XMLHttpRequest.XMLHttpRequest = XMLHttpRequest;\n\n SecurityError = (function (superClass) {\n extend(SecurityError, superClass);\n\n function SecurityError() {\n SecurityError.__super__.constructor.apply(this, arguments);\n }\n\n return SecurityError;\n }(Error));\n\n XMLHttpRequest.SecurityError = SecurityError;\n\n InvalidStateError = (function (superClass) {\n extend(InvalidStateError, superClass);\n\n function InvalidStateError() {\n InvalidStateError.__super__.constructor.apply(this, arguments);\n }\n\n return InvalidStateError;\n }(Error));\n\n InvalidStateError = (function (superClass) {\n extend(InvalidStateError, superClass);\n\n function InvalidStateError() {\n return InvalidStateError.__super__.constructor.apply(this, arguments);\n }\n\n return InvalidStateError;\n }(Error));\n\n XMLHttpRequest.InvalidStateError = InvalidStateError;\n\n NetworkError = (function (superClass) {\n extend(NetworkError, superClass);\n\n function NetworkError() {\n NetworkError.__super__.constructor.apply(this, arguments);\n }\n\n return NetworkError;\n }(Error));\n\n XMLHttpRequest.SyntaxError = SyntaxError;\n\n SyntaxError = (function (superClass) {\n extend(SyntaxError, superClass);\n\n function SyntaxError() {\n SyntaxError.__super__.constructor.apply(this, arguments);\n }\n\n return SyntaxError;\n }(Error));\n\n ProgressEvent = (function () {\n function ProgressEvent(type) {\n this.type = type;\n this.target = null;\n this.currentTarget = null;\n this.lengthComputable = false;\n this.loaded = 0;\n this.total = 0;\n }\n\n ProgressEvent.prototype.bubbles = false;\n\n ProgressEvent.prototype.cancelable = false;\n\n ProgressEvent.prototype.target = null;\n\n ProgressEvent.prototype.loaded = null;\n\n ProgressEvent.prototype.lengthComputable = null;\n\n ProgressEvent.prototype.total = null;\n\n return ProgressEvent;\n }());\n\n XMLHttpRequest.ProgressEvent = ProgressEvent;\n\n XMLHttpRequestUpload = (function (superClass) {\n extend(XMLHttpRequestUpload, superClass);\n\n function XMLHttpRequestUpload(request) {\n XMLHttpRequestUpload.__super__.constructor.call(this);\n this._request = request;\n this._reset();\n }\n\n XMLHttpRequestUpload.prototype._reset = function () {\n this._contentType = null;\n this._body = null;\n return void 0;\n };\n\n XMLHttpRequestUpload.prototype._setData = function (data) {\n let body; let i; let j; let k; let offset; let ref; let ref1; let\n view;\n if (typeof data === 'undefined' || data === null) {\n return;\n }\n if (typeof data === 'string') {\n if (data.length !== 0) {\n this._contentType = 'text/plain;charset=UTF-8';\n }\n this._body = Buffer.from(data, 'utf8');\n } else if (Buffer.isBuffer(data)) {\n this._body = data;\n } else if (data instanceof ArrayBuffer) {\n body = Buffer.alloc(data.byteLength);\n view = new Uint8Array(data);\n for (i = j = 0, ref = data.byteLength; ref >= 0 ? j < ref : j > ref; i = ref >= 0 ? ++j : --j) {\n body[i] = view[i];\n }\n this._body = body;\n } else if (data.buffer && data.buffer instanceof ArrayBuffer) {\n body = Buffer.alloc(data.byteLength);\n offset = data.byteOffset;\n view = new Uint8Array(data.buffer);\n for (i = k = 0, ref1 = data.byteLength; ref1 >= 0 ? k < ref1 : k > ref1; i = ref1 >= 0 ? ++k : --k) {\n body[i] = view[i + offset];\n }\n this._body = body;\n } else if (typeof data === 'object' && data instanceof FormData) {\n this._body = null;\n } else {\n throw new Error(`Unsupported send() data ${data}`);\n }\n return void 0;\n };\n\n XMLHttpRequestUpload.prototype._finalizeHeaders = function (headers, loweredHeaders) {\n if (this._contentType && !('content-type' in loweredHeaders)) {\n headers['Content-Type'] = this._contentType;\n }\n if (this._body) {\n headers['Content-Length'] = this._body.length.toString();\n }\n return void 0;\n };\n\n XMLHttpRequestUpload.prototype._startUpload = function (request) {\n if (this._body) {\n request.write(this._body);\n }\n request.end();\n return void 0;\n };\n\n return XMLHttpRequestUpload;\n }(XMLHttpRequestEventTarget));\n\n XMLHttpRequest.XMLHttpRequestUpload = XMLHttpRequestUpload;\n}).call(this);\n","/* eslint-disable no-console */\n\n'use strict';\n\nconst MEASURE_TESTIM_CLI_PERFORMANCE = process.env.MEASURE_TESTIM_CLI_PERFORMANCE;\nconst epoch = Date.now();\nlet last = Date.now();\n\nmodule.exports = {\n log(...args) {\n if (!MEASURE_TESTIM_CLI_PERFORMANCE) {\n return;\n }\n const time = Date.now();\n console.log(`${time - epoch}\\t\\t\\t${time - last}\\t\\t\\t`, ...args);\n last = time;\n },\n measure(fn) {\n if (!MEASURE_TESTIM_CLI_PERFORMANCE) {\n return;\n }\n const start = Date.now();\n try {\n fn();\n } finally {\n console.log(fn.name, 'took', Date.now() - start);\n }\n },\n patchPromisePrototype() {\n // TODO: Stop monkey patching shit\n // eslint-disable-next-line no-extend-native\n Promise.prototype.log = function log(message) {\n if (!MEASURE_TESTIM_CLI_PERFORMANCE) {\n return this;\n }\n return this.then((v) => {\n module.exports.log(message);\n return v;\n });\n };\n },\n measureRequireTimes() {\n if (!MEASURE_TESTIM_CLI_PERFORMANCE) {\n return;\n }\n const {\n performance,\n PerformanceObserver,\n } = require('perf_hooks');\n const mod = require('module');\n\n // TODO: fix this to work with TS build. (code that uses require is overriden and never uses it directly)\n // Monkey patch the require function\n mod.Module.prototype.require = performance.timerify(mod.Module.prototype.require);\n // TODO: Stop monkey patching shit\n // eslint-disable-next-line no-global-assign\n require = performance.timerify(require);\n\n // Activate the observer\n const obs = new PerformanceObserver((list) => {\n const entries = list.getEntries();\n entries.sort((a, b) => b.duration - a.duration).filter(x => x.duration > 1).forEach((entry) => {\n console.log(`require('${entry[0]}')`, entry.duration);\n });\n obs.disconnect();\n });\n obs.observe({ entryTypes: ['function'], buffered: true });\n },\n};\n\n// ew ~ Benji\nmodule.exports.patchPromisePrototype();\n","'use strict';\n\nmodule.exports = {\n timeoutMessages: {\n GET_BROWSER_TIMEOUT_MSG: 'get-browser-timeout',\n TEST_START_TIMEOUT_MSG: 'test-start-timeout',\n TEST_COMPLETE_TIMEOUT_MSG: 'test-complete-timeout',\n },\n testRunStatus: {\n COMPLETED: 'completed',\n RUNNING: 'running',\n },\n runnerTestStatus: {\n PASSED: 'PASSED',\n FAILED: 'FAILED',\n ABORTED: 'ABORTED',\n SKIPPED: 'SKIPPED',\n QUEUED: 'QUEUED',\n },\n testStatus: {\n DRAFT: 'draft',\n EVALUATING: 'evaluating',\n ACTIVE: 'active',\n QUARANTINE: 'quarantine',\n },\n gridMessages: {\n NOT_FOUND: 'The specified grid is not available',\n UNKNOWN: \"Test couldn't get browser - unknown error\",\n },\n mobileWeb: {\n MOBILE_WEB_REMOTE_RUN_HEADER_SPACING: 50,\n },\n test: {\n HIDDEN_PARAM: 'TST_HIDDEN_PARAM',\n },\n socketEventTypes: {\n TEST_RESULT_CREATED: 'test-result-created',\n TEST_RESULT_UPDATED: 'test-result-updated',\n REMOTE_STEP_SAVED: 'remote-step-saved',\n },\n CLI_MODE: {\n EXTENSION: 'extension',\n SELENIUM: 'selenium',\n APPIUM: 'appium',\n },\n sessionType: {\n CODELESS: 'codeless',\n CODEFUL: 'codeful',\n },\n gridTypes: {\n TESTIM_ENTERPRISE: 'testimEnterprise',\n TESTIM: 'testim',\n LAMBDATEST: 'testimLambdaTest',\n DEVICE_FARM: 'testimDF',\n HYBRID: 'testimHybrid',\n BROWSERSTACK: 'browserstack',\n SAUCELABS: 'saucelabs',\n TESTIM_HEADSPIN: 'testimHeadspin',\n },\n stepResult: {\n SETUP_TIMEOUT: 'setup-timeout',\n NETWORK_ERROR: 'network-error',\n GRID_ERROR: 'grid-error',\n SELENIUM_ERROR: 'selenium-error',\n BROWSER_CLOSED: 'browser-closed',\n },\n};\n","// @ts-check\n\n'use strict';\n\n/**\n * @param {number} length\n * @returns {string}\n */\nfunction randomString(length) {\n const a = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890';\n const index = (Math.random() * (a.length - 1)).toFixed(0);\n return length > 0 ? a[index] + randomString(length - 1) : '';\n}\n\n/**\n * @param {string} editorUrl\n * @param {string} projectId\n * @param {string} testId\n * @param {string=} resultId\n * @param {string=} branch\n */\nfunction getTestUrl(editorUrl, projectId, testId, resultId, branch) {\n let testUrl = '';\n branch = branch ? encodeURIComponent(branch) : 'master';\n if (projectId && testId) {\n testUrl = `${editorUrl}/#/project/${projectId}/branch/${branch}/test/${testId}`;\n if (resultId) {\n testUrl += `?result-id=${resultId}`;\n }\n }\n return testUrl;\n}\n\n/**\n * @param {string} userName\n * @param {string} password\n */\nfunction buildBasicHeader(userName, password) {\n const userAndPasswordBase64 = Buffer.from(`${userName}:${password}`).toString('base64');\n return `Basic ${userAndPasswordBase64}`;\n}\n\n/** @param {string} path */\nfunction isURL(path) {\n const legacyPattern = /^(https?:\\/\\/)/i;\n\n // https://gist.github.com/dperini/729294 (validator.js based on).\n const pattern = new RegExp(\n '^' +\n // protocol identifier (optional)\n // short syntax // still required\n '(?:(?:(?:https?|ftp):)?\\\\/\\\\/)' +\n // user:pass BasicAuth (optional)\n '(?:\\\\S+(?::\\\\S*)?@)?' +\n '(?:' +\n // IP address exclusion\n // private & local networks\n '(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})' +\n '(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})' +\n '(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})' +\n // IP address dotted notation octets\n // excludes loopback network 0.0.0.0\n // excludes reserved space >= 224.0.0.0\n // excludes network & broadcast addresses\n // (first & last IP address of each class)\n '(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])' +\n '(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}' +\n '(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))' +\n '|' +\n // host & domain names, may end with dot\n // can be replaced by a shortest alternative\n // (?![-_])(?:[-\\\\w\\\\u00a1-\\\\uffff]{0,63}[^-_]\\\\.)+\n '(?:' +\n '(?:' +\n '[a-z0-9\\\\u00a1-\\\\uffff]' +\n '[a-z0-9\\\\u00a1-\\\\uffff_-]{0,62}' +\n ')?' +\n '[a-z0-9\\\\u00a1-\\\\uffff]\\\\.' +\n ')+' +\n // TLD identifier name, may end with dot\n '(?:[a-z\\\\u00a1-\\\\uffff]{2,}\\\\.?)' +\n ')' +\n // port number (optional)\n '(?::\\\\d{2,5})?' +\n // resource path (optional)\n '(?:[/?#]\\\\S*)?' +\n '$', 'i'\n );\n\n return legacyPattern.test(path) || pattern.test(path);\n}\n\nmodule.exports = {\n isURL,\n getTestUrl,\n buildBasicHeader,\n guid: (n = 16) => randomString(n),\n};\n","{\n \"name\": \"@testim/testim-cli\",\n \"version\": \"0.10.22\",\n \"description\": \"Command line interface for running Testing on your CI\",\n \"author\": \"Oren Rubin\",\n \"contributors\": [\n {\n \"name\": \"Oren Rubin\",\n \"email\": \"oren@testim.io\"\n }\n ],\n \"bugs\": {\n \"email\": \"info@testim.io\"\n },\n \"devDependencies\": {\n \"@types/decompress\": \"4.2.4\",\n \"@types/fs-extra\": \"9.0.13\",\n \"@types/ms\": \"0.7.31\",\n \"@types/node\": \"10.17.24\",\n \"@types/prompts\": \"2.4.2\",\n \"@types/selenium-webdriver\": \"4.0.9\",\n \"@types/validate-npm-package-name\": \"3.0.3\",\n \"bundle-deps\": \"1.0.0\",\n \"gulp\": \"4.0.2\",\n \"gulp-cli\": \"2.3.0\",\n \"gulp-json-editor\": \"2.5.6\",\n \"merge-stream\": \"2.0.0\",\n \"proxyquire\": \"2.1.3\",\n \"sinon\": \"9.0.2\",\n \"sinon-chai\": \"3.7.0\",\n \"ts-node\": \"9.1.1\",\n \"tsconfig-paths\": \"3.12.0\",\n \"tsup\": \"6.6.0\",\n \"typescript\": \"4.6.2\"\n },\n \"lazyDependencies\": {\n \"ngrok\": \"3.4.0\",\n \"webpack\": \"5.74.0\",\n \"playwright\": \"0.12.1\",\n \"puppeteer\": \"2.1.1\",\n \"selenium-webdriver\": \"3.6.0\",\n \"v8-to-istanbul\": \"7.0.0\",\n \"istanbul-lib-coverage\": \"3.0.0\",\n \"@bcoe/v8-coverage\": \"0.2.3\",\n \"convert-source-map\": \"1.7.0\",\n \"multer\": \"1.4.5-lts.1\"\n },\n \"dependencies\": {\n \"@applitools/eyes-sdk-core\": \"13.11.29\",\n \"@testim/coralogix-logger\": \"1.1.27-beta.1\",\n \"@testim/webdriverio\": \"0.0.8\",\n \"abort-controller\": \"3.0.0\",\n \"ajv\": \"6.12.6\",\n \"analytics-node\": \"5.0.0\",\n \"appium-dom-utils\": \"1.0.6\",\n \"archiver\": \"5.3.0\",\n \"body-parser\": \"1.20.1\",\n \"chalk\": \"4.1.2\",\n \"chrome-launcher\": \"0.15.0\",\n \"combine-source-map\": \"0.8.0\",\n \"commander\": \"2.9.0\",\n \"compression\": \"1.7.4\",\n \"cors\": \"2.8.5\",\n \"crypto-js\": \"4.1.1\",\n \"data-uri-to-buffer\": \"2.0.2\",\n \"decompress\": \"4.2.1\",\n \"express\": \"4.17.3\",\n \"fkill\": \"7.2.1\",\n \"form-data\": \"3.0.0\",\n \"fs-extra\": \"10.0.1\",\n \"glob\": \"7.2.0\",\n \"https-proxy-agent\": \"5.0.0\",\n \"istanbul-lib-report\": \"3.0.0\",\n \"istanbul-reports\": \"3.0.2\",\n \"jimp\": \"0.16.2\",\n \"jsdom\": \"19.0.0\",\n \"jsonwebtoken\": \"9.0.0\",\n \"lodash\": \"4.17.21\",\n \"memory-fs\": \"0.5.0\",\n \"memorystream\": \"0.3.1\",\n \"mkdirp\": \"1.0.4\",\n \"moment\": \"2.29.4\",\n \"ms\": \"2.1.2\",\n \"npm\": \"8.19.2\",\n \"object-hash\": \"3.0.0\",\n \"ora\": \"5.4.1\",\n \"p-limit\": \"4.0.0\",\n \"p-retry\": \"4.6.2\",\n \"pako\": \"1.0.11\",\n \"portfinder\": \"1.0.28\",\n \"promise-queue\": \"2.2.5\",\n \"prompts\": \"2.4.2\",\n \"proxy-agent\": \"5.0.0\",\n \"rox-node\": \"4.9.18\",\n \"semver\": \"7.3.2\",\n \"serialize-error\": \"7.0.1\",\n \"socket.io-client\": \"4.5.4\",\n \"source-map-support\": \"0.5.19\",\n \"superagent\": \"3.8.3\",\n \"superagent-proxy\": \"3.0.0\",\n \"test-exclude\": \"6.0.0\",\n \"threads\": \"0.12.0\",\n \"ua-parser-js\": \"0.7.33\",\n \"validate-npm-package-name\": \"3.0.0\",\n \"webdriverio\": \"7.24.0\",\n \"winston\": \"3.6.0\",\n \"winston-transport\": \"4.5.0\",\n \"ws\": \"8.5.0\",\n \"xml2js\": \"0.4.23\",\n \"yaml\": \"1.10.0\"\n },\n \"license\": \"Proprietary\",\n \"bin\": {\n \"testim\": \"cli.js\"\n },\n \"scripts\": {\n \"test\": \"yarn test:pattern './src/**/*.test.[jt]s'\",\n \"test:pattern\": \"IS_UNIT_TEST=1 ../../node_modules/mocha/bin/_mocha --timeout 2000 --exit --recursive --exclude ./src/codim/template.[jt]s/tests/examples/**/*.test.[jt]s --watch-files 'src' -r ts-node/register/transpile-only -r tsconfig-paths/register\",\n \"test:cov\": \"nyc --reporter=lcov --reporter=text yarn test\",\n \"upload-bundle-s3\": \"ts-node-transpile-only scripts/upload.js\",\n \"prepare-version\": \"rm -rf ./deploy && mkdir -p deploy && gulp prepare-version-on-prem\",\n \"make-onprem-deps\": \"cp ../../yarn.lock deploy && cd deploy && yarn install --production && bundle-deps\",\n \"pack-onprem\": \"yarn prepare-version && yarn make-onprem-deps && cd deploy && npm pack && zip -r testim-cli.zip testim-cli-*.tgz\",\n \"pack-serve\": \"yarn pack-onprem && http-server deploy/\",\n \"self-test\": \"cd /tmp && DEBUG=self-test BUILD_MAX_MEMORY=4096 tsx /home/circleci/testimio/apps/runner/scripts/selfTest.ts\"\n },\n \"engines\": {\n \"node\": \">= 14.0.0\"\n }\n}\n","'use strict';\n\nlet SERVICES_HOST = process.env.SERVICES_HOST || 'https://services.testim.io';\nconst canonicalBlobURL = 'https://testimstatic.blob.core.windows.net';\nconst canonicalEdgeUrl = 'https://tstresultfiles.azureedge.net';\nif (process.env.GATEWAY_URL) {\n process.env.CORALOGIX_URL = `${process.env.GATEWAY_URL}/testim/coralogix/api/v1/logs`;\n process.env.SERVICES_HOST = `${process.env.GATEWAY_URL}/testim/services`;\n // set the services for the extension\n process.env.EXTENSION_SERVICES_HOST = process.env.TUNNEL_GATEWAY ? process.env.SERVICES_HOST : SERVICES_HOST;\n SERVICES_HOST = process.env.SERVICES_HOST;\n}\n\nmodule.exports = {\n DISABLE_AGENT_ORIGIN_CHECK: parseInt(process.env.DISABLE_AGENT_ORIGIN_CHECK || '0'),\n DISABLE_DEBUGGER_INFINITE_TIMEOUT: parseInt(process.env.DISABLE_DEBUGGER_INFINITE_TIMEOUT || '0'),\n OVERRIDE_TIMEOUTS: parseInt(process.env.OVERRIDE_TIMEOUTS || '0'),\n EDITOR_URL: process.env.EDITOR_URL,\n WEBSOCKET_HOST: process.env.WEBSOCKET_HOST || `${SERVICES_HOST}/ws`,\n SERVICES_HOST,\n LOGGER_CONSOLE: parseInt(process.env.LOGGER_CONSOLE || '0'),\n LOGGER_DEBUG: parseInt(process.env.LOGGER_DEBUG || '0'),\n WEBDRIVER_DEBUG: parseInt(process.env.WEBDRIVER_DEBUG || '0'),\n IS_ON_PREM: parseInt(process.env.IS_ON_PREM || '0'),\n REQUESTS_QUEUE_SIZE: process.env.REQUESTS_QUEUE_SIZE ? parseInt(process.env.REQUESTS_QUEUE_SIZE) : undefined,\n DEBUG_MODE: parseInt(process.env.DEBUG_MODE || '0'),\n TESTIM_CONCURRENT_WORKER_COUNT: process.env.TESTIM_CONCURRENT_WORKER_COUNT ? parseInt(process.env.TESTIM_CONCURRENT_WORKER_COUNT) : null,\n ROLLOUT_KEY: process.env.ROLLOUT_KEY || '5b5560729601aa6484276518',\n DF_ENABLE_VIDEO: parseInt(process.env.DF_ENABLE_VIDEO || '0'),\n START_WORKER_DELAY_MS: parseInt(process.env.START_WORKER_DELAY_MS || 1500),\n APPIUM_VERSION: process.env.APPIUM_VERSION || '1.10.1',\n\n GATEWAY_URL: process.env.GATEWAY_URL,\n EXTENSION_SERVICES_HOST: process.env.EXTENSION_SERVICES_HOST || SERVICES_HOST,\n BLOB_URL: process.env.GATEWAY_URL ? `${process.env.GATEWAY_URL}/testim/blob` : canonicalBlobURL,\n EDGE_URL: process.env.GATEWAY_URL ? `${process.env.GATEWAY_URL}/testim/edge` : canonicalEdgeUrl,\n CANONICAL_BLOB_URL: canonicalBlobURL,\n CANONICAL_EDGE_URL: canonicalEdgeUrl,\n};\n","const { Log, Severity, CoralogixLogger } = require('@testim/coralogix-logger');\nconst TransportStream = require('winston-transport');\n\nconst severityMap = {\n silly: Severity.verbose,\n verbose: Severity.verbose,\n info: Severity.info,\n http: Severity.info,\n warn: Severity.warning,\n warning: Severity.warning,\n error: Severity.error,\n silent: Severity.verbose,\n critical: Severity.critical,\n crit: Severity.critical,\n debug: Severity.debug,\n};\n\nconst errorProps = ['err', 'error', 'reason', 'e'];\n\nclass CoralogixTransport extends TransportStream {\n constructor(options) {\n options = Object.assign({}, CoralogixTransport.options, options);\n super(options);\n this.options = options;\n this.logger = new CoralogixLogger(options.category);\n this.name = 'Coralogix Transport';\n if (options.timestamp) {\n this.timestamp = options.timestamp;\n }\n }\n\n log(info, callback) {\n const { category, level, message: msg, meta: infoMeta = {}, ...restMeta } = info;\n const meta = Object.assign({}, infoMeta, this.options.extraFields, restMeta);\n const log = new Log();\n\n log.severity = severityMap[level];\n log.text = msg;\n log.category = category;\n if (meta.className) {\n log.className = meta.className;\n }\n if (meta.methodName) {\n log.methodName = meta.methodName;\n }\n if (meta.threadId) {\n log.threadId = meta.threadId;\n }\n delete meta.className;\n delete meta.methodName;\n delete meta.threadId;\n delete meta.category;\n delete meta.level;\n delete meta.message;\n let errorOverride = false;\n if (infoMeta instanceof Error) {\n errorOverride = true;\n meta.msg = infoMeta.message + infoMeta.stack;\n if (msg) {\n meta.msg = `${msg}\\n${meta.msg}`;\n }\n }\n\n for (const prop of errorProps) {\n if (infoMeta[prop] instanceof Error) {\n meta[prop] = {\n message: infoMeta[prop].message,\n stack: infoMeta[prop].stack,\n name: infoMeta[prop].name,\n type: infoMeta[prop].type,\n cause: infoMeta[prop].cause,\n ...infoMeta[prop],\n };\n }\n }\n\n // still have keys after deleting the above\n if (Object.keys(meta).length > 0) {\n if (msg && !errorOverride) {\n meta.msg = msg;\n }\n log.text = meta;\n }\n\n this.logger.addLog(log);\n callback(null, true);\n }\n\n waitForFlush() {\n return this.logger.waitForFlush();\n }\n\n static configure(config) {\n CoralogixLogger.configure(config);\n CoralogixTransport.options = config;\n }\n}\n\nmodule.exports.CoralogixTransport = CoralogixTransport;\n","import * as os from 'os';\nimport * as winston from 'winston';\nimport * as config from './config';\nimport { getRunnerVersion } from '../utils';\n\nconst hostname = os.hostname();\nconst runnerVersion = getRunnerVersion();\n\n\nconst loggerConfig = {\n privateKey: 'd0eb01da-f966-1663-63c6-8871225d7c39',\n applicationName: 'testim',\n subsystemName: 'runner',\n};\n\nfunction getStreamsAndWaitForFlushPromise() {\n const transports: winston.transport[] = [];\n\n let waitForFlush = () => Promise.resolve();\n\n if (!config.IS_ON_PREM) {\n const { CoralogixTransport } = require('../lib/coralogix-winston.transport');\n\n CoralogixTransport.configure(loggerConfig);\n const loggerInstance = new CoralogixTransport({\n category: 'ROOT',\n });\n transports.push(loggerInstance);\n\n waitForFlush = () => loggerInstance.waitForFlush();\n }\n\n if (config.LOGGER_CONSOLE) {\n transports.push(new winston.transports.Console({\n format: winston.format.combine(winston.format.colorize(), winston.format.simple()),\n }));\n }\n return [transports, waitForFlush] as const;\n}\n\nconst [transports, waitForFlush] = getStreamsAndWaitForFlushPromise();\nconst level = config.LOGGER_DEBUG ? 'debug' : 'info';\nconst defaultMeta = {\n release: Boolean(global.meta?.IS_RELEASE),\n branch: (global.meta?.IS_RELEASE && 'production') || (!global.meta?.IS_LOCAL && global.meta?.CIRCLE_BRANCH) || 'local',\n};\n\nconst winstonMainLogger = winston.createLogger({\n levels: winston.config.syslog.levels,\n level,\n transports,\n defaultMeta: { name: 'runner', hostname, nodeVersion: process.version, runnerVersion, ...defaultMeta },\n});\n\nlet executionId: string | null | undefined = null;\nlet projectId: string | null | undefined = null;\n\nexport function setExecutionId(execId?: string | null) {\n executionId = execId;\n}\n\nexport function setProjectId(projId?: string | null) {\n projectId = projId;\n}\n\nexport function setProxyUri(proxyUri: any) {\n if (config.IS_ON_PREM || !proxyUri) {\n return;\n }\n const { CoralogixTransport } = require('../lib/coralogix-winston.transport');\n CoralogixTransport.configure({ ...loggerConfig, proxyUri });\n}\n\nfunction addExecutionMetadata(dataExecutionId?: string) {\n const logData = {\n projectId,\n time: (new Date()).toISOString(),\n ...(executionId && !dataExecutionId && { executionId }),\n };\n return logData;\n}\n\ntype Level = 'debug' | 'info' | 'warning' | 'error' | 'crit';\n\nclass Logger {\n constructor(private readonly _logger: winston.Logger) {\n this.debug = this.debug.bind(this);\n this.info = this.info.bind(this);\n this.warn = this.warn.bind(this);\n this.error = this.error.bind(this);\n this.fatal = this.fatal.bind(this);\n }\n\n debug(msg: string, data: object = {}) {\n this.innerLog('debug', msg, data);\n }\n\n info(msg: string, data: object = {}) {\n this.innerLog('info', msg, data);\n }\n\n warn(msg: string, data: object = {}) {\n this.innerLog('warning', msg, data);\n }\n\n error(msg: string, data: object = {}) {\n this.innerLog('error', msg, data);\n }\n\n fatal(msg: string, data: object = {}) {\n this.innerLog('crit', msg, data);\n }\n\n private innerLog(logLevel: Level, msg: string, data: object = {}) {\n const { executionId: dataExecutionId } = data as { [key: string]: any };\n try {\n this._logger.log(logLevel, Object.assign({ meta: data, message: msg }, addExecutionMetadata(dataExecutionId)));\n } catch (err) {\n try {\n this._logger.log('crit', Object.assign({ message: `failed to log message ${err.message}, ${err.stack}` }, addExecutionMetadata(dataExecutionId)));\n } catch (_err) {\n // well what can we do\n }\n }\n }\n\n waitForFlush() {\n return waitForFlush();\n }\n}\n\nexport function getLogger(loggerName: string) {\n return new Logger(winstonMainLogger.child({ category: loggerName }));\n}\n","const { AbortError } = require('p-retry');\n/**\n * NoArgsError - throws when arguments not passed to cli\n *\n */\nfunction NoArgsError() {\n this.name = 'NoArgsError';\n Error.captureStackTrace(this, NoArgsError);\n}\n\nNoArgsError.prototype = Object.create(Error.prototype);\nNoArgsError.prototype.constructor = NoArgsError;\n\n/**\n * ArgError - throws when argument is invalid\n *\n */\nfunction ArgError(message) {\n this.message = message;\n this.name = 'ArgError';\n Error.captureStackTrace(this, ArgError);\n}\n\nArgError.prototype = Object.create(Error.prototype);\nArgError.prototype.constructor = ArgError;\n\n/**\n * SeleniumError - throws when selenium return error\n *\n */\nfunction SeleniumError(seleniumStack) {\n this.message = seleniumStack.orgStatusMessage || seleniumStack.message;\n this.errorType = seleniumStack.type;\n this.name = 'SeleniumError';\n Error.captureStackTrace(this, SeleniumError);\n}\n\nSeleniumError.prototype = Object.create(Error.prototype);\nSeleniumError.prototype.constructor = SeleniumError;\n\n/**\n * StopRunOnError\n *\n */\nfunction StopRunOnError(message) {\n this.message = message;\n this.name = 'StopRunOnError';\n Error.captureStackTrace(this, StopRunOnError);\n}\n\nStopRunOnError.prototype = Object.create(Error.prototype);\nStopRunOnError.prototype.constructor = StopRunOnError;\n\nclass GetBrowserError extends Error {\n constructor(message, type) {\n super(message);\n this.type = type;\n }\n}\n\nclass PageNotAvailableError extends AbortError {}\n\nclass TimeoutError extends Error {}\n\nclass QuotaDepletedError extends Error {}\n\nclass GridError extends Error {\n constructor(message) {\n super(message);\n this.name = 'GridError';\n }\n\n toString() {\n return this.message;\n }\n}\n\nclass GridConcurrencyError extends GridError {\n constructor(message) {\n super(message);\n this.name = 'GridConcurrencyError';\n }\n}\n\n/**\n * NpmPackageError\n *\n */\nfunction NpmPackageError(message) {\n this.message = message;\n this.name = 'NpmPackageError';\n Error.captureStackTrace(this, NpmPackageError);\n}\n\nNpmPackageError.prototype = Object.create(Error.prototype);\nNpmPackageError.prototype.constructor = NpmPackageError;\n\n/**\n * SeleniumCrashError\n *\n */\nfunction SeleniumCrashError() {\n this.message = 'selenium driver crashed';\n this.name = 'SeleniumCrashError';\n Error.captureStackTrace(this, SeleniumCrashError);\n}\nSeleniumCrashError.prototype = Object.create(Error.prototype);\nSeleniumCrashError.prototype.constructor = SeleniumCrashError;\n\n/**\n * IeError\n *\n */\nfunction IeError(msg = '') {\n this.message = msg;\n this.name = 'IeError';\n Error.captureStackTrace(this, IeError);\n}\nIeError.prototype = Object.create(Error.prototype);\nIeError.prototype.constructor = IeError;\n\nclass ClientError extends Error {}\n\nclass PlaygroundCodeError extends Error {}\n\nclass NpmPermissionsError extends Error {\n constructor(path) {\n super(`Testim had missing write access to ${path}`);\n this.path = path;\n }\n}\n\nclass NotImplementedError extends Error {\n constructor(descendant = false) {\n let message = 'not implemented';\n if (descendant) {\n message = 'should be implemented on descendant';\n }\n super(message);\n }\n}\n\nmodule.exports = {\n NoArgsError,\n SeleniumError,\n ArgError,\n StopRunOnError,\n GetBrowserError,\n PageNotAvailableError,\n GridError,\n GridConcurrencyError,\n QuotaDepletedError,\n NpmPackageError,\n NpmPermissionsError,\n SeleniumCrashError,\n IeError,\n ClientError,\n PlaygroundCodeError,\n NotImplementedError,\n TimeoutError,\n};\n","import { TimeoutError } from '../errors';\nimport { OVERRIDE_TIMEOUTS } from '../commons/config';\n\nexport { TimeoutError };\n\nexport function isPromise(obj: any): obj is Promise<any> {\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\n/** @param time in ms */\nexport function delay(time: number) {\n return new Promise<void>(((resolve) => {\n setTimeout(resolve, time);\n }));\n}\n\n\nlet warnedAboutDebugger = false;\nexport function promiseTimeout<T>(promise: Promise<T>, timeout: number, errMsg = 'Timeout Error') {\n if (OVERRIDE_TIMEOUTS && !warnedAboutDebugger) {\n warnedAboutDebugger = true;\n // eslint-disable-next-line no-console\n console.log('Debugger connected - timeouts were overridden to 10 minutes to improve debugging');\n }\n const timeoutErr = new TimeoutError(errMsg);\n timeout = OVERRIDE_TIMEOUTS ? Number(OVERRIDE_TIMEOUTS) || 600_000 : timeout;\n return Promise.race([\n promise,\n delay(timeout).then(() => { throw timeoutErr; }),\n ]);\n}\n\nlet pLimit: typeof import('p-limit')['default'];\nexport async function promiseMap<T, U>(arr: ArrayLike<T> | Iterable<T>, handler: (item: T, index: number) => PromiseLike<U>, { concurrency }: { concurrency?: number } = {}) {\n if (concurrency) {\n pLimit ||= (await import('p-limit')).default;\n const limit = pLimit(concurrency);\n return await Promise.all(Array.from(arr, (item, index) => limit(() => handler(item, index))));\n }\n return await Promise.all(Array.from(arr, handler));\n}\n\nexport function promiseFromCallback<ErrT, T>(resolver: (callback: (err: ErrT, result: T) => void) => void) {\n return new Promise<T>((resolve, reject) => {\n resolver((err, result) => {\n if (err) {\n return reject(err);\n }\n return resolve(result);\n });\n });\n}\n","// @ts-check\n\n'use strict';\n\nconst _ = require('lodash');\nconst config = require('./config');\nconst dns = require('dns').promises;\nconst { sum } = require('lodash');\nconst { promiseMap } = require('../utils/promiseUtils');\n\nconst logger = require('./logger').getLogger('http-request-counters');\n\nlet networkConnectivityTestFailed = false;\n\n/** Tests network connectivity with DNS resolution (a basic test for a 7 later stack parallel but essential to most HTTP requests) */\nconst testNetworkConnectivity = async () => {\n if (config.IS_ON_PREM) {\n return true;\n }\n const hostnames = ['www.google.com', 'www.facebook.com', 'www.microsoft.com', 'testim.io'];\n try {\n // If any of these domains resolve we consider the connectivity to be ok\n const result = Boolean(await promiseMap(hostnames, host => dns.lookup(host)));\n if (!result) {\n networkConnectivityTestFailed = true;\n }\n return result;\n } catch (e) {\n logger.error('network connectivity test failed');\n networkConnectivityTestFailed = true;\n return false;\n }\n};\nconst throttledTestNetworkConnectivity = _.throttle(testNetworkConnectivity, 10 * 1000);\n\n// we remove entries after 15 minutes, note that this isn't accurate because\n// we remove the \"fail\"/\"success\" 10 minutes after we add them (and not the \"call\")\n// this is fine since these values are an estimation and not an accurate representation\n// we poll them when a test fails - so values older than 15 minutes (10 minutes is\n// the default timeout) are hardly relevant.\nconst ttl = 60 * 1000 * 15;\n\nmodule.exports.makeCounters = () => {\n const counters = {\n /** @type {Map<string, number>} */ call: new Map(),\n /** @type {Map<string, number>} */ success: new Map(),\n /** @type {Map<string, number>} */ fail: new Map(),\n };\n /**\n * @param {counters[keyof counters]} counter\n * @param {string} key\n */\n function update(counter, key) {\n const result = counter.get(key) || 0;\n counter.set(key, result + 1);\n setTimeout(() => {\n const _result = counter.get(key) || 1;\n counter.set(key, _result - 1);\n }, ttl);\n }\n /**\n * @template T, TArgs\n * @param {(...args: TArgs[]) => T} fn\n * @param {string=} name\n * @return {(...args: TArgs[]) => Promise<T>}\n */\n function wrapWithMonitoring(fn, name = fn.name) {\n return async function (...args) {\n update(counters.call, name);\n try {\n const result = await fn.call(null, ...args);\n update(counters.success, name);\n return result;\n } catch (e) {\n update(counters.fail, name);\n if (!networkConnectivityTestFailed) {\n throttledTestNetworkConnectivity();\n }\n throw e;\n }\n };\n }\n wrapWithMonitoring.isNetworkHealthy = async function isNetworkHealthy() {\n if (networkConnectivityTestFailed || !(await testNetworkConnectivity())) {\n return false;\n }\n const allFailed = sum([...counters.fail.values()]);\n const allCalls = sum([...counters.call.values()]);\n // we declare a test unhealthy network wise if\n // 10% or more of requests (out of finished requests) failed\n // note that the network can be unhealthy but the test would still pass\n return allFailed < allCalls * 0.1;\n };\n wrapWithMonitoring.counters = counters; // expose the counters used to the outside\n wrapWithMonitoring.isNetworkHealthy.counters = wrapWithMonitoring.counters;\n wrapWithMonitoring.didNetworkConnectivityTestFail = () => networkConnectivityTestFailed;\n return wrapWithMonitoring;\n};\n","'use strict';\n\nconst logger = require('./logger').getLogger('http-request');\nconst superagent = require('superagent');\nconst { makeCounters } = require('./httpRequestCounters');\nconst { promiseFromCallback } = require('../utils/promiseUtils');\n\nconst wrapWithMonitoring = makeCounters();\n\nconst DEFAULT_REQUEST_TIMEOUT = process.env.DEFAULT_REQUEST_TIMEOUT || 30000; //30sec timeout\nconst DOWNLOAD_REQUEST_TIMEOUT = 60000; //1min timeout\n\nfunction getCaFile() {\n return global.caFileContent;\n}\n\nfunction binaryParser(res, fn) {\n const data = [];\n\n res.on('data', (chunk) => {\n data.push(chunk); // Append Buffer object\n });\n res.on('end', () => {\n fn(null, Buffer.concat(data)); // Merge the chunks and return\n });\n}\n\nfunction getProxy() {\n if (!superagent.Request.prototype.proxy && global.SuperagentProxy) {\n global.SuperagentProxy(superagent);\n }\n return global.proxyUri;\n}\n\nconst logErrorAndRethrow = (logMsg, data) => err => {\n logger.error(logMsg, { ...data, error: err });\n throw err;\n};\n\nfunction deleteMethod(url, body, headers, timeout) {\n return deleteFullRes(url, body, headers, timeout)\n .then(res => {\n if (res.type === 'text/plain') {\n return res.text;\n }\n return res.body;\n })\n .catch(logErrorAndRethrow('failed to delete request', { url }));\n}\n\nfunction deleteFullRes(url, body = {}, headers = {}, timeout = DEFAULT_REQUEST_TIMEOUT) {\n const request = superagent\n .delete(url)\n .send(body)\n .timeout(timeout)\n .set(headers);\n\n if (getCaFile()) {\n request.ca(getCaFile());\n }\n\n if (getProxy()) {\n request.proxy(getProxy());\n }\n\n return promiseFromCallback((callback) => request.end(callback));\n}\n\nfunction post({\n url, body, headers, timeout, retry,\n}) {\n return postFullRes(url, body, headers, timeout, retry)\n .then(res => {\n if (res.type === 'text/plain') {\n return res.text;\n }\n return res.body;\n })\n .catch(logErrorAndRethrow('failed to post request', { url }));\n}\n\nfunction postFullRes(url, body, headers = {}, timeout = DEFAULT_REQUEST_TIMEOUT, retry = 0) {\n const request = superagent\n .post(url)\n .send(body)\n .timeout(timeout)\n .set(headers);\n\n if (getCaFile()) {\n request.ca(getCaFile());\n }\n\n if (getProxy()) {\n request.proxy(getProxy());\n }\n\n if (retry) {\n request.retry(retry);\n }\n\n return promiseFromCallback((callback) => request.end(callback)).catch(e => {\n e.url = url;\n e.originalRequestTimeout = timeout;\n e.additionalSetHeaders = headers;\n throw e;\n });\n}\n\nfunction postForm(url, fields, files, headers = {}, timeout = DEFAULT_REQUEST_TIMEOUT) {\n const request = superagent\n .post(url)\n .type('form')\n .timeout(timeout)\n .set(headers);\n\n request.field(fields);\n\n Object.keys(files).forEach(file => {\n request.attach(file, files[file].buffer, files[file].fileName);\n });\n\n if (getCaFile()) {\n request.ca(getCaFile());\n }\n\n if (getProxy()) {\n request.proxy(getProxy());\n }\n\n return promiseFromCallback((callback) => request.end(callback))\n .then((res) => {\n if (res.type === 'text/plain') {\n return res.text;\n }\n return res.body;\n })\n .catch(logErrorAndRethrow('failed to post request', { url }));\n}\n\nfunction _get(url, query, headers = {}, timeout = DEFAULT_REQUEST_TIMEOUT, { isBinary = false, skipProxy = false } = {}) {\n const request = superagent\n .get(url)\n .query(query)\n .timeout(timeout)\n .set(headers);\n\n if (isBinary) {\n request.buffer(true);\n }\n\n if (getCaFile()) {\n request.ca(getCaFile());\n }\n\n if (!skipProxy && getProxy()) {\n request.proxy(getProxy());\n }\n\n return promiseFromCallback((callback) => request.end(callback));\n}\n\nfunction getText(url, query, headers) {\n return _get(url, query, headers)\n .then((res) => res.text)\n .catch(logErrorAndRethrow('failed to getText request', { url, query }));\n}\n\nfunction get(url, query, headers, timeout, options) {\n return _get(url, query, headers, timeout, options)\n .then((res) => res.body)\n .catch(err => {\n logger.warn('failed to get request', { url, query, error: err });\n throw err;\n });\n}\n\nfunction getFullRes(url, query, headers, timeout) {\n return _get(url, query, headers, timeout);\n}\n\nfunction head(url) {\n const request = superagent\n .head(url)\n .timeout(DEFAULT_REQUEST_TIMEOUT);\n\n if (getCaFile()) {\n request.ca(getCaFile());\n }\n\n if (getProxy()) {\n request.proxy(getProxy());\n }\n\n return promiseFromCallback((callback) => request.end(callback))\n .catch(logErrorAndRethrow('failed to head request', { url }));\n}\n\nfunction put(url, body, headers = {}, timeout = DEFAULT_REQUEST_TIMEOUT) {\n const request = superagent\n .put(url)\n .send(body)\n .timeout(timeout)\n .set(headers);\n\n if (getCaFile()) {\n request.ca(getCaFile());\n }\n\n if (getProxy()) {\n request.proxy(getProxy());\n }\n\n return promiseFromCallback((callback) => request.end(callback))\n .then((res) => res.body)\n .catch(logErrorAndRethrow('failed to put request', { url }));\n}\n\n/**\n * @param {string} url\n * @returns {Promise<Omit<superagent.Response, 'body'> & { body: Buffer }>}\n */\nfunction download(url) {\n logger.info('start to download', { url });\n\n const request = superagent\n .get(url)\n .timeout(DOWNLOAD_REQUEST_TIMEOUT)\n .buffer(true)\n .parse(binaryParser);\n\n if (getCaFile()) {\n request.ca(getCaFile());\n }\n\n if (getProxy()) {\n request.proxy(getProxy());\n }\n\n return promiseFromCallback((callback) => request.end(callback))\n .then(response => {\n logger.info('finished to download', { url });\n return response;\n })\n .catch(logErrorAndRethrow('failed to download', { url }));\n}\n\nmodule.exports = {\n delete: wrapWithMonitoring(deleteMethod),\n deleteFullRes: wrapWithMonitoring(deleteFullRes),\n put: wrapWithMonitoring(put),\n get: wrapWithMonitoring(get),\n getText: wrapWithMonitoring(getText),\n post: wrapWithMonitoring(post),\n postFullRes: wrapWithMonitoring(postFullRes),\n getFullRes: wrapWithMonitoring(getFullRes),\n postForm: wrapWithMonitoring(postForm),\n head: wrapWithMonitoring(head),\n download: wrapWithMonitoring(download),\n isNetworkHealthy: wrapWithMonitoring.isNetworkHealthy,\n didNetworkConnectivityTestFail: wrapWithMonitoring.didNetworkConnectivityTestFail,\n};\n","// @ts-check\n\n'use strict';\n\nconst path = require('path');\nconst pRetry = require('p-retry');\nconst decompress = require('decompress');\nconst stringUtils = require('./stringUtils');\nconst packageJson = require('../../package.json');\nconst { promises: fsPromises, createReadStream, createWriteStream, statSync } = require('fs');\n\nconst DOWNLOAD_RETRY = 3;\n\nfunction getCliLocation() {\n let cliLocation;\n if (!require.main) { // we're in a REPL\n return process.cwd(); // fall back on the current working directory\n }\n if (require.main.filename.includes('/src') || require.main.filename.includes('\\\\src') || process.env.IS_UNIT_TEST) {\n cliLocation = path.resolve(__dirname, '../../');\n } else {\n cliLocation = path.resolve(__dirname, !global.meta?.IS_LOCAL ? '' : '../');\n }\n\n return cliLocation;\n}\n\n/**\n * @param {string} url\n */\nconst download = async (url) => {\n // Lazily required to avoid circular dep (httpRequest requires logger which requires the utils to get the runnerVersion)\n const httpRequest = require('../commons/httpRequest');\n return pRetry(() => httpRequest.download(url), { retries: DOWNLOAD_RETRY });\n};\n\n/**\n * @param {string} url\n * @param {import('fs').PathLike} saveToLocation\n */\nconst downloadAndSave = async (url, saveToLocation) => {\n const res = await download(url);\n return fsPromises.writeFile(saveToLocation, res.body);\n};\n\n/**\n * @param {import('fs').PathLike} readFile\n * @param {import('fs').PathLike} destFile\n * @return {Promise<void>}\n */\nconst copy = async (readFile, destFile) => new Promise((resolve, reject) => {\n try {\n // TODO: can this use fsPromises.copyFile?\n const file = createWriteStream(destFile);\n createReadStream(readFile).pipe(file);\n file.on('finish', () => {\n file.close(() => resolve());\n });\n } catch (err) {\n reject(err);\n }\n});\n\n/**\n * @param {string} location\n * @param {string=} fileName\n */\nfunction getSourcePath(location, fileName) {\n if (stringUtils.isURL(location)) {\n return fileName || path.join(process.cwd(), location.replace(/^.*[\\\\\\/]/, ''));\n }\n\n return fileName || path.basename(location);\n}\n\n/**\n * @param {string} location\n * @param {string} fileName\n */\nconst getSource = async (location, fileName) => {\n const destFile = getSourcePath(location, fileName);\n if (stringUtils.isURL(location)) {\n return downloadAndSave(location, destFile);\n }\n\n return copy(location, destFile);\n};\n\n/**\n * @param {string} location\n */\nconst getSourceAsBuffer = async (location) => {\n if (stringUtils.isURL(location)) {\n return download(location);\n }\n return fsPromises.readFile(location);\n};\n\n/**\n * @param {string} srcZipFile\n * @param {string} destZipPath\n */\nconst unzipFile = async (srcZipFile, destZipPath) => await decompress(srcZipFile, destZipPath);\n\n/**\n * @param {import('fs').PathLike} fileLocation\n */\nconst getLocalFileSizeInMB = (fileLocation) => {\n const stats = statSync(fileLocation);\n const fileSizeInBytes = stats.size;\n return fileSizeInBytes / 1000000;\n};\n\n\nfunction getRunnerVersion() {\n try {\n // Lazy require this, since the version is set after the bundle was built\n /** @type {import('../../package.json')} */\n const pack = require(`${__dirname}${!global.meta?.IS_LOCAL ? '' : '..'}/package.json`); // eslint-disable-line import/no-dynamic-require\n return pack.version;\n } catch (err) {\n return '';\n }\n}\n\nfunction getEnginesVersion() {\n try {\n return packageJson.engines.node;\n } catch (err) {\n return '';\n }\n}\n\n/**\n * @param {string} src Source directory to copy its contents\n * @param {string} dest Target directory to copy to\n * @param {boolean} [createParentDirs=true] Whether to create parent directories\n */\nasync function copyDir(src, dest, createParentDirs = true) {\n const dirents = await fsPromises.readdir(src, { withFileTypes: true });\n await fsPromises.mkdir(dest, { recursive: createParentDirs });\n for (const item of dirents) {\n const srcPath = path.join(src, item.name);\n const destPath = path.join(dest, item.name);\n if (item.isDirectory()) {\n await copyDir(srcPath, destPath);\n } else {\n await fsPromises.copyFile(srcPath, destPath);\n }\n }\n}\n\nmodule.exports = {\n getCliLocation,\n download,\n downloadAndSave,\n copy,\n getSourcePath,\n getSource,\n getSourceAsBuffer,\n unzipFile,\n getLocalFileSizeInMB,\n getRunnerVersion,\n getEnginesVersion,\n copyDir,\n};\n","// @ts-check\n\n'use strict';\n\nconst { sessionType, testStatus: testStatusConst } = require('../commons/constants');\n\n\n/**\n * @typedef {import('../runOptions').Options} Options\n * @typedef {import('../runOptions').InitModeOptions} InitModeOptions\n * @typedef {import('../runOptions').LoginModeOptions} LoginModeOptions\n * @typedef {import('../runOptions').TunnelOptions} TunnelOptions\n * @typedef {import('../runOptions').NgrokTunnelOptions} NgrokTunnelOptions\n * @typedef {import('../runOptions').TunnelDaemonOptions} TunnelDaemonOptions\n * @typedef {import('../runOptions').RunnerOptions} RunnerOptions\n * @typedef {import('../runOptions').AgentModeOptions} AgentModeOptions\n * @typedef {import('../runOptions').InstallLazyDepsOptions} InstallLazyDepsOptions\n */\n\n/** @param {RunnerOptions} options */\nfunction getSessionType(options) {\n return options.files.length > 0 ? sessionType.CODEFUL : sessionType.CODELESS;\n}\n\n/**\n * @param {RunnerOptions} options\n * @param {{ runConfig: { browserValue: string } }[]} testList\n */\nfunction getUniqBrowsers(options, testList) {\n if ((options.testConfigNames?.length || options.testConfigIds?.length || options.testPlan.length || options.testPlanIds.length) && !options.browser) {\n return [...new Set(testList.map(t => t.runConfig.browserValue))];\n }\n return [options.browser?.toLowerCase()];\n}\n\n/** @param {RunnerOptions} options */\nconst hasTestPlanFlag = (options) => Boolean(options.testPlan?.length || options.testPlanIds?.length);\n\n/** @param {RunnerOptions} options */\nconst isRemoteRun = (options) => options.resultId && options.source === 'remote-run';\n\n/**\n * @param {{ testStatus?: string }} test\n * @param {RunnerOptions} options\n */\nconst isQuarantineAndNotRemoteRun = (test, options) => test.testStatus === testStatusConst.QUARANTINE && !isRemoteRun(options) && !options.runQuarantinedTests;\n\nfunction getArgsOnRemoteRunFailure() {\n const { argv: args } = process;\n if (!args.includes('--remoteRunId')) {\n return undefined;\n }\n return {\n remoteRunId: args[args.indexOf('--remoteRunId') + 1],\n projectId: args[args.indexOf('--project') + 1],\n token: args[args.indexOf('--token') + 1],\n };\n}\n\n\n/** @type {(options: Options) => options is InitModeOptions} options */\n// @ts-ignore should be `as any` etc\nconst isInitCodimMode = (options) => Boolean(options.initCodimMode);\n\n/** @type {(options: Options) => options is LoginModeOptions} options */\n// @ts-ignore should be `as any` etc\nconst isLoginMode = (options) => Boolean(options.loginMode);\n\n/** @type {(options: Options) => options is TunnelOptions} options */\n// @ts-ignore should be `as any` etc\nconst isTunnelOnlyMode = (options) => Boolean(options.tunnelOnlyMode);\n\n/** @type {(options: Options) => options is RunnerOptions & { createPrefechedData: true; }} options */\n// @ts-ignore should be `as any` etc\nconst isCreatePrefetchedDataMode = (options) => Boolean(options.createPrefechedData);\n/** @type {(options: Options) => options is InstallLazyDepsOptions} options */\n// @ts-ignore should be `as any` etc\nconst isInstallLazyDepsMode = (options) => Boolean(options.installLazyDepsMode);\n\n/** @type {(options: Options) => options is AgentModeOptions} */\n// @ts-ignore should be `as any` etc\nconst isAgentMode = (options) => options.agentMode;\n\nmodule.exports = {\n getSessionType,\n getUniqBrowsers,\n hasTestPlanFlag,\n isRemoteRun,\n isQuarantineAndNotRemoteRun,\n getArgsOnRemoteRunFailure,\n isInitCodimMode,\n isLoginMode,\n isTunnelOnlyMode,\n isCreatePrefetchedDataMode,\n isAgentMode,\n isInstallLazyDepsMode,\n};\n","//@ts-check\n\n'use strict';\n\nconst moment = require('moment');\n\n/**\n * @param {moment.DurationInputArg1} ms\n */\nfunction getDuration(ms) {\n const duration = moment.duration(ms);\n return `${duration.hours()}:${duration.minutes()}:${duration.seconds()}.${duration.milliseconds()}`;\n}\n\n/**\n * @param {moment.DurationInputArg1} ms\n */\nfunction getDurationSec(ms) {\n return moment.duration(ms).asSeconds();\n}\n\nmodule.exports = {\n getDuration,\n getDurationSec,\n};\n","const UNICODE_CHARACTERS = {\n 'NULL': '\\uE000',\n 'Unidentified': '\\uE000',\n 'Cancel': '\\uE001',\n 'Help': '\\uE002',\n 'Back space': '\\uE003',\n 'Backspace': '\\uE003',\n 'Tab': '\\uE004',\n 'Clear': '\\uE005',\n 'Return': '\\uE006',\n 'Enter': '\\uE007',\n 'Shift': '\\uE008',\n 'Control': '\\uE009',\n 'Alt': '\\uE00A',\n 'Pause': '\\uE00B',\n 'Escape': '\\uE00C',\n 'Space': '\\uE00D',\n ' ': '\\uE00D',\n 'Pageup': '\\uE00E',\n 'PageUp': '\\uE00E',\n 'Page_Up': '\\uE00E',\n 'Pagedown': '\\uE00F',\n 'PageDown': '\\uE00F',\n 'Page_Down': '\\uE00F',\n 'End': '\\uE010',\n 'Home': '\\uE011',\n 'Left arrow': '\\uE012',\n 'Arrow_Left': '\\uE012',\n 'ArrowLeft': '\\uE012',\n 'Up arrow': '\\uE013',\n 'Arrow_Up': '\\uE013',\n 'ArrowUp': '\\uE013',\n 'Right arrow': '\\uE014',\n 'Arrow_Right': '\\uE014',\n 'ArrowRight': '\\uE014',\n 'Down arrow': '\\uE015',\n 'Arrow_Down': '\\uE015',\n 'ArrowDown': '\\uE015',\n 'Insert': '\\uE016',\n 'Delete': '\\uE017',\n 'Semicolon': '\\uE018',\n 'Equals': '\\uE019',\n 'Numpad 0': '\\uE01A',\n 'Numpad 1': '\\uE01B',\n 'Numpad 2': '\\uE01C',\n 'Numpad 3': '\\uE01D',\n 'Numpad 4': '\\uE01E',\n 'Numpad 5': '\\uE01F',\n 'Numpad 6': '\\uE020',\n 'Numpad 7': '\\uE021',\n 'Numpad 8': '\\uE022',\n 'Numpad 9': '\\uE023',\n 'Multiply': '\\uE024',\n 'Add': '\\uE025',\n 'Separator': '\\uE026',\n 'Subtract': '\\uE027',\n 'Decimal': '\\uE028',\n 'Divide': '\\uE029',\n 'F1': '\\uE031',\n 'F2': '\\uE032',\n 'F3': '\\uE033',\n 'F4': '\\uE034',\n 'F5': '\\uE035',\n 'F6': '\\uE036',\n 'F7': '\\uE037',\n 'F8': '\\uE038',\n 'F9': '\\uE039',\n 'F10': '\\uE03A',\n 'F11': '\\uE03B',\n 'F12': '\\uE03C',\n 'Command': '\\uE03D',\n 'Meta': '\\uE03D',\n 'Zenkaku_Hankaku': '\\uE040',\n 'ZenkakuHankaku': '\\uE040'\n};\n\nconst W3C_ELEMENT_ID = 'element-6066-11e4-a52e-4f735466cecf';\n\nconst BUTTON_ENUM = {\n left: 0,\n middle: 1,\n right: 2\n};\n\n/**\n * Webdriver Errors\n */\nconst Unknown = {id: 'Unknown', status: -1, message: 'Remote end send an unknown status code.'};\nconst Success = {id: 'Success', status: 0, message: 'The command executed successfully.'};\nconst NoSuchDriver = {id: 'NoSuchDriver', status: 6, message: 'A session is either terminated or not started'};\nconst NoSuchElement = {\n id: 'NoSuchElement',\n status: 404,\n message: 'An element could not be located on the page using the given search parameters.'\n};\nconst NoSuchFrame = {\n id: 'NoSuchFrame',\n status: 400,\n message: 'A request to switch to a frame could not be satisfied because the frame could not be found.'\n};\nconst UnknownCommand = {\n id: 'UnknownCommand',\n status: 404,\n message: 'The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource.'\n};\nconst StaleElementReference = {\n id: 'StaleElementReference',\n status: 400,\n message: 'An element command failed because the referenced element is no longer attached to the DOM.'\n};\nconst ElementNotVisible = {\n id: 'ElementNotVisible',\n status: 11,\n message: 'An element command could not be completed because the element is not visible on the page.'\n};\nconst InvalidElementState = {\n id: 'InvalidElementState',\n status: 400,\n message: 'An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element).'\n};\nconst UnknownError = {\n id: 'UnknownError',\n status: 500,\n message: 'An unknown server-side error occurred while processing the command.'\n};\nconst ElementIsNotSelectable = {\n id: 'ElementIsNotSelectable',\n status: 400,\n message: 'An attempt was made to select an element that cannot be selected.'\n};\nconst JavaScriptError = {\n id: 'JavaScriptError',\n status: 500,\n message: 'An error occurred while executing user supplied JavaScript.'\n};\nconst XPathLookupError = {\n id: 'XPathLookupError',\n status: 19,\n message: 'An error occurred while searching for an element by XPath.'\n};\nconst Timeout = {id: 'Timeout', status: 408, message: 'An operation did not complete before its timeout expired.'};\nconst NoSuchWindow = {\n id: 'NoSuchWindow',\n status: 400,\n message: 'A request to switch to a different window could not be satisfied because the window could not be found.'\n};\nconst InvalidCookieDomain = {\n id: 'InvalidCookieDomain',\n status: 400,\n message: 'An illegal attempt was made to set a cookie under a different domain than the current page.'\n};\nconst UnableToSetCookie = {\n id: 'UnableToSetCookie',\n status: 500,\n message: 'A request to set a cookie\\'s value could not be satisfied.'\n};\nconst UnexpectedAlertOpen = {\n id: 'UnexpectedAlertOpen',\n status: 500,\n message: 'A modal dialog was open, blocking this operation'\n};\nconst NoAlertOpenError = {\n id: 'NoAlertOpenError',\n status: 400,\n message: 'An attempt was made to operate on a modal dialog when one was not open.'\n};\nconst ScriptTimeout = {\n id: 'ScriptTimeout',\n status: 408,\n message: 'A script did not complete before its timeout expired.'\n};\nconst InvalidElementCoordinates = {\n id: 'InvalidElementCoordinates',\n status: 400,\n message: 'The coordinates provided to an interactions operation are invalid.'\n};\nconst IMENotAvailable = {id: 'IMENotAvailable', status: 30, message: 'IME was not available.'}\nconst IMEEngineActivationFailed = {\n id: 'IMEEngineActivationFailed',\n status: 31,\n message: 'An IME engine could not be started.'\n};\nconst InvalidSelector = {\n id: 'InvalidSelector',\n status: 400,\n message: 'Argument was an invalid selector (e.g. XPath/CSS).'\n};\nconst SessionNotCreatedException = {\n id: 'SessionNotCreatedException',\n status: 500,\n message: 'A new session could not be created.'\n};\nconst ElementNotScrollable = {id: 'ElementNotScrollable', status: 34, message: 'Element cannot be scrolled into view.'};\n\nconst SelectorTimeoutError = {\n id: 'SelectorTimeoutError',\n status: 100,\n message: 'Request timed out after the element was still found on the page.'\n};\nconst NoSessionIdError = {\n id: 'NoSessionIdError',\n status: 101,\n message: 'A session id is required for this command but wasn\\'t found in the response payload'\n};\nconst GridApiError = {id: 'GridApiError', status: 102, message: 'A call to the Selenium Grid API failed'};\n\nconst ElementClickIntercepted = {\n id: 'ElementClickIntercepted',\n status: 400,\n message: 'The Element Click command could not be completed because the element receiving the events is obscuring the element that was requested clicked.'\n};\nconst ElementNotInteractable = {\n id: 'ElementNotInteractable',\n status: 400,\n message: 'A command could not be completed because the element is not pointer- or keyboard interactable.'\n};\nconst InsecureCertificate = {\n id: 'InsecureCertificate',\n status: 400,\n message: 'Navigation caused the user agent to hit a certificate warning, which is usually the result of an expired or invalid TLS certificate.'\n};\nconst InvalidArgument = {\n id: 'InvalidArgument',\n status: 400,\n message: 'The arguments passed to a command are either invalid or malformed.'\n};\nconst InvalidSessionId = {\n id: 'InvalidSessionId',\n status: 404,\n message: 'Occurs if the given session id is not in the list of active sessions, meaning the session either does not exist or that it’s not active.'\n};\nconst MoveTargetOutOfBounds = {\n id: 'MoveTargetOutOfBounds',\n status: 500,\n message: 'The target for mouse interaction is not in the browser’s viewport and cannot be brought into that viewport.'\n};\nconst NoSuchCookie = {\n id: 'NoSuchCookie',\n status: 404,\n message: 'No cookie matching the given path name was found amongst the associated cookies of the current browsing context’s active document.'\n};\nconst UnableToCaptureScreen = {\n id: 'UnableToCaptureScreen',\n status: 500,\n message: 'A screen capture was made impossible.'\n};\nconst UnknownMethod = {\n id: 'UnknownMethod',\n status: 405,\n message: 'The requested command matched a known URL but did not match an method for that URL.'\n};\nconst UnsupportedOperation = {\n id: 'UnsupportedOperation',\n status: 500,\n message: 'Indicates that a command that should have executed properly cannot be supported for some reason.'\n};\n\nconst SELENIUM_STATUS_CODES = {\n '-1': Unknown,\n '0': Success,\n '6': NoSuchDriver,\n '7': NoSuchElement,\n '8': NoSuchFrame,\n '9': UnknownCommand,\n '10': StaleElementReference,\n '11': ElementNotVisible,\n '12': InvalidElementState,\n '13': UnknownError,\n '15': ElementIsNotSelectable,\n '17': JavaScriptError,\n '19': XPathLookupError,\n '21': Timeout,\n '23': NoSuchWindow,\n '24': InvalidCookieDomain,\n '25': UnableToSetCookie,\n '26': UnexpectedAlertOpen,\n '27': NoAlertOpenError,\n '28': ScriptTimeout,\n '29': InvalidElementCoordinates,\n '30': IMENotAvailable,\n '31': IMEEngineActivationFailed,\n '32': InvalidSelector,\n '33': SessionNotCreatedException,\n '34': ElementNotScrollable,\n\n // WebdriverIO specific error codes\n '100': SelectorTimeoutError,\n '101': NoSessionIdError,\n '102': GridApiError,\n\n // W3C Webdriver errors\n 'element click intercepted': ElementClickIntercepted,\n 'element not selectable': ElementIsNotSelectable,\n 'element not interactable': ElementNotInteractable,\n 'insecure certificate': InsecureCertificate,\n 'invalid argument': InvalidArgument,\n 'invalid cookie domain': InvalidCookieDomain,\n 'invalid coordinates': InvalidElementCoordinates,\n 'invalid element state': InvalidElementState,\n 'invalid selector': InvalidSelector,\n 'invalid session id': InvalidSessionId,\n 'javascript error': JavaScriptError,\n 'move target out of bounds': MoveTargetOutOfBounds,\n 'no such alert': NoAlertOpenError,\n 'no such cookie': NoSuchCookie,\n 'no such element': NoSuchElement,\n 'no such frame': NoSuchFrame,\n 'no such window': NoSuchWindow,\n 'script timeout': ScriptTimeout,\n 'session not created': SessionNotCreatedException,\n 'stale element reference': StaleElementReference,\n 'timeout': Timeout,\n 'unable to set cookie': UnableToSetCookie,\n 'unable to capture screen': UnableToCaptureScreen,\n 'unexpected alert open': UnexpectedAlertOpen,\n 'unknown command': UnknownCommand,\n 'unknown error': UnknownError,\n 'unknown method': UnknownMethod,\n 'unsupported operation': UnsupportedOperation\n};\n\nconst EDGE_LAST_VERSION = 44;\nconst EDGE_CHROMIUM_MIN_VERSION = 79;\n\nmodule.exports = {\n EDGE_LAST_VERSION,\n EDGE_CHROMIUM_MIN_VERSION,\n UNICODE_CHARACTERS,\n W3C_ELEMENT_ID,\n BUTTON_ENUM,\n SELENIUM_STATUS_CODES\n};\n","// @ts-check\n\n'use strict';\n\nconst os = require('os');\nconst _ = require('lodash');\nconst path = require('path');\nconst fsUtils = require('./fsUtils');\nconst argsUtils = require('./argsUtils');\nconst timeUtils = require('./timeUtils');\nconst stringUtils = require('./stringUtils');\nconst promiseUtils = require('./promiseUtils');\nconst { W3C_ELEMENT_ID } = require('../player/constants');\n\nconst HOMEDIR = os.homedir();\nconst TESTIM_BROWSER_DIR = path.join(HOMEDIR, '.testim-browser-profile');\n\nconst OSS = [\n { osName: 'Linux', bs: { os: 'LINUX' }, sl: { platform: 'Linux' } },\n { osName: 'Windows 10', bs: { os: 'WINDOWS', os_version: '10' }, sl: { platform: 'Windows 10' } },\n { osName: 'Windows 8', bs: { os: 'WINDOWS', os_version: '8' }, sl: { platform: 'Windows 8' } },\n { osName: 'Windows 8.1', bs: { os: 'WINDOWS', os_version: '8.1' }, sl: { platform: 'Windows 8.1' } },\n { osName: 'Windows 7', bs: { os: 'WINDOWS', os_version: '7' }, sl: { platform: 'Windows 7' } },\n { osName: 'Windows XP', bs: { os: 'WINDOWS', os_version: 'XP' }, sl: { platform: 'Windows XP' } },\n { osName: 'macOS Big Sur', bs: { os: 'OS X', os_version: 'Big Sur', safari_version: '14' }, sl: { platform: 'macOS 11', safari_version: '14' } },\n { osName: 'macOS Catalina', bs: { os: 'OS X', os_version: 'Catalina', safari_version: '13' }, sl: { platform: 'macOS 10.15', safari_version: '13' } },\n { osName: 'macOS Mojave', bs: { os: 'OS X', os_version: 'Mojave', safari_version: '12' }, sl: { platform: 'macOS 10.14', safari_version: '12' } },\n { osName: 'macOS High Sierra', bs: { os: 'OS X', os_version: 'High Sierra', safari_version: '11' }, sl: { platform: 'macOS 10.13', safari_version: '11' } },\n { osName: 'macOS Sierra', bs: { os: 'OS X', os_version: 'Sierra', safari_version: '10' }, sl: { platform: 'macOS 10.12', safari_version: '10.0' } },\n { osName: 'OS X El Capitan', bs: { os: 'OS X', os_version: 'El Capitan', safari_version: '9.1' }, sl: { platform: 'OS X 10.11', safari_version: '9.0' } },\n { osName: 'OS X Yosemite', bs: { os: 'OS X', os_version: 'Yosemite', safari_version: '8' }, sl: { platform: 'OS X 10.10', safari_version: '8.0' } },\n { osName: 'OS X Mavericks', bs: { os: 'OS X', os_version: 'Mavericks', safari_version: '7.1' }, sl: { platform: 'OS X 10.9', safari_version: '7.0' } },\n { osName: 'OS X Mountain Lion', bs: { os: 'OS X', os_version: 'Mountain Lion', safari_version: '6.2' }, sl: { platform: 'OS X 10.8', safari_version: '6.0' } },\n { osName: 'OS X Lion', bs: { os: 'OS X', os_version: 'Lion', safari_version: '6' }, sl: {} },\n { osName: 'OS X Snow Leopard', bs: { os: 'OS X', os_version: 'Snow Leopard', safari_version: '5.1' }, sl: {} },\n\n { osName: 'iOS', bs: { platform: 'MAC' }, sl: { platformName: 'iOS', appiumVersion: '1.6.4' } },\n { osName: 'Android', bs: { platform: 'ANDROID' }, sl: { platformName: 'Android', appiumVersion: '1.6.4' } },\n];\n\nconst BROWSERS = [\n { browserName: 'Chrome', bs: { browser: 'Chrome', browser_version: '94' }, sl: { browserName: 'chrome', version: '94.0' }, browserValue: 'chrome' },\n { browserName: 'Firefox', bs: { browser: 'Firefox', browser_version: '89' }, sl: { browserName: 'firefox', version: '89.0' }, browserValue: 'firefox' },\n { browserName: 'Safari', bs: { browser: 'Safari' }, sl: { browserName: 'safari' }, browserValue: 'safari' },\n { browserName: 'Edge', bs: { browser: 'Edge', browser_version: '18' }, sl: { browserName: 'MicrosoftEdge', version: '18.17763' }, browserValue: 'edge', eol: true },\n // eslint-disable-next-line max-len\n { browserName: 'Edge Chromium', bs: { browser: 'Edge', browser_version: '94' }, sl: { browserName: 'MicrosoftEdge', version: '94' }, synonyms: ['edge-chromium'], browserValue: 'edge-chromium', seleniumName: 'MicrosoftEdge' },\n // eslint-disable-next-line max-len\n { browserName: 'Internet Explorer 11', bs: { browser: 'IE', browser_version: '11' }, sl: { browserName: 'internet explorer', version: '11.0' }, synonyms: ['ie11'], browserValue: 'ie11', eol: true },\n { browserName: 'Browser', bs: {}, sl: { browserName: 'Browser' }, browserValue: 'browser' },\n { browserName: 'Android', bs: { browserName: 'android' }, sl: {}, browserValue: 'android' },\n { browserName: 'iPad', bs: { browserName: 'iPad' }, sl: {}, browserValue: 'ipad' },\n { browserName: 'iPhone', bs: { browserName: 'iPhone' }, sl: {}, browserValue: 'iphone' },\n];\n\nfunction getBrowserInfo(browserValue) {\n browserValue = browserValue.toLowerCase();\n return BROWSERS.find((b) => b.browserValue === browserValue);\n}\n\nfunction getRunConfigByBrowserName(browser, saucelabs, browserstack) {\n browser = browser.toLowerCase();\n const selectedBrowser = BROWSERS.find(b => b.browserName.toLowerCase() === browser || browser.includes(b.synonyms)) || BROWSERS[0];\n\n // BS and SL do not support Linux for newer browser, so use Windows instead.\n let selectedOS = OSS.find(x => x.osName === 'Windows 10');\n if (saucelabs) {\n if (saucelabs.platform) {\n selectedOS = OSS.find(o => o.sl.platform === saucelabs.platform);\n } else if (saucelabs.platformName) {\n selectedOS = OSS.find(o => o.sl.platformName === saucelabs.platformName);\n }\n }\n if (browserstack) {\n if (browserstack.os_version) {\n selectedOS = OSS.find(o => o.bs.os_version === browserstack.os_version);\n } else if (browserstack.platform) {\n selectedOS = OSS.find(o => o.bs.platform === browserstack.platform);\n }\n }\n\n return _.merge(selectedBrowser, selectedOS);\n}\n\nfunction getEnvironmentGitBranch() {\n return process.env.GIT_BRANCH || process.env.CIRCLE_BRANCH || process.env.TRAVIS_BRANCH || process.env.CI_BRANCH;\n}\n\nfunction removePropertyFromObject(obj, propName, cmpFunction) {\n for (const prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n if (cmpFunction(prop, propName)) {\n delete obj[prop];\n } else if (typeof obj[prop] === 'object') {\n removePropertyFromObject(obj[prop], propName, cmpFunction);\n }\n }\n }\n}\n\nfunction extractElementId(element) {\n return element.ELEMENT || element[W3C_ELEMENT_ID];\n}\n\nfunction getPlanType(plan) {\n plan = plan || {};\n const now = Date.now();\n const expirationDate = plan.expireAt || plan.expireAT;\n\n if (plan.plan !== 'free') {\n return 'pro';\n }\n if (expirationDate) {\n return expirationDate < now ? 'free' : 'trial';\n }\n return 'free';\n}\n\nconst calcPercentile = (arr, percentile) => {\n if (arr.length === 0) return 0;\n if (typeof percentile !== 'number') throw new TypeError('p must be a number');\n\n arr = [...arr].sort((a, b) => a - b);\n\n if (percentile <= 0) return arr[0];\n if (percentile >= 100) return arr[arr.length - 1];\n\n const index = Math.ceil(arr.length * (percentile / 100)) - 1;\n return arr[index];\n};\n\nfunction groupTestsByRetries(testResults = []) { // NOTE: This duplicates a function in services (stream-data/result/resultService.js) since we can't share code between packages.\n return _.chain(testResults)\n .groupBy((tr) => tr.originalTestResultId || tr.resultId)\n .values()\n .reduce((/** @type {any[]} */ all, current) => {\n if (!current) {\n return all;\n }\n if (current.length === 1) {\n all.push(current[0]);\n return all;\n }\n const sorted = _.orderBy(current, (tr) =>\n (typeof tr.retryCount === 'number' ? tr.retryCount : 1)\n );\n const last = _.chain(sorted).last().cloneDeep().value();\n if (!last) {\n return all;\n }\n last.retryTestResults = sorted;\n all.push(last);\n return all;\n }, [])\n .compact()\n .value();\n}\n\nasync function getCdpAddressForHost(browserInstanceHost, timeout) {\n // Lazily required to avoid circular dep (httpRequest requires logger which requires the utils to get the runnerVersion)\n const httpRequest = require('../commons/httpRequest');\n try {\n /**\n Example response:\n {\n \"Browser\": \"Chrome/81.0.4044.138\",\n \"Protocol-Version\": \"1.3\",\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\",\n \"V8-Version\": \"8.1.307.32\",\n \"WebKit-Version\": \"537.36 (@8c6c7ba89cc9453625af54f11fd83179e23450fa)\",\n \"webSocketDebuggerUrl\": \"ws://localhost:58938/devtools/browser/d4290379-ec08-4d03-a41a-ab9d9d4c36ac\"\n }\n */\n const debuggerAddress = await httpRequest.get(`http://${browserInstanceHost}/json/version`, undefined, undefined, timeout);\n return debuggerAddress.webSocketDebuggerUrl;\n } catch (e) {\n throw new Error('unable to connect to devtools server');\n }\n}\n\n\nmodule.exports = {\n TESTIM_BROWSER_DIR,\n removePropertyFromObject,\n getEnvironmentGitBranch,\n getRunConfigByBrowserName,\n extractElementId,\n calcPercentile,\n groupTestsByRetries,\n getPlanType,\n getCdpAddressForHost,\n getBrowserInfo,\n ...fsUtils,\n ...argsUtils,\n ...timeUtils,\n ...promiseUtils,\n ...stringUtils,\n};\n","const os = require('os');\nconst { getCliLocation } = require('../utils');\n\nfunction additionalLogDetails() {\n return {\n cliLocation: getCliLocation(),\n userInfo: os.userInfo(),\n platform: os.platform(),\n release: os.release(),\n };\n}\n\nmodule.exports = {\n additionalLogDetails,\n};\n","// @ts-check\n\n'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst crypto = require('crypto');\nconst utils = require('../utils');\nconst { debounce } = require('lodash');\nconst { getLogger } = require('./logger');\n\nconst logger = getLogger('local cache');\n\nlet cacheLocation = path.resolve(utils.getCliLocation(), 'testim-cache');\n\n/** @type {undefined | ((value: string) => void)} */\nlet encryptKeyResolve;\n/** @type {(value: { success: boolean; error?: any }) => void} */\nlet encryptAndSaveResolve;\nlet cacheEnabled = true;\nlet cacheMissAllowed = true;\nlet waitingForSave = false;\n\n/** @type {Promise<{ success: boolean; error?: any }>} */\nlet _encryptAndSavePromise = new Promise(resolve => { encryptAndSaveResolve = resolve; });\n/** @type {Promise<string>} */\nconst _encryptKeyPromise = new Promise(resolve => { encryptKeyResolve = resolve; });\n\n\nconst THREE_HOURS = 1000 * 60 * 60 * 3;\n\nconst getCacheFileLocation = () => path.resolve(path.resolve(cacheLocation, 'testim.cache'));\n\nasync function getLocalRunnerCache() {\n try {\n return await utils.promiseTimeout(\n fs.promises.readFile(getCacheFileLocation()).then(async buffer => {\n const key = await _encryptKeyPromise;\n return decrypt(key, buffer);\n }),\n 30_000,\n );\n } catch {\n return {};\n }\n}\n\nlet localRunnerCache = getLocalRunnerCache();\n\n/** @param {string} dirPath */\nasync function doesPathExist(dirPath) {\n try {\n await fs.promises.access(dirPath, fs.constants.F_OK);\n return true;\n } catch (err) {\n if (err.code === 'ENOENT') {\n return false;\n }\n\n // no permissions to check\n throw err;\n }\n}\n\nconst encryptAndSave = debounce(async (object) => {\n let error;\n try {\n const key = await _encryptKeyPromise;\n const iv = crypto.randomBytes(16);\n const objStr = JSON.stringify(object);\n const keyBuffer = Buffer.from(key);\n const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.concat([keyBuffer, Buffer.alloc(32)], 32), iv);\n const result = Buffer.concat([iv, cipher.update(objStr), cipher.final()]);\n const pathExists = await doesPathExist(cacheLocation);\n if (!pathExists) {\n await fs.promises.mkdir(cacheLocation, { recursive: true });\n }\n await fs.promises.writeFile(getCacheFileLocation(), result);\n } catch (err) {\n logger.error('failed saving cache', { err });\n error = err;\n }\n if (error) {\n encryptAndSaveResolve({ success: false, error });\n } else {\n encryptAndSaveResolve({ success: true });\n }\n}, 200);\n\n/**\n * @param {string} key\n * @param {Buffer} buffer\n */\nfunction decrypt(key, buffer) {\n const iv = buffer.slice(0, 16);\n const encryptedText = buffer.slice(16);\n const keyBuffer = Buffer.from(key);\n const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.concat([keyBuffer, Buffer.alloc(32)], 32), iv);\n const decrypted = decipher.update(encryptedText);\n // @ts-ignore\n return JSON.parse(Buffer.concat([decrypted, decipher.final()]));\n}\n\n/**\n * argument-less memoize for functions with a global cache name\n * @template T\n * @param {() => PromiseLike<T>} fn\n * @param {string} fnName\n * @param {number=} duration\n * @param {*} parameters\n * @returns {() => Promise<Awaited<T>>}\n */\nfunction memoize(fn, fnName, duration = THREE_HOURS, parameters = undefined) {\n return async () => {\n if (!cacheEnabled) {\n return await fn();\n }\n const originalFnName = fnName;\n if (parameters) {\n fnName += JSON.stringify(parameters);\n }\n const cached = await get(fnName);\n if (cached) {\n logger.debug('cache hit:', { fnName });\n return cached;\n }\n logger.debug('cache miss:', { fnName });\n if (!cacheMissAllowed) {\n throw new Error(`Attempted to rebuild cache for ${originalFnName}. cache miss is not allowed with current run configuration`);\n }\n const value = await fn();\n if (value) {\n await set(fnName, value, duration);\n }\n return value;\n };\n}\n\n/** @param {string} key */\nasync function get(key) {\n const obj = await localRunnerCache;\n const valueExpiry = obj[key];\n if (!valueExpiry) {\n return undefined; // not in cache\n }\n const { value, expiry } = valueExpiry;\n if (expiry < Date.now()) {\n return undefined;\n }\n if (!value) {\n return undefined;\n }\n return value;\n}\n\n/**\n * @param {string} key\n * @param {any} value\n * @param {number} ttl\n */\nasync function set(key, value, ttl) {\n if (waitingForSave) {\n logger.error('calling set after waitForSave is not allowed', { key, ttl });\n throw new Error('calling set after waitForSave is not allowed');\n }\n try {\n const obj = await localRunnerCache;\n obj[key] = { value, expiry: Date.now() + ttl };\n _encryptAndSavePromise = new Promise(resolve => { encryptAndSaveResolve = resolve; });\n encryptAndSave(obj);\n } catch (e) {\n logger.error('failed updating cache');\n }\n}\n\nasync function clear() {\n const obj = await localRunnerCache;\n Object.keys(obj).forEach(key => {\n delete obj[key];\n });\n}\n\n/** @param {boolean} enabled */\nfunction setEnabled(enabled) {\n cacheEnabled = enabled;\n}\n\n/** @param {boolean} enabled */\nfunction enableCacheMiss(enabled) {\n cacheMissAllowed = enabled;\n}\n\nasync function waitForSave() {\n try {\n waitingForSave = true;\n return await _encryptAndSavePromise;\n } finally {\n waitingForSave = false;\n }\n}\n\n/** @param {string} location */\nfunction setCacheLocation(location) {\n cacheLocation = location;\n localRunnerCache = getLocalRunnerCache();\n}\n\nmodule.exports.setEncryptKey = encryptKeyResolve;\nmodule.exports.memoize = memoize;\nmodule.exports.get = get;\n\nmodule.exports.set = set;\nmodule.exports.clear = clear;\nmodule.exports.disable = setEnabled.bind(this, false);\nmodule.exports.enable = setEnabled.bind(this, true);\nmodule.exports.disableCacheMiss = enableCacheMiss.bind(this, false);\nmodule.exports.enableCacheMiss = enableCacheMiss.bind(this, true);\nmodule.exports.isEnabled = function () { return cacheEnabled; };\nmodule.exports.setCacheLocation = setCacheLocation;\nmodule.exports.waitForSave = waitForSave;\nmodule.exports.getCacheFileLocation = getCacheFileLocation;\n","/* eslint-disable import/no-dynamic-require */\n\n'use strict';\n\nconst path = require('path');\n\nmodule.exports = {\n requireWithFallback,\n};\n\n/**\n * Require with statCache issue workaround\n * @param {string} packageNama\n */\nfunction requireWithFallback(packageNama) {\n // Workaround for\n // https://github.com/nodejs/node/issues/31803 statCache\n const mainPath = path.resolve(\n path.dirname(require.resolve(`${packageNama}/package.json`)),\n // @ts-ignore\n require(`${packageNama}/package.json`).main || ''\n );\n\n return require(mainPath);\n}\n","\nconst util = require('util');\nconst { additionalLogDetails } = require('./logUtils');\nconst exec = util.promisify(require('child_process').exec);\nconst spawn = require('child_process').spawn;\nconst path = require('path');\nconst { NpmPackageError, NpmPermissionsError } = require('../errors');\nconst fse = require('fs-extra');\nconst logger = require('./logger').getLogger('cli-service');\nconst { requireWithFallback } = require('./requireWithFallback');\nconst fs = require('fs');\nconst utils = require('../utils');\n\nasync function getLatestPackageVersion(packageName) {\n const result = await exec(`npm view ${packageName} version`);\n return result.stdout.trim();\n}\n\nfunction getPackageIfInstalledLocally(packageName) {\n try {\n // note: this code fails if require itself throws here\n // rather than an ENOENT - but since lazy dependencies are all controlled\n // by us that's probably fine.\n return requireWithFallback(packageName);\n } catch (err) {\n return false;\n }\n}\n\nasync function isPackageInstalledInPath(rootPath, packageName) {\n try {\n return await fse.pathExists(path.join(rootPath, `./node_modules/${packageName}/package.json`));\n } catch (error) {\n return false;\n }\n}\n\nfunction getLocallyInstalledPackageVersion(rootPath, packageName) {\n // eslint-disable-next-line import/no-dynamic-require\n return require(path.join(rootPath, `./node_modules/${packageName}/package.json`)).version;\n}\n\n// this is not exactly correct, but it's good enough.\nasync function fileExists(path) {\n try {\n await fs.promises.access(path);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nasync function installPackageLocally(rootPath, packageName, execOptions) {\n function getPathWithMissingPermissions(error) {\n const pathRegex = /EACCES[^']+'(.+)'/;\n const regexResult = pathRegex.exec(error.stderr);\n if (regexResult === null) {\n return false;\n }\n return regexResult[1];\n }\n\n // https://github.com/npm/arborist/pull/362\n function npmSevenAndEightMissingPermissions(error) {\n return /The \"to\" argument must be of type string./.exec(error.stderr);\n }\n\n // this is here because our shrinkwrap blocks our lazy deps for some reason\n const oldShrinkwrap = path.join(rootPath, 'npm-shrinkwrap.json');\n const newShrinkwrap = path.join(rootPath, 'npm-shrinkwrap-dummy.json');\n let renamed = false;\n try {\n try {\n if (await fileExists(oldShrinkwrap)) {\n await fs.promises.rename(oldShrinkwrap, newShrinkwrap);\n renamed = true;\n }\n } catch (err) {\n // ignore error\n }\n return await exec(`npm i ${packageName} --no-save --no-prune --prefer-offline --no-audit --progress=false`, { ...execOptions, cwd: rootPath }).catch(err => {\n const pathWithMissingPermissions = getPathWithMissingPermissions(err);\n const npmEightMissingPermissions = npmSevenAndEightMissingPermissions(err);\n if (pathWithMissingPermissions || npmEightMissingPermissions) {\n logger.info('Failed to install package due to insufficient write access', {\n ...additionalLogDetails(),\n package: packageName,\n path: pathWithMissingPermissions || rootPath,\n });\n // eslint-disable-next-line no-console\n console.error(`\n\nTestim failed installing the package ${packageName} due to insufficient permissions.\nThis is probably due to an installation of @testim/testim-cli with sudo, and running it without sudo.\nTestim had missing write access to ${pathWithMissingPermissions || rootPath}\n\n`);\n throw new NpmPermissionsError(pathWithMissingPermissions || rootPath);\n }\n throw err;\n });\n } finally {\n if (renamed) {\n try {\n await fs.promises.rename(newShrinkwrap, oldShrinkwrap);\n } catch (err) {\n // ignore error\n }\n }\n }\n}\n\nconst localNpmLocation = path.resolve(require.resolve('npm').replace('index.js', ''), 'bin', 'npm-cli.js');\n\nfunction installPackages(prefix, packageNames, proxyUri, timeoutMs) {\n return new Promise((resolve, reject) => {\n const proxyFlag = proxyUri ? ['--proxy', proxyUri] : [];\n\n const envVars = proxyUri ? { env: Object.assign(process.env, { HTTP_PROXY: proxyUri, HTTPS_PROXY: proxyUri }) } : {};\n\n let stdout = '';\n let stderr = '';\n\n const ops = '--no-save --no-package-lock --no-prune --prefer-offline --no-audit --progress=false'.split(' ');\n const npmInstall = spawn('node', [localNpmLocation, 'i', '--prefix', prefix, ...ops, ...packageNames, ...proxyFlag], envVars);\n npmInstall.stderr.pipe(process.stderr);\n npmInstall.stdout.pipe(process.stdout);\n\n npmInstall.stdout.on('data', (data) => {\n stdout += data;\n });\n\n npmInstall.stderr.on('data', (data) => {\n stderr += data;\n });\n\n npmInstall.on('close', (code) => {\n if (code) {\n let errorString;\n try {\n const packageVersion = /npm ERR! 404 {2}'(.+)' is not in the npm registry/gm.exec(stderr)[1];\n const packageName = packageVersion.split('@')[0];\n errorString = `404 Not Found - GET https://registry.npmjs.org/${packageName} - Not found`;\n } catch (err) {\n errorString = `Npm Install closed with exit code ${code}\\n stdout: ${stdout} stderr: ${stderr}`;\n }\n\n logger.debug(`Npm Install closed with exit code ${code}`, { message: errorString });\n\n reject(new NpmPackageError(errorString));\n } else {\n resolve(stdout);\n }\n });\n\n setTimeout(() => {\n try {\n npmInstall.kill();\n } finally {\n reject(new utils.TimeoutError());\n }\n }, timeoutMs);\n });\n}\n\nmodule.exports = {\n isPackageInstalledInPath,\n getLatestPackageVersion,\n getPackageIfInstalledLocally,\n getLocallyInstalledPackageVersion,\n installPackageLocally,\n installPackages,\n NpmPermissionsError,\n};\n","/* eslint-disable no-console */\n\nconst fkill = require('fkill');\nconst pRetry = require('p-retry');\n\nconst httpRequest = require('./httpRequest');\nconst npmWrapper = require('./npmWrapper');\nconst { getCliLocation } = require('../utils');\nconst { requireWithFallback } = require('./requireWithFallback');\n\nconst PACKAGE_NAME = 'chromedriver';\nconst DRIVER_PORT = 9515;\nconst DRIVER_BASE_URL = `http://localhost:${DRIVER_PORT}/wd/hub`;\nconst DEFAULT_DRIVER_ARGS = [\n // webdriverio expects a wd/hub (selenium-server like server endpoint)\n '--url-base=/wd/hub',\n // don't complain about driver version\n '--disable-build-check',\n // allow any ip to connect chrome driver\n '--whitelisted-ips=0.0.0.0',\n '--log-level=OFF', // instead we could try to log it somehow or at least have a flag to enable this\n];\n\n// [NOTE] This is a \"smart installation\":\n// By default chromedriver package, when installed, will search for an existing binary in the configured temp directory.\n// If found, and it is the correct version, it will simply copy it to your node_modules directory, and if not it will download the newer version.\nconst install = async () => {\n await npmWrapper.installPackageLocally(getCliLocation(), `${PACKAGE_NAME} --detect_chromedriver_version`);\n};\n\nconst start = async () => {\n // remove --inspect before starting chromedriver\n process.env.NODE_OPTIONS = '';\n\n // kill any localhost running chromedriver instance\n await fkill(`:${DRIVER_PORT}`, { silent: true });\n\n const chromedriver = requireWithFallback(PACKAGE_NAME);\n await chromedriver.start(DEFAULT_DRIVER_ARGS, true);\n};\n\nconst isReady = async ({ chromeBinaryLocation }) => {\n // 100 tries, every 30ms\n await pRetry(async () => {\n const statusResponse = await httpRequest.get(`${DRIVER_BASE_URL}/status`);\n if (!statusResponse || !statusResponse.value || !statusResponse.value.ready) {\n throw new Error('status failed');\n }\n\n const chromeOptions = {};\n if (chromeBinaryLocation) {\n chromeOptions.binary = chromeBinaryLocation;\n }\n const sessionResponse = await httpRequest.post({\n url: `${DRIVER_BASE_URL}/session`,\n body: { desiredCapabilities: { browserName: 'chrome', chromeOptions } },\n headers: { 'Content-Type': 'application/json' },\n });\n if (!sessionResponse || sessionResponse.status !== 0 || !sessionResponse.sessionId) {\n throw new Error('create session failed');\n }\n await httpRequest.delete(`${DRIVER_BASE_URL}/session/${sessionResponse.sessionId}`);\n }, { retries: 100, minTimeout: 30 });\n};\n\nmodule.exports = {\n install,\n start,\n isReady,\n};\n","// @ts-check\n\nconst path = require('path');\nconst fs = require('fs');\nconst ms = require('ms');\nconst { serializeError } = require('serialize-error');\nconst { additionalLogDetails } = require('./logUtils');\n\nconst config = require('./config');\nconst { ArgError, NpmPermissionsError } = require('../errors');\nconst {\n getCliLocation,\n isURL,\n downloadAndSave,\n getSource,\n getLocalFileSizeInMB,\n download,\n unzipFile,\n getSourcePath,\n promiseMap,\n} = require('../utils');\nconst localRunnerCache = require('./runnerFileCache');\nconst logger = require('./logger').getLogger('prepare runner and testim start');\n\nconst MSEC_IN_HALF_DAY = ms('0.5 day');\nconst MAX_CUSTOM_EXT_SIZE_MB = 16;\nconst MAX_CUSTOM_SIZE_ERROR_MSG = `The size of the custom extension is more than ${MAX_CUSTOM_EXT_SIZE_MB}MB`;\n\nmodule.exports = {\n prepareChromeDriver,\n prepareCustomExtension,\n prepareExtension,\n getSessionPlayerFolder,\n preparePlayer,\n};\n\n/**\n * @param {string} location\n */\nasync function prepareCustomExtension(location, unlimitedSize = false) {\n if (!location) {\n return undefined;\n }\n\n if (isURL(location)) {\n const destFile = path.join(process.cwd(), location.replace(/^.*[\\\\\\/]/, ''));\n const contentLength = await getRemoteFileSizeInMB(location);\n if (contentLength > MAX_CUSTOM_EXT_SIZE_MB && !unlimitedSize) {\n throw new ArgError(MAX_CUSTOM_SIZE_ERROR_MSG);\n }\n await downloadAndSave(location, destFile);\n return destFile;\n }\n\n const destFile = path.resolve(location);\n if (!fs.existsSync(destFile)) {\n throw new ArgError(`Failed to find custom extension in location: ${destFile}`);\n }\n const fileSize = getLocalFileSizeInMB(destFile);\n if (fileSize > MAX_CUSTOM_EXT_SIZE_MB && !unlimitedSize) {\n throw new ArgError(MAX_CUSTOM_SIZE_ERROR_MSG);\n }\n return destFile;\n}\n\n\n/**\n * @param {string} url\n */\nasync function getRemoteFileSizeInMB(url) {\n const httpRequest = require('./httpRequest');\n try {\n const res = await httpRequest.head(url);\n const contentLengthHeader = res.headers['content-length'];\n const contentLengthBytes = contentLengthHeader ? parseInt(contentLengthHeader, 10) : 0;\n return contentLengthBytes / 1000000;\n } catch (err) {\n logger.warn('failed to download custom extension', { err });\n throw new ArgError(`Failed to download custom extension from location: ${url}`);\n }\n}\n\n/**\n * @param {string[]} locations\n */\nfunction prepareExtension(locations) {\n logger.info('prepare extension', { locations });\n\n const fullLocations = locations.map(location => ({ location, path: getSourcePath(location) }));\n return localRunnerCache.memoize(\n () => promiseMap(fullLocations, ({ location, path }) => getSource(location, path)),\n 'prepareExtension',\n MSEC_IN_HALF_DAY,\n fullLocations\n )();\n}\n\nasync function prepareChromeDriver(userDetails = {}, driverOptions = {}, skipIsReadyCheck = false) {\n const ora = require('ora');\n const spinner = ora('Starting Driver').start();\n const chromedriverWrapper = require('./chromedriverWrapper');\n\n try {\n await chromedriverWrapper.install();\n await chromedriverWrapper.start();\n if (!skipIsReadyCheck) {\n // @ts-ignore\n await chromedriverWrapper.isReady(driverOptions);\n }\n spinner.succeed('Chrome Driver initiated successfully');\n } catch (error) {\n const errorMsg = 'Failed to initiate Chrome Driver';\n\n if (!(error instanceof NpmPermissionsError)) { //NpmPermissionsError was printed and logged already\n logger.error(errorMsg, {\n ...userDetails,\n ...additionalLogDetails(),\n error: serializeError(error),\n });\n // eslint-disable-next-line no-console\n console.log(`\n1. If you don't have Chrome, please install it from https://www.google.com/chrome.\n2. If Chrome is installed, please verify it's binary directory:\n - installed where chromedriver expects it (see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver#requirements).\n - exists in your PATH environment variables.\n3. Try adding --chrome-binary-location flag to Testim CLI specifying the exact location of chrome binary in your computer (e.g on Windows \"C:/Program Files/Google/Chrome/Application/chrome.exe\").\n4. You can always use a standalone Selenium grid and providing it's details with the --host and --port flags (see https://www.npmjs.com/package/selenium-standalone)`);\n }\n\n spinner.fail(errorMsg);\n throw error;\n }\n}\n\nasync function getPlayerVersion() {\n const url = `${config.BLOB_URL}/extension/sessionPlayer_LATEST_RELEASE`;\n const res = await download(url);\n return res.body.toString('utf8');\n}\n\n/**\n * @param {string} location\n * @param {boolean=} canary\n */\nasync function getPlayerLocation(location, canary) {\n if (!isURL(location) || (isURL(location) && canary) || config.IS_ON_PREM) {\n return location;\n }\n\n const ver = await getPlayerVersion();\n return `${location}-${ver}`;\n}\n\nfunction getSessionPlayerFolder() {\n const cliLocation = getCliLocation();\n\n return path.resolve(cliLocation, 'testim-bin');\n}\n\nfunction getPlayerDestination() {\n const testimAppData = getSessionPlayerFolder();\n\n const playerDestination = path.resolve(testimAppData, 'sessionPlayer.zip');\n\n return playerDestination;\n}\n\nasync function downloadAndUnzip(loc, playerFileName, isRetry = false) {\n try {\n await getSource(loc, playerFileName);\n return await unzipFile(playerFileName, getSessionPlayerFolder());\n } catch (err) {\n if (isRetry) {\n throw err;\n }\n return await downloadAndUnzip(loc, playerFileName, true);\n }\n}\n\n/**\n * @param {string} location\n * @param {boolean=} canary\n */\nasync function preparePlayer(location, canary) {\n logger.info('prepare player', { location, canary });\n const playerFileName = getPlayerDestination();\n return localRunnerCache.memoize(\n async () => {\n const loc = await getPlayerLocation(location, canary);\n await downloadAndUnzip(loc, playerFileName);\n // return a truthy value, so the caching has a value, and doesn't ignore\n return {};\n },\n 'preparePlayer',\n MSEC_IN_HALF_DAY,\n [location, canary, playerFileName]\n )();\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"definitions\": {\n \"request\": {\n \"type\": \"object\",\n \"required\": [\"url\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"url\": { \"type\": \"string\" },\n \"method\": {\n \"type\": \"string\",\n \"pattern\": \"^GET$|^HEAD$|^POST$|^PUT$|^DELETE$|^CONNECT$|^OPTIONS$|^TRACE$|^PATCH$\"\n }\n }\n },\n \"header\": {\n \"type\": \"object\",\n \"required\": [\n \"name\",\n \"value\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"value\": {\n \"type\": \"string\"\n }\n }\n },\n \"cookie\": {\n \"type\": \"object\",\n \"required\": [\n \"name\",\n \"value\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"value\": {\n \"type\": \"string\"\n },\n \"path\": {\n \"type\": \"string\"\n },\n \"domain\": {\n \"type\": \"string\"\n },\n \"expires\": {\n \"type\": \"string\",\n \"format\": \"date-time\"\n },\n \"httpOnly\": {\n \"type\": \"boolean\"\n },\n \"secure\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"response\": {\n \"type\": \"object\",\n \"required\": [\"status\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"status\": {\n \"type\": \"integer\",\n \"minimum\": 100,\n \"exclusiveMaximum\": 600\n },\n \"headers\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/header\" }\n },\n \"cookies\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/cookie\" }\n },\n \"content\": {\n \"type\": \"object\",\n \"required\": [\"text\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"redirectResponse\": {\n \"type\": \"object\",\n \"required\": [\"redirectUrl\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"redirectUrl\": { \"type\": \"string\" }\n }\n },\n \"passthroughResponse\": {\n \"type\": \"object\",\n \"required\": [\"passthrough\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"passthrough\": { \"type\": \"boolean\", \"enum\": [ true ] }\n }\n },\n \"entry\": {\n \"type\": \"object\",\n \"required\": [\"request\", \"response\"],\n \"additionalProperties\": false,\n \"properties\": {\n \"request\": { \"$ref\": \"#/definitions/request\" },\n \"response\": {\n \"oneOf\": [\n { \"$ref\": \"#/definitions/response\" },\n { \"$ref\": \"#/definitions/redirectResponse\" },\n { \"$ref\": \"#/definitions/passthroughResponse\" }\n ]\n },\n \"maxHits\": {\n \"type\": \"integer\",\n \"minimum\": 1\n }\n }\n }\n },\n \"type\": \"object\",\n \"required\": [\"entries\"],\n \"properties\": {\n \"version\": { \"type\": \"string\", \"enum\": [\"1.2\", \"1.2.0\"] },\n \"creator\": { \"type\": \"string\" },\n \"entries\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/entry\" }\n }\n }\n}\n","'use strict';\n\nconst httpRequest = require('./httpRequest');\nconst config = require('./config');\nconst ArgError = require('../errors').ArgError;\nconst logger = require('./logger').getLogger('testim-custom-token');\nconst localRunnerCache = require('./runnerFileCache');\n\nlet _serverToken;\nlet _serverTokenExp;\nlet _refreshToken;\nlet _ngrokToken;\nlet _isNgrokWhitelisted;\n\nlet _projectId = null;\nlet _token = null;\n\nconst FIVE_MIN_IN_MS = 5 * 60 * 1000;\n\nasync function init(projectId, token) {\n _projectId = projectId;\n _token = token;\n const tokenValue = await generateToken();\n return tokenValue;\n}\n\nfunction initFromData(authData, projectId, token) {\n _serverToken = authData.token;\n _projectId = projectId;\n _token = token;\n _serverTokenExp = getTokenExp(_serverToken);\n _refreshToken = authData.refreshToken;\n _ngrokToken = authData.ngrokToken;\n _isNgrokWhitelisted = authData.isNgrokWhitelisted;\n}\n\nfunction getTokenV3(projectId = _projectId, token = _token) {\n return localRunnerCache.memoize(() => {\n logger.info('request to get cli token from server');\n return httpRequest.post({\n url: `${config.SERVICES_HOST}/auth/token`,\n body: { projectId, token },\n });\n }, 'getTokenV3', FIVE_MIN_IN_MS * 10, { projectId, token })();\n}\n\nasync function refreshToken() {\n logger.info('request to refresh JWT cli token from server');\n const customToken = await httpRequest.post({\n url: `${config.SERVICES_HOST}/auth/refreshToken`,\n body: { token: _serverToken, refreshToken: _refreshToken },\n });\n _serverToken = customToken.token;\n _serverTokenExp = getTokenExp(_serverToken);\n return _serverToken;\n}\n\nfunction generateToken() {\n return getTokenV3()\n .then(customToken => {\n logger.info('successfully get cli token from server');\n _serverToken = customToken.token;\n _serverTokenExp = getTokenExp(_serverToken);\n _refreshToken = customToken.refreshToken;\n _ngrokToken = customToken.ngrokToken;\n _isNgrokWhitelisted = customToken.isNgrokWhitelisted;\n return _serverToken;\n })\n .catch(error => {\n if (error.message.includes('Unauthorized')) {\n throw new ArgError(\n 'Error trying to retrieve CLI token. ' +\n 'Your CLI token and project might not match. ' +\n 'Please make sure to pass `--project` and `--token` that' +\n ' match to each other or make sure they match in your ~/.testim file.');\n }\n logger.error(`While trying to retrieve CLI token. caught error: ${error}`, { projectId: _projectId });\n throw new ArgError(`While trying to retrieve CLI token, caught error: ${error}`);\n });\n}\n\nfunction getTokenExp(token) {\n const jwtLib = require('jsonwebtoken');\n const jwt = jwtLib.decode(token);\n return jwt.exp * 1000;\n}\n\nfunction getCustomTokenV3() {\n if (!_serverTokenExp) {\n return generateToken();\n }\n\n // Refresh the token earlier than needed, to give\n // clickim a chance to have more time to run, as\n // it can't refresh it itself.\n if (_serverTokenExp < (Date.now() + (4 * FIVE_MIN_IN_MS))) {\n return refreshToken().catch(err => {\n logger.error('failed to refresh token, executing fallback', err);\n return generateToken();\n });\n }\n return Promise.resolve(_serverToken);\n}\n\nfunction getRefreshToken() {\n return _refreshToken;\n}\n\nfunction getTokenV3UserData() {\n if (_serverToken) {\n const jwtLib = require('jsonwebtoken');\n const data = jwtLib.decode(_serverToken);\n return { uid: data.id, ngrokToken: _ngrokToken, isNgrokWhitelisted: _isNgrokWhitelisted };\n }\n return {};\n}\n\nmodule.exports = {\n init,\n initFromData,\n getCustomTokenV3,\n getTokenV3UserData,\n getRefreshToken,\n};\n","\"use strict\";\n\n// copied from https://github.com/watson/ci-info/blob/master/index.js\nmodule.exports.isCi = !!(\n process.env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari\n process.env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI\n process.env.BUILD_NUMBER || // Jenkins, TeamCity\n process.env.RUN_ID || // TaskCluster, dsari\n false\n);","'use strict';\n\nconst _ = require('lodash');\nconst pako = require('pako');\nconst pRetry = require('p-retry');\nconst hash = require('object-hash');\nconst utils = require('../utils');\nconst config = require('./config');\nconst constants = require('./constants');\nconst httpRequest = require('./httpRequest');\nconst testimCustomToken = require('./testimCustomToken');\nconst { ArgError } = require('../errors');\nconst { getLogger } = require('./logger');\n\nconst runnerVersion = utils.getRunnerVersion();\nconst logger = getLogger('testim service api');\n\nconst DEFAULT_REQUEST_RETRY = 3;\nconst GRID_PATH = '/grid';\n\nfunction getTokenHeader() {\n return testimCustomToken.getCustomTokenV3()\n .then(brearToken => {\n if (!brearToken) {\n throw new Error('Failed to get token from server');\n }\n return { Authorization: `Bearer ${brearToken}` };\n });\n}\n\nfunction postAuth({\n url, body, headers = {}, timeout, retry,\n}) {\n return getTokenHeader()\n .then(tokenHeaders => {\n const finalHeaders = Object.assign({}, headers, tokenHeaders);\n return httpRequest.post({\n url: `${config.SERVICES_HOST}${url || ''}`,\n body,\n headers: finalHeaders,\n timeout,\n retry,\n });\n });\n}\n\n// eslint-disable-next-line default-param-last\nfunction postAuthFormData(url, fields, files, headers = {}, timeout) {\n return getTokenHeader()\n .then(tokenHeaders => {\n const finalHeaders = Object.assign({}, headers, tokenHeaders);\n return httpRequest.postForm(`${config.SERVICES_HOST}${url || ''}`, fields, files, finalHeaders, timeout);\n });\n}\n\nfunction putAuth(url, body) {\n return getTokenHeader()\n .then(headers => httpRequest.put(`${config.SERVICES_HOST}${url || ''}`, body, headers));\n}\n\nfunction deleteAuth(url, body) {\n return getTokenHeader()\n .then(headers => httpRequest.delete(`${config.SERVICES_HOST}${url || ''}`, body, headers));\n}\n\nfunction getWithAuth(url, query, options, timeout) {\n return getTokenHeader()\n .then(headers => httpRequest.get(`${config.SERVICES_HOST}${url || ''}`, query, headers, timeout, options));\n}\n\nfunction getS3Artifact(url, timeout) {\n return pRetry(() => getWithAuth(`/storage${url}`, null, { isBinary: true }, timeout), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction getTestPlan(projectId, testPlanNames) {\n //TODO: need to be checked after 3 months to prevent users from using old version\n const parseProperty = (dataValue) => (dataValue == null ? [] : (typeof (dataValue) === 'string' && JSON.parse(dataValue)) || dataValue);\n return pRetry((() => getWithAuth('/testPlan', { projectId, name: testPlanNames.join(',') }), { retries: DEFAULT_REQUEST_RETRY }))\n .then(body => body.map(testPlan => {\n testPlan.testConfigIds = parseProperty(testPlan.testConfigIds);\n testPlan.beforeAllLabels = parseProperty(testPlan.beforeAllLabels);\n testPlan.testLabels = parseProperty(testPlan.testLabels);\n testPlan.afterAllLabels = parseProperty(testPlan.afterAllLabels);\n return testPlan;\n }));\n}\n\nasync function loadSfdcCredential({ branch, projectId }) {\n const branchData = await pRetry(() => getWithAuth(`/branch/branchData/${branch}`, {\n projectId,\n }), { retries: DEFAULT_REQUEST_RETRY });\n return branchData?.sfdcCredential;\n}\n\nfunction loadTest({ testId, branch, projectId, skipSharedSteps = false, useBranchMap = true }) {\n return pRetry(() => getWithAuth(`/test/${testId}`, {\n projectId,\n branch,\n skipSharedSteps,\n useBranchMap,\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction saveTestPlanResult(projectId, testPlanId, result) {\n return pRetry(() => postAuth({ url: '/testPlan/result', body: { projectId, testPlanId, result } }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction updateTestStatus(projectId, executionId, testId, resultId, status, data, retries = DEFAULT_REQUEST_RETRY) {\n return pRetry(() => putAuth('/result/run/test', {\n runId: executionId,\n testId,\n resultId,\n status,\n projectId,\n runnerVersion,\n ...data,\n }), { retries });\n}\n\nfunction updateExecutionTests(executionId, runnerStatuses, status, reason, success, startTime, endTime, projectId) {\n return pRetry(() => putAuth('/result/run/tests', {\n runId: executionId,\n runnerStatuses,\n status,\n reason,\n success,\n startTime,\n endTime,\n projectId,\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction reportExecutionStarted({\n executionId,\n projectId,\n labels,\n startTime,\n executions,\n config,\n resultLabels,\n remoteRunId,\n localRunUserId,\n isLocalRun,\n intersections,\n}) {\n const isCiRun = require('../cli/isCiRun').isCi;\n return postAuth({\n timeout: 90000,\n url: '/result/run',\n body: {\n runId: executionId,\n projectId,\n labels,\n startTime,\n execution: executions,\n status: 'RUNNING',\n config,\n resultLabels,\n remoteRunId,\n intersections,\n metadata: {\n isCiRun,\n localRunUserId,\n isLocalRun,\n },\n },\n retry: 3, // TODO: add a log in the callback\n });\n}\n\n// eslint-disable-next-line default-param-last\nfunction reportExecutionFinished(status, executionId, projectId, success, tmsOptions = {}, remoteRunId, resultExtraData) {\n const endTime = Date.now();\n\n return pRetry(() => putAuth('/result/run', {\n runId: executionId,\n projectId,\n endTime,\n status,\n success,\n tmsOptions,\n remoteRunId,\n resultExtraData,\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\n/**\n * @param {string} projectId\n * @param {string[]} names\n * @param {string[]} planIds\n * @param {string} branch\n * @param {import('../runOptions').RunnerOptions['intersections']} intersections\n * @returns {ReturnType<import('services/src/test-plan/service')['testPlan']['getTestPlanTestList']>}\n */\nasync function getTestPlanTestList(projectId, names, planIds, branch, intersections) {\n return pRetry(() => postAuth({\n url: '/testPlan/list',\n body: { projectId, names, planIds, branch, intersections },\n // people who send insane lists get a timeout :(\n timeout: 120000,\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\n/**\n * @param {{\n * projectId: string;\n * labels: string[];\n * testIds: string[];\n * testNames: string[];\n * testConfigNames?: string[];\n * suiteNames: string[];\n * suiteIds: string[];\n * branch: string;\n * rerunFailedByRunId?: string;\n * testConfigIds?: string[];\n * intersections: import('../runOptions').RunnerOptions['intersections'];\n * }} param0\n * @returns {Promise<import('services/src/suite/service').RunListResult>}\n */\nfunction getSuiteTestList({\n projectId, labels, testIds, testNames, testConfigNames, suiteNames, suiteIds, branch, rerunFailedByRunId, testConfigIds, intersections,\n}) {\n return pRetry(() => postAuth({\n url: '/suite/v2/list',\n body: {\n projectId,\n labels,\n testIds,\n testNames,\n testConfigNames,\n suiteNames,\n suiteIds,\n branch,\n rerunFailedByRunId,\n testConfigIds,\n intersections,\n },\n }), { retries: DEFAULT_REQUEST_RETRY, factor: 1 });\n}\n\nasync function getAppDetails({ appId, projectId }) {\n try {\n return await pRetry(() => getWithAuth(`/mobile-app/app/${appId}?projectId=${projectId}`), { retries: DEFAULT_REQUEST_RETRY, factor: 1 });\n } catch (error) {\n logger.error('failed getting application details', { appId, error });\n return undefined;\n }\n}\n\nfunction getUsageForCurrentBillingPeriod(projectId) {\n return pRetry(() => getWithAuth(`/plan/project/${projectId}/usage-current-billing-period`), { retries: DEFAULT_REQUEST_RETRY })\n .catch((error) => {\n logger.error('failed getting usage for current billing period', { projectId, error });\n return undefined;\n });\n}\n\nfunction isTestResultCompleted(resultId, projectId, testRetryKey) {\n return pRetry(() => getWithAuth(`/result/${resultId}/isComplete`, { projectId, testRetryKey }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction getTestResults(testId, resultId, projectId, branch) {\n return pRetry(() => getWithAuth(`/test/v2/${testId}/result/${resultId}`, { projectId, branch }), { retries: DEFAULT_REQUEST_RETRY, factor: 1 });\n}\n\nfunction keepAliveGrid(projectId, slots) {\n return postAuth({\n url: `/grid/keep-alive?reqId=${utils.guid()}`,\n body: { projectId, slots },\n timeout: 10000,\n });\n}\n\nfunction releaseGridSlot(companyId, projectId, slotId, gridId, browser) {\n return postAuth({\n url: `/grid/release?reqId=${utils.guid()}`,\n body: {\n companyId, projectId, slotId, gridId, browser,\n },\n });\n}\n\nfunction getHybridGridProvider(body) {\n return postAuth({\n url: '/grid/hybrid/provider',\n body,\n });\n}\n\nfunction getGridByName(companyId, projectId, gridName, browser, executionId) {\n return pRetry(() => getWithAuth('/grid/name', {\n companyId, projectId, name: gridName, browser, executionId, reqId: utils.guid(),\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction getGridById(companyId, projectId, gridId, browser, executionId) {\n return pRetry(() => getWithAuth(`/grid/${gridId}`, { companyId, projectId, browser, executionId, reqId: utils.guid() }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\n/**\n * @param {{ projectId: string; token: string; branchName: string; lightweightMode?: import('../runOptions').LightweightSettings; localGrid: boolean; }} param0\n * @returns {Promise<{\n * authData: { token: string; refreshToken: string; uid: string; ngrokToken?: string; isNgrokWhitelisted?: boolean; };\n * editorConfig: { editorUrl: string };\n * companyByProjectId: Awaited<ReturnType<import('services/src/company/companyService')['getCompanyByProjectIdUsingCache']>>;\n * projectById: NonNullable<Awaited<ReturnType<import('services/src/commons/testimCache')['project']['getById']>>>;\n * allGrids: import('services/src/commons/mongo/models/grid').RawGrid[];\n * branchName: string | import('services/src/commons/mongo/models/branchesData').RawBranchesData | null;\n * }>}\n */\nasync function initializeUserWithAuth({ projectId, token, branchName, lightweightMode, localGrid }) {\n try {\n return await pRetry(() => httpRequest.post({\n url: `${config.SERVICES_HOST}/executions/initialize`,\n body: {\n projectId,\n token,\n branchName: branchName || 'master',\n lightweightMode,\n localGrid,\n },\n }), { retries: DEFAULT_REQUEST_RETRY });\n } catch (e) {\n logger.error('error initializing info from server', e);\n if (e?.message?.includes('Bad Request')) {\n throw new ArgError(\n 'Error trying to retrieve CLI token. ' +\n 'Your CLI token and project might not match. ' +\n 'Please make sure to pass `--project` and `--token` that' +\n ' match to each other or make sure they match in your ~/.testim file.');\n }\n if (e?.code?.includes('ENOTFOUND')) {\n throw new ArgError('Due to network connectivity issues, Testim CLI has been unable to connect to the Testim backend.');\n }\n throw e;\n }\n}\n\nasync function getEditorUrl() {\n if (config.EDITOR_URL) {\n return config.EDITOR_URL;\n }\n try {\n return await pRetry(() => getWithAuth('/system-info/editor-url'), {\n retries: DEFAULT_REQUEST_RETRY,\n onFailedAttempt: error => {\n if (error.attemptNumber >= DEFAULT_REQUEST_RETRY) {\n throw error;\n }\n },\n });\n } catch (err) {\n logger.error('cannot retrieve editor-url from server');\n return 'https://app.testim.io';\n }\n}\n\nfunction getAllGrids(companyId) {\n return pRetry(() => getWithAuth('/grid', { companyId }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nconst fetchLambdatestConfig = async () => pRetry(() => getWithAuth('/grid/lt/config'), { retries: DEFAULT_REQUEST_RETRY });\n\nconst getLabFeaturesByProjectId = async (projectId) => pRetry(() => getWithAuth(`/labFeature/v2/project/${projectId}`), { retries: DEFAULT_REQUEST_RETRY });\n\n\nfunction getRealData(projectId, channel, query) {\n return pRetry(() => getWithAuth(`/real-data/${channel}?${query}&projectId=${projectId}`), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction updateTestResult(projectId, resultId, testId, testResult, remoteRunId) {\n return pRetry(() => postAuth({\n url: '/result/test',\n body: {\n projectId,\n resultId,\n testId,\n testResult,\n remoteRunId,\n },\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction clearTestResult(projectId, resultId, testId, testResult) {\n return pRetry(() => postAuth({\n url: '/result/test/clear',\n body: {\n projectId,\n resultId,\n testId,\n testResult,\n },\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\nfunction saveRemoteStep(projectId, resultId, stepId, remoteStep) {\n return pRetry(() => postAuth({\n url: '/remoteStep',\n body: {\n projectId,\n resultId,\n stepId,\n remoteStep,\n },\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\n/** @param {string} uri */\nfunction relativize(uri) {\n return uri.startsWith('/') ? uri : `/${uri}`;\n}\n\n/**\n * @param {string} filePath\n * @param {string} bucket\n * @param {string} projectId\n */\nfunction getStorageRelativePath(filePath, bucket, projectId) {\n let fullPath = relativize(filePath);\n if (projectId) {\n fullPath = `/${projectId}${fullPath}`;\n }\n if (bucket) {\n fullPath = `/${bucket}${fullPath}`;\n }\n\n return fullPath;\n}\n\n/**\n * @param {string} projectId\n * @param {string} testId\n * @param {string} testResultId\n * @param {*} content\n * @param {string} subType\n * @param {string} mimeType\n */\nasync function uploadArtifact(projectId, testId, testResultId, content, subType, mimeType = 'application/octet-stream') {\n let fileSuffix = null;\n if (mimeType === 'application/json') {\n fileSuffix = '.json';\n }\n const fileName = `${subType}_${utils.guid()}${fileSuffix || ''}`;\n const path = `${testId}/${testResultId}/${fileName}`;\n const storagePath = getStorageRelativePath(path, 'test-result-artifacts', projectId);\n\n const buffer = Buffer.from(pako.gzip(content, {\n level: 3, // sufficient time/size ratio.\n }));\n\n const files = {\n file: {\n fileName,\n buffer,\n },\n };\n\n await pRetry(\n () => postAuthFormData(`/storage${storagePath}`, {}, files, { 'X-Asset-Encoding': 'gzip' }),\n { retries: DEFAULT_REQUEST_RETRY, factor: 1 },\n );\n return storagePath;\n}\n\nconst uploadRunDataArtifact = _.memoize(async (projectId, testId, testResultId, runData) => {\n if (_.isEmpty(runData)) {\n return undefined;\n }\n return await uploadArtifact(projectId, testId, testResultId, JSON.stringify(runData), 'test-run-data', 'application/json');\n}, (projectId, testId, testResultId, runData) => `${hash(runData)}:${testId}:${testResultId}`);\n\nconst updateTestDataArtifact = _.memoize(async (projectId, testId, testResultId, testData, projectDefaults) => {\n if (_.isEmpty(testData)) {\n return undefined;\n }\n const removeHiddenParamsInTestData = () => {\n const testDataValueClone = _.clone(testData);\n if (projectDefaults?.hiddenParams) {\n const { hiddenParams } = projectDefaults;\n (hiddenParams || []).forEach((param) => {\n if (testDataValueClone[param]) {\n testDataValueClone[param] = constants.test.HIDDEN_PARAM;\n }\n });\n }\n return testDataValueClone;\n };\n\n return await uploadArtifact(projectId, testId, testResultId, JSON.stringify(removeHiddenParamsInTestData(testData)), 'test-test-data', 'application/json');\n}, (projectId, testId, testResultId, testData) => `${hash(testData)}:${testId}:${testResultId}`);\n\nfunction addTestRetry({\n projectId,\n runId,\n testId,\n newResultId,\n originalTestResultId,\n previousTestResultId,\n testResult,\n}) {\n return pRetry(() => postAuth({\n url: '/result/test/retry',\n body: {\n projectId,\n newResultId,\n originalTestResultId,\n previousTestResultId,\n testId,\n runId,\n testResult,\n },\n }), { retries: DEFAULT_REQUEST_RETRY });\n}\n\n/**\n * @param {string} projectId\n * @returns {Promise<import('../../../clickim/src/common/api/testimApplitoolsApi').ApplitoolsIntegrationData>}\n */\nasync function getApplitoolsIntegrationData(projectId) {\n try {\n return await getWithAuth(`/integration/applitools/v3/connected?projectId=${projectId}`);\n } catch (err) {\n logger.warn('could\\'nt get applitools integration data.', { err });\n return {};\n }\n}\n\n\n/**\n * @param {string} companyId\n * @param {string[]} routes\n * @returns {Promise<{ _id?: string; token?: string; routesMapping?: { [k: string]: string; } }>}\n */\nasync function getCloudflareTunnel(companyId, routes) {\n try {\n return await putAuth('/tunnel', { companyId, routes });\n } catch (err) {\n logger.warn('could\\'nt get tunnel.', { err });\n return {};\n }\n}\n/**\n * @param {string} companyId\n * @param {string} tunnelId\n * @returns {Promise<void>}\n */\nasync function forceUpdateCloudflareTunnelRoutes(companyId, tunnelId) {\n try {\n return await postAuth({ url: `/tunnel/${tunnelId}`, body: { companyId } });\n } catch (err) {\n logger.warn('could\\'nt get tunnel.', { err });\n return undefined;\n }\n}\n/**\n * @param {string} companyId\n * @param {string} tunnelId\n * @returns {Promise<void>}\n */\nasync function deleteCloudflareTunnel(companyId, tunnelId) {\n try {\n return await deleteAuth(`/tunnel/${tunnelId}`, { companyId });\n } catch (err) {\n logger.warn('could\\'nt get tunnel.', { err });\n return {};\n }\n}\n\nfunction updateRemoteRunFailure(body) {\n return httpRequest.post({ url: `${config.SERVICES_HOST}/result/remoteRunFailure`, body });\n}\n\n/**\n * @param {string} projectType\n * @param {string} gridId\n * @param {string} companyId\n * @param {string} selectors\n * @return {Promise<Array[import('../../../services/src/grid/mobileGridService').MobileDevice] | null>}\n */\n\nasync function getMobileDevicesFromGrid({ projectId, projectType, gridId, companyId, selectors }) {\n let url = `${GRID_PATH}/mobileDevices/${gridId}/${companyId}?projectType=${projectType}`;\n url = selectors ? `${url}&selectors=${encodeURIComponent(selectors)}` : url;\n try {\n return await pRetry(() => getWithAuth(url, { projectId }), { retries: DEFAULT_REQUEST_RETRY });\n } catch (err) {\n logger.warn('could\\'nt get devices from headspin grid.', { err });\n return null;\n }\n}\n\nmodule.exports = {\n getAppDetails,\n getS3Artifact,\n getTestPlan,\n saveTestPlanResult,\n updateTestStatus,\n updateExecutionTests,\n reportExecutionStarted,\n reportExecutionFinished,\n getTestPlanTestList,\n getSuiteTestList,\n getUsageForCurrentBillingPeriod,\n getTestResults,\n getGridByName,\n releaseGridSlot,\n keepAliveGrid,\n getGridById,\n getAllGrids,\n fetchLambdatestConfig,\n getRealData,\n updateTestResult,\n clearTestResult,\n saveRemoteStep,\n getEditorUrl,\n getLabFeaturesByProjectId,\n uploadRunDataArtifact,\n updateTestDataArtifact,\n initializeUserWithAuth,\n addTestRetry,\n getHybridGridProvider,\n loadSfdcCredential,\n loadTest,\n isTestResultCompleted,\n getApplitoolsIntegrationData,\n getCloudflareTunnel,\n forceUpdateCloudflareTunnelRoutes,\n deleteCloudflareTunnel,\n updateRemoteRunFailure,\n getMobileDevicesFromGrid,\n};\n","import { join, resolve } from 'path';\n\nexport const options: { playerPath: string | undefined } = { playerPath: undefined };\n\nlet sessionPlayerInit: import('clickim/src/background/sessionPlayerInit').SessionPlayerInit | undefined;\n\nexport const getSessionPlayer = () => {\n if (sessionPlayerInit) {\n return sessionPlayerInit;\n }\n const perf = require('./performance-logger');\n\n perf.log('getSessionPlayerRequire start');\n const { getSessionPlayerFolder } = require('./prepareRunnerAndTestimStartUtils');\n\n const testimAppDataFolder = getSessionPlayerFolder();\n const path = options.playerPath ? resolve(options.playerPath, 'src/background/sessionPlayerInit.ts') : join(testimAppDataFolder, 'sessionPlayer.js');\n\n const sessionPlayer = require(path) as import('clickim/src/background/sessionPlayerInit').SessionPlayerInit; // eslint-disable-line import/no-dynamic-require\n\n perf.log('getSessionPlayerRequire end');\n sessionPlayerInit = sessionPlayer;\n return sessionPlayer;\n};\n","const perf = require('./performance-logger');\nconst servicesApi = require('./testimServicesApi');\nconst localRunnerCache = require('./runnerFileCache');\nconst testimCustomToken = require('./testimCustomToken');\nconst { CLI_MODE } = require('./constants');\n\nconst FIVE_MINUTES_MS = 1000 * 60 * 5;\nconst TEN_HOURS_MS = 1000 * 60 * 60 * 10;\n\n/** @param {import('../runOptions').RunnerOptions['mode']} mode */\nfunction preloadSlowRequires(mode) {\n process.nextTick(() => {\n if (![CLI_MODE.SELENIUM, CLI_MODE.APPIUM].includes(mode)) {\n return;\n }\n // heuristic to pay the cost of loading the sessionPlayer here while we are waiting for the backend\n try {\n require('./getSessionPlayerRequire').getSessionPlayer();\n // jsdom for the same reason, we don't require workerSelenium here since it actually takes longer to load\n // then it takes for the backend to return 🤯\n require('jsdom');\n } catch (e) {\n //silent catch\n }\n });\n}\n\n/** @param {import('../runOptions').RunnerOptions} options */\nasync function initializeUserWithAuth(options) {\n const { project, token, lightweightMode, useLocalChromeDriver, useChromeLauncher, mode } = options;\n\n const lightweightModeGeneral = Boolean(lightweightMode?.general);\n const localGrid = Boolean(useLocalChromeDriver || useChromeLauncher);\n const memoizationTTL = lightweightModeGeneral ? TEN_HOURS_MS : FIVE_MINUTES_MS;\n\n perf.log('before initializeUserWithAuth');\n const result = await localRunnerCache.memoize(async () => {\n preloadSlowRequires(mode);\n return await servicesApi.initializeUserWithAuth({\n projectId: project,\n token,\n branchName: options.branch,\n lightweightMode,\n localGrid,\n });\n }, 'initializeUserWithAuth', memoizationTTL, { project, token, branchName: options.branch, lightweightModeGeneral, localGrid })();\n perf.log('after initializeUserWithAuth');\n\n testimCustomToken.initFromData(result.authData, options.project, options.token);\n return result;\n}\n\nmodule.exports = {\n initializeUserWithAuth,\n};\n","const path = require('path');\nconst os = require('os');\nconst fs = require('fs-extra');\nconst { ArgError } = require('./errors');\nconst { downloadAndSave, unzipFile, TESTIM_BROWSER_DIR } = require('./utils');\nconst ora = require('ora');\n\n\nconst CHROMIUM_VERSION = '1000968'; // '973306' = 101.0.4899.0 '1000968' = 103.0.5046.0;\nconst DOWNLOAD_CHROME_FOLDER = path.join(TESTIM_BROWSER_DIR, `chrome-${CHROMIUM_VERSION}`);\n\nfunction getCurrentPlatform() {\n const osType = os.type().toLowerCase();\n if (osType === 'darwin') {\n return os.arch() === 'arm' ? 'mac_arm' : 'mac';\n }\n if (osType === 'windows_nt') {\n return os.arch() === 'x64' ? 'win64' : 'win32';\n }\n return 'linux';\n}\n\nasync function downloadAndInstallChromium() {\n /** Inspired by puppeteer's implementation https://github.com/puppeteer/puppeteer/blob/main/src/node/BrowserFetcher.ts#L45 */\n const platform = getCurrentPlatform();\n\n // example download url: https://storage.googleapis.com/chromium-browser-snapshots/Mac/1000968/chrome-mac.zip\n const storageBaseUrl = 'https://storage.googleapis.com/chromium-browser-snapshots';\n const platformFolder = {\n linux: 'Linux_x64',\n mac: 'Mac',\n mac_arm: 'Mac_Arm', // eslint-disable-line camelcase\n win32: 'Win',\n win64: 'Win_x64',\n };\n if (!(platform in platformFolder)) {\n throw new ArgError(`Unsupported platform: ${platform}`);\n }\n // Windows archive name changed at r591479.\n const winArchiveName = parseInt(CHROMIUM_VERSION, 10) > 591479 ? 'chrome-win' : 'chrome-win32';\n const platformArchiveName = {\n linux: 'chrome-linux',\n mac: 'chrome-mac',\n mac_arm: 'chrome-mac', // eslint-disable-line camelcase\n win32: winArchiveName,\n win64: winArchiveName,\n };\n const binaryPaths = {\n linux: 'chrome',\n mac: 'Chromium.app/Contents/MacOS/Chromium',\n mac_arm: 'Chromium.app/Contents/MacOS/Chromium', // eslint-disable-line camelcase\n win32: 'chrome.exe',\n win64: 'chrome.exe',\n };\n const downloadUrl = `${storageBaseUrl}/${platformFolder[platform]}/${CHROMIUM_VERSION}/${platformArchiveName[platform]}.zip`;\n const downloadArchivePath = path.join(DOWNLOAD_CHROME_FOLDER, platformArchiveName[platform]);\n const downloadedZipFile = `${downloadArchivePath}.zip`;\n const binaryPath = path.join(downloadArchivePath, binaryPaths[platform]);\n\n if (await fs.pathExists(binaryPath)) {\n return binaryPath;\n }\n if (!(await fs.pathExists(downloadedZipFile))) {\n const downloadSpinner = ora('Downloading Chromium').start();\n try {\n await fs.mkdirp(DOWNLOAD_CHROME_FOLDER);\n await downloadAndSave(downloadUrl, downloadedZipFile);\n // todo - We can add a failover here if the download fails if we host the file too\n } catch (e) {\n const errorMessage = `Failed to download Chromium: ${e.message}`;\n downloadSpinner.fail(errorMessage);\n throw new Error(errorMessage);\n }\n downloadSpinner.succeed();\n }\n const extractSpinner = ora('Extracting Chromium').start();\n try {\n await unzipFile(downloadedZipFile, DOWNLOAD_CHROME_FOLDER);\n } catch (e) {\n const errorMessage = `Failed to extract Chromium: ${e.message}`;\n extractSpinner.fail(errorMessage);\n throw new Error(errorMessage);\n }\n extractSpinner.succeed();\n return binaryPath;\n}\n\nmodule.exports = {\n CHROMIUM_VERSION,\n downloadAndInstallChromium,\n};\n","// @ts-check\n\nconst { CLI_MODE } = require('./constants');\n\nconst os = require('os');\nconst utils = require('../utils');\nconst Ajv = require('ajv');\nconst prepareRunnerAndTestimStartUtils = require('./prepareRunnerAndTestimStartUtils');\nconst mockNetworkRuleFileSchema = require('./mockNetworkRuleFileSchema.json');\nconst { initializeUserWithAuth } = require('./initializeUserWithAuth');\nconst { downloadAndInstallChromium } = require('../chromiumInstaller');\n\nconst MAX_RULE_FILE_SIZE_IN_MB = 1;\nconst PREPARE_MOCK_NETWORK_ERROR_PREFIX = 'JSON file supplied to --mock-network-pattern';\n\nconst logger = require('./logger').getLogger('prepare runner');\n\n/** @param {import('../runOptions').RunnerOptions} options */\nasync function prepare(options) {\n /**\n * @type {Promise<void>}\n */\n let chromedriverPromise = Promise.resolve();\n\n const hasNoGrid = !options.host && !options.gridId && !options.grid && (!options.testPlan || options.testPlan.length === 0);\n const isTdkRun = options.files.length !== 0;\n if ((hasNoGrid && isTdkRun) || options.useLocalChromeDriver) {\n options.chromeBinaryLocation = options.downloadBrowser ? await downloadAndInstallChromium() : options.chromeBinaryLocation;\n chromedriverPromise = prepareRunnerAndTestimStartUtils.prepareChromeDriver(\n { projectId: options.project, userId: options.user },\n { chromeBinaryLocation: options.chromeBinaryLocation },\n Boolean(options.lightweightMode?.general)\n );\n options.useLocalChromeDriver = true;\n }\n\n if (!options.playerRequirePath && options.mode !== CLI_MODE.EXTENSION) {\n await prepareRunnerAndTestimStartUtils.preparePlayer(options.playerLocation, options.canary);\n }\n if (options.mode === CLI_MODE.EXTENSION && !options.ext) {\n await prepareRunnerAndTestimStartUtils.prepareExtension(options.extensionLocation);\n }\n\n let customExtensionLocation;\n\n if (options.installCustomExtension) {\n const unlimitedSize = Boolean(options.useLocalChromeDriver || options.useChromeLauncher);\n customExtensionLocation = await prepareRunnerAndTestimStartUtils.prepareCustomExtension(options.installCustomExtension, unlimitedSize);\n }\n\n await chromedriverPromise;\n\n return customExtensionLocation;\n}\n\nasync function prepareMockNetwork(location) {\n logger.info('prepare MockNetwork', { location });\n const _rulesJson = await utils.getSourceAsBuffer(location);\n const rulesJsonBuf = Buffer.isBuffer(_rulesJson) ? _rulesJson : _rulesJson.body;\n if (rulesJsonBuf.byteLength > MAX_RULE_FILE_SIZE_IN_MB * 1000000) {\n throw new Error(`${PREPARE_MOCK_NETWORK_ERROR_PREFIX} exceeded ${MAX_RULE_FILE_SIZE_IN_MB}MB`);\n }\n\n let rulesJson;\n try {\n rulesJson = JSON.parse(rulesJsonBuf.toString('utf-8'));\n } catch (error) {\n throw new Error(`${PREPARE_MOCK_NETWORK_ERROR_PREFIX} cannot be parsed.${os.EOL}${error}`);\n }\n\n const ajv = new Ajv();\n const valid = ajv.validate(mockNetworkRuleFileSchema, rulesJson);\n if (!valid) {\n const errors = ajv.errors?.map((e, i) => `${++i}) ${e.dataPath} ${e.message}`).join(os.EOL);\n throw new Error(`${PREPARE_MOCK_NETWORK_ERROR_PREFIX} is malformed.${os.EOL}${errors}`);\n }\n\n return rulesJson.entries;\n}\n\nmodule.exports = {\n prepare,\n prepareMockNetwork,\n initializeUserWithAuth,\n};\n","/* eslint-disable no-console */\n\n'use strict';\n\nconst { getLogger } = require('./commons/logger');\nconst { promiseTimeout, promiseMap } = require('./utils');\n\nconst logger = getLogger('process-handler');\n/** @type {Array<() => PromiseLike<void>>} */\nconst exitHooks = [];\n\n/**\n * @param {(e: any) => void} onExit\n * @param {NodeJS.Process=} _process\n */\nmodule.exports.registerProcessForCleanup = function (onExit, _process = process) {\n async function cleanup(err) {\n // give cleanup and socket reports a chance to run\n await promiseTimeout(promiseMap(exitHooks, hook => hook()), 10000).catch(() => null);\n onExit(err);\n }\n _process.on('uncaughtException', async (err) => {\n logger.error('Caught exception', { err });\n console.log('Uncaught exception');\n if (err.message) {\n console.log('Message =', err.message);\n }\n if (err.reason) {\n console.log('Reason =', err.reason);\n }\n await cleanup(err);\n });\n\n _process.on('unhandledRejection', (reason) => {\n // rollout manages promises incorrectly and generates unhandled rejections from within their code\n logger.fatal('Caught unhandled promise rejection', reason);\n //TODO(benji) - this is a pretty shitty way to detect this error since rollout can change their API endpoint\n if (reason?.message?.includes('ENOTFOUND x-api.rollout.io')) {\n // this is not a fatal error - we recover from this in feature-flags service\n return;\n }\n\n throw reason;\n });\n\n _process.on('rejectionHandled', () => {\n logger.error('Caught rejection handled');\n });\n\n _process.once('SIGTERM', () => {\n const msg = 'Runner aborted - SIGTERM event';\n const err = new Error(msg);\n logger.error(msg);\n cleanup(err);\n throw err;\n });\n\n _process.once('SIGINT', () => {\n const msg = 'Runner aborted - SIGINT event';\n const err = new Error(msg);\n logger.error(msg);\n cleanup(err);\n throw err;\n });\n\n // One time self-call is expected :(\n _process.once('exit', (e) => {\n onExit(e);\n });\n};\n\n/** @param {() => PromiseLike<void>} hook */\nmodule.exports.registerExitHook = function (hook) {\n exitHooks.push(hook);\n};\n\nmodule.exports.reset = function () {\n exitHooks.splice(0, exitHooks.length);\n};\n","/* eslint-disable no-console */\n\nconst os = require('os');\nconst path = require('path');\nconst chalk = require('chalk');\nconst fse = require('fs-extra');\n\nmodule.exports.writeStackTrace = function writeStackTrace(err) {\n if (err?.message?.includes('SIGINT')) {\n return; // no need to generate a log file for a sigint.\n }\n try {\n const homedir = os.homedir();\n\n fse.ensureDirSync(path.resolve(homedir, '.testim_logs'));\n const logFileName = path.resolve(homedir, '.testim_logs', `${new Date().toISOString().replace(/:|\\./g, '_')}.log`);\n console.log('Oops :( The test runner has encountered an unexpected error. A complete log of this run can be found in:');\n console.log(`\\t${logFileName}`);\n\n if (err?.message?.includes('Unable to compile TypeScript') && err.stack.includes('runner/src') && process.argv.some(x => x.includes('player-require-path'))) {\n console.log(chalk.red('Looks like you got a TypeScript compile error champ - but it\\'s not a very good one because we use TypeScript in transpile-only mode'));\n console.log(chalk.red('change require(\\'ts-node/register/transpile-only\\'); to require(\\'ts-node/register\\'); for better errors'));\n }\n\n fse.writeFileSync(logFileName, `${err}\\n${err.stack}\\n\\n${JSON.stringify(err, Object.getOwnPropertyNames(err), 2)}`);\n } catch { /* noop */ }\n};\n","'use strict';\n\nconst constants = require('../commons/constants');\nconst { requireWithFallback } = require('../commons/requireWithFallback');\nconst { isCi } = require('./isCiRun');\nconst { writeStackTrace } = require('./writeStackTrace');\nconst logger = require('../commons/logger').getLogger('process-handler');\n\nlet exitCodeIgnoreFailingTests = false;\n\nfunction getExitCode(result) {\n if (result instanceof Error) {\n return 1;\n }\n\n if (exitCodeIgnoreFailingTests) {\n return 0;\n }\n\n result = result || {};\n const hasFailedTests = Object.values(result).some(\n ({ runnerStatus, success, testStatus, status }) => {\n if (\n [runnerStatus, status].includes(constants.runnerTestStatus.SKIPPED) ||\n ([runnerStatus, status].includes(constants.runnerTestStatus.FAILED) &&\n testStatus === constants.testStatus.EVALUATING)\n ) {\n return false;\n }\n return success !== true;\n }\n );\n\n return hasFailedTests ? 1 : 0;\n}\n\nfunction closeChromeDriverIfRunning() {\n try {\n const chromedriver = requireWithFallback('chromedriver');\n chromedriver.stop();\n // eslint-disable-next-line no-empty\n } catch (err) { }\n}\n\nmodule.exports.ignoreFailingTestsInExitCode = function () {\n exitCodeIgnoreFailingTests = true;\n};\n\n\nmodule.exports.onExit = async function onExit(exitValue) {\n if (exitValue?.stack) {\n if (!isCi) {\n writeStackTrace(exitValue);\n } else {\n // eslint-disable-next-line no-console\n console.error(exitValue, exitValue.stack);\n }\n }\n\n closeChromeDriverIfRunning();\n\n await logger.waitForFlush();\n\n process.exit(getExitCode(exitValue));\n};\n","// @ts-check\n\n'use strict';\n\nconst config = require('./commons/config');\n\nmodule.exports = {\n getExtensionsUrl,\n getResolvedExtensionUrl,\n getPlayerUrl,\n};\n\n/**\n *\n * @param {Readonly<import(\"commander\").CommanderStatic>} program\n */\nfunction getExtensionsUrl(program, useCanonicalURL) {\n const zipFileSuffix = program.canary ? '-master.zip' : '.zip';\n let firefox;\n let chrome;\n if (!useCanonicalURL) {\n firefox = `${config.BLOB_URL}/extension/testim-firefox-profile${zipFileSuffix}`;\n chrome = `${config.BLOB_URL}/extension/testim-headless${zipFileSuffix}`;\n } else {\n firefox = `${config.CANONICAL_BLOB_URL}/extension/testim-firefox-profile${zipFileSuffix}`;\n chrome = `${config.CANONICAL_EDGE_URL}/extension/testim-headless${zipFileSuffix}`;\n }\n return {\n firefox,\n chrome,\n 'edge-chromium': chrome,\n };\n}\n\n/**\n *\n * @param {Readonly<import(\"commander\").CommanderStatic>} program\n */\nfunction getResolvedExtensionUrl(program) {\n const { chrome, firefox } = getExtensionsUrl(program, false);\n\n if (program.browser === 'firefox') {\n return firefox;\n }\n if (program.browser === 'chrome') {\n return chrome;\n }\n return [chrome, firefox];\n}\n\n/**\n *\n * @param {Readonly<import(\"commander\").CommanderStatic>} program\n */\nfunction getPlayerUrl(program) {\n const playerUrlPrefix = `${config.BLOB_URL}/extension/sessionPlayer`;\n const playerUrl = program.canary ? `${playerUrlPrefix}-master` : playerUrlPrefix;\n\n return playerUrl;\n}\n","'use strict';\n\n/* segment.io */\nconst config = require('./config');\nconst Analytics = require('analytics-node');\n\nconst analytics = new Analytics('sJOSIGKa5x5rJEGsaOlCjrgozAf7FnVY', { flushAt: 1 });\n\nconst anonymousId = require('crypto').randomBytes(20).toString('hex');\n\nfunction identify(data) {\n if (config.IS_ON_PREM) {\n return;\n }\n if (!data || !data.userId) {\n data = { anonymousId };\n }\n analytics.identify(data);\n}\n\nfunction trackWithCIUser(eventName, properties) {\n return track('ci', eventName, properties);\n}\n\nfunction track(userId, eventName, properties) {\n if (config.IS_ON_PREM) {\n return;\n }\n const id = userId ? { userId } : { anonymousId };\n analytics.track(Object.assign(id, {\n event: eventName,\n properties,\n }));\n}\n\nmodule.exports = {\n identify,\n track,\n trackWithCIUser,\n};\n","// @ts-check\n\n'use strict';\n\nconst { ArgError } = require('./errors');\nconst _ = require('lodash');\nconst runOptionsUtils = require('./runOptionsUtils');\nconst analytics = require('./commons/testimAnalytics');\n\n/**\n *\n * @param {import(\"commander\").CommanderStatic} program\n */\nfunction isAgentFlow(program) {\n if (program.start) {\n analytics.track(null, 'cli-start-command', { downloadBrowser: Boolean(program.downloadBrowser) });\n }\n if (program.startV2 || program.start || program.agent) {\n return true;\n }\n\n return false;\n}\n\n/**\n *\n * @param {Readonly<import(\"commander\").CommanderStatic>} program\n */\nasync function runAgentFlow(program) {\n const agentModes = ['playground-playwright', 'playground-puppeteer', 'playground-selenium'];\n let installPlaygroundPlaywrightDeps = false;\n let installPlaygroundPuppeteerDeps = false;\n let installPlaygroundSeleniumDeps = false;\n\n let startTestimBrowser = false;\n\n if (program.start) {\n startTestimBrowser = true;\n }\n\n if (_.isNaN(program.agentPort)) {\n return Promise.reject(new ArgError('Agent port is not number'));\n }\n\n if (typeof program.agent === 'string' && agentModes.some(mode => program.agent.includes(mode))) {\n const selectedModes = program.agent.split(',').map(mode => mode.trim());\n if (selectedModes.includes('playground-playwright')) {\n installPlaygroundPlaywrightDeps = true;\n }\n\n if (selectedModes.includes('playground-puppeteer')) {\n installPlaygroundPuppeteerDeps = true;\n }\n\n if (selectedModes.includes('playground-selenium')) {\n installPlaygroundSeleniumDeps = true;\n }\n }\n\n const playerUrl = runOptionsUtils.getPlayerUrl(program);\n\n console.log('Start Testim CLI on Agent mode');\n return {\n project: program.project,\n token: program.token,\n agentMode: true,\n agentPort: program.agentPort,\n agentBind: program.agentBind,\n openEditor: program.openEditor,\n installPlaygroundPlaywrightDeps,\n installPlaygroundPuppeteerDeps,\n installPlaygroundSeleniumDeps,\n startTestimBrowser,\n ext: program.ext,\n extensionPath: program.extensionPath,\n playerLocation: program.playerPath || playerUrl,\n canary: program.canary,\n playerPath: program.playerPath,\n playerRequirePath: program.playerRequirePath,\n downloadBrowser: Boolean(program.downloadBrowser),\n };\n}\n\nmodule.exports = {\n isAgentFlow,\n runAgentFlow,\n};\n","'use strict';\n\nconst { exec } = require('child_process');\n\nmodule.exports.launchChrome = function (url) {\n const { platform } = process;\n\n if (platform === 'win32') {\n exec(`start chrome ${url}`);\n } else if (platform === 'darwin') {\n exec(`open -a \"Google Chrome\" ${url}`);\n } else if (platform === 'linux') {\n exec(`google-chrome ${url}`);\n }\n};\n","'use strict';\n\nconst fse = require('fs-extra');\nconst path = require('path');\nconst YAML = require('yaml');\nconst os = require('os');\nconst utils = require('./utils');\nconst { launchChrome } = require('./commons/chrome-launcher');\n\nasync function getProjectId() {\n return getCredentialProperty('projectId');\n}\n\nasync function getToken() {\n return getCredentialProperty('token');\n}\n\nfunction timeout(promise, ms) {\n // we need this to time out even if we disabled timeouts system wide\n return Promise.race([promise, utils.delay(ms).then(() => { throw new utils.TimeoutError('timeout'); })]);\n}\n\nasync function getCredentialsFromChrome() {\n const app = require('express')();\n const loginInfoFromChrome = (async function waitForChromeToSendData() {\n return timeout(new Promise(resolve => {\n app.get('/loginInfo', (req, res) => {\n resolve(JSON.parse(Buffer.from(req.query.info, 'base64').toString()));\n res.status(200).end();\n });\n }), 60000).catch(() => null);\n }());\n await new Promise((resolve, reject) => {\n const server = app.listen(42543, (err) => {\n if (err) {\n reject(err);\n }\n resolve(server.address().port);\n });\n });\n\n const { getEditorUrl } = require('./commons/testimServicesApi');\n\n try {\n const url = await getEditorUrl();\n launchChrome(`${url}/#/new-test`);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log('Unable to open Testim automatically - please manually go to https://app.testim.io');\n }\n\n const data = await loginInfoFromChrome;\n return data;\n}\n\nasync function doLogin({ overwriteExisting = true, projects = null } = {}) {\n const homedir = os.homedir();\n\n const testimCredentialsFile = path.join(homedir, '.testim');\n\n const isExist = await fse.pathExists(testimCredentialsFile);\n\n if (isExist && !overwriteExisting) {\n return;\n }\n\n const credentials = {};\n\n const prompts = require('prompts');\n const ora = require('ora');\n\n const spinner = ora('Getting credentials from Testim extension ...').start();\n\n if (!projects) {\n projects = await timeout(Promise.resolve(getCredentialsFromChrome()), 62000).catch(() => null);\n }\n\n if (projects?.token) { // V1(legacy) of the login extension API\n credentials.token = projects.token;\n credentials.projectId = projects.projectId;\n spinner.succeed();\n\n await writeCredentials(testimCredentialsFile, credentials);\n return;\n } if (projects?.length) { // V2(current) of the login extension API\n spinner.succeed();\n\n const response = projects.length === 1 ?\n { project: projects[0] } :\n await prompts({\n type: 'select',\n name: 'project',\n message: 'There are multiple projects associated with your user account. Please select the project you would like to connect to:',\n choices: projects.map(p => ({ title: p.name, value: p })),\n }\n );\n\n credentials.token = response.project.ci.token;\n credentials.projectId = response.project.id;\n await writeCredentials(testimCredentialsFile, credentials);\n return;\n }\n\n spinner.fail();\n // eslint-disable-next-line no-console\n console.log('Error getting credentials - please pass `--token` and `--project` to the CLI or try again');\n}\n\nasync function writeCredentials(testimCredentialsFile, credentials) {\n await fse.writeFile(testimCredentialsFile, YAML.stringify(credentials));\n // eslint-disable-next-line no-console\n console.log(`Testim credentials saved in '${testimCredentialsFile}'`);\n}\n\nasync function getCredentialProperty(property) {\n const homedir = os.homedir();\n\n const testimCredentialsFile = path.join(homedir, '.testim');\n\n const isExist = await fse.pathExists(testimCredentialsFile);\n\n let credentials = {};\n\n if (isExist) {\n try {\n credentials = YAML.parse((await fse.readFile(testimCredentialsFile)).toString());\n } catch (err) {\n // just use new credentials.\n }\n }\n\n // YAML.parse can return `null` or `undefined` if we fail with an empty/malformed file.\n credentials = credentials || {};\n\n return credentials[property];\n}\n\nmodule.exports = {\n getProjectId,\n getToken,\n doLogin,\n};\n","/* eslint-disable no-console */\n\n'use strict';\n\nconst fs = require('fs');\nconst ms = require('ms');\nconst url = require('url');\nconst _ = require('lodash');\nconst path = require('path');\nconst chalk = require('chalk');\nconst program = require('commander');\nconst utils = require('./utils');\nconst runOptionsUtils = require('./runOptionsUtils');\nconst runOptionsAgentFlow = require('./runOptionsAgentFlow');\nconst localRunnerCache = require('./commons/runnerFileCache');\nconst { CLI_MODE } = require('./commons/constants');\nconst { NoArgsError, ArgError } = require('./errors');\nconst { EDGE_CHROMIUM_MIN_VERSION } = require('./player/constants');\n\nconst camelizeHyphenValues = (prop) => prop.replace(/-([a-z])/g, (m, w) => w.toUpperCase());\n\nconst collect = (val, col) => {\n col.push(val);\n return col;\n};\n\nconst list = (val) => val.split(',');\n\nconst mergeValues = (first, second) => ((!first || first.length === 0) ? second : first);\n\nconst setHostAndPortForSauceLab = () => {\n if (program.grid || program.gridId) {\n return;\n }\n if (!program.host) {\n program.host = 'ondemand.saucelabs.com';\n }\n if (!program.port) {\n program.port = 80;\n }\n};\n\nconst setHostAndPortForBrowserStack = () => {\n if (program.grid || program.gridId) {\n return;\n }\n if (!program.host) {\n program.host = 'hub-cloud.browserstack.com';\n }\n if (!program.port) {\n program.port = 80;\n }\n};\n\nconst allowedChromeFlags = ['enable-heavy-ad-intervention', 'heavy-ad-privacy-mitigations', 'use-fake-device-for-media-stream', 'use-fake-ui-for-media-stream', 'proxy-server'];\n\nconst printUsage = () => {\n function isDefaultHelpLine(line) {\n return line.includes('-h, --help');\n }\n\n function isParamsJsonOption(line) {\n return line.includes('--params [params-json-string]');\n }\n\n function isExtOnlyOption(line) {\n return line.includes('--ext') || line.includes('--extension-path');\n }\n\n function isPlayerOption(line) {\n return line.includes('--player-path') || line.includes('--player-require-path');\n }\n\n function isScheduler(line) {\n return (\n line.includes('--executionId') ||\n line.includes('--source') ||\n line.includes('--resultId') ||\n line.includes('--remoteRunId') ||\n line.includes('--schedulerId')\n );\n }\n\n function isWebdriverTimeout(line) {\n return (\n line.includes('--get-browser-timeout') ||\n line.includes('--get-browser-retries') ||\n line.includes('--get-session-timeout') ||\n line.includes('--get-session-retries') ||\n line.includes('--driver-request-timeout') ||\n line.includes('--driver-request-retries')\n );\n }\n\n function isUserId(line) {\n return line.includes('--user');\n }\n\n function isMonitorPerformance(line) {\n return line.includes('shouldMonitorPerformance');\n }\n\n function isSaveRCALocally(line) {\n return line.includes('--save-rca-locally');\n }\n\n function isExitCodeIgnoreFailingTests(line) {\n return line.includes('--exit-code-ignore-failing-tests');\n }\n\n function isDeprecatedHighSpeed(line) {\n return line.includes('--high-speed'); // high speed mode was renamed to turbo mode\n }\n\n function isUrls(line) {\n return line.includes('--urls');\n }\n\n function isTestStartTimeout(line) {\n return line.includes('--test-start-timeout');\n }\n\n function isInstallLazyDeps(line) {\n return line.includes('--install-lazy-deps');\n }\n\n program.help((txt) => {\n const lines = txt.split('\\n');\n return lines\n .filter( // hide CLI options\n (ln) =>\n !isExtOnlyOption(ln) &&\n !isParamsJsonOption(ln) &&\n !isDefaultHelpLine(ln) &&\n !isPlayerOption(ln) &&\n !isScheduler(ln) &&\n !isMonitorPerformance(ln) &&\n !isUserId(ln) &&\n !isWebdriverTimeout(ln) &&\n !isSaveRCALocally(ln) &&\n !isExitCodeIgnoreFailingTests(ln) &&\n !isDeprecatedHighSpeed(ln) &&\n !isUrls(ln) &&\n !isTestStartTimeout(ln) &&\n !isInstallLazyDeps(ln),\n )\n .join('\\n');\n });\n};\n\nconst printDeprecationWarning = (deprecatedUsage, newUsage) => {\n const newUsageString = newUsage ? `Please use ${newUsage} instead.` : '';\n console.log(chalk.yellow(`\\nWARNING: ${deprecatedUsage} is deprecated. ${newUsageString}\\n`));\n};\n\nconst CODE_COVERAGE_REPORTER_OPTIONS = [\n 'clover',\n 'html',\n 'json-summary',\n 'json',\n 'lcov',\n 'lcovonly',\n 'teamcity',\n 'text-lcov',\n 'text-summary',\n 'text',\n];\n\nconst LOG_LEVEL_OPTIONS = ['trace', 'debug', 'info', 'warn', 'error', 'silent'];\nprogram\n .description('Testim.io CLI')\n .option('-h --help', 'output usage information', printUsage)\n .option('-o --options-file [options-file.json]', '')\n .option('-c --config-file [config-file.js]', '')\n .option('--test-config [test-config]', 'test config name to override for all tests in current execution', collect, [])\n .option('--test-config-id [test-config-id]', 'test config ID to override for all tests in current execution', collect, [])\n .option('--params-file [params-file.json]', '')\n .option('--params [params-json-string]', '')\n .option('-t, --testId [test-id]', 'test ID to run', collect, [])\n .option('run [file-glob-pattern]', 'codeful test files to run', collect, [])\n .option('-w, --webpackConfig [webpack-configuration]', 'webpack configuration used to build the code based project')\n .option('--test-id [test-id]', 'test ID to run', collect, [])\n .option('-l, --label [label]', 'labels to search test by', collect, [])\n .option('-n, --name [test-name]', 'test name to run', collect, [])\n .option('--project [project-id]', 'project ID')\n .option('-r, --report-file [report junit xml path]', 'where to save junit xml results file')\n .option('--urls', 'add step urls to the junit report')\n .option('--override-report-file-classname [override-report-file-classname]', 'custom junit class name for the junit reporter')\n .option('--reporters [names]', 'report types', list)\n .option('-h, --host [host-name]', 'host name or ip containing the selenium grid')\n .option('-p, --port [host-port]', 'host port')\n .option('-g, --grid [grid-name]', 'grid name')\n .option('--path [grid-path]', 'grid path')\n .option('--protocol [grid-protocol]', 'grid protocol http or https')\n .option('--grid-username [grid-username]', 'grid http basic auth username')\n .option('--grid-password [grid-password]', 'grid http basic auth password')\n .option('-gi --grid-id [grid-id]', 'grid ID')\n .option('-b, --browser [browser-type]', 'browser type (chrome/firefox)')\n .option('-h, --headless [headless]', 'run in headless mode')\n .option('-m, --mode [runner-mode]', 'use extension or selenium mode (extension/selenium/appium)')\n .option('--branch [branch]', 'branch name', null)\n .option('--base-url [base-url]', 'change base-url to a specified url for all tests in current execution')\n .option('--token [token]', 'identification token to testim')\n .option('--is-regression-baseline-run', 'save doms and run results as regression baseline data')\n .option('--parallel [number-of-tests]', 'number of tests to run in parallel')\n .option('--before-parallel [number-of-tests]', 'number of tests to run in parallel during the before phase of a test plan')\n .option('--after-parallel [number-of-tests]', 'number of tests to run in parallel during the after phase of a test plan')\n .option('--canary [canary-mode]', 'enable canary mode', false)\n .option('--test-plan [test-plan-name]', 'test plan to run', collect, [])\n .option('--test-plan-id [test-plan-id]', 'test plan to run', collect, [])\n .option('--suite [suite-name]', 'suite to run', collect, [])\n .option('--suite-id [suite-id]', 'suite ID to run', collect, [])\n .option('--rerun-failed-by-run-id [run-id]', 'allows re-running failed tests from a specific run ID')\n .option('--disable-grid-check [boolean]', 'disable checking if selenium grid is available', false)\n .option('--disable-native-events [boolean]', 'pass nativeEvents=false capability to the selenium browser (in selenium mode)', false)\n .option('--disable-timeout-retry [boolean]', 'disable retry after test pass test timeout', false)\n .option('--ca-file [ca-file-location]', 'ca certificate file location')\n .option('--proxy [proxy-url]', 'proxy url to all requests')\n .option('--proxy-for-grid [proxy-for-grid]', 'used together with --proxy to also router grid traffic through a proxy')\n .option('--result-label [result-label]', 'result label', collect, [])\n .option('-oen --override-execution-name [execution-name]', 'override the default execution name', '')\n .option('--retries [max_num_of_retries]', 'number of retries on test failure, defaults to 0 (no retries)', 0)\n .option('--set-retention [retention-in-days]', 'set the number of days for results retention')\n .option('--user [user-id]', 'user ID for local Testim-CLI')\n .option('--pass-zero-tests', 'don\\'t fail the run if no tests were found')\n //Mobile options\n .option('--device-model [device-model]', 'The device model\tto use, iPhone 12, Nexus 5X, SM-G900P etc....')\n .option('--device-udid [device-udid]', 'the device unique id')\n .option('--os-version [os-version]', 'The operating system version number')\n .option('--app-id [app-id]', 'The application id from app library on Testim Editor App')\n .option('--appium-log-level [appium-log-level]', 'Level of logging verbosity')\n\n .option('-str --suppress-tms-reporting [suppress-tms-reporting]', 'disable test management reporting', false)\n .option('-tsr --tms-suppress-reporting [tms-suppress-reporting]', 'disable test management reporting', false)\n .option('-tid --tms-run-id [tms-run-id]', 'update existing result in test management', '')\n .option('-tff --tms-field-file [tms-field-file.json]', 'pass field file location to add custom result field to the tms result report', '')\n\n .option('--disable-file-cache', 'disable internal CLI file caching')\n .option('--file-cache-location [directory]', ' internal CLI file caching location')\n\n // Timeout\n .option('--test-start-timeout [test-start-timeout]', 'The time to wait for a test to start after getting a browser session', Number, Number(process.env.TESTIM_TEST_START_TIMEOUT) || (2 * 60 * 1000))\n .option('--timeout [test-timeout]', 'Test run timeout in milliseconds', Number)\n .option('--browser-timeout [open-browser-timeout]', 'Get browser from grid timeout in milliseconds', Number)\n .option('--new-browser-wait-timeout [max-wait-to-browser]', 'Maximum get browser wait in minutes', Number)\n\n // New Timeouts\n .option('--get-browser-timeout [get-browser-timeout]', 'Timeout for a single attempt to get browser from the grid configured in the project\\'s plan', Number) // getBrowserTimeout\n .option('--get-browser-retries [get-browser-retries]', 'Number of attempts to get browser from the grid configured in the project\\'s plan', Number) // getBrowserRetries\n .option('--get-session-timeout [get-session-timeout]', 'Timeout for \"/session\" request to the selenium server', Number, ms('90s')) // getSessionTimeout\n .option('--get-session-retries [get-session-retries]', 'Retries for \"/session\" request to the selenium server', Number, 3) // getSessionRetries\n .option('--driver-request-timeout [driver-request-timeout]', 'Timeout for any WebDriver request to the grid server', Number, ms('90s')) // driverRequestTimeout\n .option('--driver-request-retries [driver-request-retries]', 'Retries for any WebDriver request to the grid server', Number, 3) // driverRequestRetries\n\n // Run chrome ext mode locally\n .option('--use-local-chrome-driver [use-local-chrome-driver]', 'use a local ChromeDriver instance instead of a selenium grid')\n .option('--chrome-binary-location [chrome-binary-location]', 'Chrome binary location')\n\n // Run chrome ext mode locally using chrome launcher\n .option('--use-chrome-launcher', 'use a local Chrome installation without selenium')\n\n // Mock network\n .option('-mnh --mock-network-har', 'use the HAR file configured in the Testim editor to mock network traffic')\n .option('-mnp --mock-network-pattern [local file location path]', 'use a JSON rule file to mock network traffic (Rule file schema: https://help.testim.io/page/mocking-network-traffic)')\n .option(\n '-omf --override-mapping-file [local file location path]',\n 'pass map file location to override mock network (see schema: https://help.testim.io/page/mocking-network-traffic)',\n )\n .option('-dmn --disable-mock-network', 'Disable mock mode for the entire CLI run')\n .option('--run-quarantined-tests', 'Run quarantine tests')\n\n // Code coverage\n .option('--collect-code-coverage', 'collect code coverage for all js files under base url')\n .option('--code-coverage-url-filter [url pattern]', 'collect code coverage for all js files matching url filter (url including asterisk)')\n .option('--code-coverage-report-path [path]', 'where to save coverage report (default ./coverage)')\n .option('--code-coverage-source-map-path [path]', 'path of source code')\n .option('--code-coverage-reporter [reporter]', `set code coverage reporter (default html and text), options: ${CODE_COVERAGE_REPORTER_OPTIONS.join('/')}`, collect, [])\n .option('--code-coverage-include [pattern]', 'set selecting files for coverage (default src/**)', collect, [])\n\n // SauceLab\n .option('--sauce-user [sauce-lab-user]', 'user to connect to sauce labs')\n .option('--sauce-key [sauce-lab-key]', 'key to use when connecting to sauce labs')\n .option('--sauce-options [sauce-options]', 'json file of browser and os options for sauce')\n\n // Browserstack\n .option('--browserstack-user [browserstack-user]', 'user to connect to browserStack')\n .option('--browserstack-key [browserstack-key]', 'key to use when connecting to browserStack')\n .option('--browserstack-options [browserstack-options]', 'json file of browser and os options for browserStack')\n\n // Perfecto\n .option('--perfecto-token [perfecto-token]', 'security token to use when connecting to perfecto')\n .option('--perfecto-options [perfecto-options]', 'json file of browser and os options for perfecto')\n\n // Experitest\n .option('--experitest-token [experitest-token]', 'security token to use when connecting to experitest')\n\n // TestObject\n .option('--testobject-key [testobject-key]', 'api key to use when connecting to testobject')\n .option('--testobject-options [testobject-options]', 'json file of options for testobject')\n\n // Extension\n .option('--ext [extension src path]', 'use extension from path (default it \\'/..\\')')\n .option('--extension-path [path to extension archived file]', 'override the used extension')\n\n //Customer Extension\n .option('--install-custom-extension [chrome extension zipped file url or local path]', 'chrome extension to be installed in the browser')\n\n // Player\n .option('--player-path [path to player file]')\n .option('--player-require-path [path to unminified player - development only]')\n\n // Codim Init\n .option('init [init]', 'Path for an initial test app')\n\n // Node Inspect as a flag\n .option('--inspect [port]', 'Opens node inspector at given port', Number)\n\n // Logging in - saving token and projectId\n .option('--login', 'Log in to Testim')\n .option('--require-credentials', 'Log in to Testim if not already logged in')\n\n // Tunnel\n .option('tunneld', 'run a tunnel daemon only')\n .option('--tunnel [tunnel]', 'enable tunnel')\n .option('--tunnel-routes [routes]', 'tunnel routes for cloudflare tunnels')\n .option('--tunnel-port [tunnel-port]', 'tunnel port address')\n .option('--tunnel-host-header [tunnel-host-header]', 'tunnel host header')\n .option('--tunnel-region [tunnel-region]', 'ngrok tunnel region')\n .option('--tunnel-diagnostics', 'collect ngrok tunnel diagnostics')\n .option('--tunnel-use-http-address [tunnel-use-http-address]', 'use http:// address instead of https://', false)\n .option('--external-lambdatest-tunnel-id [tunnel-id]', 'use existing lambdatest tunnel ID')\n .option('--external-lambdatest-use-wss', 'use wss instead of ssh for LT', false)\n .option('--external-lambdatest-disable-automation-tunneling', 'don\\'t tunnel Testim calls in LT tunnel', true)\n .option('--external-lambdatest-mitm', 'Turn on LT Man in the middle', false)\n\n .option('--w3c-capabilities [enable-w3c-caps-mode]', 'enable/disable w3c capabilities format (default enable)', JSON.parse, true)\n .option('--old-capabilities [enable-old-caps-mode]', 'enable/disable old capabilities format (default enable)', JSON.parse, true)\n .option('--disable-sockets', 'Disable CLI sockets', false)\n\n // Remote run options\n .option('--executionId [execution-id]', '', '')\n .option('--remoteRunId [remote-run-id]', '', '')\n .option('--schedulerId [scheduler-id]', '', '')\n .option('--source [source]', '', 'cli')\n .option('--resultId [result-id]', '', '')\n\n // Agent mode\n .option('connect, --agent [enable-agent-mode]', 'enable Testim CLI agent mode', false)\n .option('start [enable-start]', 'Connect to testim and open the editor in a standalone browser', false)\n .option('--download-browser', 'when used with the start option, downloads a fixed version to run Testim editor in', false)\n .option('--agent-port [agent-port]', 'set agent port', Number, 42543)\n .option('--agent-bind [agent-host-bind]', 'set agent host bind', '127.0.0.1')\n\n .option('--chrome-extra-prefs [chrome-extra-prefs]', 'add extra chrome preferences', '')\n .option('--chrome-extra-args [chrome-extra-args]', 'add extra chrome arguments separated by \\',\\'', '')\n .option('--chrome-block-location [chrome-block-location]', 'block chrome geolocation', false)\n .option('--chrome-user-data-dir [chrome-user-data-dir]', 'use custom chrome user date dir', false)\n\n .option('--disable-cookies-same-site-none-requires-secure [disable-same-site-none-requires-secure]', 'Disable cookies without SameSite must be secure', false)\n\n .option('--selenium-caps-file [selenium-caps-file.json]', 'json file to merge into Testim selenium desired capabilities')\n\n .option('--version [version]', 'print the current version of the Testim CLI and exit', false)\n .option('--monitor-performance', 'collect test playback performance data')\n\n .option('--high-speed', 'DEPRECATED: use --turbo-mode instead') // When removing, remove from the program.help output filter\n .option('--turbo-mode', 'run in turbo mode')\n .option('--lightweight-mode [settings]', 'run lightweight mode')\n .option('--create-prefeched-data [location]', 'prefetch data into local cache file')\n .option('--use-prefeched-data [location]', 'use prefetched data from local cache file, and force using only cached data')\n .option('--save-rca-locally [path]', 'save root cause analysis assets locally')\n\n .option('--exit-code-ignore-failing-tests', 'return exit code of zero when tests fail. non zero exit code will mean a real error occurred')\n\n .option('--intersect-with-label [label]', 'Out of the execution\\'s test list, run only those tests that have the specified label', collect, [])\n .option('--intersect-with-suite [suiteName]', 'Out of the execution\\'s test list, run only those tests that are included in the specified suite (by suite name)', collect, [])\n .option('--intersect-with-suite-id [suiteId]', 'Out of the execution\\'s test list, run only those tests that are included in the specified suite (by suite ID)', collect, [])\n\n .option('--install-lazy-deps [install-lazy-deps]', 'Install all lazy dependencies from package.json', false)\n .parse(process.argv);\n\n\nmodule.exports = {\n async process() {\n if (program.inspect) {\n const inspector = require('inspector');\n inspector.open(program.inspect);\n }\n\n let userParamsData = {};\n let chromeExtraPrefs = {};\n const chromeExtraArgs = [];\n let seleniumCapsFileContent = {};\n\n if (!process.argv.slice(2).length) {\n printUsage();\n throw new NoArgsError();\n }\n\n if (program.requireCredentials) {\n const credentialsManager = require('./credentialsManager');\n const projectId = await credentialsManager.getProjectId();\n const token = await credentialsManager.getToken();\n\n if (!projectId || !token) {\n await credentialsManager.doLogin();\n }\n }\n\n if (program.login) {\n const credentialsManager = require('./credentialsManager');\n await credentialsManager.doLogin();\n\n return { loginMode: true };\n }\n\n if (program.init) {\n return {\n initCodimMode: true,\n initTestProject: program.init,\n };\n }\n\n if (program.version) {\n const message = 'Testim CLI Version: ';\n if (process.env.npm_package_version) {\n console.log(message, process.env.npm_package_version);\n process.exit(0);\n }\n const version = utils.getRunnerVersion();\n if (version) {\n console.log(message, version);\n process.exit(0);\n }\n console.log('Could not find version, please check the package.json manually');\n process.exit(0);\n }\n\n if (program.installLazyDeps) {\n return { installLazyDepsMode: true };\n }\n\n if (program.disableFileCache) {\n localRunnerCache.disable();\n }\n\n const cacheLocationProvided = program.fileCacheLocation || program.usePrefechedData || program.createPrefechedData;\n\n if (cacheLocationProvided) {\n const location = path.resolve(cacheLocationProvided);\n localRunnerCache.setCacheLocation(location);\n }\n\n if (program.usePrefechedData) {\n localRunnerCache.disableCacheMiss();\n }\n\n if (program.playerRequirePath) {\n const fullPlayerPath = path.resolve(program.playerRequirePath);\n console.log('Using Local Clickim for Player Require Path =', fullPlayerPath);\n const projectFile = path.join(fullPlayerPath, 'tsconfig.node.json');\n\n // [NOTE] playerRequirePath is a dev flag\n // eslint-disable-next-line import/no-extraneous-dependencies\n const tsnodeApi = require('ts-node');\n const tsNodeRegisterInstance = tsnodeApi.register({\n project: projectFile,\n ignore: [\n // restore default value\n /node_modules/,\n // based on that code:\n // https://github.com/TypeStrong/ts-node/blob/c1ae9a069a824368c9aaf89f4454b131af44a92f/src/index.ts#L368\n // it will not touch this project files, but will work on clickim code\n new RegExp(`^${_.escapeRegExp(path.relative(process.cwd(), __dirname))}`),\n ],\n transpileOnly: true,\n });\n\n // [NOTE] playerRequirePath is a dev flag\n // eslint-disable-next-line import/no-extraneous-dependencies\n const tsConfigPathsApi = require('tsconfig-paths');\n tsConfigPathsApi.register({\n paths: tsNodeRegisterInstance.config.options.paths,\n baseUrl: tsNodeRegisterInstance.config.options.baseUrl,\n });\n\n require('./commons/getSessionPlayerRequire').options.playerPath = fullPlayerPath;\n const Module = require('module');\n const originalRequire = Module.prototype.require;\n Module.prototype.require = function requireThatOverridesSessionPlayer(id) {\n if (id === 'rox-alias') {\n return originalRequire.call(this, 'rox-node');\n }\n // eslint-disable-next-line prefer-rest-params\n return originalRequire.apply(this, arguments);\n };\n }\n\n if (program.caFile) {\n global.caFileContent = fs.readFileSync(program.caFile);\n }\n\n if (program.proxy) {\n global.proxyUri = program.proxy;\n // used by Clickim internally and by the runner, included here lazily to not make things slower for the\n // non-proxy case\n global.SuperagentProxy = require('superagent-proxy');\n global.ProxyAgent = require('proxy-agent');\n global.HttpsProxyAgent = require('https-proxy-agent');\n }\n\n if (program.proxyForGrid && !program.proxy) {\n throw new ArgError('missing --proxy option');\n }\n\n if (runOptionsAgentFlow.isAgentFlow(program)) {\n return runOptionsAgentFlow.runAgentFlow(program);\n }\n\n // merge options from file\n try {\n let options = {};\n if (program.configFile) {\n // eslint-disable-next-line import/no-dynamic-require\n options = require(path.join(process.cwd(), program.configFile)).config;\n } else if (program.optionsFile) {\n // eslint-disable-next-line import/no-dynamic-require\n options = require(path.join(process.cwd(), program.optionsFile));\n }\n\n // technically would work on anything, but no reason to add a tick for nothing.\n if (options && typeof options.then === 'function') {\n options = await options;\n }\n\n Object.keys(options).forEach((prop) => {\n const safePropName = camelizeHyphenValues(prop);\n program[safePropName] = mergeValues(program[safePropName], options[prop]);\n });\n } catch (err) {\n err.message = `Unable to read options file: ${err.message}`;\n throw err;\n }\n\n if (program.tunneld) {\n return {\n tunnel: true,\n tunnelPort: program.tunnelPort,\n tunnelRoutes: program.tunnelRoutes,\n tunnelRoutesOutput: program.tunnelRoutesOutput,\n tunnelHostHeader: program.tunnelHostHeader,\n tunnelRegion: program.tunnelRegion,\n tunnelDiagnostics: program.tunnelDiagnostics,\n tunnelUseHttpAddress: program.tunnelUseHttpAddress,\n tunnelOnlyMode: true,\n token: program.token,\n project: program.project,\n };\n }\n\n\n const isTestConfigSpecified = program.testConfig?.length || program.testConfigId?.length;\n const isTestPlanSpecified = program.testPlan?.length || program.testPlanId?.length;\n const isSuiteSpecified = program.suite?.length || program.suiteId?.length;\n\n if (program.seleniumCapsFile) {\n try {\n // eslint-disable-next-line import/no-dynamic-require\n seleniumCapsFileContent = require(path.join(process.cwd(), program.seleniumCapsFile));\n } catch (err) {\n throw new ArgError(`Failed to parse selenium caps file file error: ${err.message}`);\n }\n }\n\n if (program.reporters?.includes('junit') && !program.reportFile) {\n console.log('Warning: please define --report-file option for JUnit reporter');\n }\n\n if (!program.tunnel && program.externalLambdatestTunnelId) {\n throw new ArgError('missing --tunnel parameter');\n }\n\n if (!program.tunnel && program.externalLambdatestUseWss) {\n throw new ArgError('missing --tunnel parameter');\n }\n\n if (!program.tunnel && [program.tunnelPort, program.tunnelHostHeader, program.tunnelRegion, program.tunnelDiagnostics].some(Boolean)) {\n throw new ArgError('missing --tunnel parameter');\n }\n if (program.chromeExtraPrefs) {\n try {\n // eslint-disable-next-line import/no-dynamic-require\n chromeExtraPrefs = require(path.join(process.cwd(), program.chromeExtraPrefs));\n } catch (err) {\n throw new ArgError(`Failed to read/open chrome extra prefs file error: ${err.message}`);\n }\n }\n\n if (program.chromeExtraArgs) {\n const args = program.chromeExtraArgs.split(',');\n for (const arg of args) {\n const [argName] = arg.split('=');\n if (allowedChromeFlags.includes(argName) || program.useLocalChromeDriver || program.useChromeLauncher) {\n chromeExtraArgs.push(arg);\n if (argName === 'proxy-server') {\n chromeExtraArgs.push('proxy-bypass-list=*.testim.io;*.coralogix.com;*.cloudinary.com;*.rollout.io');\n }\n } else {\n console.warn(`Ignoring an unsupported chrome arg (${argName}), allowed values: ${JSON.stringify(allowedChromeFlags)}`);\n }\n }\n }\n\n if (program.paramsFile) {\n try {\n // eslint-disable-next-line import/no-dynamic-require\n userParamsData = Object.assign({}, userParamsData, require(path.join(process.cwd(), program.paramsFile)));\n } catch (err) {\n throw new ArgError(`Failed to read/open params file error: ${err.message}`);\n }\n }\n\n if (program.params) {\n try {\n userParamsData = Object.assign({}, userParamsData, JSON.parse(program.params));\n } catch (err) {\n throw new ArgError(`Failed to parse params string error: ${err.message}`);\n }\n }\n\n // SauceLabs Options\n if ((program.sauceUser && !program.sauceKey) || (!program.sauceUser && program.sauceKey)) {\n throw new ArgError('missing --sauce-user <sauce-user> or --sauce-key <sauce-key>');\n }\n\n if (program.sauceUser && program.sauceKey) {\n setHostAndPortForSauceLab();\n program.saucelabs = {};\n\n program.saucelabs.username = program.sauceUser;\n program.saucelabs.accessKey = program.sauceKey;\n }\n\n if (program.sauceOptions) {\n try {\n // eslint-disable-next-line import/no-dynamic-require\n const sOptions = require(path.join(process.cwd(), program.sauceOptions));\n const isMobile = sOptions.platformName && ['ios', 'android'].includes(sOptions.platformName.toLowerCase());\n if (sOptions.browserName) {\n const browserName = sOptions.browserName.toLowerCase();\n switch (browserName) {\n case 'microsoftedge':\n program.browser = 'edge';\n break;\n default:\n program.browser = browserName;\n }\n }\n\n if (program.browser === 'edge' && parseFloat(sOptions.version) >= EDGE_CHROMIUM_MIN_VERSION) {\n program.browser = 'edge-chromium';\n }\n\n const isBadVersion = parseFloat(sOptions.version) < 50 && !['dev', 'beta'].includes(sOptions.version);\n if (!isMobile && program.browser === 'chrome' && isBadVersion) {\n throw new ArgError('The minimum chrome supported version is 50.0');\n }\n\n program.saucelabs = Object.assign({}, program.saucelabs, sOptions);\n } catch (err) {\n throw new ArgError(`Failed to parse saucelabs options file error: ${err.message}`);\n }\n }\n\n // BrowserStack options\n if ((program.browserstackUser && !program.browserstackKey) || (!program.browserstackUser && program.browserstackKey)) {\n throw new ArgError('missing --browserstack-user <browserstack-user> or --browserstack-key <browserstack-key>');\n }\n if (program.browserstackUser && program.browserstackKey) {\n setHostAndPortForBrowserStack();\n program.browserstack = {};\n\n program.browserstack['browserstack.user'] = program.browserstackUser;\n program.browserstack['browserstack.key'] = program.browserstackKey;\n }\n\n if (program.browserstackOptions) {\n try {\n // eslint-disable-next-line import/no-dynamic-require\n const bsOptions = require(path.join(process.cwd(), program.browserstackOptions));\n const isMobile = bsOptions.platform && ['mac', 'android'].includes(bsOptions.platform.toLowerCase());\n if (bsOptions.browserName) {\n program.browser = bsOptions.browserName.toLowerCase();\n }\n\n if (program.browser === 'edge' && parseFloat(bsOptions.browser_version) >= EDGE_CHROMIUM_MIN_VERSION) {\n program.browser = 'edge-chromium';\n }\n\n if (!isMobile && parseFloat(bsOptions.browser_version) < 50 && program.browser === 'chrome') {\n throw new ArgError('The minimum chrome supported version is 50.0');\n }\n\n program.browserstack = Object.assign({}, program.browserstack, bsOptions);\n } catch (err) {\n throw new ArgError(`Failed to parse browserstack options file error: ${err.message}`);\n }\n }\n\n program.perfecto = {};\n\n if (program.perfectoToken) {\n program.perfecto.securityToken = program.perfectoToken;\n }\n\n if (program.perfectoOptions) {\n try {\n // eslint-disable-next-line import/no-dynamic-require\n const perfectoOptions = require(path.join(process.cwd(), program.perfectoOptions));\n const DEFAULTS = { location: 'US East', securityToken: program.perfectoToken };\n program.perfecto = Object.assign({}, DEFAULTS, perfectoOptions);\n } catch (err) {\n throw new ArgError(`Failed to parse perfecto options file error: ${err.message}`);\n }\n }\n\n program.testobjectSauce = {};\n\n if (program.testobjectKey) {\n program.testobjectSauce.testobjectApiKey = program.testobjectKey;\n }\n\n if (program.testobjectOptions) {\n try {\n // eslint-disable-next-line import/no-dynamic-require\n const testobjectOptions = require(path.join(process.cwd(), program.testobjectOptions));\n const DEFAULTS = { testobjectApiKey: program.testobjectKey };\n program.testobjectSauce = Object.assign({}, DEFAULTS, testobjectOptions);\n } catch (err) {\n throw new ArgError(`Failed to parse test object options file error: ${err.message}`);\n }\n }\n\n if (!program.project) {\n const credentialsManager = require('./credentialsManager');\n const projectId = await credentialsManager.getProjectId();\n\n if (projectId) {\n program.project = projectId;\n } else {\n throw new ArgError('missing project-id info, either --login to provide new credentials or use --project <project-id>');\n }\n }\n\n if (!program.mode) {\n // we default to selenium mode in Codim for debuggability\n program.mode = program.run.length ? 'selenium' : 'extension';\n }\n\n if (program.testConfig) {\n // convert single test config inputs to array (e.g. from configFile)\n program.testConfig = [program.testConfig].flat();\n }\n\n if (program.testConfigId) {\n // convert single test config inputs to array (e.g. from configFile)\n program.testConfigId = [program.testConfigId].flat();\n }\n\n program.retries = !program.retries || typeof program.retries === 'boolean' ? 1 : Number(program.retries) + 1;\n program.browserTimeout = !program.browserTimeout || typeof program.browserTimeout === 'boolean' ? 60 * 1000 : program.browserTimeout;\n program.newBrowserWaitTimeout = !program.newBrowserWaitTimeout || typeof program.newBrowserWaitTimeout === 'boolean' ? 10 * 60 * 1000 : program.newBrowserWaitTimeout * 60 * 1000;\n\n if (!program.getBrowserTimeout) {\n program.getBrowserTimeout = program.browserTimeout;\n }\n if (!program.getBrowserRetries) {\n program.getBrowserRetries = Math.round(program.newBrowserWaitTimeout / program.browserTimeout);\n }\n program.getSessionTimeout = program.browserTimeout < program.getSessionTimeout ? program.getSessionTimeout : program.browserTimeout;\n program.driverRequestTimeout = program.browserTimeout < program.driverRequestTimeout ? program.driverRequestTimeout : program.browserTimeout;\n\n const timeoutWasGiven = Boolean(program.timeout);\n program.timeout = !program.timeout || typeof program.timeout === 'boolean' ? 10 * 60 * 1000 : program.timeout;\n program.beforeParallel = !program.beforeParallel || typeof program.beforeParallel === 'boolean' ? 1 : Number(program.beforeParallel);\n program.parallel = !program.parallel || typeof program.parallel === 'boolean' ? 1 : Number(program.parallel);\n program.afterParallel = !program.afterParallel || typeof program.afterParallel === 'boolean' ? 1 : Number(program.afterParallel);\n\n\n if (program.parallel > 1 && program.run && !program.gridId && !program.grid &&\n ((!program.testPlan || program.testPlan.length === 0) && (!program.testPlanId || !program.testPlanId.length)) && process.stdout.isTTY && !program.headless && !process.env.TERM) {\n const prompts = require('prompts');\n const response = await prompts({\n type: 'toggle',\n name: 'isSure',\n message: 'Running in parallel without --headless flag will open several browsers on your computer. Are you sure?',\n initial: false,\n active: 'yes',\n inactive: 'no',\n });\n\n if (!response.isSure) {\n process.exit(0);\n }\n }\n\n program.tunnelPort = !program.tunnelPort || typeof program.tunnelPort === 'boolean' ? '80' : program.tunnelPort;\n\n program.port = program.port && Number(program.port);\n\n if (program.retries <= 0 || Number.isNaN(program.retries)) {\n throw new ArgError('test failure retry count could not be a negative number or string, --retries <max_num_of_retries>');\n }\n\n if (program.retries > 21) {\n throw new ArgError('Max number of retries exceeded. Number cannot be greater than 20, --retries <max_num_of_retries>');\n }\n\n if (!program.token) {\n const credentialsManager = require('./credentialsManager');\n const credentialToken = await credentialsManager.getToken();\n\n if (credentialToken) {\n program.token = credentialToken;\n } else {\n throw new ArgError('missing Testim Access Token, either --login to provide new credentials or use --token <testim-access-token>, contact info@testim.io if you need a new one.');\n }\n }\n\n if (program.browserTimeout <= 0 || Number.isNaN(program.browserTimeout)) {\n throw new ArgError('get browser timeout could not be a negative number, --browser-timeout <get-browser-timeout>');\n }\n\n if (program.newBrowserWaitTimeout <= 0 || Number.isNaN(program.newBrowserWaitTimeout)) {\n throw new ArgError('max new browser wait timeout could not be a negative number, --new-browser-wait-timeout <max-wait-to-browser>');\n }\n\n if (program.timeout <= 0 || Number.isNaN(program.timeout)) {\n throw new ArgError('test run timeout could not be a negative number, --timeout <run-timeout>');\n }\n\n if (program.beforeParallel <= 0 || Number.isNaN(program.beforeParallel)) {\n throw new ArgError('before-parallel could not be a negative number or not number, --before-parallel <number-of-tests>');\n }\n\n if (program.parallel <= 0 || Number.isNaN(program.parallel)) {\n throw new ArgError('parallel could not be a negative number or not number, --parallel <number-of-tests>');\n }\n\n if (program.afterParallel <= 0 || Number.isNaN(program.afterParallel)) {\n throw new ArgError('after-parallel could not be a negative number or not number, --after-parallel <number-of-tests>');\n }\n\n if (![CLI_MODE.EXTENSION, CLI_MODE.SELENIUM, CLI_MODE.APPIUM].includes(program.mode)) {\n throw new ArgError(`runner mode <${program.mode}> is not supported`);\n }\n\n if ((program.mode !== CLI_MODE.SELENIUM) && program.disableNativeEvents) {\n throw new ArgError('disable-native-events is only applicable in selenium mode');\n }\n\n if (\n !program.browser &&\n !isTestConfigSpecified &&\n !isTestPlanSpecified\n ) {\n program.browser = 'chrome';\n }\n\n if (!program.appiumLogLevel) {\n program.appiumLogLevel = 'silent';\n }\n\n if (!LOG_LEVEL_OPTIONS.includes(program.appiumLogLevel)) {\n throw new ArgError(`runner appium-log-level <${program.appiumLogLevel}> is not supported`);\n }\n\n if (program.testPlan && program.testPlan.length === 0 && program.testPlanId && program.testPlanId.length === 0) {\n if (\n typeof program.host !== 'string' &&\n typeof program.grid !== 'string' &&\n typeof program.gridId !== 'string' &&\n program.run.length === 0 &&\n !program.useLocalChromeDriver &&\n !program.useChromeLauncher &&\n !program.createPrefechedData\n ) {\n throw new ArgError(\n 'missing remote grid address parameter, specify --host <host-name-or-ip> or --grid <grid-name> or --grid-id <grid-id>',\n );\n }\n } else if (\n program.testId.length ||\n program.label.length ||\n program.name.length ||\n isTestConfigSpecified ||\n program.browser ||\n isSuiteSpecified ||\n program.useLocalChromeDriver ||\n program.useChromeLauncher\n ) {\n throw new ArgError(\n 'cannot set --testId, --label, --name, --browser, --test-config, --test-config-id, --use-local-chrome-driver --use-chrome-launcher or --suite with --test-plan option',\n );\n }\n\n if (!isTestPlanSpecified && (program.beforeParallel !== 1 || program.afterParallel !== 1)) {\n throw new ArgError('cannot set --before-parallel or --after-parallel without --test-plan option');\n }\n\n if (\n (program.testId.length ||\n isTestPlanSpecified ||\n program.label.length ||\n program.name.length ||\n isSuiteSpecified) &&\n program.file\n ) {\n throw new ArgError(\n 'Cannot pass codeful automation tests with --testId --label --name or --suite',\n );\n }\n\n const numberOfDefinedHosts = [program.host, program.grid, program.gridId].filter(Boolean).length;\n if (numberOfDefinedHosts > 1) {\n throw new ArgError('please define exactly one of --grid or --grid-id or --host');\n }\n\n if (program.host?.includes('/')) {\n if (!/^(f|ht)tps?:\\/\\//i.test(program.host)) {\n program.host = `http://${program.host}`;\n }\n program.host = url.parse(program.host).hostname;\n }\n\n if (program.resultLabel.length) {\n program.resultLabel = program.resultLabel.map(label => label.trim()).filter(Boolean);\n const invalidLabels = program.resultLabel.filter(label => label.length >= 250).filter(Boolean);\n if (program.branch === 'auto-detect' && program.resultLabel.includes('auto-detect-branch') && utils.getEnvironmentGitBranch()) {\n program.resultLabel.unshift(utils.getEnvironmentGitBranch());\n }\n if (invalidLabels.length) {\n throw new ArgError('A result label cannot exceed 250 characters');\n }\n }\n\n const extHeadlessUrl = runOptionsUtils.getResolvedExtensionUrl(program);\n const playerUrl = runOptionsUtils.getPlayerUrl(program);\n\n if (!program.w3cCapabilities && !program.oldCapabilities) {\n throw new ArgError('cannot set --w3c-capabilities and --old-capabilities options as false');\n }\n program.protocol = program.protocol || (program.port === 443 ? 'https' : 'http');\n if (!['http', 'https'].includes(program.protocol)) {\n throw new ArgError('invalid --protocol value, allow --protocol http or https');\n }\n\n if (program.rerunFailedByRunId && program.branch) {\n throw new ArgError('It is not possible to use --branch with --rerun-failed-by-run-id. Tests will automatically run on the same branch that was used in the original run');\n }\n\n if (program.rerunFailedByRunId &&\n (isSuiteSpecified || program.name.length ||\n program.testId.length || program.label.length || isTestPlanSpecified)) {\n throw new ArgError('Re-running failed tests is not possible when suite (--suite),' +\n ' label (--label), plan (--test-plan), or other test flags (--test) are provided. Please remove these flags and try again');\n }\n\n if (program.run.length) {\n const glob = require('glob');\n program.files = _.flatMap(program.run, files => glob.sync(files));\n if (program.files.length === 0) {\n throw new ArgError(`No files found at path '${program.run}'.`);\n }\n } else {\n program.files = [];\n }\n\n if (program.setRetention && !_.inRange(_.parseInt(program.setRetention), 1, 11)) {\n throw new ArgError('Please provide the number of days that the test results will be retained for (--set-retention must be a whole number between 1 to 10)');\n }\n program.setRetention = program.setRetention && Number(program.setRetention);\n\n const mockNetworkDeprecationMsg = 'is no longer supported, please use --override-mapping-file';\n if (program.mockNetworkHar) {\n throw new ArgError(`--mock-network-har ${mockNetworkDeprecationMsg}`);\n }\n if (program.mockNetworkPattern) {\n throw new ArgError(`--mock-network-pattern ${mockNetworkDeprecationMsg}`);\n }\n\n if (program.disableMockNetwork && program.overrideMappingFile) {\n throw new ArgError('You can either use --disable-mock-network or --override-mapping-file');\n }\n\n if (!program.collectCodeCoverage && program.codeCoverageSourceMapPath) {\n throw new ArgError('cannot set --code-coverage-source-map-path without passing --collect-code-coverage');\n }\n\n if (!program.collectCodeCoverage && program.codeCoverageReporter.length) {\n throw new ArgError('cannot set --code-coverage-reporter without passing --collect-code-coverage');\n }\n\n if (!program.collectCodeCoverage && program.codeCoverageInclude.length) {\n throw new ArgError('cannot set --code-coverage-include without passing --collect-code-coverage');\n }\n\n if (program.collectCodeCoverage && program.codeCoverageReporter && _.difference(program.codeCoverageReporter, CODE_COVERAGE_REPORTER_OPTIONS).length) {\n const diff = _.difference(program.codeCoverageReporter, CODE_COVERAGE_REPORTER_OPTIONS);\n throw new ArgError(`invalid --code-coverage-reporter parameters ${diff.join('/')}`);\n }\n\n program.codeCoverageReporter = program.codeCoverageReporter.length === 0 ? ['html', 'text'] : program.codeCoverageReporter;\n program.codeCoverageInclude = program.codeCoverageInclude.length === 0 ? ['src/**'] : program.codeCoverageInclude;\n\n const extensionOnlyOptions = {\n mockNetworkHar: '--mock-network-har',\n mockNetworkPattern: '--mock-network-pattern',\n overrideMappingFile: '--override-mapping-file',\n codeCoverageUrlFilter: '--code-coverage-url-filter',\n collectCodeCoverage: '--collect-code-coverage',\n disableMockNetwork: '--disable-mock-network',\n useChromeLauncher: '--use-chrome-launcher',\n };\n const usedExtensionOptions = Object.keys(extensionOnlyOptions).filter(key => Boolean(program[key]));\n\n if (program.mode !== CLI_MODE.EXTENSION && usedExtensionOptions.length) {\n const multi = usedExtensionOptions.length > 1 ? 'are' : 'is';\n throw new ArgError(`${usedExtensionOptions.map(key => extensionOnlyOptions[key]).join(' and ')} ${multi} only applicable in extension mode`);\n }\n\n if (program.tmsFieldFile) {\n try {\n const fileContent = fs.readFileSync(program.tmsFieldFile);\n program.tmsCustomFields = JSON.parse(fileContent);\n } catch (err) {\n throw new ArgError(`failed to parse field file error: ${err.message}`);\n }\n }\n\n /** Handling deprecation of High speed mode (renamed to Turbo mode) */\n if (program.highSpeed) {\n printDeprecationWarning('--high-speed', ' --turbo-mode');\n program.turboMode = true;\n }\n\n if (program.deviceUdid && (program.deviceModel || program.osVersion)) {\n throw new ArgError('It is not possible to use --osVersion or --deviceModel with --device-udid. device-udid is unique and cannot be combined with another flag');\n }\n if (program.lightweightMode) {\n try {\n const DEFAULTS = {\n general: true,\n disableLabs: true,\n disableFeatureFlags: true,\n disableAssets: true,\n disablePixelValidation: true,\n disableResults: true,\n disableStepDelay: true,\n disableRemoteStep: true,\n assumePreloadedSharedSteps: true,\n disableVisibilityCheck: false,\n disableLocators: false,\n bypassSetup: false,\n disableAutoImprove: true,\n disableQuotaBlocking: true,\n onlyTestIdsNoSuite: true,\n uploadAssetsAndResultsOnFailure: true,\n preloadTests: true,\n disableProjectDefaults: true,\n type: 'lightweight',\n };\n\n const lightweightModeOptions = typeof program.lightweightMode === 'string' ? JSON.parse(program.lightweightMode) : {};\n program.lightweightMode = Object.assign({}, DEFAULTS, lightweightModeOptions);\n } catch (err) {\n throw new ArgError(`failed to parse lightweightMode settings error: ${err.message}`);\n }\n } else if (program.turboMode && program.mode === CLI_MODE.EXTENSION) {\n program.lightweightMode = {\n general: true,\n disableLabs: false,\n disableFeatureFlags: false,\n disableAssets: true,\n disablePixelValidation: false,\n disableResults: true,\n disableStepDelay: true,\n disableRemoteStep: false,\n assumePreloadedSharedSteps: false,\n disableVisibilityCheck: false,\n disableLocators: false,\n bypassSetup: false,\n disableQuotaBlocking: false,\n disableAutoImprove: false,\n onlyTestIdsNoSuite: false,\n uploadAssetsAndResultsOnFailure: true,\n preloadTests: false,\n disableProjectDefaults: false,\n type: 'turboMode',\n };\n }\n\n if (typeof program.baseUrl === 'boolean') {\n throw new ArgError('base url cannot be used as a flag, and must contain a string value');\n }\n\n return ({\n testId: [program.testId].flat(),\n name: [program.name].flat(),\n label: [program.label].flat(),\n suites: [program.suite].flat(),\n suiteIds: [program.suiteId].flat(),\n testPlan: [program.testPlan].flat(),\n testPlanIds: [program.testPlanId].flat(),\n files: [program.files].flat(),\n webpackConfig: program.webpackConfig,\n reportFile: program.reportFile,\n urls: program.urls,\n reportFileClassname: program.overrideReportFileClassname,\n reporters: program.reporters,\n project: program.project,\n host: program.host,\n headless: program.headless,\n useLocalChromeDriver: program.useLocalChromeDriver,\n chromeBinaryLocation: program.chromeBinaryLocation,\n useChromeLauncher: program.useChromeLauncher,\n port: program.port,\n grid: program.grid,\n gridId: program.gridId,\n disableNativeEvents: program.disableNativeEvents,\n saucelabs: program.saucelabs,\n browserstack: program.browserstack,\n baseUrl: program.baseUrl,\n branch: (program.branch === 'auto-detect' ? utils.getEnvironmentGitBranch() : program.branch) || 'master',\n autoDetect: program.branch === 'auto-detect',\n token: program.token,\n userParamsData,\n mode: program.mode,\n isRegressionBaselineRun: program.isRegressionBaselineRun,\n browser: program.browser,\n beforeParallel: program.beforeParallel,\n parallel: program.parallel,\n afterParallel: program.afterParallel,\n canary: program.canary,\n rerunFailedByRunId: program.rerunFailedByRunId,\n disableGridCheck: program.disableGridCheck,\n disableTimeoutRetry: program.disableTimeoutRetry,\n resultLabels: program.resultLabel,\n path: program.path,\n protocol: program.protocol,\n perfecto: program.perfecto,\n experitestToken: program.experitestToken,\n testobjectSauce: program.testobjectSauce,\n gridUsername: program.gridUsername,\n gridPassword: program.gridPassword,\n overrideExecutionName: program.overrideExecutionName,\n\n tmsSuppressReporting: Boolean(program.suppressTmsReporting) || Boolean(program.tmsSuppressReporting),\n tmsRunId: program.tmsRunId,\n tmsCustomFields: program.tmsCustomFields,\n\n proxyForGrid: program.proxyForGrid,\n retentionDays: program.setRetention,\n passZeroTests: Boolean(program.passZeroTests),\n runQuarantinedTests: Boolean(program.runQuarantinedTests),\n //Mobile-Flags\n deviceModel: program.deviceModel,\n deviceUdid: program.deviceUdid,\n osVersion: program.osVersion,\n appId: program.appId,\n appiumLogLevel: program.appiumLogLevel,\n\n // Extension\n ext: program.ext,\n extensionLocation: [program.extensionPath || extHeadlessUrl].flat(),\n extensionPath: program.extensionPath,\n\n // Player\n playerLocation: program.playerPath || playerUrl,\n playerPath: program.playerPath,\n playerRequirePath: program.playerRequirePath,\n\n // Tunnel\n tunnel: program.tunnel,\n tunnelPort: program.tunnelPort,\n tunnelRoutes: program.tunnelRoutes,\n tunnelRoutesOutput: program.tunnelRoutesOutput,\n tunnelHostHeader: program.tunnelHostHeader,\n tunnelRegion: program.tunnelRegion,\n tunnelDiagnostics: program.tunnelDiagnostics,\n tunnelUseHttpAddress: program.tunnelUseHttpAddress,\n externalLambdatestTunnelId: program.externalLambdatestTunnelId,\n externalLambdatestUseWss: program.externalLambdatestUseWss || false,\n externalLambdatestDisableAutomationTunneling: Boolean(program.externalLambdatestDisableAutomationTunneling),\n externalLambdatestMitm: Boolean(program.externalLambdatestMitm),\n\n // Hooks\n beforeTest: program.beforeTest,\n afterTest: program.afterTest,\n beforeSuite: program.beforeSuite,\n afterSuite: program.afterSuite,\n\n // Timeout\n timeout: program.timeout,\n timeoutWasGiven,\n browserTimeout: program.browserTimeout,\n newBrowserWaitTimeout: program.newBrowserWaitTimeout,\n\n // New Timeouts\n getBrowserTimeout: program.getBrowserTimeout,\n getBrowserRetries: program.getBrowserRetries,\n getSessionTimeout: program.getSessionTimeout,\n getSessionRetries: program.getSessionRetries,\n driverRequestTimeout: program.driverRequestTimeout,\n driverRequestRetries: program.driverRequestRetries,\n\n testStartTimeout: program.testStartTimeout,\n\n testConfigNames: program.testConfig,\n testConfigIds: program.testConfigId,\n\n // Mock network\n overrideMappingFile: program.overrideMappingFile,\n disableMockNetwork: program.disableMockNetwork,\n\n // Code coverage\n codeCoverageUrlFilter: program.codeCoverageUrlFilter,\n collectCodeCoverage: program.collectCodeCoverage,\n codeCoverageReportPath: program.codeCoverageReportPath,\n codeCoverageSourceMapPath: program.codeCoverageSourceMapPath,\n codeCoverageReporter: program.codeCoverageReporter,\n codeCoverageInclude: program.codeCoverageInclude,\n\n // Remote run options\n executionId: program.executionId,\n remoteRunId: program.remoteRunId,\n schedulerId: program.schedulerId,\n source: program.source,\n resultId: program.resultId,\n\n //Customer Extension\n installCustomExtension: program.installCustomExtension,\n\n w3cCapabilities: program.w3cCapabilities,\n oldCapabilities: program.oldCapabilities,\n\n chromeBlockLocation: program.chromeBlockLocation,\n chromeUserDataDir: program.chromeUserDataDir,\n retries: program.retries,\n chromeExtraPrefs,\n chromeExtraArgs,\n\n disableCookiesSameSiteNoneRequiresSecure: program.disableCookiesSameSiteNoneRequiresSecure,\n\n seleniumCapsFileContent,\n shouldMonitorPerformance: program.monitorPerformance,\n\n user: program.user,\n\n lightweightMode: program.lightweightMode,\n createPrefechedData: program.createPrefechedData,\n\n saveRCALocally: program.saveRcaLocally,\n exitCodeIgnoreFailingTests: program.exitCodeIgnoreFailingTests,\n\n disableSockets: program.disableSockets,\n\n // intersections\n intersections: {\n labels: program.intersectWithLabel.length ? [program.intersectWithLabel].flat() : undefined,\n suiteNames: program.intersectWithSuite.length ? [program.intersectWithSuite].flat() : undefined,\n suiteIds: program.intersectWithSuiteId.length ? [program.intersectWithSuiteId].flat() : undefined,\n },\n\n downloadBrowser: program.downloadBrowser,\n });\n },\n};\n","/* eslint-disable no-console */\n\n'use strict';\n\n// fixes the local build if running the runner locally\nconst path = require('path');\nconst { execSync } = require('child_process');\nconst { existsSync } = require('fs');\n\nconst location = path.resolve(__filename);\nconst isDevBuild = !location.includes('node_modules') && path.dirname(location).endsWith('src');\n\nif (!isDevBuild) {\n return;\n}\n\nconst isDepBuilt = existsSync(path.resolve(location, '..', '..', '..', 'webdriverio', 'build', 'index.js'));\n\nif (!isDepBuilt) {\n console.log(\"Hi developer, we're initializing the runner dev env for the first time for you ❤️\");\n execSync('yarn workspace @testim/webdriverio build', {\n cwd: path.resolve(location, '..', '..'),\n });\n}\n","'use strict';\n\nconst ora = require('ora');\nconst npmWrapper = require('./npmWrapper');\nconst { getLogger } = require('./logger');\nconst { getCliLocation } = require('../utils');\nconst { lazyDependencies } = require('../../package.json');\nconst { requireWithFallback } = require('./requireWithFallback');\n\nconst logger = getLogger('lazy-require');\nconst ongoingCalls = new Map();\n\nmodule.exports = async function memoizedLazyRequireApi(dependency, options = {}) {\n const packageLocally = npmWrapper.getPackageIfInstalledLocally(dependency);\n if (packageLocally) {\n return packageLocally;\n }\n\n let spinner;\n if (!options.silent) {\n spinner = ora(`Installing ${dependency} before first usage...`).start();\n }\n\n try {\n const requiredModule = await memoizedLazyRequire(dependency);\n if (spinner) {\n spinner.succeed();\n }\n return requiredModule;\n } catch (error) {\n logger.warn('failed to install dependency lazily', { dependency, err: error });\n const depVersionToInstall = getVersionOfLazyDep(dependency);\n const depWithVersions = `${dependency}@${depVersionToInstall}`;\n\n const removeGlobal = process.argv.includes('npx');\n const globalFlag = removeGlobal ? '' : '-g ';\n const errorMessage = `Installation of ${dependency} failed. This typically means you are running an out-of-date version of Node.js or NPM.` +\n `Please manually install by running the following command: npm install ${globalFlag}${depWithVersions}`;\n\n if (spinner) {\n spinner.fail(errorMessage);\n }\n\n throw error;\n }\n};\n\nasync function memoizedLazyRequire(identifier, options = {}) {\n if (ongoingCalls.has(identifier)) {\n return ongoingCalls.get(identifier);\n }\n\n ongoingCalls.set(identifier, lazyRequireImpl(identifier, options));\n ongoingCalls.get(identifier).catch(() => {\n ongoingCalls.delete(identifier);\n });\n\n return ongoingCalls.get(identifier);\n}\n\nasync function lazyRequireImpl(dependency) {\n const packageLocally = npmWrapper.getPackageIfInstalledLocally(dependency);\n\n if (packageLocally) {\n return packageLocally;\n }\n\n const depVersionToInstall = getVersionOfLazyDep(dependency);\n\n const depWithVersions = `${dependency}@${depVersionToInstall}`;\n\n await npmWrapper.installPackageLocally(getCliLocation(), depWithVersions);\n\n return requireWithFallback(dependency);\n}\n\nmodule.exports.installAllLazyDependencies = async function installAllLazyDependencies() {\n const allLazyDependencies = Object.keys(lazyDependencies);\n\n for (const dep of allLazyDependencies) {\n await lazyRequireImpl(dep);\n }\n};\n\n/**\n *\n * @param {string} dependencyToFind\n */\nfunction getVersionOfLazyDep(dependencyToFind) {\n const depEntry = Object.entries(lazyDependencies)\n .find(([dep]) => dep === dependencyToFind);\n\n if (!depEntry) {\n throw new Error('The given package name is not lazyDependencies');\n }\n\n return depEntry[1];\n}\n","/* eslint-disable no-console */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as childProcess from 'child_process';\nimport ora from 'ora';\nimport chalk from 'chalk';\nimport prompts from 'prompts';\nimport validateNpmPackageName from 'validate-npm-package-name';\nimport { promisify } from 'util';\nimport { ArgError } from '../errors';\nimport { copyDir } from '../utils/fsUtils';\n\nconst exec = promisify(childProcess.exec);\n\n/** @param {string} name */\nexport async function init(name: boolean | string) {\n let typedName: string = typeof name === 'string' ? name : '';\n if (typeof name !== 'string' || !name.trim()) {\n const response = await prompts({\n type: 'text',\n name: 'project',\n message: 'Please enter Project name',\n validate: value => String(value).length > 3,\n });\n typedName = response.project;\n }\n\n const fullPath = path.resolve(typedName);\n\n if (fs.existsSync(fullPath) && fs.readdirSync(fullPath).length !== 0) {\n console.log(`${fullPath} is not empty. Quitting...`);\n process.exit(1);\n }\n\n const packageName = fullPath.substr(Math.max(fullPath.lastIndexOf('/'), fullPath.lastIndexOf('\\\\')) + 1);\n\n const nameValidity = validateNpmPackageName(packageName);\n\n if (!nameValidity.validForNewPackages) {\n const message = `The name '${packageName}' is not a valid package name:`;\n console.log(chalk.red(message));\n if (nameValidity.errors) nameValidity.errors.forEach((e) => console.log(chalk.red(e)));\n if (nameValidity.warnings) nameValidity.warnings.forEach((e) => console.log(chalk.yellowBright(`warning: ${e}`)));\n\n throw new ArgError(`${message}\\nvalidation errors:\\n${nameValidity.errors?.join('\\n') || ''}\\nwarnings:\\n${nameValidity.warnings?.join('\\n') || ''}`);\n }\n\n const response = await prompts({\n type: 'toggle',\n name: 'isJs',\n message: 'Add support for TypeScript?',\n initial: true,\n active: 'no',\n inactive: 'yes',\n });\n\n const sourceFolder = response.isJs ? 'template.js' : 'template.ts'; // these are directories and not file names\n const templatesPath = typeof global.meta?.IS_LOCAL === 'boolean' ? 'codim' : '';\n\n const source = path.join(__dirname, templatesPath, sourceFolder);\n const destDir = path.join(process.cwd(), typedName);\n\n let spinner = ora(`Creating new test project in ${destDir}`).start();\n\n await copyDir(source, destDir);\n\n const sourcePackageJson = path.join(__dirname, templatesPath, sourceFolder, 'package.json');\n const destPackageJson = path.join(process.cwd(), typedName, 'package.json');\n\n const packageContents = await fs.promises.readFile(sourcePackageJson);\n\n const newPackageJson = packageContents.toString().replace('~testim-codeful-test-project~', packageName);\n\n await fs.promises.writeFile(destPackageJson, newPackageJson);\n\n const gitIgnore = 'node_modules';\n const gitIgnoreFilePath = path.join(process.cwd(), typedName, '.gitignore');\n await fs.promises.writeFile(gitIgnoreFilePath, gitIgnore);\n\n spinner.succeed();\n spinner = ora('Installing dependencies').start();\n await exec('npm install', { cwd: destDir });\n\n spinner.succeed();\n\n console.log(`Testim Dev Kit project folder successfully created in ${destDir}.`);\n}\n","const _ = require('lodash');\nconst localRunnerCache = require('./runnerFileCache');\nconst servicesApi = require('./testimServicesApi');\nconst { promiseMap } = require('../utils');\n\n\nconst TEN_HOURS = 1000 * 60 * 60 * 10;\n\n/**\n * @param {import('../runOptions').RunnerOptions} options\n */\nasync function preloadTests(options) {\n if (!Array.isArray(options.testId) || !options.testId.length) {\n return {};\n }\n const opts = {\n branch: options.branch,\n projectId: options.project,\n };\n return await localRunnerCache.memoize(async () => {\n const results = await promiseMap(options.testId, testId => servicesApi.loadTest({ ...opts, testId }), { concurrency: 2 });\n return _.keyBy(results, 'testData.id');\n }, 'loadTests', TEN_HOURS, [opts, options.testId])();\n}\n\n\nmodule.exports = {\n preloadTests,\n};\n","'use strict';\n\nconst constants = require('../commons/constants');\nconst logger = require('../commons/logger').getLogger('debug-reporter');\n\nconst MASK_OPTIONS = {\n token: undefined,\n userParamsData: undefined,\n projectData: undefined,\n allGrids: undefined,\n gridData: undefined,\n awsAccessKeyId: undefined,\n awsSecretAccessKey: undefined,\n runParams: undefined,\n perfecto: undefined,\n testobjectSauce: undefined,\n};\n\nclass DebugReporter {\n constructor(options) {\n this.options = options;\n }\n\n onTestStarted(test, workerId) {\n logger.info('Test Started', { testId: test.testId, testName: test.name, resultId: test.resultId, workerId });\n }\n\n onTestFinished(test, workerId) {\n const gridData = this.options.gridData || {};\n const provider = gridData.provider;\n const host = gridData.host;\n const gridId = gridData.gridId;\n const gridType = gridData.type;\n const failedGetBrowserAttempts = gridData.failedGetBrowserAttempts;\n logger.info('Test Finished', {\n testId: test.testId,\n testName: test.name,\n resultId: test.resultId,\n success: test.success,\n duration: test.duration,\n browser: this.options.browser,\n companyId: this.options.company.companyId,\n grid: { provider, host, failedGetBrowserAttempts, id: gridId, type: gridType },\n workerId,\n });\n }\n\n onTestPlanStarted(beforeTests, tests, afterTests, testPlanName, executionId, isAnonymous, configName) {\n const args = stripTokenFromConsoleArguments(process.argv);\n\n logger.info('Test Plan Started', { executionId, testPlanName, isAnonymous, configName, options: Object.assign({}, this.options, MASK_OPTIONS), args });\n }\n\n onTestPlanFinished(testResults, testPlanName, duration, executionId, isAnonymous) {\n const passed = Object.keys(testResults).filter(resultId => testResults[resultId].status === constants.runnerTestStatus.PASSED).length;\n const failed = Object.keys(testResults).length - passed;\n\n logger.info('Test Plan Finished', { isAnonymous, passed, failed, testPlanName, options: Object.assign({}, this.options, MASK_OPTIONS), duration, executionId });\n }\n}\n\nfunction stripTokenFromConsoleArguments(args) {\n let indexOfTokenFlag = args.indexOf('--token');\n if (indexOfTokenFlag === -1) {\n indexOfTokenFlag = args.indexOf('--t');\n }\n\n if (indexOfTokenFlag !== -1) {\n try {\n const newArgs = args.slice();\n newArgs.splice(indexOfTokenFlag, 2);\n\n return newArgs;\n } catch (e) {\n /* empty */\n }\n }\n\n return args;\n}\n\nmodule.exports = DebugReporter;\n","'use strict';\n\nconst { gridTypes } = require('./constants');\n\nclass FeatureAvailabilityService {\n constructor() {\n /**\n * @type {'free'|'trial'|'pro'}\n */\n this._planType = 'free';\n }\n\n setPlanType(planType) {\n this._planType = planType;\n }\n\n get isTestStatusEnabled() {\n return ['pro', 'trial'].includes(this._planType);\n }\n\n shouldShowFreeGridRunWarning(gridType) {\n return this._planType !== 'pro' && gridType === gridTypes.DEVICE_FARM;\n }\n}\n\nmodule.exports = new FeatureAvailabilityService();\n","'use strict';\n\nconst utils = require('../utils');\nconst constants = require('../commons/constants');\n\nconst isFailedTest = (testResult) => {\n const { status, sessionType, success } = testResult;\n return status === constants.runnerTestStatus.FAILED || (sessionType === constants.sessionType.CODEFUL && success === false);\n};\n\nconst isAbortedTest = (testResult) => {\n const { status } = testResult;\n return status === constants.runnerTestStatus.ABORTED;\n};\n\nconst isPassedTest = (testResult) => {\n const { status, sessionType, success } = testResult;\n return status === constants.runnerTestStatus.PASSED || (sessionType === constants.sessionType.CODEFUL && success === true);\n};\n\nconst isSkippedTest = (testResult) => testResult.runnerStatus === constants.runnerTestStatus.SKIPPED;\n\nconst isContainer = (testResult, isCodeMode) => {\n if (!isCodeMode) {\n return false;\n }\n return !testResult.runConfig;\n};\n\nconst isEvaluatingTest = (testResult) => testResult.testStatus === constants.testStatus.EVALUATING;\n\nconst getSkippedCount = (testResults, options) => Object.values(testResults).filter(testResult => isSkippedTest(testResult) && utils.isQuarantineAndNotRemoteRun(testResult, options)).length;\n\nconst getFailureEvaluatingCount = (testResults) => Object.values(testResults).filter(testResult => isFailedTest(testResult) && isEvaluatingTest(testResult)).length;\n\nconst getFailedTests = (testResults, isCodeMode) => Object.values(testResults).filter(testResult => isFailedTest(testResult) && !isContainer(testResult, isCodeMode));\n\nconst getPassedTests = (testResults, isCodeMode) => Object.values(testResults).filter(testResult => isPassedTest(testResult) && !isContainer(testResult, isCodeMode));\n\nconst getAbortedTests = (testResults, isCodeMode) => Object.values(testResults).filter(testResult => isAbortedTest(testResult) && !isContainer(testResult, isCodeMode));\n\nmodule.exports = {\n isFailedTest,\n isAbortedTest,\n isPassedTest,\n isEvaluatingTest,\n isSkippedTest,\n\n getFailedTests,\n getPassedTests,\n getAbortedTests,\n getSkippedCount,\n getFailureEvaluatingCount,\n};\n","/* eslint-disable no-console */\nconst chalk = require('chalk');\nconst _ = require('lodash');\n\nconst utils = require('../utils');\nconst constants = require('../commons/constants');\nconst featureAvailabilityService = require('../commons/featureAvailabilityService');\nconst { getAbortedTests, getFailedTests, getPassedTests, getFailureEvaluatingCount, getSkippedCount } = require('./reporterUtils');\n\nconst colorize = { success: chalk.green, warn: chalk.yellow, error: chalk.red };\nconst { CLI_MODE } = constants;\nconst DEVICE = 'device';\n\nclass ConsoleReporter {\n constructor(options, branchToUse) {\n this.options = options;\n this.config = {\n showWorkerNames: options.parallel > 1, // we show worker names when there is more than one worker\n };\n this.branchToUse = branchToUse;\n }\n\n toWorkerIdPrefix(workerId) {\n return this.config.showWorkerNames ? `W:${workerId}` : '';\n }\n\n printWorkerDivider() {\n console.log('-'.repeat(process.stdout.columns || 83));\n }\n\n onTestStarted(test, workerId, isRerun, isCodeMode) {\n const type = isCodeMode ? 'File' : 'Test';\n const testIdLabel = test.isTestsContainer ? '' : `(${test.testId})`;\n const testUrlLabel = test.isTestsContainer ? '' : `url: ${chalk.underline(utils.getTestUrl(this.options.editorUrl, this.options.project, test.testId, test.resultId, this.branchToUse))}`;\n console.log(this.toWorkerIdPrefix(workerId), `${type} \"${test.name}\" started ${testIdLabel} ${testUrlLabel}`.trim());\n }\n\n onTestFinished(test, workerId, isRerun, isCodeMode) {\n if (isCodeMode) {\n // ignore print of file run done\n return;\n }\n const testStatus = test.success ? constants.runnerTestStatus.PASSED : constants.runnerTestStatus.FAILED;\n const testIdLabel = test.isTestsContainer ? ' ' : `(${test.testId})`;\n const color = colorize[test.success ? 'success' : 'error'];\n\n console.log(color(this.toWorkerIdPrefix(workerId), `Test \"${test.name}\" finished status: ${testStatus} ${testIdLabel} duration: ${utils.getDuration(test.duration)}`));\n }\n\n printAllFailedTests(failedTests) {\n if (failedTests.length > 0) {\n const failedTestStrings = failedTests.map(failedTest => {\n const testUrl = utils.getTestUrl(this.options.editorUrl, this.options.project, failedTest.testId, failedTest.resultId, this.branchToUse);\n if (failedTest.isTestsContainer) {\n return failedTest.name; // no working url\n }\n return `${failedTest.name} : ${testUrl}`;\n });\n console.log(colorize.error('Failed runs are:'));\n console.log(colorize.error(failedTestStrings.join('\\n\\r')));\n }\n }\n\n onTestPlanFinished(testResults, testPlanName, duration, executionId, isAnonymous, isCodeMode) {\n const failedTests = getFailedTests(testResults, isCodeMode);\n const passedTests = getPassedTests(testResults, isCodeMode);\n const abortedTests = getAbortedTests(testResults, isCodeMode);\n\n const passed = passedTests.length;\n const aborted = abortedTests.length;\n let failed = failedTests.length;\n let failedEvaluatingString = '';\n let skippedString = '';\n if (featureAvailabilityService.isTestStatusEnabled) {\n const failureEvaluatingCount = getFailureEvaluatingCount(testResults);\n failedEvaluatingString = ` FAILED-EVALUATING: ${failureEvaluatingCount}`;\n failed -= failureEvaluatingCount;\n\n const skippedCount = getSkippedCount(testResults, this.options);\n skippedString = ` SKIPPED: ${skippedCount}`;\n }\n\n const planName = this.buildTestPlanName(isAnonymous, testPlanName, isCodeMode);\n\n let message;\n const color = colorize[failed ? 'error' : 'success'];\n\n if (isCodeMode || planName.trim() === '' || planName.trim() === 'Anonymous') {\n message = `Tests completed. PASSED: ${passed} FAILED: ${failed}${failedEvaluatingString} ABORTED: ${aborted}${skippedString} Duration: ${utils.getDuration(duration)} (Execution ID: ${executionId})`;\n } else {\n message = `Test plan${planName} completed PASSED: ${passed} FAILED: ${failed}${failedEvaluatingString} ABORTED: ${aborted}${skippedString} Duration: ${utils.getDuration(duration)} (${executionId})`;\n }\n\n this.printWorkerDivider();\n console.log(color(message));\n this.printWorkerDivider();\n\n this.printAllFailedTests(failedTests);\n }\n\n buildTestPlanName(isAnonymous, testPlanName, isCodeMode) {\n if (isCodeMode) {\n return '';\n }\n const suitesString = _.isEmpty(this.options.suites) ? '' : `Suite: ${this.options.suites}`;\n const labelsString = _.isEmpty(this.options.label) ? '' : `Label: ${this.options.label}`;\n const namesString = _.isEmpty(this.options.name) ? '' : `Name: ${this.options.name}`;\n const testIdString = _.isEmpty(this.options.testId) ? '' : `Test Id: ${this.options.testId}`;\n return isAnonymous ? ` anonymous (${namesString}${namesString && labelsString ? ', ' : ''}${labelsString}${suitesString && labelsString ? ', ' : ''}${suitesString}${testIdString && suitesString ? ', ' : ''}${testIdString})` : ` '${testPlanName}'`;\n }\n\n onTestPlanStarted(beforeTests, tests, afterTests, testPlanName, executionId, isAnonymous, configName, isCodeMode) {\n const writeTestList = (testList) => {\n testList.forEach((test, index) => {\n const ds = test.testData && test.testData.index ? `- ${test.testData.index} / ${test.testData.total} Data set` : '';\n const testIdLabel = isCodeMode ? '' : `(${test.testId})`;\n console.log('\\t', index + 1, ':', `${test.name}${utils.isQuarantineAndNotRemoteRun(test, this.options) ? '-quarantine' : ''}`, testIdLabel, ds);\n });\n };\n const configString = configName ? `config '${configName}'` : 'default configs';\n\n if (isCodeMode) {\n console.log(`Run test plan, Project: ${this.options.project} (Execution ID: ${executionId}):`);\n } else {\n const sfdcCredentialLog = this.options.sfdcCredential ? ` SfdcCredential: ${this.options.sfdcCredential}` : '';\n console.log(`Run${this.buildTestPlanName(isAnonymous, testPlanName)} test plan with ${configString}, Project: ${this.options.project}, Branch: ${this.branchToUse}${sfdcCredentialLog} (${executionId})`);\n }\n this.printWorkerDivider();\n\n if (beforeTests.length > 0) {\n console.log('Before all:');\n writeTestList(beforeTests);\n }\n\n const listName = isCodeMode ? 'File list:' : 'Test list:';\n console.log(listName);\n writeTestList(tests);\n\n if (afterTests.length > 0) {\n console.log('After all:');\n writeTestList(afterTests);\n }\n this.printWorkerDivider();\n }\n\n onGetSlot(workerId, browser) {\n const gridNameOrId = this.options.grid || this.options.gridId;\n const instanceType = this.options.mode === CLI_MODE.APPIUM ? DEVICE : browser;\n if (gridNameOrId) {\n console.log(this.toWorkerIdPrefix(workerId), `Get ${chalk.underline(instanceType)} slot from ${chalk.underline(gridNameOrId)}`);\n }\n }\n\n onGetSession(workerId, testName, mode) {\n const instanceType = mode === CLI_MODE.APPIUM ? DEVICE : 'browser';\n console.log(this.toWorkerIdPrefix(workerId), `Get ${instanceType} to run ${chalk.underline(testName)}`);\n }\n\n onWaitToTestStart(workerId) {\n console.log(this.toWorkerIdPrefix(workerId), 'Wait for test start');\n }\n\n onWaitToTestComplete(workerId, isCodeMode, debuggerAddress) {\n const type = isCodeMode ? 'file' : 'test';\n console.log(this.toWorkerIdPrefix(workerId), `Wait for ${type} complete`);\n if (debuggerAddress && isCodeMode) {\n // TODO(Benji) decide with Amitai what we want to do with this\n console.log(this.toWorkerIdPrefix(workerId), `Chrome Debugger available at ${debuggerAddress}`);\n }\n }\n\n onGetBrowserFailure(workerId, projectId, attempt) {\n if (attempt !== 2) {\n return; // we want to try 2 times before showing the message once\n }\n // heuristic, show the message on the same attempt\n const gridNameOrId = this.options.grid || this.options.gridId;\n if (gridNameOrId) { // if the user passes a grid or a gridId - show those\n console.log(colorize.warn(this.toWorkerIdPrefix(workerId), `It is taking us some time to get a browser from the grid ${gridNameOrId}`));\n } else if (this.options.usingLocalChromeDriver) {\n console.log(colorize.warn(this.toWorkerIdPrefix(workerId), 'We are having issues starting ChromeDriver for you locally'));\n } else if (this.options.host) {\n console.log(colorize.warn(this.toWorkerIdPrefix(workerId), `We are having issues reaching your Selenium grid at ${this.options.host}:${this.options.port || 4444}`));\n } else {\n // in other cases - print nothing\n }\n }\n}\n\nmodule.exports = ConsoleReporter;\n","/* eslint-disable no-console */\n\n'use strict';\n\nconst xml2js = require('xml2js');\nconst fsPromises = require('fs/promises');\nconst utils = require('../utils');\nconst {\n isAbortedTest, isSkippedTest, getFailedTests, isFailedTest, getFailureEvaluatingCount, getSkippedCount, getAbortedTests,\n} = require('./reporterUtils');\nconst featureAvailabilityService = require('../commons/featureAvailabilityService');\n\nclass JunitReporter {\n constructor(options, branchToUse) {\n this.options = options;\n this.classname = 'testim.io.test';\n if (options.reportFileClassname) {\n this.classname = options.reportFileClassname;\n }\n if (options.reportFileClassname === true) {\n this.classname = ''; // specific case for passing empty string which makes junit-viewer display test name\n }\n\n this.branchToUse = branchToUse;\n }\n\n async createResultsReport(testResults) {\n const reportFile = this.options.reportFile;\n const projectId = this.options.project;\n\n const reportText = await report(this.options.editorUrl, testResults, projectId, this.branchToUse, this.classname, this.options);\n if (!reportFile) {\n return undefined;\n }\n try {\n await fsPromises.writeFile(reportFile, reportText);\n console.log('JUnit XML file saved to', reportFile);\n return testResults;\n } catch (err) {\n console.error('could not save report file', reportFile, err);\n return testResults;\n }\n }\n\n onAllTestPlansFinished(testPlanResults) {\n return this.createResultsReport(testPlanResults);\n }\n}\n\nfunction getPrintName(testResult) {\n const testData = testResult.testData || {};\n const testDataNumber = typeof testData.total === 'number' ? ` - ${testData.index} / ${testData.total} Data set` : '';\n return `${testResult.name}${testDataNumber}`;\n}\nfunction getVisitedUrlsList(testResult) {\n if (!testResult.visitedUrlsList) {\n console.log('No URLs found:', 'Please contact our support team or remove the --urls flag from the CLI command');\n }\n const visitedUrls = testResult.visitedUrlsList || '';\n return `${visitedUrls}`;\n}\nfunction getVisitedUrlsJson(testResult) {\n const visitedUrls = testResult.visitedUrlsJson || '';\n return `${visitedUrls}`;\n}\nasync function report(editorUrl, testPlanResults, projectId, branch, classname, options) {\n function createTestCaseObject(testResult) {\n const testResultUrl = utils.getTestUrl(editorUrl, projectId, testResult.testId, testResult.resultId, branch);\n const testResultObject = {\n $: {\n name: getPrintName(testResult),\n classname,\n time: utils.getDurationSec(testResult.duration),\n },\n };\n\n testResultObject.$.ownedBy = testResult.testOwnerName;\n testResultObject.$.ownerEmail = testResult.testOwnerEmail;\n\n if (isFailedTest(testResult) || isAbortedTest(testResult)) {\n const prefixMessage = `Step Failed: ${testResult.failureReason || testResult.reason}`;\n const message = isFailedTest(testResult) ? `${prefixMessage} More info at: ${testResultUrl}` : prefixMessage;\n testResultObject.failure = {\n $: {\n message,\n },\n };\n }\n if (isSkippedTest(testResult) && utils.isQuarantineAndNotRemoteRun(testResult, options) && featureAvailabilityService.isTestStatusEnabled) {\n testResultObject.skipped = {};\n }\n\n testResultObject['system-out'] = testResultUrl;\n\n if (options.urls) {\n testResultObject['visited-urls-list'] = getVisitedUrlsList(testResult);\n testResultObject['visited-urls-json'] = getVisitedUrlsJson(testResult);\n }\n\n return testResultObject;\n }\n\n function createTestSuiteObject(testPlanResult) {\n const { results, testPlanName, configName } = testPlanResult;\n const testResults = results || {};\n const suiteName = configName && testPlanName ? `${testPlanName} with config '${configName}'` : testPlanName;\n const testSuiteAttributes = {\n name: suiteName || 'selenium run',\n tests: getTestCount(testResults),\n failure: getFailedCount(testResults),\n timestamp: getSuiteTimestamp(testPlanResults),\n };\n if (featureAvailabilityService.isTestStatusEnabled) {\n testSuiteAttributes.skipped = getSkippedCount(testResults, options);\n const failureEvaluatingCount = getFailureEvaluatingCount(testResults);\n testSuiteAttributes.failure -= failureEvaluatingCount;\n testSuiteAttributes['failure-evaluating'] = failureEvaluatingCount;\n }\n return {\n $: testSuiteAttributes,\n testcase: Object.keys(testResults).map(resultId => createTestCaseObject(testResults[resultId])),\n };\n }\n\n function getSuiteTimestamp(testResults) {\n const startTimeArr = Object.keys(testResults).map(resultId => testResults[resultId].startTime);\n const minTestStartTime = Math.min.apply(null, startTimeArr);\n return minTestStartTime ? new Date(minTestStartTime).toISOString() : new Date().toISOString();\n }\n\n function getTestCount(testResults) {\n return Object.keys(testResults).length;\n }\n\n function getFailedCount(testResults) {\n return getFailedTests(testResults).length + getAbortedTests(testResults).length;\n }\n\n const testResultObject = {\n testsuites: {\n testsuite: testPlanResults.map(testPlanResult => createTestSuiteObject(testPlanResult)),\n },\n };\n\n\n try {\n const builder = new xml2js.Builder();\n const jUnitXmlReporter = builder.buildObject(testResultObject);\n return jUnitXmlReporter;\n } catch (err) {\n return createErrorjUnitReporter(err);\n }\n}\n\nfunction createErrorjUnitReporter(err) {\n const builder = new xml2js.Builder();\n const errorJunitObject = {\n testsuites: {\n testsuite: {\n $: {\n name: 'selenium run',\n tests: 1,\n failure: 1,\n timestamp: Date.now(),\n },\n testcase: {\n $: {\n name: 'junit reporter generator failed',\n classname: 'testim.io.jUnitXmlReporter',\n },\n error: {\n $: {\n message: err.message,\n },\n },\n },\n },\n },\n };\n return builder.buildObject(errorJunitObject);\n}\n\nmodule.exports = JunitReporter;\n","/* eslint-disable no-console */\nconst logger = require('../commons/logger').getLogger('team-city-reporter');\n\nfunction tidy(text) {\n if (!text) {\n return '';\n }\n return text\n .replace(/\\|/g, '||')\n .replace(/'/g, \"|'\")\n .replace(/\\n/g, '|n')\n .replace(/\\r/g, '|r')\n .replace(/\\u0085/g, '|x')\n .replace(/\\u2028/g, '|l')\n .replace(/\\u2029/g, '|p')\n .replace(/\\[/g, '|[')\n .replace(/\\]/g, '|]');\n}\n\nclass TeamCityReporter {\n constructor(options) {\n this.options = options;\n }\n\n getPrintName(test) {\n const testConfig = test.config || {};\n const testDataNumber = typeof testConfig.testDataTotal === 'number' ? ` - ${testConfig.testDataIndex} / ${testConfig.testDataTotal} Data set` : '';\n const teamCityName = `${test.name} (${test.testId})${testDataNumber}`;\n return tidy(teamCityName);\n }\n\n onTestStarted(test, workerId, isRerun, isCodeMode, resultId) {\n if (isRerun) {\n logger.debug('skip report test started because is rerun');\n return;\n }\n const name = this.getPrintName(test);\n console.log(`##teamcity[testStarted name='${name}' captureStandardOutput='true' flowId='${resultId}']`);\n }\n\n onTestFailed(test, failureReason, testurl, testId, isRerun, resultId) {\n if (isRerun) {\n logger.debug('skip report test failed because is rerun');\n return;\n }\n const name = this.getPrintName(test);\n console.log(`##teamcity[testFailed name='${name}' message='${tidy(failureReason)}' details='${tidy(testurl)}' flowId='${resultId}']`);\n }\n\n onTestFinished(test, workerId, isRerun) {\n if (isRerun) {\n logger.debug('skip report test finished because is rerun');\n return;\n }\n const name = this.getPrintName(test);\n console.log(`##teamcity[testFinished name='${name}' duration='${test.duration}' flowId='${test.resultId}']`);\n }\n\n onTestIgnored(workerId, test, message = 'ignore') {\n const name = this.getPrintName(test);\n console.log(`##teamcity[testIgnored name='${name}' message='${tidy(message)}']`);\n }\n\n onTestPlanStarted(beforeTests, tests, afterTests, testPlanName) {\n console.log(`##teamcity[testSuiteStarted name='${tidy(testPlanName)}']`);\n }\n\n onTestPlanFinished(testResults, testPlanName) {\n console.log(`##teamcity[testSuiteFinished name='${tidy(testPlanName)}']`);\n }\n}\n\nmodule.exports = TeamCityReporter;\n","/* eslint-disable no-console */\nclass JsonReporter {\n constructor(options) {\n this.options = options;\n }\n\n onTestStarted(test, workerId) {\n const event = {\n name: 'testStarted',\n data: {\n test,\n workerId,\n },\n };\n\n console.log(JSON.stringify(event));\n }\n\n onTestFinished(test, workerId) {\n const event = {\n name: 'testFinished',\n data: {\n test,\n workerId,\n },\n };\n\n console.log(JSON.stringify(event));\n }\n\n onTestPlanStarted(beforeTests, tests, afterTests, testPlanName, executionId) {\n const event = {\n name: 'suiteStarted',\n data: {\n projectId: this.options.project,\n executionId,\n },\n };\n\n console.log(JSON.stringify(event));\n }\n\n onTestPlanFinished(testResults) {\n const event = {\n name: 'suiteFinished',\n data: {\n testResults,\n },\n };\n\n console.log(JSON.stringify(event));\n }\n}\n\nmodule.exports = JsonReporter;\n","const utils = require('../utils');\nconst { launchChrome } = require('../commons/chrome-launcher');\n\nmodule.exports.ChromeReporter = class ChromeReporter {\n constructor(options, branchToUse) {\n this.options = options;\n this.branchToUse = branchToUse;\n }\n\n onTestStarted(test, workerId, isRerun, isCodeMode) {\n if(isCodeMode) {\n return\n }\n const testUrl = utils.getTestUrl(this.options.editorUrl, this.options.project, test.testId, test.resultId, this.branchToUse);\n return launchChrome(testUrl);\n }\n};\n","'use strict';\n\nconst logger = require('../commons/logger').getLogger('reporter');\n\nclass Reporter {\n setOptions(options, branchToUse) {\n this.reporters = [];\n const optReporters = options.reporters;\n\n const DebugReporter = require('./debugReporter');\n this.reporters.push(new DebugReporter(options));\n\n if (optReporters === undefined || optReporters.length === 0) {\n const ConsoleReporter = require('./consoleReporter');\n this.reporters.push(new ConsoleReporter(options, branchToUse));\n if (options?.reportFile !== undefined) {\n const JunitReporter = require('./junitReporter');\n this.reporters.push(new JunitReporter(options, branchToUse));\n }\n } else {\n if (optReporters.includes('teamcity')) {\n const TeamCityReporter = require('./teamCityReporter');\n this.reporters.push(new TeamCityReporter(options));\n }\n\n if (optReporters.includes('console')) {\n const ConsoleReporter = require('./consoleReporter');\n this.reporters.push(new ConsoleReporter(options, branchToUse));\n }\n\n if (optReporters.includes('junit')) {\n const JunitReporter = require('./junitReporter');\n this.reporters.push(new JunitReporter(options, branchToUse));\n }\n\n if (optReporters.includes('json')) {\n const JsonReporter = require('./jsonReporter');\n this.reporters.push(new JsonReporter(options));\n }\n\n if (optReporters.includes('chrome')) {\n const { ChromeReporter } = require('./chromeReporter');\n this.reporters.push(new ChromeReporter(options, branchToUse));\n }\n }\n }\n\n async onTestPlanFinished(testResults, testPlanName, startTime, executionId, isAnonymous, isCodeMode, childTestResults) {\n let results = {};\n\n // TODO: remove mutation of testResults from the Reporter\n if (childTestResults) {\n const childValues = Object.values(childTestResults);\n if (childValues.length > 0) {\n for (const child of Object.values(childTestResults)) {\n results[child.id] = child;\n }\n for (const parent of Object.keys(testResults)) {\n if (!childValues.some(c => c.parentResultId !== parent)) {\n results[parent] = testResults[parent];\n }\n }\n } else {\n logger.warn('childTestResults is not array');\n results = testResults;\n }\n } else {\n results = testResults;\n }\n for (const reporter of this.reporters) {\n if (reporter?.onTestPlanFinished) {\n const duration = Date.now() - (startTime || 0);\n await reporter.onTestPlanFinished(results, testPlanName, duration, executionId, isAnonymous, isCodeMode);\n }\n }\n }\n\n async onTestPlanStarted(beforeTests, tests, afterTests, testPlanName, executionId, isAnonymous, configName, isCodeMode) {\n for (const reporter of this.reporters) {\n if (reporter?.onTestPlanStarted) {\n await reporter.onTestPlanStarted(beforeTests, tests, afterTests, testPlanName, executionId, isAnonymous, configName, isCodeMode);\n }\n }\n }\n\n async onGetSlot(workerId, browser) {\n for (const reporter of this.reporters) {\n if (reporter?.onGetSlot) {\n await reporter.onGetSlot(workerId, browser);\n }\n }\n }\n\n async onGetSession(workerId, testName, mode) {\n for (const reporter of this.reporters) {\n if (reporter?.onGetSession) {\n await reporter.onGetSession(workerId, testName, mode);\n }\n }\n }\n\n async onWaitToTestComplete(workerId, isCodeMode, debuggerAddress) {\n for (const reporter of this.reporters) {\n if (reporter?.onWaitToTestComplete) {\n await reporter.onWaitToTestComplete(workerId, isCodeMode, debuggerAddress);\n }\n }\n }\n\n async onWaitToTestStart(workerId) {\n for (const reporter of this.reporters) {\n if (reporter?.onWaitToTestStart) {\n await reporter.onWaitToTestStart(workerId);\n }\n }\n }\n\n async onAllTestPlansFinished(testPlanResults) {\n // TODO: remove mutation of testPlanResults from the Reporter\n for (const result of testPlanResults) {\n if (result.childTestResults) {\n result.results = {};\n const childValues = Object.values(result.childTestResults);\n for (const child of childValues) {\n result.results[child.id] = child;\n }\n for (const parent of Object.keys(testPlanResults)) {\n if (!childValues.some(c => c.parentResultId !== parent)) {\n result.results[parent] = testPlanResults[parent];\n }\n }\n }\n }\n\n for (const reporter of this.reporters) {\n if (reporter?.onAllTestPlansFinished) {\n await reporter.onAllTestPlansFinished(testPlanResults);\n }\n }\n }\n}\n\nfunction addHook(name) {\n Reporter.prototype[name] = async function (...args) {\n for (const reporter of this.reporters) {\n if (reporter?.[name]) {\n await reporter[name](...args);\n }\n }\n };\n}\n\naddHook('onGetBrowserFailure');\naddHook('onGetBrowserSuccess');\naddHook('onTestPlanStarted');\naddHook('onGetSlot');\naddHook('onGetSession');\naddHook('onTestFinished');\naddHook('onTestFailed');\naddHook('onTestPassed');\naddHook('onTestStarted');\naddHook('onTestIgnored');\naddHook('onWaitToTestStart');\naddHook('onWaitToTestComplete');\n\nmodule.exports = new Reporter();\n","// @ts-check\n\n/* eslint-disable no-console */\nconst chalk = require('chalk');\nconst semver = require('semver');\nconst utils = require('./utils');\nconst config = require('./commons/config');\nconst npmWrapper = require('./commons/npmWrapper');\nconst localRunnerCache = require('./commons/runnerFileCache');\nconst { getLogger } = require('./commons/logger');\n\nconst logger = getLogger('npm-driver');\n\nconst getNpmVersion = localRunnerCache.memoize(() => npmWrapper.getLatestPackageVersion('@testim/testim-cli'), 'getNpmVersion');\n\nfunction getPackageVersion() {\n return utils.getRunnerVersion();\n}\n\nasync function checkNpmVersion() {\n if (config.IS_ON_PREM || !global.meta?.IS_RELEASE) {\n return;\n }\n try {\n const latestVersion = await utils.promiseTimeout(getNpmVersion(), 5000, 'The API call to NPM timed out');\n const packVersion = getPackageVersion();\n if (packVersion && semver.lt(packVersion, latestVersion)) {\n console.log(chalk.yellow(\n `Warning: You are using version ${packVersion}, a newer version is available. To update please run npm install (npm install -g @testim/testim-cli)`),\n );\n }\n } catch (err) {\n logger.warn('Failed to get NPM version', { err });\n }\n}\n\nmodule.exports = {\n checkNpmVersion,\n getPackageVersion,\n};\n","'use strict';\n\nconst { ArgError } = require('../errors');\nconst utils = require('../utils');\nconst lazyRequire = require('./lazyRequire');\nconst logger = require('./logger').getLogger('testimNgrok');\n\nconst WHITELISTED_TUNNEL_DOMAIN_SUFFIX = '.whitelisted-ngrok.testim.io';\n\nlet ngrokTunnelUrl = '';\nlet statsTimeout;\n\nconst connectTunnel = async (options, authData = {}) => {\n if (!authData.ngrokToken) {\n throw new ArgError('tunnel feature is not enabled, please contact support - info@testim.io.');\n }\n\n let hostname;\n if (authData.isNgrokWhitelisted) {\n hostname = `${utils.guid()}-${options.projectData.projectId}${WHITELISTED_TUNNEL_DOMAIN_SUFFIX}`;\n }\n\n const connectOpt = {\n proto: 'http',\n addr: options.tunnelPort || 80,\n authtoken: authData.ngrokToken,\n hostname,\n };\n if (options.tunnelHostHeader) {\n // eslint-disable-next-line camelcase\n connectOpt.host_header = options.tunnelHostHeader;\n }\n if (options.tunnelRegion) {\n connectOpt.region = options.tunnelRegion;\n }\n\n const ngrok = await lazyRequire('ngrok');\n const url = await ngrok.connect(connectOpt);\n\n if (options.tunnelUseHttpAddress && url.startsWith('https://')) {\n logger.info('replace https to http');\n const newUrl = url.replace('https://', 'http://');\n\n ngrokTunnelUrl = newUrl;\n } else {\n ngrokTunnelUrl = url;\n }\n\n if (options.tunnelDiagnostics) {\n module.exports.collectNgrokStats();\n }\n options.baseUrl = ngrokTunnelUrl;\n};\n\nconst collectNgrokStats = async (rerun = true) => {\n try {\n const ngrok = await lazyRequire('ngrok');\n const api = ngrok.getApi();\n const { tunnels } = await api.get({ url: 'api/tunnels', json: true });\n const tunnel = tunnels.find(t => t.public_url === ngrokTunnelUrl);\n\n // eslint-disable-next-line no-console\n console.log('ngrok stats', tunnel);\n logger.info('ngrok stats', { tunnel });\n } catch (err) {\n logger.error('error collecting ngrok stats', { err });\n }\n if (rerun) {\n statsTimeout = setTimeout(() => module.exports.collectNgrokStats(), 10000);\n }\n};\n\nconst disconnectTunnel = async (options) => {\n if (!ngrokTunnelUrl) {\n return;\n }\n\n clearTimeout(statsTimeout);\n if (options.tunnelDiagnostics) {\n await module.exports.collectNgrokStats(false);\n }\n const ngrok = await lazyRequire('ngrok');\n await ngrok.disconnect(ngrokTunnelUrl);\n};\n\nmodule.exports = {\n connectTunnel,\n disconnectTunnel,\n collectNgrokStats,\n};\n","'use strict';\n\nconst os = require('os');\nconst childProcess = require('child_process');\nconst fse = require('fs-extra');\nconst utils = require('../utils');\nconst servicesApi = require('./testimServicesApi.js');\n\nconst TUNNEL_BINARY_ORIGIN = 'https://github.com/cloudflare/cloudflared/releases/download/2022.4.1/';\nconst TUNNEL_BINARY_PATHNAME = {\n win32ia32: { path: 'cloudflared-windows-386.exe' },\n win32x64: { path: 'cloudflared-windows-amd64.exe' },\n darwinx64: { path: 'cloudflared-darwin-amd64.tgz', extract: true },\n linuxia32: { path: 'cloudflared-linux-386' },\n linuxx64: { path: 'cloudflared-linux-amd64' },\n};\nconst TUNNEL_BINARY_DIRECTORY = os.tmpdir();\nconst TUNNEL_BINARY_LOCATION = `${TUNNEL_BINARY_DIRECTORY}/cloudflared`;\n\n\nlet tunnelId = null;\nlet tunnelProcess = null;\n\nasync function prepareTunnel() {\n const isBinaryExist = await fse.pathExists(TUNNEL_BINARY_LOCATION);\n if (isBinaryExist) {\n return;\n }\n\n const downloadUrl = TUNNEL_BINARY_PATHNAME[os.platform() + os.arch()];\n if (!downloadUrl) {\n throw new Error(`tunnel on ${os.platform() + os.arch()} platform is not supported.`);\n }\n const destination = downloadUrl.extract ? TUNNEL_BINARY_DIRECTORY + downloadUrl.path : TUNNEL_BINARY_LOCATION;\n await utils.downloadAndSave(`${TUNNEL_BINARY_ORIGIN}/${downloadUrl.path}`, destination);\n if (downloadUrl.extract) {\n await utils.unzipFile(destination, TUNNEL_BINARY_DIRECTORY);\n }\n await fse.chmodSync(TUNNEL_BINARY_LOCATION, '755');\n}\n\nconst connectTunnel = async (options) => {\n const tunnelBaseUrl = options.baseUrl || `http://localhost:${options.tunnelPort || 80}`;\n const tunnelRoutes = options.tunnelRoutes || [tunnelBaseUrl];\n const [result] = await Promise.all([\n servicesApi.getCloudflareTunnel(options.company.companyId, tunnelRoutes),\n module.exports.prepareTunnel(),\n ]);\n tunnelId = result._id;\n tunnelProcess = childProcess.spawn(TUNNEL_BINARY_LOCATION, ['tunnel', '--no-autoupdate', 'run', '--force', '--token', result.token], { stdio: 'inherit' });\n await servicesApi.forceUpdateCloudflareTunnelRoutes(options.company.companyId, tunnelId);\n\n if (options.tunnelRoutesOutput) {\n await fse.writeFileSync(options.tunnelRoutesOutput, JSON.stringify(result.routesMapping, null, 2));\n }\n\n options.baseUrl = `${options.tunnelUseHttpAddress ? 'http' : 'https'}://${result.routesMapping[tunnelBaseUrl]}`;\n};\n\nconst disconnectTunnel = async (options) => {\n const promises = [];\n if (tunnelId) {\n promises.push(servicesApi.deleteCloudflareTunnel(options.company.companyId, tunnelId));\n }\n if (tunnelProcess) {\n promises.push(new Promise((resolve, reject) => {\n tunnelProcess.on('close', (code) => {\n if (code) {\n reject(new Error(`tunnel process exited with code ${code}`));\n }\n resolve();\n });\n tunnelProcess.kill();\n }));\n }\n return await Promise.all(promises);\n};\n\nmodule.exports = {\n connectTunnel,\n disconnectTunnel,\n prepareTunnel,\n};\n","'use strict';\n\nconst Rox = require('rox-node');\nconst { getLogger } = require('./logger');\nconst { promiseTimeout } = require('../utils');\nconst { ROLLOUT_KEY, IS_ON_PREM, GATEWAY_URL } = require('./config');\n\nconst logger = getLogger('FeatureFlagsService');\n\n// IS_UNIT_TEST = disable rollout if code run in unit test mode to ignore mocha process stuck on running\nconst USE_FEATURE_FLAGS = !IS_ON_PREM && !process.env.IS_UNIT_TEST && !GATEWAY_URL;\n\nconst FORCE_FETCH_TIMEOUT_MS = 20000; // rollout sometimes takes up to 15 seconds to load\nconst SEC_IN_DAY = 60 * 60 * 24;\n\n/** @type {['labs', 'disabled', 'enabled'] as const} */\nconst LAB_FEATURE_FLAG_VALUES = ['labs', 'disabled', 'enabled'];\n\nclass LabFeatureFlag extends Rox.Variant {\n constructor(initialValue = 'disabled') {\n super(initialValue, LAB_FEATURE_FLAG_VALUES);\n }\n\n /** @returns {(typeof LAB_FEATURE_FLAG_VALUES)[number]} */\n getValue() {\n const value = super.getValue();\n if (!LAB_FEATURE_FLAG_VALUES.includes(value)) {\n logger.warn('unexpected value for lab feature flag. Falling back to value \"labs\"', { featureFlagName: this.name, value });\n return 'labs';\n }\n\n return value;\n }\n}\n\nclass FeatureFlagsService {\n constructor() {\n this.flags = {\n useNewWSCLI: new Rox.Flag(),\n useSafariWebdriverVisibilityChecks: new Rox.Flag(),\n useClickimVisibilityChecks: new Rox.Flag(),\n runGetElementCodeInAut: new Rox.Flag(),\n enableFrameSwitchOptimization: new Rox.Flag(),\n maximumJsResultSize: new Rox.Configuration(2000 * 1024),\n skipFileInputClicks: new Rox.Flag(),\n errorMessageOnBadNetwork: new Rox.Flag(true),\n warnOnBadNetwork: new Rox.Flag(false),\n overrideAzureStorageUrl: new Rox.Flag(),\n useJsInputCodeInSafari: new Rox.Flag(),\n useJsInputCodeInFirefox: new Rox.Flag(),\n autoSaveDownloadFileFireFox: new Rox.Flag(true),\n safariSelectOptionDispatchEventOnSelectElement: new Rox.Flag(true),\n experimentalPreCodeCompilation: new Rox.Flag(true),\n /** Enables using top level await inside custom actions */\n experimentalAsyncCustomCode: new Rox.Flag(),\n useSameBrowserForMultiTests: new LabFeatureFlag('labs'),\n highSpeedMode: new LabFeatureFlag(),\n usePortedHtml5DragDrop: new Rox.Flag(),\n testNamesToBeforeSuiteHook: new Rox.Flag(),\n addCustomCapabilities: new Rox.Variant('{}'),\n enableWorkerThreadsCliCodeExecution: new Rox.Flag(true),\n LTNetworkCapabilities: new Rox.Flag(),\n downloadToBase64: new Rox.Flag(),\n dec2022eolBrowsers: new Rox.Flag(),\n publicGridURL: new Rox.Configuration('public-grid.testim.io'),\n };\n Rox.register('default', this.flags);\n }\n\n /** @param {string} projectId */\n setProjectId(projectId) {\n Rox.setCustomStringProperty('projectId', projectId);\n }\n\n /** @param {string} projectType */\n setProjectType(projectType) {\n Rox.setCustomStringProperty('projectType', projectType);\n }\n\n /** @param {string} productType */\n setCompanyProductType(productType) {\n Rox.setCustomStringProperty('productType', productType);\n }\n\n /** @param {string} companyId */\n setCompanyId(companyId) {\n Rox.setCustomStringProperty('companyId', companyId);\n }\n\n /** @param {string} planType */\n setPlanType(planType) {\n Rox.setCustomStringProperty('planType', planType);\n }\n\n /** @param {boolean} isPOC */\n setIsPOC(isPOC) {\n Rox.setCustomBooleanProperty('isPOC', isPOC);\n }\n\n /** @param {boolean} isStartUp */\n setIsStartUp(isStartUp) {\n Rox.setCustomBooleanProperty('isStartUp', isStartUp);\n }\n\n /** @param {string} mode */\n setRunnerMode(mode) {\n Rox.setCustomStringProperty('runnerMode', mode);\n }\n\n async fetch() {\n if (!USE_FEATURE_FLAGS) {\n return undefined;\n }\n /** @type {Rox.RoxSetupOptions} */\n const opts = {\n fetchIntervalInSec: SEC_IN_DAY, // we don't actually want to refresh feature flags in the CLI,\n disableNetworkFetch: false,\n };\n\n\n if (global.ProxyAgent) {\n const agent = new global.ProxyAgent(global.proxyUri);\n opts.httpsAgent = agent;\n opts.httpAgent = agent;\n }\n\n return promiseTimeout(Rox.setup(ROLLOUT_KEY, opts), FORCE_FETCH_TIMEOUT_MS)\n .catch(err => logger.error('failed to get feature flag status', err));\n }\n}\n\nmodule.exports = new FeatureFlagsService();\n","const os = require('os');\nconst childProcess = require('child_process');\nconst pRetry = require('p-retry');\nconst fse = require('fs-extra');\nconst portfinder = require('portfinder');\nconst ms = require('ms');\nconst utils = require('../utils');\nconst { gridTypes, CLI_MODE } = require('../commons/constants');\nconst httpRequest = require('../commons/httpRequest');\nconst { ArgError } = require('../errors');\nconst servicesApi = require('../commons/testimServicesApi');\nconst { getExtensionsUrl } = require('../runOptionsUtils');\nconst featureFlagService = require('../commons/featureFlags');\n\nconst logger = require('../commons/logger').getLogger('lambdatestService');\n\nconst LT_TUNNEL_BINARY_ORIGIN = 'https://downloads.lambdatest.com/tunnel/v3';\nconst LT_TUNNEL_BINARY_PATHNAME = {\n win32ia32: 'windows/32bit/LT_Windows.zip',\n win32x64: 'windows/64bit/LT_Windows.zip',\n darwinia32: 'mac/32bit/LT_Mac.zip',\n darwinx64: 'mac/64bit/LT_Mac.zip',\n darwinarm64: 'mac/64bit/LT_Mac.zip',\n linuxia32: 'linux/32bit/LT_Linux.zip',\n linuxx64: 'linux/64bit/LT_Linux.zip',\n freebsdia32: 'freebsd/32bit/LT_Freebsd.zip',\n freebsdx64: 'freebsd/64bit/LT_Freebsd.zip',\n};\nconst LT_TUNNEL_BINARY_DIRECTORY = `${os.tmpdir()}/LT`;\nconst LT_TUNNEL_BINARY_LOCATION = `${LT_TUNNEL_BINARY_DIRECTORY}/LT`;\n\nconst LT_MINIMUM_CONNECTION_RETRY_TIMEOUT = ms('15m');\n\nclass LambdatestService {\n constructor() {\n this.isActive = false;\n }\n\n static isLambdatestGrid(gridData) {\n return gridData.type === gridTypes.LAMBDATEST || (gridData.type === gridTypes.HYBRID && gridData.provider === 'lambdatest');\n }\n\n isLambdatestRun() {\n return this.isActive;\n }\n\n async enableIfNeeded(gridData) {\n if (!LambdatestService.isLambdatestGrid(gridData)) {\n return;\n }\n\n LambdatestService.lambdatestConfigPromise = LambdatestService.lambdatestConfigPromise || servicesApi.fetchLambdatestConfig();\n LambdatestService.lambdatestConfig = await LambdatestService.lambdatestConfigPromise;\n this.isActive = true;\n }\n\n disable() {\n this.isActive = false;\n }\n\n get getSessionTimeout() {\n if (!this.isActive) {\n return null;\n }\n return LT_MINIMUM_CONNECTION_RETRY_TIMEOUT;\n }\n\n get getSessionRetries() {\n if (!this.isActive) {\n return null;\n }\n return 1;\n }\n\n // https://www.lambdatest.com/support/docs/beta-lambda-tunnel-for-corporate-firewalls/\n static async prepareTunnel() {\n const isBinaryExist = await fse.pathExists(LT_TUNNEL_BINARY_LOCATION);\n if (isBinaryExist) {\n return;\n }\n\n const downloadUrl = LT_TUNNEL_BINARY_PATHNAME[os.platform() + os.arch()];\n if (!downloadUrl) {\n throw new Error(`tunnel on ${os.platform() + os.arch()} platform is not supported.`);\n }\n const zipLocation = `${LT_TUNNEL_BINARY_DIRECTORY}.zip`;\n await utils.downloadAndSave(`${LT_TUNNEL_BINARY_ORIGIN}/${downloadUrl}`, zipLocation);\n await utils.unzipFile(zipLocation, LT_TUNNEL_BINARY_DIRECTORY);\n }\n\n static async connectTunnel(runnerOptions) {\n if (runnerOptions.externalLambdatestTunnelId) {\n LambdatestService.tunnelName = runnerOptions.externalLambdatestTunnelId;\n return;\n }\n await this.prepareTunnel();\n const infoAPIPort = await portfinder.getPortPromise();\n const { gridData = {}, gridUsername, gridPassword } = runnerOptions;\n const proxyUri = global.proxyUri;\n LambdatestService.tunnelName = utils.guid();\n\n let tunnelArgs = [\n '--tunnelName', LambdatestService.tunnelName,\n '--infoAPIPort', infoAPIPort,\n ];\n\n if (runnerOptions.externalLambdatestUseWss) {\n tunnelArgs = [...tunnelArgs, '--mode', 'ws'];\n }\n if (runnerOptions.externalLambdatestDisableAutomationTunneling) {\n tunnelArgs = [...tunnelArgs, '--bypassHosts', 'run.testim.io,services.testim.io,api.coralogix.com,conf.rollout.io,statestore.rollout.io,push.rollout.io,analytic.rollout.io,res.cloudinary.com'];\n }\n\n if (gridData.tunnelUser && gridData.tunnelKey) {\n tunnelArgs = [...tunnelArgs, '--user', gridData.tunnelUser, '--key', gridData.tunnelKey];\n } else if (gridUsername && gridPassword) {\n tunnelArgs = [...tunnelArgs, '--user', gridUsername, '--key', gridPassword];\n } else {\n throw new ArgError('tunnel requires username and password');\n }\n\n if (proxyUri) {\n try {\n const proxyUrl = new URL(proxyUri);\n tunnelArgs = [...tunnelArgs, '--proxy-host', proxyUrl.hostname];\n if (proxyUrl.port) {\n tunnelArgs = [...tunnelArgs, '--proxy-port', proxyUrl.port];\n }\n if (proxyUrl.username && proxyUrl.password) {\n tunnelArgs = [...tunnelArgs, '--proxy-user', proxyUrl.username, '--proxy-pass', proxyUrl.password];\n }\n } catch (e) {\n throw new ArgError('proxy url is invalid');\n }\n }\n\n if (runnerOptions.externalLambdatestMitm) {\n tunnelArgs = [...tunnelArgs, '--mitm'];\n }\n\n LambdatestService.tunnel = childProcess.spawn('./LT', tunnelArgs, { cwd: LT_TUNNEL_BINARY_DIRECTORY });\n\n let stdoutResult = '';\n let stderrResult = '';\n\n LambdatestService.tunnel.stdout.on('data', (data) => {\n stdoutResult += data.toString();\n });\n\n LambdatestService.tunnel.stderr.on('data', (data) => {\n stderrResult += data.toString();\n });\n\n // verify that LT tunnel strated successfully\n try {\n const ltInfo = await pRetry(() => httpRequest.get(`http://127.0.0.1:${infoAPIPort}/api/v1.0/info`, {}, {}, undefined, { skipProxy: true }), { retries: 30, minTimeout: 2000 });\n logger.info('LT tunnel info', ltInfo);\n } catch (err) {\n logger.error('Failed to start LT tunnel', { err, stdoutResult, stderrResult });\n throw err;\n }\n }\n\n static async disconnectTunnel(runnerOptions) {\n if (runnerOptions.externalLambdatestTunnelId || !LambdatestService.tunnel) {\n return undefined;\n }\n return new Promise((resolve, reject) => {\n LambdatestService.tunnel.on('close', (code) => {\n if (code) {\n reject(new Error(`tunnel process exited with code ${code}`));\n }\n resolve();\n });\n LambdatestService.tunnel.kill();\n });\n }\n\n getCapabilities(runnerOptions, browser, executionId, testResultId, testName) {\n if (!this.isActive) {\n return {};\n }\n\n const defaultBrowserCaps = LambdatestService.lambdatestConfig.CAPABILITIES[browser] || {};\n\n\n const tunnelCaps = {};\n if (LambdatestService.tunnelName) {\n tunnelCaps.tunnel = true;\n tunnelCaps.tunnelName = LambdatestService.tunnelName;\n }\n\n let loadExtension = [];\n const { mode, canary, ext, extensionPath, installCustomExtension } = runnerOptions;\n if (mode === CLI_MODE.EXTENSION && !ext) {\n const extUrls = getExtensionsUrl({ canary }, true);\n if (!extensionPath && extUrls[browser]) {\n loadExtension = [...loadExtension, extUrls[browser]];\n }\n if (extensionPath && utils.isURL(extensionPath)) {\n loadExtension = [...loadExtension, extensionPath];\n }\n }\n if (installCustomExtension && utils.isURL(installCustomExtension)) {\n loadExtension = [...loadExtension, installCustomExtension];\n }\n\n return {\n build: executionId,\n name: `${testResultId} - ${testName}`,\n platform: LambdatestService.lambdatestConfig.PLATFORM,\n // eslint-disable-next-line camelcase\n selenium_version: LambdatestService.lambdatestConfig.SELENIUM_VERSION,\n resolution: LambdatestService.lambdatestConfig.RESOLUTION,\n timezone: LambdatestService.lambdatestConfig.TIMEZONE,\n ...defaultBrowserCaps,\n loadExtension,\n ...tunnelCaps,\n console: true,\n queueTimeout: 300, // time a session spends in the LT queue, in seconds (apparently 300 is the minimum)\n // visual: true, // [NOTE]: activate LT screenshots feature (can slow test).\n network: featureFlagService.flags.LTNetworkCapabilities.isEnabled(), // [NOTE]: activate LT capture network logs feature (can cause network issues).\n // fixedIP: '10.80.34.143', // [NOTE]: this is for debug purposes with LT team.\n };\n }\n}\nmodule.exports = LambdatestService;\n","'use strict';\n\nconst ora = require('ora');\nconst testimNgrok = require('./testimNgrok');\nconst processHandler = require('../processHandler');\nconst testimCloudflare = require('./testimCloudflare');\nconst testimCustomToken = require('./testimCustomToken');\nconst LambdatestService = require('../services/lambdatestService');\nconst { getLogger } = require('./logger');\nconst { gridTypes } = require('./constants');\n\nconst logger = getLogger('tunnel');\n\nconst shouldUseLambdatestTunnel = options => [gridTypes.LAMBDATEST, gridTypes.HYBRID].includes(options.gridData?.type) && options.gridData.tunnel === 'lambdatest';\nconst shouldUseCloudflareTunnel = options => options.tunnelRoutes || (options.gridData && options.gridData.type === gridTypes.HYBRID && options.gridData.tunnel === 'cloudflare');\n\nconst connect = async (options) => {\n if (!options.tunnel) {\n return;\n }\n\n const authData = testimCustomToken.getTokenV3UserData();\n let spinner;\n try {\n if (shouldUseLambdatestTunnel(options)) {\n spinner = ora('Starting testim lambdatest tunnel...').start();\n await LambdatestService.connectTunnel(options);\n } else if (shouldUseCloudflareTunnel(options)) {\n spinner = ora('Starting testim cloudflare tunnel...').start();\n await testimCloudflare.connectTunnel(options);\n } else {\n spinner = ora('Starting testim ngrok tunnel...').start();\n await testimNgrok.connectTunnel(options, authData);\n }\n spinner.succeed();\n } catch (err) {\n const msg = 'Failed to start tunnel. Please contact support@testim.io';\n logger.error('Failed to open tunnel', { err });\n spinner.fail(msg);\n throw new Error(msg);\n }\n};\n\nconst disconnect = async (options) => {\n if (!options.tunnel) {\n return;\n }\n\n try {\n if (shouldUseLambdatestTunnel(options)) {\n await LambdatestService.disconnectTunnel(options);\n } else if (options.tunnelRoutes) {\n await testimCloudflare.disconnectTunnel(options);\n } else {\n await testimNgrok.disconnectTunnel(options);\n }\n } catch (err) {\n const msg = 'catch error - failed to close tunnel';\n logger.error(msg, { err });\n throw new Error(msg);\n }\n};\n\n/**\n * @param {import('../runOptions').TunnelOptions} options\n * @param {Promise<void>=} waitFor\n */\nconst serveTunneling = async (options, waitFor = new Promise(() => { /* avoid exiting process */ })) => {\n await module.exports.connect(options);\n processHandler.registerExitHook(() => module.exports.disconnect(options));\n return await waitFor;\n};\n\nmodule.exports = {\n connect,\n disconnect,\n serveTunneling,\n};\n","// @ts-check\n\n'use strict';\n\nconst _ = require('lodash');\n\nconst { GridError, ArgError, GridConcurrencyError } = require('../errors');\nconst { hasTestPlanFlag, promiseMap } = require('../utils');\nconst { gridMessages, gridTypes } = require('../commons/constants');\nconst logger = require('../commons/logger').getLogger('grid-service');\nconst servicesApi = require('../commons/testimServicesApi');\n\n/** @type {Record<string, { gridId: string; companyId: string; slotId: string; browser: string }>} */\nconst gridCache = {};\nconst urlExtractRegex = /(^(https?):\\/{2})?(.*)/;\nlet keepAliveTimer = null;\n\nfunction extractProtocol(grid) {\n if (grid.protocol) {\n return grid.protocol;\n }\n\n if ([gridTypes.TESTIM, gridTypes.BROWSERSTACK, gridTypes.SAUCELABS].includes(grid.type) && grid.port === 443) {\n return 'https';\n }\n\n if ([gridTypes.TESTIM_ENTERPRISE, gridTypes.LAMBDATEST, gridTypes.DEVICE_FARM].includes(grid.type)) {\n const urlExtract = urlExtractRegex.exec(grid.host);\n return urlExtract[2] || 'https';\n }\n\n return '';\n}\n\nfunction extractHost(hostUrl) {\n const urlExtract = urlExtractRegex.exec(hostUrl);\n return urlExtract[3];\n}\n\nfunction getSerializableObject(grid) {\n const host = grid && extractHost(grid.host);\n const port = grid?.port;\n const path = grid?.path;\n const protocol = grid && extractProtocol(grid);\n const accessToken = grid?.token;\n const slotId = grid?.slotId;\n const tunnel = grid?.hybrid?.tunnel;\n const user = grid?.external?.user;\n const key = grid?.external?.key;\n const type = grid?.type;\n const tunnelUser = type === gridTypes.HYBRID ?\n (tunnel && grid.hybrid.external && grid.hybrid.external[grid.hybrid.tunnel] && grid.hybrid.external[grid.hybrid.tunnel].user) : user;\n const tunnelKey = type === gridTypes.HYBRID ?\n (tunnel && grid.hybrid.external && grid.hybrid.external[grid.hybrid.tunnel] && grid.hybrid.external[grid.hybrid.tunnel].key) : key;\n const name = grid?.name;\n const gridId = grid && (grid._id || grid.gridId);\n const provider = grid?.provider;\n\n return {\n host, port, path, protocol, accessToken, slotId, gridId, tunnel, user, key, type, name, provider, tunnelUser, tunnelKey,\n };\n}\n\n/**\n * @template {{ status: string; code?: string; grid: * }} T\n * @param {string} projectId\n * @param {string} companyId\n * @param {number} workerId\n * @param {string} browser\n * @param {() => Promise<T>} getFun\n */\nasync function handleGetGridResponse(projectId, companyId, workerId, browser, getFun) {\n /** @type {T} */\n let res;\n try {\n res = await getFun();\n } catch (err) {\n logger.error('failed to get grid', { projectId, companyId, err });\n throw new Error(gridMessages.UNKNOWN);\n }\n logger.info('get grid info', Object.assign({}, res, { projectId, companyId }));\n const isSuccess = () => res.status === 'success';\n const isError = () => res.status === 'error' && res.code;\n if (!res || (!isError() && !isSuccess())) {\n logger.error('invalid response - get grid', { res });\n throw new Error(gridMessages.UNKNOWN);\n }\n\n if (isSuccess()) {\n const serGrid = getSerializableObject(res.grid);\n module.exports.addItemToGridCache(workerId, companyId, serGrid.gridId, serGrid.slotId, browser);\n return serGrid;\n }\n\n if (isError() && res.code === 'not-found') {\n throw new GridError(gridMessages.NOT_FOUND);\n }\n\n if (isError() && res.code === 'no-available-slot') {\n throw new GridConcurrencyError(`Failed to run test on ${browser} - concurrency limit reached`);\n }\n\n logger.error('invalid code error response - get grid', { res });\n throw new GridError(gridMessages.UNKNOWN);\n}\n\nfunction addItemToGridCache(workerId, companyId, gridId, slotId, browser) {\n gridCache[workerId] = { gridId, companyId, slotId, browser };\n}\n\nfunction getHostAndPortById(workerId, companyId, projectId, gridId, browser, executionId) {\n return handleGetGridResponse(projectId, companyId, workerId, browser, () =>\n servicesApi.getGridById(companyId, projectId, gridId, browser, executionId),\n );\n}\n\nfunction getHostAndPortByName(workerId, companyId, projectId, gridName, browser, executionId, options) {\n const get = () => {\n const grid = options.allGrids?.find(g => (g.name || '').toLowerCase() === gridName.toLowerCase());\n if (grid?._id) {\n return servicesApi.getGridById(companyId, projectId, grid._id, browser, executionId);\n }\n return servicesApi.getGridByName(companyId, projectId, gridName, browser, executionId);\n };\n return handleGetGridResponse(projectId, companyId, workerId, browser, get);\n}\n\nfunction getAllGrids(companyId) {\n return servicesApi.getAllGrids(companyId);\n}\n\nasync function getGridDataByGridId(companyId, gridId, allGrids) {\n const grids = await Promise.resolve(allGrids || getAllGrids(companyId));\n const grid = grids.find(g => g._id === gridId);\n if (!grid) {\n throw new ArgError(`Failed to find grid id: ${gridId}`);\n }\n return getSerializableObject(grid);\n}\n\nasync function getGridDataByGridName(companyId, gridName, allGrids) {\n const grids = await Promise.resolve(allGrids || getAllGrids(companyId));\n const grid = grids.find(g => (g.name || '').toLowerCase() === gridName.toLowerCase());\n if (!grid) {\n throw new ArgError(`Failed to find grid name: ${gridName}`);\n }\n return getSerializableObject(grid);\n}\n\nasync function releaseGridSlot(workerId, projectId) {\n const gridData = gridCache[workerId];\n if (!gridData) {\n return;\n }\n\n const { slotId, gridId, browser, companyId } = gridData;\n delete gridCache[workerId];\n if (!slotId) {\n logger.warn('failed to find grid slot id', { projectId });\n return;\n }\n\n logger.info('release slot id', { projectId, companyId, slotId, gridId, browser });\n try {\n await servicesApi.releaseGridSlot(companyId, projectId, slotId, gridId, browser);\n } catch (err) {\n logger.error('failed to release slot', { projectId, err });\n }\n}\n\nasync function keepAlive(projectId) {\n const slots = Object.values(gridCache).filter(Boolean);\n\n if (slots.length === 0) {\n return;\n }\n\n logger.info('keep alive worker slots', { projectId, slots });\n try {\n await servicesApi.keepAliveGrid(projectId, slots);\n } catch (err) {\n logger.error('failed to update grid keep alive', { err, slots, projectId });\n }\n}\n\nfunction startKeepAlive(projectId) {\n const KEEP_ALIVE_INTERVAL = 10 * 1000;\n keepAliveTimer = setInterval(keepAlive, KEEP_ALIVE_INTERVAL, projectId);\n}\n\nasync function releaseAllSlots(projectId) {\n const workerIds = Object.keys(gridCache);\n\n if (_.isEmpty(workerIds)) {\n return;\n }\n\n logger.warn('not all slots released before end runner flow', { projectId });\n try {\n await promiseMap(workerIds, workerId => releaseGridSlot(workerId, projectId));\n } catch (err) {\n logger.error('failed to release all slots', { err, projectId });\n }\n}\n\nasync function endKeepAlive(projectId) {\n await releaseAllSlots(projectId);\n clearInterval(keepAliveTimer);\n}\n\nfunction getVendorKeyFromOptions(type, options) {\n const { testobjectSauce, saucelabs } = options;\n if (type === 'testobject') {\n return testobjectSauce.testobjectApiKey;\n }\n if (type === 'saucelabs') {\n return saucelabs.accessKey;\n }\n return undefined;\n}\n\nfunction getVendorUserFromOptions(type, options) {\n const { saucelabs } = options;\n if (type === 'saucelabs') {\n return saucelabs.username;\n }\n return undefined;\n}\n\nfunction getOptionGrid(options) {\n const getGridType = () => {\n if (!_.isEmpty(options.testobjectSauce)) {\n return 'testobject';\n }\n\n if (!_.isEmpty(options.saucelabs)) {\n return 'saucelabs';\n }\n\n if (!_.isEmpty(options.perfecto)) {\n return 'perfecto';\n }\n\n return 'hostAndPort';\n };\n const type = getGridType();\n const { host, port, path, protocol } = options;\n const key = getVendorKeyFromOptions(type, options);\n const user = getVendorUserFromOptions(type, options);\n return Promise.resolve({ host, port, path, protocol, type, user, key });\n}\n\nasync function getTestPlanGridData(options, testPlanData) {\n const companyId = options.company.companyId;\n return await getGridDataByGridId(companyId, testPlanData.gridId, options.allGrids);\n}\n\nasync function getGridData(options) {\n const {\n allGrids = undefined, company,\n host, useLocalChromeDriver, useChromeLauncher, gridId, grid,\n } = options;\n if (useLocalChromeDriver || useChromeLauncher) {\n return { mode: 'local' };\n }\n if (host) {\n return getOptionGrid(options);\n }\n const companyId = company.companyId;\n if (gridId) {\n return getGridDataByGridId(companyId, gridId, allGrids);\n }\n if (grid) {\n return getGridDataByGridName(companyId, grid, allGrids);\n }\n if (hasTestPlanFlag(options) || options.tunnelOnlyMode) {\n logger.info('skipping getting grid, as it is set on test plan', { companyId });\n return undefined;\n }\n\n throw new GridError('Missing host or grid configuration');\n}\n\n/**\n * @param {string} browser\n * @param {string} executionId\n * @param {import('../runOptions').RunnerOptions} options\n * @param {number} workerId\n */\nasync function getGridSlot(browser, executionId, options, workerId) {\n const getGridDataFromServer = async () => {\n const { host, project, grid, gridId, useLocalChromeDriver, useChromeLauncher, company } = options;\n const companyId = company?.companyId;\n if (useLocalChromeDriver || useChromeLauncher) {\n return { mode: 'local' };\n }\n if (host) {\n return getOptionGrid(options);\n }\n if (gridId) {\n return getHostAndPortById(workerId, companyId, project, gridId, browser, executionId);\n }\n if (grid) {\n return getHostAndPortByName(workerId, companyId, project, grid, browser, executionId, options);\n }\n throw new GridError('Missing host or grid configuration');\n };\n\n const gridInfo = await getGridDataFromServer();\n return gridInfo;\n}\n\nconst handleHybridOrVendorIfNeeded = async (runnerOptions = { }, gridInfo = {}, testRunConfig = {}, lambdatestService = {}, retryConfig = {}) => {\n const { company = {} } = runnerOptions;\n const companyId = company.companyId;\n const { gridId, type } = gridInfo;\n const browser = runnerOptions.browser || testRunConfig.browserValue;\n const usingTunnel = Boolean(runnerOptions.tunnel);\n const { maxRetries, currentRetry } = retryConfig;\n\n if (!gridId || !type) {\n return gridInfo;\n }\n\n if (type === gridTypes.LAMBDATEST) {\n await lambdatestService.enableIfNeeded(gridInfo);\n }\n\n if (type !== gridTypes.HYBRID || !companyId || !browser || !maxRetries || !currentRetry) {\n return gridInfo;\n }\n\n const response = await servicesApi.getHybridGridProvider({ companyId, gridId, maxRetries, currentRetry, browser, usingTunnel });\n logger.info('handling hybrid grid', { response, companyId });\n const gridData = getSerializableObject({ ...gridInfo, ...response.connectionDetails, provider: response.provider });\n if (response.provider !== 'lambdatest') {\n lambdatestService.disable();\n }\n if (response.provider === 'lambdatest') {\n await lambdatestService.enableIfNeeded(gridData);\n }\n\n return gridData;\n};\n\nmodule.exports = {\n getGridSlot,\n releaseGridSlot,\n getGridData,\n getTestPlanGridData,\n addItemToGridCache,\n keepAlive: {\n start: startKeepAlive,\n end: endKeepAlive,\n },\n handleHybridOrVendorIfNeeded,\n};\n","'use strict';\n\n/** @type {string | undefined} */\nlet currentBranch;\n\nfunction getCurrentBranch() {\n return currentBranch || 'master';\n}\n\n/**\n * @param {Awaited<ReturnType<import('../commons/initializeUserWithAuth')['initializeUserWithAuth']>>['branchName']} branchData\n * @param {boolean | string} acknowledgeAutoDetect\n */\nfunction setCurrentBranch(branchData = 'master', acknowledgeAutoDetect = 'false') {\n if (branchData?.branch && branchData.branch === 'master') {\n currentBranch = 'master';\n return;\n }\n if (branchData && !branchData.isArchived) {\n currentBranch = branchData.branch || branchData;\n return;\n }\n currentBranch = acknowledgeAutoDetect ? 'master' : null;\n}\n\nmodule.exports = {\n getCurrentBranch,\n setCurrentBranch,\n};\n","/* eslint-disable no-console */\n\n'use strict';\n\nconst utils = require('./utils');\nconst _ = require('lodash');\nconst logger = require('./commons/logger').getLogger('override-test-data-builder');\n\nclass OverrideTestDataBuilder {\n constructor(params, testInfoList, projectId) {\n this.params = params;\n this.testInfoList = testInfoList;\n this.projectId = projectId;\n }\n\n isObjectNotArray(param) {\n return _.isObject(param) && !Array.isArray(param);\n }\n\n isArrayOfObjects(params) {\n return Array.isArray(params) && params.filter(param => !this.isObjectNotArray(param)).length === 0;\n }\n\n overrideTestData() {\n const { params, projectId } = this;\n if (this.isObjectNotArray(params) && typeof params.overrideTestData !== 'undefined') {\n if (this.isObjectNotArray(params.overrideTestData) && !_.isEmpty(params.overrideTestData)) {\n Object.keys(params.overrideTestData).forEach(testName => this.overrideSingeTest(testName, params.overrideTestData[testName]));\n delete params.overrideTestData;\n } else {\n logger.error('invalid overrideTestData', { overrideTestData: params.overrideTestData, projectId });\n }\n }\n if (this.isObjectNotArray(params) && typeof params.overrideAllTestsData !== 'undefined') {\n if (_.isObject(params.overrideAllTestsData) && !_.isEmpty(params.overrideAllTestsData)) {\n const testNames = this.testInfoList.map(test => test.name);\n testNames.forEach(testName => this.overrideSingeTest(testName, params.overrideAllTestsData));\n delete params.overrideAllTestsData;\n } else {\n logger.error('invalid overrideAllTestsData', { overrideAllTestsData: params.overrideAllTestsData, projectId });\n }\n }\n\n return this.testInfoList;\n }\n\n overrideSingeTest(testName, testOverrideTestData) {\n const { projectId } = this;\n if (this.isObjectNotArray(testOverrideTestData) || this.isArrayOfObjects(testOverrideTestData)) {\n this.replaceAndCreateOverrideTestData(testName, testOverrideTestData);\n return;\n }\n logger.error('skip override test data to test name', { testName, projectId });\n console.error(`Invalid override test data provided to test '${testName}'`);\n }\n\n replaceAndCreateOverrideTestData(testName, testOverrideTestData) {\n const uniqueMatchIds = this.mapTestListToUniqueId(testName);\n if (uniqueMatchIds.length === 0) {\n return undefined;\n }\n return this.createNewTestPerOverrideTestData(uniqueMatchIds, testOverrideTestData);\n }\n\n mapTestListToUniqueId(testName) {\n const { testInfoList } = this;\n return _(testInfoList).map(test => {\n if (test.name.toLowerCase() === testName.toLowerCase()) {\n return this.generateTestUniqId(test);\n }\n return undefined;\n }).filter(Boolean).uniq()\n .value();\n }\n\n createNewTestPerOverrideTestData(uniqueMatchIds, testOverrideTestData) {\n const { testInfoList } = this;\n return _.uniq(uniqueMatchIds).map(uniqTestId => {\n const testUniqIds = testInfoList.map(test => this.generateTestUniqId(test));\n const firstIndex = _.findIndex(testUniqIds, id => id === uniqTestId);\n const lastIndex = _.findLastIndex(testUniqIds, id => id === uniqTestId);\n const currentTest = testInfoList[firstIndex];\n const newTestDataItems = this.createNewTestItems(currentTest, testOverrideTestData);\n return testInfoList.splice(firstIndex, (lastIndex - firstIndex) + 1, ...newTestDataItems);\n });\n }\n\n createNewTestItems(currentTest, testOverrideTestData) {\n return ([].concat(testOverrideTestData)).map((newTestData, index) => {\n const testResultId = utils.guid();\n return Object.assign({}, currentTest, {\n resultId: testResultId,\n testData: {\n value: newTestData,\n index: index + 1,\n total: testOverrideTestData.length || 1,\n },\n });\n });\n }\n\n getTestType(test) {\n if (test.isBeforeTestPlan) {\n return 'before';\n }\n if (test.isAfterTestPlan) {\n return 'after';\n }\n return 'test';\n }\n\n generateTestUniqId(test) {\n return `${test.testId}:${test.testConfig.id}:${this.getTestType(test)}`;\n }\n}\n\nmodule.exports = OverrideTestDataBuilder;\n","'use strict';\n\nconst { ReportBase } = require('istanbul-lib-report');\n\nclass SummaryToObjectReport extends ReportBase {\n constructor(opts) {\n super();\n\n opts = opts || {};\n this.appendToObject = opts.appendToObject || {};\n }\n\n onStart(node) {\n const summary = node.getCoverageSummary();\n this.appendToObject = Object.assign(this.appendToObject, summary.toJSON());\n }\n}\n\nmodule.exports = SummaryToObjectReport;\n","'use strict';\n\nconst servicesApi = require('../commons/testimServicesApi');\nconst fs = require('fs');\nconst fsPromises = require('fs/promises');\nconst path = require('path');\nconst mkdirp = require('mkdirp');\nconst lazyRequire = require('../commons/lazyRequire');\nconst libReport = require('istanbul-lib-report');\nconst reports = require('istanbul-reports');\nconst SummaryToObjectReport = require('./SummaryToObjectReport');\nconst ora = require('ora');\nconst moment = require('moment');\nconst TestExclude = require('test-exclude');\nconst { ArgError } = require('../errors');\nconst { promiseMap } = require('../utils');\n\nconst logger = require('../commons/logger').getLogger('test-run-status');\n\nconst convertToURL = (path) => {\n try {\n return new URL(path);\n } catch (err) {\n try {\n return new URL(`file://${path}`);\n } catch (e) {\n return {};\n }\n }\n};\n\nconst pathHasQueryParam = (path) => {\n const urlObj = convertToURL(path);\n return !!urlObj.search;\n};\n\nconst parsePath = (path) => {\n if (!path) {\n return '';\n }\n const urlObj = convertToURL(path);\n return urlObj.pathname.substring(1);\n};\n\nconst excludePath = (codeCoverageInclude, path) => {\n const pathname = parsePath(path);\n const exclude = new TestExclude({\n relativePath: false,\n include: codeCoverageInclude,\n });\n\n return !exclude.shouldInstrument(pathname);\n};\n\nconst removeAfterQuestionMark = (str) => str.substring(0, str.indexOf('?'));\n\nmodule.exports.getSourceMap = async ({ source, sourceMapDir, sourceMapType }) => {\n const convertSourceMap = await lazyRequire('convert-source-map');\n if (sourceMapType === 'file' && !sourceMapDir) {\n throw new ArgError('--code-coverage-source-map-path [path]');\n }\n return sourceMapDir ?\n convertSourceMap.fromMapFileSource(source, sourceMapDir) :\n convertSourceMap.fromSource(source);\n};\n\nmodule.exports.remapCoverage = async (options, storagePath, sourceMaps) => {\n const { codeCoverageInclude } = options;\n await Promise.all(Object.values(sourceMaps).map(async (sourceMap) => {\n if (!sourceMap) {\n return;\n }\n const sourceMapObject = sourceMap.toObject();\n await Promise.all(sourceMapObject.sources.map(async (sourcePath, index) => {\n if (excludePath(codeCoverageInclude, sourcePath)) {\n return;\n }\n const parsedPath = rewritePath(storagePath, sourcePath);\n await mkdirp(path.parse(parsedPath).dir);\n await fsPromises.writeFile(parsedPath, sourceMapObject.sourcesContent[index]);\n }));\n }));\n};\n\nconst htmlReportLinkMapper = {\n getPath(node) {\n if (typeof node === 'string') {\n return node;\n }\n let filePath = node.getQualifiedName();\n if (node.isSummary()) {\n if (filePath !== '') {\n filePath += '/index.html';\n } else {\n filePath = 'index.html';\n }\n } else {\n if (pathHasQueryParam(filePath)) {\n filePath = removeAfterQuestionMark(filePath);\n }\n filePath += '.html';\n }\n return filePath;\n },\n\n relativePath(source, target) {\n const targetPath = this.getPath(target);\n const sourcePath = path.dirname(this.getPath(source));\n return path.posix.relative(sourcePath, targetPath);\n },\n\n assetPath(node, name) {\n return this.relativePath(this.getPath(node), name);\n },\n};\n\nconst rewritePath = (storagePath, fileUrl) => {\n const parsedPath = path.resolve(storagePath, parsePath(fileUrl));\n return `${parsedPath}.js`;\n};\n\nmodule.exports.saveCoverageReports = async (options, coverageMap, reportDir, tempJsDir) => {\n const { codeCoverageReporter } = options;\n const reportSummary = {};\n const context = libReport.createContext({\n dir: reportDir,\n coverageMap,\n watermarks: libReport.getDefaultWatermarks(),\n sourceFinder: (filePath) => {\n try {\n const parsedPath = rewritePath(tempJsDir, filePath);\n return fs.readFileSync(parsedPath, 'utf8');\n } catch (ex) {\n throw new Error(`Unable to lookup source: ${filePath} (${ex.message})`);\n }\n },\n });\n\n (new SummaryToObjectReport({ appendToObject: reportSummary })).execute(context);\n if (Array.isArray(codeCoverageReporter)) {\n codeCoverageReporter.forEach((reporter) => {\n let cfg = { projectRoot: '/' };\n if (reporter === 'html') {\n cfg = { linkMapper: htmlReportLinkMapper };\n }\n reports.create(reporter, cfg).execute(context);\n });\n }\n return reportSummary;\n};\n\nmodule.exports.convertV8ToIstanbul = async (options, { source, sourceMap, functions }) => {\n const { codeCoverageInclude } = options;\n if (!sourceMap || sourceMap.sourcemap.sources.length === 0) {\n return undefined;\n }\n const v8toIstanbul = await lazyRequire('v8-to-istanbul');\n const converter = v8toIstanbul('FAKE_PATH', 0, {\n source,\n sourceMap,\n }, (path) => excludePath(codeCoverageInclude, path));\n await converter.load();\n converter.applyCoverage(functions);\n return converter.toIstanbul();\n};\n\nconst collectAndMergeJsCoverageData = async (projectId, branch, runId) => {\n const DOWNLOAD_COVERAGE_DATA_CONCURRENCY = 20;\n const { mergeProcessCovs } = await lazyRequire('@bcoe/v8-coverage');\n let mergedCoverages = { result: [] };\n\n const covUrlMap = new Map();\n const realDataRes = await servicesApi.getRealData(projectId, 'testResult', `runId=${runId}`);\n const testResults = realDataRes.data.docs;\n\n await promiseMap(\n testResults.flatMap((testResult) => testResult.JSCoverageURLS || []),\n async (coverageURL) => {\n const data = await servicesApi.getS3Artifact(coverageURL, 90000);\n await promiseMap(data, async (cov) => {\n if (!covUrlMap.has(cov.url)) {\n let text = cov.text;\n if (cov.sourceUrl) {\n // set temp value to reduce read S3 file\n covUrlMap.set(cov.url, 'TEMP');\n text = await servicesApi.getS3ArtifactText(cov.sourceUrl);\n }\n covUrlMap.set(cov.url, {\n text,\n url: cov.url,\n sourceMapType: cov.sourceMapType,\n hash: cov.hash,\n });\n }\n delete cov.text;\n mergedCoverages = mergeProcessCovs([mergedCoverages, { result: [cov] }]);\n });\n },\n { concurrency: DOWNLOAD_COVERAGE_DATA_CONCURRENCY }\n );\n\n return { covUrlMap, mergedCoverages };\n};\n\nmodule.exports.calculateCoverage = async (options, branchToUse, numOfTests, runId) => {\n if (!options.collectCodeCoverage) {\n return undefined;\n }\n logger.info('start js coverage process');\n const spinner = ora(`analyzing coverage for ${numOfTests} ${numOfTests === 1 ? 'test' : 'tests'}`).start();\n const baseDir = path.resolve(options.codeCoverageReportPath || './coverage');\n const tempJsDir = path.resolve(baseDir, `.js/${moment().format('DDMMYYYYHHmmss')}`);\n const sourceMapDir = options.codeCoverageSourceMapPath ? path.resolve(options.codeCoverageSourceMapPath) : undefined;\n try {\n const [libCoverage, { mergedCoverages, covUrlMap }] = await Promise.all([\n lazyRequire('istanbul-lib-coverage'),\n collectAndMergeJsCoverageData(options.project, branchToUse, runId),\n ]);\n\n if (mergedCoverages.result.length === 0) {\n spinner.fail('Failed to report coverage information - js code coverage is empty');\n return undefined;\n }\n logger.info('start js coverage merge and remap', { numOfFiles: covUrlMap.size, numMergedCoverages: mergedCoverages.result.length });\n const coverageMap = libCoverage.createCoverageMap({});\n\n const sourceMaps = {};\n await Promise.all(mergedCoverages.result.map(async ({ url, functions }) => {\n const { text: source, sourceMapType } = covUrlMap.get(url);\n\n const sourceMap = await this.getSourceMap({ sourceMapType, url, source, sourceMapDir });\n sourceMaps[url] = sourceMap;\n\n const istanbulCoverage = await this.convertV8ToIstanbul(options, { source, sourceMap, functions });\n coverageMap.merge(istanbulCoverage);\n }));\n await this.remapCoverage(options, tempJsDir, sourceMaps);\n const coverageSummary = await this.saveCoverageReports(options, coverageMap, baseDir, tempJsDir);\n spinner.succeed();\n return coverageSummary;\n } catch (err) {\n const baseMsg = 'Failed to report coverage information';\n if (err instanceof ArgError) {\n spinner.fail(`${baseMsg}, missing arg: ${err.message}`);\n } else {\n spinner.fail(baseMsg);\n }\n logger.error(baseMsg, { err });\n }\n\n return undefined;\n};\n","'use strict';\n\nconst _ = require('lodash');\nconst { guid, calcPercentile } = require('../utils');\n\nconst SELENIUM_PERF_MARKS = {\n GET_BROWSER: 'GET_BROWSER',\n GET_HTML: 'GET_HTML',\n GET_ELEMENT: 'GET_ELEMENT',\n GET_SCREENSHOT: 'GET_SCREENSHOT',\n};\n\nclass SeleniumPerfStats {\n constructor() {\n this.marks = _.mapValues(SELENIUM_PERF_MARKS, () => []);\n this.marks.ALL = [];\n this.startTimes = {};\n }\n\n markStart(mark) {\n const id = guid();\n this.startTimes[`${mark}:${id}`] = Date.now();\n return id;\n }\n\n markEnd(id, mark) {\n const markDuration = Date.now() - this.startTimes[`${mark}:${id}`];\n delete this.startTimes[`${mark}:${id}`];\n\n if (!this.marks[mark]) {\n this.marks.ALL.push(markDuration);\n return;\n }\n this.marks[mark].push(markDuration);\n }\n\n getStats() {\n return {\n seleniumPerfMarks: this.marks,\n seleniumStats: _.chain(this.marks).transform(\n (result, samples, key) => {\n if (_.isEmpty(samples)) {\n return;\n }\n result[`${key}_COUNT`] = samples.length;\n result[`${key}_P50`] = calcPercentile(samples, 50);\n result[`${key}_P95`] = calcPercentile(samples, 95);\n },\n {}\n ).value(),\n };\n }\n}\n\nmodule.exports = {\n SELENIUM_PERF_MARKS,\n SeleniumPerfStats,\n};\n","const { ArgError } = require('../errors');\nconst express = require('express');\nconst fs = require('fs-extra');\nconst os = require('os');\nconst path = require('path');\nconst lazyRequire = require('../commons/lazyRequire');\n\nconst DEFUALT_PATH = path.join(os.tmpdir(), 'testim/rca/');\n\nconst stepFileMap = {};\nconst resultFileMap = {};\n\nconst TYPE_RENAMES = {\n 'test-log': 'consoleLogs',\n 'har-file': 'networkLogs',\n};\nconst TYPES = Object.keys(TYPE_RENAMES);\n\nfunction mapFilesToLocalDrive(test, logger) {\n try {\n test.failurePath = (test.failurePath || []).map(f => Object.assign(f, stepFileMap[f.id] ? { screenshot: stepFileMap[f.id] } : {}));\n Object.keys(resultFileMap).forEach(type => {\n test.assets = test.assets || {};\n test.assets[TYPE_RENAMES[type]] = resultFileMap[type];\n });\n\n test.assets = test.assets || {};\n test.assets.screenshots = Object.values(stepFileMap);\n } catch (err) {\n if (logger) {\n logger.error('failed to map files to local drive', { err });\n }\n // set default values.\n test.failurePath = test.failurePath || [];\n test.assets = test.assets || {};\n test.assets.screenshots = test.assets.screenshots || [];\n }\n}\n\n/**\n * @param {Partial<Pick<import('../runOptions').AgentModeOptions, 'agentPort' | 'agentBind'> & Pick<import('../runOptions').RunnerOptions, 'saveRCALocally'>>} param0\n * @returns {Promise<import('net').AddressInfo>}\n */\nasync function initServer({ agentPort, agentBind, saveRCALocally }) {\n const multer = await lazyRequire('multer');\n saveRCALocally = typeof saveRCALocally === 'string' ? saveRCALocally : DEFUALT_PATH;\n\n await fs.mkdirp(saveRCALocally);\n\n const upload = multer({\n storage: multer.diskStorage({\n async destination(req, file, cb) {\n const metadata = JSON.parse(req.body.metadata || '{}');\n if (!metadata.testResultId) {\n return cb(new Error('missing testResultId'));\n }\n const destination = path.join(saveRCALocally, metadata.testResultId);\n try {\n await fs.mkdirp(destination);\n } catch (err) {\n return cb(err);\n }\n return cb(null, destination);\n },\n filename(req, file, cb) {\n const { fileName } = req.body;\n const metadata = JSON.parse(req.body.metadata || '{}');\n if (!metadata.stepId && !fileName) {\n return cb(new Error('missing stepId or fileName'));\n }\n if (metadata.stepId) {\n const format = path.extname(fileName);\n return cb(null, `step_${metadata.stepId}_${metadata.stepName || ''}${format}`.replace(/[/\\\\?%*:|\"<>\\s]/g, '-'));\n }\n return cb(null, fileName);\n },\n }),\n });\n\n const app = express();\n\n app.post('/', upload.single('file'), (req, res) => {\n const metadata = JSON.parse(req.body.metadata || '{}');\n if (metadata.stepId) {\n stepFileMap[metadata.stepId] = req.file.path;\n }\n if (metadata.testResultId && TYPES.includes(metadata.subType)) {\n resultFileMap[metadata.subType] = resultFileMap[metadata.subType] || [];\n resultFileMap[metadata.subType].push(req.file.path);\n }\n res.sendStatus(200);\n });\n app.use((req, res) => res.status(404).send('Endpoint Not Found'));\n\n return await new Promise((resolve, reject) => {\n const http = require('http');\n const server = http.createServer(app);\n server.listen(agentPort, agentBind);\n server.on('error', onError);\n server.on('listening', () => resolve(server.address()));\n\n function onError(error) {\n if (error.syscall !== 'listen') {\n return reject(error);\n }\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n case 'EPERM':\n return reject(new ArgError(`Port ${agentPort} requires elevated privileges`));\n case 'EADDRINUSE':\n return reject(new ArgError(`Port ${agentPort} is already in use`));\n default:\n return reject(error);\n }\n }\n });\n}\n\nmodule.exports = {\n initServer,\n mapFilesToLocalDrive,\n};\n","'use strict';\n\nconst _ = require('lodash');\nconst utils = require('./utils');\nconst reporter = require('./reports/reporter');\nconst constants = require('./commons/constants');\nconst gridService = require('./services/gridService');\nconst featureFlags = require('./commons/featureFlags');\nconst servicesApi = require('./commons/testimServicesApi');\nconst OverrideTestDataBuilder = require('./OverrideTestDataBuilder');\nconst featureAvailabilityService = require('./commons/featureAvailabilityService');\nconst { ArgError } = require('./errors');\nconst { getLogger } = require('./commons/logger');\nconst { registerExitHook } = require('./processHandler');\nconst { calculateCoverage } = require('./coverage/jsCoverage');\nconst { SeleniumPerfStats } = require('./commons/SeleniumPerfStats');\nconst { mapFilesToLocalDrive } = require('./services/localRCASaver');\nconst { TESTIM_CONCURRENT_WORKER_COUNT } = require('./commons/config');\n\nconst logger = getLogger('test-run-status');\nconst gitBranch = utils.getEnvironmentGitBranch();\nconst gitCommit = process.env.GIT_COMMIT || process.env.CIRCLE_SHA1 || process.env.TRAVIS_COMMIT;\nconst gitRepoUrl = process.env.GIT_URL || process.env.CIRCLE_REPOSITORY_URL;\nconst runnerVersion = utils.getRunnerVersion();\n\n\nasync function runHook(fn, ...args) {\n if (!fn || typeof fn !== 'function') {\n return undefined;\n }\n\n try {\n const res = await fn(...args);\n return res || {};\n } catch (err) {\n logger.warn('failed to run hook', { err });\n throw new ArgError(`failed to run hook promise ${err.message}`);\n }\n}\n\nclass RunStatus {\n /**\n * @param {any[]} testInfoList\n * @param {import('./runOptions').RunnerOptions} options\n * @param {string} testPlanId\n * @param {string} branchToUse\n */\n constructor(testInfoList, options, testPlanId, branchToUse) {\n this.options = options;\n this.options.runParams = this.options.runParams || {};\n this.startTime = null;\n this.fileUserParamsData = this.options.userParamsData;\n this.beforeSuiteParams = {};\n this.branchToUse = branchToUse;\n this.exportsGlobal = {};\n this.testInfoList = testInfoList;\n\n this.executionStartedPromise = Promise.resolve();\n\n const browserNames = utils.getUniqBrowsers(options, testInfoList);\n const runnerMode = options.lightweightMode ? options.lightweightMode.type : options.mode;\n this.execConfig = {\n parallel: TESTIM_CONCURRENT_WORKER_COUNT || options.parallel || 1,\n browser: browserNames,\n gitBranch,\n gitCommit,\n gitRepoUrl,\n runnerVersion,\n gridHost: options.host || options.gridData.host,\n testimBranch: branchToUse,\n canaryMode: options.canary,\n source: options.source,\n schedulerId: options.schedulerId,\n testPlanId,\n testPlans: options.testPlan,\n testLabels: options.label,\n testSuites: [...new Set(testInfoList.flatMap(test => test.testSuites))],\n testNames: options.name,\n testIds: options.testId,\n testConfigs: options.testConfigNames,\n testConfigIds: options.testConfigIds,\n port: options.port,\n browserTimeout: options.browserTimeout,\n timeout: options.timeout,\n newBrowserWaitTimeout: options.newBrowserWaitTimeout,\n tunnel: options.tunnel,\n tunnelPort: options.tunnelPort,\n tunnelHostHeader: options.tunnelHostHeader,\n runnerMode,\n gridId: options.gridId || options.gridData.gridId,\n gridName: options.grid || options.gridData.name,\n gridType: options.gridData.type,\n retentionDays: options.retentionDays,\n codeCoverageReportPath: options.codeCoverageReportPath,\n collectCodeCoverage: options.codeCoverageUrlFilter || options.collectCodeCoverage,\n sessionType: utils.getSessionType(options),\n };\n\n this.seleniumPerfStats = new SeleniumPerfStats();\n this.calcTestRunStatus();\n }\n\n waitForExecutionStartedFinished() {\n return this.executionStartedPromise;\n }\n\n getTestResult(resultId) {\n return this.testRunStatus[resultId];\n }\n\n async addRetryTestResult({\n newResultId, originalTestResultId, previousTestResultId, projectId, executionId, retryCount = 1,\n }) {\n const orgTestResult = this.testRunStatus[originalTestResultId] || {};\n const {\n config,\n isTestsContainer,\n testId,\n name,\n testStatus,\n testCreatorName,\n testCreatorEmail,\n testOwnerName,\n testOwnerEmail,\n testLabels,\n testSuites,\n allLabels,\n } = orgTestResult;\n\n const newTestResult = {\n originalTestResultId,\n previousTestResultId,\n config: _.cloneDeep(config),\n testId,\n status: 'QUEUED',\n name,\n resultId: newResultId,\n isTestsContainer,\n retryCount,\n testStatus,\n };\n\n this.testRunStatus[newResultId] = Object.assign({}, newTestResult, {\n testCreatorName,\n testCreatorEmail,\n testOwnerName,\n testOwnerEmail,\n testLabels,\n testSuites,\n allLabels,\n });\n\n return servicesApi.addTestRetry({\n projectId,\n runId: executionId,\n testId,\n newResultId,\n originalTestResultId,\n previousTestResultId,\n testResult: newTestResult,\n });\n }\n\n getAllTestResults() {\n return this.testRunStatus;\n }\n\n testStart(wid, executionId, resultId, isRerun) {\n const test = this.getTestResult(resultId);\n test.workerId = wid;\n const isCodeMode = this.options.files.length > 0;\n reporter.onTestStarted(test, wid, isRerun, isCodeMode, resultId);\n\n return test;\n }\n\n async updateTestStatusRunning(test, executionId, testRetryKey) {\n const { project: projectId, remoteRunId, projectData } = this.options;\n if (this.options.lightweightMode?.onlyTestIdsNoSuite) {\n return this.executionStartedPromise;\n }\n\n let testDataUrl = '';\n\n try {\n testDataUrl = await servicesApi.updateTestDataArtifact(projectId, test.testId, test.resultId, test.config.testData, projectData.defaults);\n } catch (err) {\n logger.error('failed to upload test data artifact (runner)', { err });\n }\n const testConfig = _.cloneDeep(test.config);\n delete testConfig.testData;\n testConfig.testDataUrl = testDataUrl;\n await this.executionStartedPromise;\n return servicesApi.updateTestStatus(projectId, executionId, test.testId, test.resultId, 'RUNNING', { startTime: test.startTime, config: testConfig, remoteRunId, testRetryKey });\n }\n\n async testStartReport(test, executionId, testRetryKey) {\n if (utils.isQuarantineAndNotRemoteRun(test, this.options)) {\n return undefined;\n }\n const globalParameters = this.exportsGlobal;\n try {\n const params = await runHook(this.options.beforeTest, Object.assign({}, test, { exportsGlobal: globalParameters, globalParameters }), this.options.userData.loginData.token);\n\n test.config.testData = Object.assign({}, test.config.testData, this.exportsGlobal, this.fileUserParamsData, this.beforeSuiteParams, params);\n this.options.runParams[test.resultId] = test.config.testData;\n test.startTime = Date.now();\n await this.updateTestStatusRunning(test, executionId, testRetryKey);\n\n return test;\n } catch (err) {\n logger.error('Failed to start test', { err });\n throw err;\n }\n }\n\n testStartAndReport(wid, executionId, resultId, isRerun, testRetryKey) {\n const test = this.testStart(wid, executionId, resultId, isRerun);\n return this.testStartReport(test, executionId, testRetryKey);\n }\n\n /**\n * @param {string} resultId\n * @param {Awaited<ReturnType<typeof import('./services/gridService')['getGridSlot']>>} gridInfo\n */\n onGridSlot(resultId, gridInfo) {\n const test = this.getTestResult(resultId);\n test.config.gridInfo = Object.assign({}, gridInfo, { key: undefined, user: undefined });\n logger.info('on get grid info', { gridInfo: test.config.gridInfo });\n }\n\n reportTestStatus(workerId, result, test, isRerun) {\n const { name, testId, testStatus } = test;\n const { resultId, success } = result;\n if (testStatus === constants.testStatus.EVALUATING && featureAvailabilityService.isTestStatusEnabled) {\n reporter.onTestIgnored(workerId, test, `test in ${constants.testStatus.EVALUATING} status`);\n return;\n }\n if (success) {\n reporter.onTestPassed(name);\n return;\n }\n reporter.onTestFailed(\n test,\n test.failureReason,\n utils.getTestUrl(this.options.editorUrl, this.options.project, testId, resultId, this.branchToUse),\n testId,\n isRerun,\n resultId,\n );\n }\n\n calcResultText(result) {\n return result.success ? constants.runnerTestStatus.PASSED : constants.runnerTestStatus.FAILED;\n }\n\n /**\n * @param {number} wid\n * @param {Parameters<ConstructorParameters<typeof import('./workers/BaseWorker')>[7]>[1]} resultId\n */\n onTestIgnored(wid, resultId) {\n const test = this.getTestResult(resultId);\n reporter.onTestIgnored(wid, test, `test in ${constants.testStatus.QUARANTINE}`);\n }\n\n testEnd(wid, result, executionId, sessionId, isRerun) {\n const test = this.testRunStatus[result.resultId];\n\n const duration = (result.endTime - result.startTime) || 0;\n test.sessionId = sessionId;\n test.startTime = result.startTime || test.startTime || Date.now();\n test.duration = duration;\n result.duration = duration;\n test.failureReason = result.failureReason || result.reason;\n result.failureReason = test.failureReason;\n test.failurePath = result.failurePath;\n test.resultId = result.resultId;\n test.success = result.success;\n\n if (this.options.saveRCALocally) {\n mapFilesToLocalDrive(test, logger);\n }\n\n test.resultUrl = utils.getTestUrl(this.options.editorUrl, this.options.project, test.testId, test.resultId, this.branchToUse);\n test.status = this.calcResultText(result);\n\n result.status = test.status;\n result.name = test.name;\n result.testStatus = test.testStatus;\n result.testId = result.testId || test.testId;\n result.testCreatorName = test.testCreatorName;\n result.testCreatorEmail = test.testCreatorEmail;\n result.testOwnerName = test.testOwnerName;\n result.testOwnerEmail = test.testOwnerEmail;\n result.testData = test.config && typeof test.config.testDataTotal === 'number' ? {\n total: test.config.testDataTotal,\n index: test.config.testDataIndex,\n } : {};\n\n this.reportTestStatus(wid, result, test, isRerun);\n const isCodeMode = this.options.files.length > 0;\n reporter.onTestFinished(test, wid, isRerun, isCodeMode);\n\n const afterMerge = Object.assign({}, this.exportsGlobal, result.exportsGlobal);\n\n this.exportsGlobal = afterMerge;\n return test;\n }\n\n async testEndReport(test, executionId, result, testResultUpdates) {\n const globalParameters = result.exportsGlobal;\n try {\n try {\n await runHook(this.options.afterTest, Object.assign({}, test, { exportsGlobal: globalParameters, globalParameters }), this.options.userData.loginData.token);\n } catch (err) {\n logger.error('HOOK threw an error', { test: test.testId, err });\n // eslint-disable-next-line no-console\n console.error('HOOK threw an error', err); // show the customer that his hook failed.\n }\n if (this.options.lightweightMode?.onlyTestIdsNoSuite) {\n return undefined;\n }\n\n return await servicesApi.updateTestStatus(this.options.project, executionId, test.testId, test.resultId, 'FINISHED', {\n startTime: test.startTime,\n endTime: result.endTime,\n success: test.success,\n failureReason: test.failureReason,\n remoteRunId: this.options.remoteRunId,\n ...testResultUpdates,\n }, 5);\n } catch (err) {\n logger.error('Failed to update test finished', { err });\n throw err;\n }\n }\n\n testEndAndReport(wid, result, executionId, sessionId, isRerun, testResultUpdates) {\n const test = this.testEnd(wid, result, executionId, sessionId, isRerun);\n return this.testEndReport(test, executionId, result, testResultUpdates);\n }\n\n calcTestRunStatus() {\n const { options, testInfoList } = this;\n const companyId = options.company.companyId;\n this.testRunStatus = testInfoList.reduce((resultStatus, testInfo) => {\n resultStatus[testInfo.resultId] = {\n testId: testInfo.testId,\n status: utils.isQuarantineAndNotRemoteRun(testInfo, options) ? constants.runnerTestStatus.SKIPPED : constants.runnerTestStatus.QUEUED,\n name: testInfo.name,\n resultId: testInfo.resultId,\n isTestsContainer: testInfo.isTestsContainer,\n testStatus: testInfo.testStatus || constants.testStatus.DRAFT,\n testCreatorName: testInfo.creatorName,\n testCreatorEmail: testInfo.creatorEmail,\n testOwnerName: testInfo.testOwnerName,\n testOwnerEmail: testInfo.testOwnerEmail,\n testLabels: testInfo.testLabels,\n testSuites: testInfo.testSuites,\n allLabels: testInfo.allLabels,\n };\n\n const runConfig = options.browser ? utils.getRunConfigByBrowserName(options.browser, options.saucelabs, options.browserstack) : testInfo.runConfig;\n\n if (runConfig && featureFlags.flags.dec2022eolBrowsers.isEnabled() && utils.getBrowserInfo(runConfig.browserValue)?.eol) {\n throw new ArgError(`Unsupported Browser: ${runConfig.browserName}`);\n }\n\n resultStatus[testInfo.resultId].config = Object.assign({}, this.execConfig, {\n companyId,\n testData: testInfo.testData?.value ? testInfo.testData.value : null,\n });\n resultStatus[testInfo.resultId].config.isBeforeTestPlan = testInfo.isBeforeTestPlan;\n resultStatus[testInfo.resultId].config.isAfterTestPlan = testInfo.isAfterTestPlan;\n resultStatus[testInfo.resultId].config.testDataTotal = testInfo.testData?.total || null;\n resultStatus[testInfo.resultId].config.testDataIndex = testInfo.testData?.index || null;\n resultStatus[testInfo.resultId].config.baseUrl = options.baseUrl || testInfo.baseUrl || testInfo.testConfig.baseUrl;\n resultStatus[testInfo.resultId].config.testConfig = testInfo.overrideTestConfig || testInfo.testConfig;\n resultStatus[testInfo.resultId].config.browser = runConfig.browserValue.toLowerCase();\n return resultStatus;\n }, {});\n }\n\n async executionStart(executionId, projectId, startTime, testPlanName, testNames) {\n logger.info('execution started', { executionId });\n const { options } = this;\n const { remoteRunId, projectData } = options;\n\n registerExitHook(() => Promise.all([\n gridService.keepAlive.end(projectId),\n servicesApi.reportExecutionFinished(\n 'ABORTED',\n executionId,\n projectId,\n false,\n undefined,\n remoteRunId,\n undefined,\n ),\n ]));\n\n this.startTime = startTime || Date.now();\n const runHooksProps = {\n projectId,\n executionId,\n ...(featureFlags.flags.testNamesToBeforeSuiteHook.isEnabled() && { testNames }),\n };\n const params = await runHook(options.beforeSuite, runHooksProps);\n const overrideTestDataBuilder = new OverrideTestDataBuilder(params, _.cloneDeep(this.testInfoList), projectId);\n this.testInfoList = overrideTestDataBuilder.overrideTestData();\n this.calcTestRunStatus();\n this.beforeSuiteParams = params;\n\n const { testInfoList } = this;\n const beforeTests = [];\n const tests = [];\n const afterTests = [];\n for (const test of testInfoList) {\n if (test.isBeforeTestPlan) {\n beforeTests.push(test);\n continue;\n }\n if (test.isAfterTestPlan) {\n afterTests.push(test);\n continue;\n }\n tests.push(test);\n }\n\n const reportExecutionStarted = async () => {\n const testResults = _.cloneDeep(this.testRunStatus);\n await utils.promiseMap(Object.keys(testResults), async testResultId => {\n const test = testResults[testResultId];\n const testData = test.config?.testData;\n const testId = test.testId;\n const testDataUrl = await servicesApi.updateTestDataArtifact(projectId, testId, testResultId, testData, projectData.defaults);\n if (!testDataUrl) {\n return;\n }\n delete test.config.testData;\n test.config.testDataUrl = testDataUrl;\n });\n const isLocalRun = Boolean(options.useLocalChromeDriver || options.useChromeLauncher);\n const data = {\n executionId,\n projectId,\n labels: testPlanName || [],\n startTime,\n executions: testResults,\n config: this.execConfig,\n resultLabels: options.resultLabels,\n remoteRunId: options.remoteRunId,\n localRunUserId: options.user,\n isLocalRun,\n intersections: options.intersections,\n };\n const ret = servicesApi.reportExecutionStarted(data);\n this.executionStartedPromise = ret;\n ret.catch(e => logger.error(e));\n return ret;\n };\n\n try {\n await reportExecutionStarted();\n } catch (err) {\n logger.error('Failed to start suite', { err });\n // eslint-disable-next-line no-console\n console.error('Failed to start test run. Please contact support@testim.io');\n }\n return { beforeTests, tests, afterTests };\n }\n\n concatSeleniumPerfMarks(marks) {\n _.chain(marks)\n .keys()\n .each((key) => {\n if (this.seleniumPerfStats.marks[key]) {\n this.seleniumPerfStats.marks[key] = [...this.seleniumPerfStats.marks[key], ...marks[key]];\n }\n })\n .value();\n }\n\n async executionEnd(executionId) {\n const tests = utils.groupTestsByRetries(this.testRunStatus);\n const total = tests.length;\n\n let passed = 0;\n let skipped = 0;\n let failedInEvaluatingStatus = 0;\n for (const { status, testStatus } of tests) {\n if (status === constants.runnerTestStatus.PASSED) {\n passed++;\n }\n if (status === constants.runnerTestStatus.SKIPPED) {\n skipped++;\n }\n if (status === constants.runnerTestStatus.FAILED && testStatus === constants.testStatus.EVALUATING) {\n failedInEvaluatingStatus++;\n }\n }\n\n const { seleniumPerfMarks, ...resultExtraData } = this.seleniumPerfStats.getStats();\n\n try {\n await runHook(this.options.afterSuite, {\n exportsGlobal: this.exportsGlobal,\n tests,\n total,\n passed,\n skipped,\n });\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log('check your callback handler on afterSuite Hook for syntax or exception errors');\n logger.warn('error while running afterSuite Hook', { err, projectId: this.options.projectData.projectId, executionId: this.options.executionId });\n }\n const coverageSummary = await calculateCoverage(this.options, this.branchToUse, total, executionId);\n resultExtraData.coverageSummary = coverageSummary;\n\n if (this.options.lightweightMode?.onlyTestIdsNoSuite) {\n return undefined;\n }\n try {\n return await servicesApi.reportExecutionFinished(\n 'FINISHED',\n executionId,\n this.options.project,\n total === (passed + skipped + failedInEvaluatingStatus),\n {\n tmsSuppressReporting: this.options.tmsSuppressReporting,\n tmsRunId: this.options.tmsRunId,\n tmsCustomFields: this.options.tmsCustomFields,\n },\n this.options.remoteRunId,\n resultExtraData,\n );\n } catch (err) {\n logger.error('Failed to update suite finished', { err });\n throw err;\n }\n }\n\n async markAllQueuedTests(executionId, status, failureReason, success) {\n const queuedResultIds = Object.keys(this.testRunStatus).filter(resultId => this.getTestResult(resultId).status === 'QUEUED');\n\n await servicesApi.updateExecutionTests(\n executionId,\n ['QUEUED'],\n status,\n failureReason,\n success,\n this.startTime,\n null,\n this.options.project,\n );\n for (const resultId of queuedResultIds) {\n const test = this.getTestResult(resultId);\n test.status = status;\n test.failureReason = failureReason;\n test.success = success;\n }\n return this.testRunStatus;\n }\n}\n\nmodule.exports = RunStatus;\n","'use strict';\n\nconst analytics = require('../commons/testimAnalytics');\nconst { isCi } = require('../cli/isCiRun');\n\nconst calcSource = (source, user) => {\n if (source !== 'cli' && source !== 'cli-local') {\n return source;\n }\n\n if (isCi && user) {\n return 'ci-with-user';\n }\n\n if (isCi) {\n return 'ci';\n }\n\n if (user) {\n return 'cli-with-user';\n }\n\n return source;\n};\n\nfunction setLightweightAnalytics(properties, lightweightMode) {\n if (lightweightMode && lightweightMode.type) {\n properties[`${lightweightMode.type}Mode`] = true;\n }\n return properties;\n}\n\nfunction analyticsTestStart({\n executionId, projectId, testId, resultId, companyId, companyName, projectName, companyPlan, sessionType, source, user, lightweightMode, isStartUp, projectType,\n}) {\n const properties = setLightweightAnalytics({\n executionId,\n projectId,\n testId,\n resultId,\n companyId,\n companyName,\n projectName,\n companyPlan,\n sessionType,\n source: calcSource(source, user),\n isStartUp,\n projectType,\n }, lightweightMode);\n analytics.trackWithCIUser('test-run-ci', properties);\n}\n\nfunction analyticsTestEnd({\n executionId, projectId, testId, resultId, result, companyId, companyName, projectName, companyPlan, sessionType, source, user, lightweightMode,\n logger, isStartUp, projectType,\n}) {\n try {\n const properties = setLightweightAnalytics({\n executionId,\n projectId,\n testId,\n resultId,\n companyId,\n companyName,\n projectName,\n companyPlan,\n sessionType,\n mockNetworkEnabled: result.wasMockNetworkActivated,\n source: calcSource(source, user),\n isStartUp,\n projectType,\n }, lightweightMode);\n\n if (result.success) {\n analytics.trackWithCIUser('test-run-ci-success', properties);\n return;\n }\n analytics.trackWithCIUser('test-run-ci-fail', Object.assign({}, properties, { failureReason: result.failureReason }));\n } catch (err) {\n logger.error('failed to update test end analytics', { err });\n }\n}\n\nfunction analyticsExecsStart({ executionId, projectId, sessionType }) {\n analytics.trackWithCIUser('batch-run-ci', {\n executionId,\n projectId,\n sessionType,\n });\n}\n\nmodule.exports = {\n analyticsTestStart,\n analyticsTestEnd,\n analyticsExecsStart,\n};\n","// @ts-check\n\n'use strict';\n\nconst fs = require('fs');\nconst os = require('os');\nconst path = require('path');\nconst fse = require('fs-extra');\nconst dataUriToBuffer = require('data-uri-to-buffer');\nconst utils = require('../../../utils');\nconst npmWrapper = require('../../../commons/npmWrapper');\nconst featureFlags = require('../../../commons/featureFlags');\nconst { spawn: threadSpawn, config } = require('threads');\nconst { TimeoutError } = require('../../../errors');\nconst { getLogger } = require('../../../commons/logger');\nconst { getS3Artifact } = require('../../../commons/testimServicesApi');\n\nconst logger = getLogger('cli-service');\n\n/** @type {import('worker_threads') | false} */\nlet workerThreads;\n\nconfig.set({\n basepath: {\n node: __dirname,\n },\n});\n\nfunction convertWindowsBackslash(input) {\n const isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(input);\n const hasNonAscii = /[^\\u0000-\\u0080]+/.test(input); // eslint-disable-line no-control-regex\n\n if (isExtendedLengthPath || hasNonAscii) {\n return input;\n }\n\n return input.replace(/\\\\/g, '/');\n}\n\n/**\n * @param {string} transactionId\n * @param {any} incomingParams\n * @param {any} context\n * @param {any} code\n * @param {Record<string, any>} packageLocalLocations\n * @param {number=} timeout\n * @param {string=} fileDataUrl\n */\nfunction runCode(transactionId, incomingParams, context, code, packageLocalLocations = {}, timeout = undefined, fileDataUrl = undefined) {\n const requireCode = Object.keys(packageLocalLocations).reduce((all, pMember) => {\n all += `\n var ${pMember} = require('${convertWindowsBackslash(packageLocalLocations[pMember])}');\n `;\n return all;\n }, '');\n\n const fileDataUrlToFileBuffer = !fileDataUrl ? 'var fileBuffer = null;' :\n `\n ${dataUriToBuffer.toString()}\n var fileBuffer = dataUriToBuffer('${fileDataUrl}');\n `;\n\n function constructWithArguments(constructor, args) {\n function F() {\n return constructor.apply(this, args);\n }\n\n F.prototype = constructor.prototype;\n return new F();\n }\n\n //https://github.com/anseki/console-substitute\n const consoleOverride = `\n\n const getMessage = arguments => {\n const args = Array.prototype.slice.call(arguments);\n let message = args.shift() + '';\n if (!args.length) {\n return message;\n }\n message = message.replace(/%([odifs])/g, function (s, param) {\n // Formatting is not yet supported.\n var arg;\n if (!args.length) {\n return '';\n }\n arg = args.shift();\n if (param === 'o') {\n return arg + '';\n } else if (param === 'd' || param === 'i') {\n arg = typeof arg === 'boolean' ? (arg ? 1 : 0) : parseInt(arg, 10);\n return isNaN(arg) ? '0' : arg + '';\n } else if (param === 'f') {\n arg = typeof arg === 'boolean' ? (arg ? 1 : 0) : parseFloat(arg);\n return isNaN(arg) ? '0.000000' : arg.toFixed(6) + '';\n } else if (param === 's') {\n return arg + '';\n }\n });\n if (message) {\n args.unshift(message);\n }\n return args.join(' ').replace(/\\\\s*$/, ' ');\n };\n\n const pushNewMessage = (method, consoleArgs) => {\n const message = getMessage(consoleArgs);\n progress({\n method,\n msg: message,\n timestamp: Date.now()\n });\n };\n\n [\"log\", \"info\", \"warn\", \"error\", \"debug\"].forEach(function (method) {\n const nativeMethod = console[method];\n const oldMethod = nativeMethod && nativeMethod.bind(console);\n console[method] = function () {\n pushNewMessage(method, arguments);\n oldMethod && oldMethod.apply(console, arguments);\n };\n });\n `;\n\n const injectCode = `\n function injectCode(params, args, incomingParams, context, code, done) {\n ${constructWithArguments.toString()}\n\n var resolve = function (result) {\n done({\n status: 'done',\n result: result,\n success: true\n });\n };\n var reject = function (result) {\n done({\n status: 'failed',\n result: result,\n success: false\n });\n };\n\n try {\n params.push(code);\n var functionToRun = constructWithArguments(Function, params);\n\n var result = functionToRun.apply(null, args);\n if (isPromise(result)) {\n result.then(function (res) {\n resolve({\n resultValue: res,\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n }).catch(function (err) {\n reject({\n resultValue: err && err.toString(),\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n });\n } else {\n resolve({\n resultValue: result,\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n }\n } catch (e) {\n reject({\n resultValue: e && e.toString(),\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n }\n }\n `;\n\n const runFn = `\n // A hack to fix an issue with stringified functions which use require. when compiling to JS, calls to require change to __require.\n const __require = require;\n ${requireCode}\n\n ${fileDataUrlToFileBuffer}\n\n ${consoleOverride}\n\n ${utils.isPromise.toString()}\n\n const {incomingParams, context, code} = input;\n\n var exportedData = {};\n var exportedTestData = {};\n var exportedGlobalData = {};\n\n var params = [\"context\"]\n .concat(incomingParams.as.functionParameters)\n .concat(${JSON.stringify(Object.keys(packageLocalLocations))})\n .concat(['exports', 'exportsTest', 'exportsGlobal']);\n\n var args = [context]\n .concat(incomingParams.as.functionArguments)\n .concat([${Object.keys(packageLocalLocations).join(',')}])\n .concat([exportedData, exportedTestData, exportedGlobalData]);\n\n if(fileBuffer) {\n params = params.concat(['fileBuffer']);\n args = args.concat([fileBuffer]);\n }\n\n ${injectCode}\n\n injectCode(params, args, incomingParams, context, code, done);\n `;\n\n const testimConsoleLogDataAggregates = [];\n const thread = threadSpawn(constructWithArguments(Function, ['input', 'done', 'progress', runFn]));\n return utils.promiseTimeout(new Promise((resolve) => {\n thread\n .send({ incomingParams, context, code })\n .on('message', message => {\n const messageWithLogs = Object.assign({}, message, { tstConsoleLogs: testimConsoleLogDataAggregates });\n logger.debug('Run code worker response', { messageWithLogs, transactionId });\n resolve(messageWithLogs);\n })\n .on('progress', (logMessage) => {\n testimConsoleLogDataAggregates.push(logMessage);\n })\n .on('error', (err) => {\n if (err.message === 'malformed data: URI') {\n logger.error('Run code worker error', { err, transactionId, fileDataUrl });\n } else {\n logger.error('Run code worker error', { err, transactionId });\n }\n\n resolve({\n tstConsoleLogs: testimConsoleLogDataAggregates,\n status: 'failed',\n result: {\n resultValue: err?.toString(),\n exports: {},\n exportsTest: {},\n exportsGlobal: {},\n },\n success: false,\n });\n })\n .on('exit', () => {\n logger.debug('Run code worker has been terminated', { transactionId });\n });\n }), timeout)\n .catch(err => {\n if (!(err instanceof utils.TimeoutError)) {\n throw err;\n }\n logger.warn('timeout to run code', { transactionId, err });\n return {\n tstConsoleLogs: testimConsoleLogDataAggregates,\n status: 'failed',\n result: {\n resultValue: err?.toString(),\n exports: {},\n exportsTest: {},\n exportsGlobal: {},\n },\n success: false,\n };\n })\n .finally(() => thread?.kill());\n}\n\n/** @param {string} _path */\nfunction requireOrImportMethod(_path) {\n try {\n return { sync: true, lib: globalThis.require(_path) };\n } catch (err) {\n if (err.code === 'ERR_REQUIRE_ESM') {\n const pathModule = globalThis.require('path');\n\n const lib = fs.promises.readFile(`${path}${pathModule.sep}package.json`).then(file => {\n const packageJson = JSON.parse(file);\n const fullPath = pathModule.join(_path, packageJson.main || `${pathModule.sep}index.js`);\n return import(fullPath);\n });\n\n return { sync: false, lib };\n }\n throw err;\n }\n}\n\n/**\n * @param {string} transactionId\n * @param {any} incomingParams\n * @param {any} context\n * @param {any} code\n * @param {number=} timeout\n */\nfunction runCodeWithWorkerThread(\n transactionId,\n incomingParams,\n context,\n code,\n packageLocalLocations = {},\n timeout = undefined,\n fileDataUrl = undefined,\n) {\n // technically shouldn't happen, but better safe than sorry.\n if (!workerThreads) {\n workerThreads = require('worker_threads');\n }\n const { Worker } = workerThreads;\n const requireCode = Object.keys(packageLocalLocations).reduce((all, pMember) => {\n all += `\n var res = requireOrImportMethod('${convertWindowsBackslash(packageLocalLocations[pMember])}');\n if (res.sync) {\n var ${pMember} = res.lib;\n } else {\n var ${pMember} = await res.lib;\n }\n `;\n return all;\n }, '');\n\n const fileDataUrlToFileBuffer = !fileDataUrl ? 'var fileBuffer = null;' :\n `\n ${dataUriToBuffer.toString()}\n var fileBuffer = dataUriToBuffer('${fileDataUrl}');\n `;\n\n function constructWithArguments(constructor, args) {\n function F() {\n return constructor.apply(this, args);\n }\n\n F.prototype = constructor.prototype;\n return new F();\n }\n\n //https://github.com/anseki/console-substitute\n // note that this method is a bit different than the one in the non-worker one.\n const consoleOverride = `\n const getMessage = arguments => {\n const args = Array.prototype.slice.call(arguments);\n let message = args.shift() + '';\n if (!args.length) {\n return message;\n }\n message = message.replace(/%([odifs])/g, function (s, param) {\n // Formatting is not yet supported.\n var arg;\n if (!args.length) {\n return '';\n }\n arg = args.shift();\n if (param === 'o') {\n return arg + '';\n } else if (param === 'd' || param === 'i') {\n arg = typeof arg === 'boolean' ? (arg ? 1 : 0) : parseInt(arg, 10);\n return isNaN(arg) ? '0' : arg + '';\n } else if (param === 'f') {\n arg = typeof arg === 'boolean' ? (arg ? 1 : 0) : parseFloat(arg);\n return isNaN(arg) ? '0.000000' : arg.toFixed(6) + '';\n } else if (param === 's') {\n return arg + '';\n }\n });\n if (message) {\n args.unshift(message);\n }\n return args.join(' ').replace(/\\\\s*$/, ' ');\n };\n\n const pushNewMessage = (method, consoleArgs) => {\n const message = getMessage(consoleArgs);\n parentPort.postMessage({\n action: 'progress',\n data: {\n method,\n msg: message,\n timestamp: Date.now(),\n }\n });\n };\n\n [\"log\", \"info\", \"warn\", \"error\", \"debug\"].forEach(function (method) {\n const nativeMethod = console[method];\n const oldMethod = nativeMethod && nativeMethod.bind(console);\n console[method] = function () {\n pushNewMessage(method, arguments);\n oldMethod && oldMethod.apply(console, arguments);\n };\n });\n `;\n\n const injectCode = `\n function injectCode(params, args, incomingParams, context, code) {\n ${constructWithArguments.toString()}\n\n var resolve = function (result) {\n parentPort.postMessage({\n action: 'finish',\n data: {\n status: 'done',\n result: result,\n success: true,\n }\n });\n };\n var reject = function (result) {\n parentPort.postMessage({\n action: 'finish',\n data: {\n status: 'failed',\n result: result,\n success: false,\n }\n });\n };\n\n try {\n params.push(code);\n const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;\n var functionToRun = constructWithArguments(AsyncFunction, params);\n\n var result = functionToRun.apply(null, args);\n if (isPromise(result)) {\n result.then(function (res) {\n resolve({\n resultValue: res,\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n }).catch(function (err) {\n reject({\n resultValue: err && err.toString(),\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n });\n } else {\n resolve({\n resultValue: result,\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n }\n } catch (e) {\n reject({\n resultValue: e && e.toString(),\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData\n });\n }\n }\n `;\n\n const runFn = `\n (async function() {\n // A hack to fix an issue with stringified functions which use require. when compiling to JS, calls to require change to __require.\n const __require = require;\n const { parentPort } = require('worker_threads');\n ${requireOrImportMethod}\n\n // requireCode will set async to be true if needed.\n ${requireCode}\n\n ${fileDataUrlToFileBuffer}\n\n ${consoleOverride}\n\n ${utils.isPromise.toString()}\n\n parentPort.once('message', input => {\n const {incomingParams, context, code} = input;\n\n var exportedData = {};\n var exportedTestData = {};\n var exportedGlobalData = {};\n\n var params = [\"context\"]\n .concat(incomingParams.as.functionParameters)\n .concat(${JSON.stringify(Object.keys(packageLocalLocations))})\n .concat(['exports', 'exportsTest', 'exportsGlobal']);\n\n var args = [context]\n .concat(incomingParams.as.functionArguments)\n .concat([${Object.keys(packageLocalLocations).join(',')}])\n .concat([exportedData, exportedTestData, exportedGlobalData]);\n\n if(fileBuffer) {\n params = params.concat(['fileBuffer']);\n args = args.concat([fileBuffer]);\n }\n\n ${injectCode}\n\n injectCode(params, args, incomingParams, context, code);\n });\n })();\n `;\n\n const testimConsoleLogDataAggregates = [];\n const thread = new Worker(runFn, {\n eval: true,\n });\n return utils.promiseTimeout(new Promise((resolve) => {\n thread\n .on('message', message => {\n if (message.action === 'finish') {\n const { data } = message;\n const messageWithLogs = Object.assign({}, data, { tstConsoleLogs: testimConsoleLogDataAggregates });\n logger.debug('Run code worker response', { messageWithLogs, transactionId });\n resolve(messageWithLogs);\n } else if (message.action === 'progress') {\n testimConsoleLogDataAggregates.push(message.data);\n }\n })\n .on('error', (err) => {\n if (err.message === 'malformed data: URI') {\n logger.error('Run code worker error', { err, transactionId, fileDataUrl });\n } else {\n logger.error('Run code worker error', { err, transactionId });\n }\n\n resolve({\n tstConsoleLogs: testimConsoleLogDataAggregates,\n status: 'failed',\n result: {\n resultValue: err?.toString(),\n exports: {},\n exportsTest: {},\n exportsGlobal: {},\n },\n success: false,\n });\n })\n .on('exit', () => {\n logger.debug('Run code worker has been terminated', { transactionId });\n });\n // context can contain methods and proxies which cannot pass.\n thread.postMessage({ incomingParams, context: JSON.parse(JSON.stringify(context)), code });\n }), timeout)\n .catch(err => {\n if (!(err instanceof utils.TimeoutError)) {\n throw err;\n }\n logger.warn('timeout to run code', { transactionId, err });\n return {\n tstConsoleLogs: testimConsoleLogDataAggregates,\n status: 'failed',\n result: {\n resultValue: err?.toString(),\n exports: {},\n exportsTest: {},\n exportsGlobal: {},\n },\n success: false,\n };\n })\n .finally(() => thread?.terminate());\n}\n\n/** @param {string} installFolder */\nasync function removeFolder(installFolder) {\n try {\n await fse.remove(installFolder);\n } catch (err) {\n logger.warn('failed to remove install npm packages folder', { err });\n }\n}\n\n/**\n * @param {string} stepResultId\n * @param {string} testResultId\n * @param {string} stepId\n * @param {number} retryIndex\n */\nfunction getTransactionId(stepResultId, testResultId, stepId, retryIndex) {\n return `${testResultId}_${stepId}_${stepResultId}_${retryIndex}`;\n}\n\n/**\n * @param {string} stepId\n * @param {string} testResultId\n * @param {number} retryIndex\n * @param {{ packageName: string; packageVersion: string }[]} packageData\n * @param {string} stepResultId\n * @param {number} timeout\n */\nfunction installPackage(stepId, testResultId, retryIndex, packageData, stepResultId, timeout) {\n const transactionId = getTransactionId(stepResultId, testResultId, stepId, retryIndex);\n return runNpmInstall(transactionId, packageData, timeout).then(({ data }) => data);\n}\n\nfunction runCodeWithPackages(code, stepId, incomingParams, context, testResultId, retryIndex, stepResultId, timeout, fileDataUrl, s3filepath) {\n const packageLocalLocations = (incomingParams.nodePackageParams || []).reduce((packages, data) => {\n packages[data.paramName] = data.testimPackageLocalLocation;\n return packages;\n }, {});\n const transactionId = getTransactionId(stepResultId, testResultId, stepId, retryIndex);\n\n const getS3ArtifactPromise = s3filepath ?\n getS3Artifact(s3filepath) :\n Promise.resolve();\n\n return getS3ArtifactPromise.then(s3fileDataUrl => {\n if (s3fileDataUrl) {\n fileDataUrl = s3fileDataUrl;\n }\n }).then(() => {\n if (typeof workerThreads === 'undefined') {\n try {\n workerThreads = require('worker_threads');\n } catch (err) {\n workerThreads = false;\n }\n }\n\n if (Buffer.isBuffer(fileDataUrl)) { // Fix, S3 is returning a buffer and not a string on empty files\n logger.debug('runCodeWithPackages: converted a buffer to base 64 string data URI', { fileDataUrl });\n fileDataUrl = fileDataUrl.toString();\n }\n\n const emptyFileDataUrl = 'data:,';\n if (fileDataUrl === 'data:') { // Fix chrome/safari bug that creates malformed data-uri for empty files\n logger.debug('runCodeWithPackages, fileDataUrl was an empty string ', { fileDataUrl });\n fileDataUrl = emptyFileDataUrl;\n }\n\n if (workerThreads && featureFlags.flags.enableWorkerThreadsCliCodeExecution.isEnabled()) {\n return runCodeWithWorkerThread(transactionId, incomingParams, context, code, packageLocalLocations, timeout, fileDataUrl);\n }\n return runCode(transactionId, incomingParams, context, code, packageLocalLocations, timeout, fileDataUrl);\n }).then(res => Object.assign({}, res, { nodeVersion: process.version }));\n}\n\n/**\n * @param {string} transactionId\n * @param {{ packageName: string; packageVersion: string }[]} packageData\n * @param {number} timeout\n */\nasync function runNpmInstall(transactionId, packageData, timeout) {\n const packages = packageData.map(data => `${data.packageName}@${data.packageVersion}`);\n const localPackageInstallFolder = getLocalPackageInstallFolder();\n const installFolder = path.join(localPackageInstallFolder, `/${transactionId}`);\n const proxyUri = global.proxyUri;\n\n\n async function npmInstallation() {\n let output = '';\n try {\n output = await npmWrapper.installPackages(installFolder, packages, proxyUri, timeout);\n logger.info('npm package install finished', { transactionId, output, timeout });\n if (Number(output.trim().split(' ')[1]) < packages.length) {\n // TODO: I am not sure changing this to an error would be safe.\n // eslint-disable-next-line no-throw-literal\n throw 'npm package install failed, couldn\\'t install all packages';\n }\n const packageDataWithVersions = packageData.map(pData => {\n const version = npmWrapper.getLocallyInstalledPackageVersion(installFolder, pData.packageName);\n const packageFullName = `${pData.packageName}@${version}`;\n const packageLocalLocation = path.resolve(installFolder, 'node_modules', pData.packageName);\n return Object.assign({}, pData, {\n packageFullName,\n packageLocalLocation,\n });\n });\n\n return { data: packageDataWithVersions, installFolder };\n } catch (err) {\n logger.warn('npm package install failed', { transactionId, err });\n throw err;\n }\n }\n\n try {\n return await utils.promiseTimeout(npmInstallation(), timeout);\n } catch (err) {\n if (err instanceof TimeoutError) {\n logger.warn('timeout to install package', { packages, transactionId, err, timeout });\n }\n throw err;\n }\n}\n\nfunction getLocalPackageInstallFolder() {\n return path.join(os.tmpdir(), '/testim_local_packages');\n}\n\nfunction cleanLocalPackageInstallFolder() {\n const localPackageInstallFolder = getLocalPackageInstallFolder();\n return removeFolder(localPackageInstallFolder);\n}\n\nmodule.exports = {\n runCodeWithPackages,\n installPackage,\n cleanLocalPackageInstallFolder,\n};\n","'use strict';\n\nconst service = require('../agent/routers/cliJsCode/service');\nconst { TimeoutError } = require('../errors');\nconst featureFlags = require('../commons/featureFlags');\n\nfunction isExceedingMaxResultSize(data, project) {\n try {\n const shouldEnforceMaxSize = project.defaults.enforceMaximumJsResultSize;\n const maximumJsResultSize = featureFlags.flags.maximumJsResultSize.getValue();\n const dataSizeExceeded = JSON.stringify(data).length > maximumJsResultSize;\n if (!shouldEnforceMaxSize) {\n return false;\n }\n return dataSizeExceeded;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports.run = async (browser, step, projectData) => {\n const {\n code, stepId, incomingParams, context, testResultId, retryIndex, stepResultId, runTimeout, fileDataUrl, s3filepath,\n } = step.data;\n try {\n const data = await service.runCodeWithPackages(code, stepId, incomingParams, context, testResultId, retryIndex, stepResultId, runTimeout, fileDataUrl, s3filepath);\n if (data && isExceedingMaxResultSize({ result: data.result, tstConsoleLogs: data.tstConsoleLogs }, projectData)) {\n return {\n code: 'js-result-max-size-exceeded',\n success: false,\n };\n }\n return { data, success: true };\n } catch (err) {\n if (err instanceof TimeoutError) {\n throw new Error('Timeout while running action');\n }\n throw err;\n }\n};\n","/* eslint-disable camelcase */\n\n'use strict';\n\nconst crypto = require('crypto');\nconst _ = require('lodash');\nconst fs = require('fs');\nconst path = require('path');\n\nconst featureFlags = require('./featureFlags');\nconst { CLI_MODE, mobileWeb, gridTypes } = require('./constants');\nconst config = require('./config');\nconst utils = require('../utils');\nconst LambdatestService = require('../services/lambdatestService');\nconst logger = require('./logger').getLogger('testim-desired-capabilities-builder');\n\nconst LOG_LEVEL = config.WEBDRIVER_DEBUG ? 'verbose' : 'silent';\nconst CONTENT_SETTING = {\n CONTENT_SETTING_DEFAULT: 0,\n CONTENT_SETTING_ALLOW: 1,\n CONTENT_SETTING_BLOCK: 2,\n CONTENT_SETTING_ASK: 3,\n};\nconst DEFAULT_CHROME_OPTIONS_ARGS = [\n '--disable-popup-blocking',\n '--ignore-gpu-blacklist',\n '--auto-select-desktop-capture-source=Entire screen',\n '--ignore-certificate-errors',\n // Disable built-in Google Translate service\n '--disable-features=TranslateUI',\n // Disable various background network services, including extension updating,\n // safe browsing service, upgrade detector, translate, UMA\n '--disable-background-networking',\n // Disable syncing to a Google account\n '--disable-sync',\n // Disable reporting to UMA, but allows for collection\n '--metrics-recording-only',\n // Disable installation of default apps on first run\n '--disable-default-apps',\n // Mute any audio\n '--mute-audio',\n // Skip first run wizards\n '--no-first-run',\n '--disable-back-forward-cache',\n];\n\nconst getHash = (...str) => crypto.createHash('sha256').update(str.join('')).digest('hex');\n\nconst isDFGrid = (gridInfo) => gridInfo.type === gridTypes.DEVICE_FARM || (gridInfo.type === gridTypes.HYBRID && gridInfo.provider === 'devicefarm');\n\nconst convertToNewCapabilitiesFormat = (desiredCapabilities) => {\n if (desiredCapabilities.hasOwnProperty('version')) {\n desiredCapabilities.browserVersion = desiredCapabilities.version;\n delete desiredCapabilities.version;\n }\n if (desiredCapabilities.hasOwnProperty('platform')) {\n desiredCapabilities.platformName = desiredCapabilities.platform;\n delete desiredCapabilities.platform;\n }\n if (desiredCapabilities.hasOwnProperty('acceptSslCerts')) {\n desiredCapabilities.acceptInsecurecerts = desiredCapabilities.acceptSslCerts;\n delete desiredCapabilities.acceptSslCerts;\n }\n if (desiredCapabilities.hasOwnProperty('unexpectedAlertBehaviour')) {\n desiredCapabilities.unhandledPromptBehavior = desiredCapabilities.unexpectedAlertBehaviour;\n delete desiredCapabilities.unexpectedAlertBehaviour;\n }\n};\n\nfunction buildSafariOptions(opts, browserName) {\n const safariOptions = { browserName: 'safari' };\n\n if (browserName === 'safari technology preview') {\n safariOptions['safari.options'] = { technologyPreview: true };\n }\n\n Object.assign(opts.desiredCapabilities, safariOptions);\n return opts;\n}\n\nfunction readFileToBase64(fileLocation) {\n return fs.readFileSync(fileLocation, { encoding: 'base64' });\n}\n\nfunction setCustomExtension(customExtensionLocalLocation, extensions, lambdatestService) {\n if (lambdatestService?.isLambdatestRun() && utils.isURL(customExtensionLocalLocation)) {\n return;\n }\n\n if (customExtensionLocalLocation) {\n const extStr = readFileToBase64(customExtensionLocalLocation);\n // for debugging purpose should be removed in the future\n logger.info(`adding extension: custom, path: ${customExtensionLocalLocation} length: ${extStr.length} hash: ${getHash(extStr)} current extension count: ${extensions.length}`);\n extensions.push(extStr);\n }\n}\n\nfunction setTestimExtension(browserOptions, extensions, args, predefinedTestimExtension, lambdatestService) {\n if (lambdatestService?.isLambdatestRun()) {\n return;\n }\n\n if (browserOptions.ext || predefinedTestimExtension) {\n const extFromOptions = typeof (browserOptions.ext) === 'string' ? browserOptions.ext : (`${__dirname}/..`);\n const ext = predefinedTestimExtension || extFromOptions;\n const loadExt = `--load-extension=${ext}`;\n logger.info(`adding extension: testim unpacked , path: ${ext}`);\n args.push(loadExt);\n return;\n }\n\n const zipFileSuffix = browserOptions.canary ? '-master.zip' : '.zip';\n const filePath = path.join(process.cwd(), `testim-headless${zipFileSuffix}`);\n const extStr = readFileToBase64(filePath);\n // for debugging purpose should be removed in the future\n logger.info(`adding extension: testim zipped, path: ${filePath} length: ${extStr.length} hash: ${getHash(extStr)} current extension count: ${extensions.length}`);\n extensions.push(extStr);\n}\n\nfunction _buildChromiumOptions(opts, browserOptions, testRunConfig, customExtensionLocalLocation, gridInfo, predefinedTestimExtension, lambdatestService) {\n // * Make sure to add any referenced attributes of the function arguments to the hash created in buildChromiumOptions * //\n\n const browserName = testRunConfig.seleniumName || testRunConfig.browserValue;\n const extensions = [];\n const args = [...DEFAULT_CHROME_OPTIONS_ARGS];\n if (browserOptions.headless) {\n args.push('--headless');\n }\n //sauce labs issues - if you set w3c = true sauce search the data in capabilities instead of desiredCapabilities\n const isW3CMode = () => browserOptions.mode !== CLI_MODE.EXTENSION;\n const chromiumOptions = {\n prefs: {\n 'profile.default_content_setting_values.popups': CONTENT_SETTING.CONTENT_SETTING_ALLOW,\n // allow multiple download files\n 'profile.default_content_setting_values.automatic_downloads': CONTENT_SETTING.CONTENT_SETTING_ALLOW,\n // disable pdf viewer\n 'plugins.always_open_pdf_externally': true,\n // unintuitively stops download protection (\"Dangerous file blocked\")\n // if needed in the future, consider adding --safebrowsing-disable-download-protection or --safebrowsing-disable-extension-blacklist to the chrome flags\n 'safebrowsing.enabled': true,\n 'profile.content_settings.exceptions.clipboard': {\n '[*.],*': { last_modified: Date.now(), setting: 1 },\n },\n 'download.allow_office_viewer_for_download': false,\n },\n w3c: isW3CMode(),\n };\n\n if (isDFGrid(gridInfo)) {\n chromiumOptions.prefs['download.default_directory'] = 'C:\\\\Users\\\\testnode';\n chromiumOptions.w3c = true;\n opts.desiredCapabilities.version = 'latest-1';\n opts.desiredCapabilities['aws:maxDurationSecs'] = 2400; // Maximum duration of the session before it is forcibly closed, in seconds. Range: 180 to 2400.\n opts.desiredCapabilities['aws:idleTimeoutSecs'] = 60; // Maximum delay between WebDriver commands before the session is forcibly closed. Range: 30 to 900.\n }\n\n if (isDFGrid(gridInfo) && browserName === 'MicrosoftEdge') {\n opts.desiredCapabilities['ms:edgeChromium'] = true;\n }\n\n if (browserOptions.chromeExtraPrefs) {\n Object.assign(chromiumOptions.prefs, browserOptions.chromeExtraPrefs);\n }\n\n if (browserOptions.chromeExtraArgs) {\n browserOptions.chromeExtraArgs.forEach(arg => args.push(`--${arg}`));\n }\n\n if (browserOptions.chromeBlockLocation) {\n chromiumOptions.prefs['profile.default_content_setting_values.geolocation'] = CONTENT_SETTING.CONTENT_SETTING_BLOCK;\n }\n\n if (browserOptions.chromeUserDataDir) {\n args.push(`--user-data-dir=${browserOptions.chromeUserDataDir}`);\n }\n\n if (browserOptions.projectData?.defaults?.disableChromiumGpu) {\n args.push('--disable-gpu');\n }\n\n Object.assign(opts.desiredCapabilities, { browserName });\n\n function setMobileEmulationSettings() {\n if (testRunConfig.mobileEmulation) {\n chromiumOptions.mobileEmulation = {\n deviceMetrics: {\n width: testRunConfig.mobileEmulation.device.width,\n height: testRunConfig.mobileEmulation.device.height + mobileWeb.MOBILE_WEB_REMOTE_RUN_HEADER_SPACING,\n pixelRatio: testRunConfig.mobileEmulation.device.deviceScaleFactor,\n },\n userAgent: testRunConfig.mobileEmulation.userAgent,\n };\n }\n }\n\n setMobileEmulationSettings();\n\n setCustomExtension(customExtensionLocalLocation, extensions, lambdatestService);\n if (browserOptions.mode === CLI_MODE.EXTENSION) {\n setTestimExtension(browserOptions, extensions, args, predefinedTestimExtension, lambdatestService);\n }\n if (extensions.length > 0) {\n chromiumOptions.extensions = extensions;\n }\n\n if (browserOptions.disableCookiesSameSiteNoneRequiresSecure) {\n chromiumOptions.localState = {\n 'browser.enabled_labs_experiments': [\n 'cookies-without-same-site-must-be-secure@2',\n ],\n };\n }\n\n chromiumOptions.args = args;\n const optionsKey = { MicrosoftEdge: 'edgeOptions', chrome: 'chromeOptions' }[browserName];\n const vendor = { MicrosoftEdge: 'ms', chrome: 'goog' }[browserName];\n\n if (LambdatestService.isLambdatestGrid(gridInfo)) {\n delete chromiumOptions.w3c;\n }\n\n if (browserOptions.oldCapabilities && gridInfo.type !== 'testimEnterprise' && !lambdatestService?.isLambdatestRun()) {\n opts.desiredCapabilities[optionsKey] = chromiumOptions;\n }\n\n if (browserOptions.w3cCapabilities || gridInfo.type === 'testimEnterprise') {\n opts.desiredCapabilities[`${vendor}:${optionsKey}`] = chromiumOptions;\n }\n\n return opts;\n}\n\nconst buildChromiumOptions = _.memoize(_buildChromiumOptions, (opts, browserOptions, testRunConfig, customExtensionLocalLocation, gridInfo, predefinedTestimExtension) => {\n // Only hash the attributes which are used in _buildChromiumOptions, some others (which are irrelevant) change and invalidate the hash\n const stringOptsDesiredCapabilities = JSON.stringify(opts.desiredCapabilities);\n const stringBrowserOptions = JSON.stringify(_.omit(browserOptions, 'runParams'));\n const stringTestRunConfig = JSON.stringify(testRunConfig);\n const stringGridInfoType = JSON.stringify(gridInfo.type);\n return getHash(stringOptsDesiredCapabilities, stringBrowserOptions, stringTestRunConfig, customExtensionLocalLocation, stringGridInfoType, predefinedTestimExtension);\n});\n\n\n// list of content type that Firefox browser will not open the download popup and start the download automaticlly into Downloads folder\nconst FIREFOX_FILE_NEVER_ASK = [\n 'application/force-download',\n 'application/pdf',\n 'application/x-pdf',\n 'application/acrobat',\n 'applications/vnd.pdf',\n 'text/pdf',\n 'text/x-pdf',\n 'application/vnd.cups-pdf',\n];\n\nfunction buildFirefoxOptions(opts, browserOptions, lambdatestService) {\n const fireFoxPrefs = {\n 'pdfjs.disabled': true, //disable pdf viewer. Otherwise, the pdf viewer takes over when we download a pdf.\n };\n\n if (featureFlags.flags.autoSaveDownloadFileFireFox.isEnabled()) {\n Object.assign(fireFoxPrefs, {\n 'browser.helperApps.neverAsk.saveToDisk': FIREFOX_FILE_NEVER_ASK.join(','),\n 'browser.helperApps.neverAsk.openFile': FIREFOX_FILE_NEVER_ASK.join(','),\n 'browser.helperApps.alwaysAsk.force': false,\n 'browser.download.manager.useWindow': false, // A boolean value indicating whether or not to use the Downloads window (true) or display download status in the status bar (false) in the browser window.\n 'browser.download.manager.focusWhenStarting': false, // A boolean value that indicates whether or not to focus the Download Manager window when a download begins.\n 'browser.download.manager.alertOnEXEOpen': false, // A boolean value that indicates whether the UI Should alert the user about the dangers of opening (executing) an EXE. The user may check a \"don't ask\" box on the UI to toggle this.\n 'browser.download.manager.showWhenStarting': false, // A boolean value that indicates whether or not to show the Downloads window when a download begins.\n 'browser.download.manager.closeWhenDone': true, // As boolean value indicating whether or not the Downloads window should close automatically when downloads are completed.\n 'browser.download.manager.showAlertOnComplete': false, // A boolean value that indicates whether or not an alert should be shown when downloads complete.\n });\n }\n\n Object.assign(opts.desiredCapabilities, {\n acceptInsecureCerts: true,\n browserName: 'firefox',\n marionette: true,\n 'moz:firefoxOptions': {\n prefs: fireFoxPrefs,\n },\n }, lambdatestService.isLambdatestRun() ? { enableCustomTranslation: true } : {});\n\n if (browserOptions.disableCookiesSameSiteNoneRequiresSecure) {\n opts.desiredCapabilities['moz:firefoxOptions'].prefs['network.cookie.sameSite.noneRequiresSecure'] = false;\n }\n\n if (browserOptions.mode === CLI_MODE.EXTENSION) {\n if (browserOptions.ext) {\n opts.desiredCapabilities.testim_firefox_profile = browserOptions.ext;\n } else {\n const zipFileSuffix = browserOptions.canary ? '-master.zip' : '.zip';\n const filePath = path.join(process.cwd(), `testim-firefox-profile${zipFileSuffix}`);\n opts.desiredCapabilities.firefox_profile = readFileToBase64(filePath);\n }\n }\n\n\n // more interesting options\n // https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Headless_mode#Debugging_headless_Firefox\n if (browserOptions.headless) {\n if (!opts.desiredCapabilities['moz:firefoxOptions'].args) {\n opts.desiredCapabilities['moz:firefoxOptions'].args = [];\n }\n opts.desiredCapabilities['moz:firefoxOptions'].args.push('-headless');\n }\n\n return opts;\n}\n\nfunction buildSaucelabs(browserOptions, testName, testRunConfig) {\n const { saucelabs } = browserOptions;\n if (saucelabs?.username && saucelabs.accessKey) {\n if (testRunConfig) {\n testRunConfig.sl.version = testRunConfig.browserValue === 'safari' ? testRunConfig.sl.safari_version : testRunConfig.sl.version;\n testRunConfig.sl.appiumVersion = saucelabs.appiumVersion || testRunConfig.sl.appiumVersion;\n return Object.assign({}, testRunConfig.sl, saucelabs, { name: testName });\n }\n return Object.assign({}, saucelabs, { name: testName });\n }\n return {};\n}\n\nfunction buildBrowserstack(browserOptions, testName, testRunConfig) {\n if (!_.isEmpty(browserOptions.browserstack)) {\n if (testRunConfig) {\n testRunConfig.bs.browser_version = testRunConfig.browserValue === 'safari' ? testRunConfig.bs.safari_version : testRunConfig.bs.browser_version;\n if (testRunConfig.browserValue === 'safari' && testRunConfig.bs.safari_version === '10') {\n Object.assign(testRunConfig.bs, { 'safari.options': { technologyPreview: true } });\n }\n return Object.assign({}, testRunConfig.bs, browserOptions.browserstack, { name: testName });\n }\n return Object.assign({}, browserOptions.browserstack, { name: testName });\n }\n return {};\n}\n\nfunction buildPerfecto(browserOptions) {\n if (browserOptions.perfecto) {\n return browserOptions.perfecto;\n }\n return {};\n}\n\nfunction buildExperitest(browserOptions, browser, sessionTimeoutSec) {\n if (browserOptions.experitestToken) {\n const isSafari = browser === 'safari';\n return {\n accessKey: browserOptions.experitestToken,\n browserVersion: 'latest',\n platformName: isSafari ? 'MAC' : 'WIN10',\n //Workaround to Experitest bug in take screenshot in Safari browser\n seleniumScreenshot: isSafari,\n newSessionWaitTimeout: sessionTimeoutSec,\n };\n }\n\n return {};\n}\n\nfunction buildHeaders(browserOptions, gridInfo = {}) {\n const { gridData = {}, gridUsername, gridPassword } = browserOptions;\n const username = gridUsername || gridData.user || gridInfo.user;\n const password = gridPassword || gridData.key || gridInfo.key;\n\n const headers = {};\n if (username && password) {\n headers.Authorization = utils.buildBasicHeader(username, password);\n }\n\n return headers;\n}\n\nfunction buildSeleniumOptions(browserOptions, testName, testRunConfig, gridInfo, customExtensionLocalLocation, executionId, testResultId, lambdatestService = null) {\n if (gridInfo.mode === 'local') {\n const extensions = [];\n const args = [...DEFAULT_CHROME_OPTIONS_ARGS];\n const binaryLocation = {};\n\n if (browserOptions.headless) {\n args.push('--headless');\n }\n\n if (browserOptions.silentDebuggerExtensionApi) {\n args.push('--silent-debugger-extension-api');\n }\n\n if (browserOptions.remoteDebuggingPort !== undefined) {\n args.push(`--remote-debugging-port=${browserOptions.remoteDebuggingPort}`);\n }\n\n if (browserOptions.chromeExtraArgs) {\n browserOptions.chromeExtraArgs.forEach(arg => args.push(`--${arg}`));\n }\n\n if (browserOptions.chromeBinaryLocation) {\n binaryLocation.binary = browserOptions.chromeBinaryLocation;\n }\n\n if (browserOptions.mode !== 'selenium') {\n setTestimExtension(browserOptions, extensions, args, null, lambdatestService);\n }\n setCustomExtension(customExtensionLocalLocation, extensions, lambdatestService);\n\n return {\n logLevel: LOG_LEVEL,\n desiredCapabilities: {\n chromeOptions: {\n args,\n extensions,\n ...binaryLocation,\n },\n browserName: 'chrome',\n },\n host: 'localhost',\n port: 9515, // default chromedriver port\n };\n }\n\n const { driverRequestTimeout, driverRequestRetries } = browserOptions;\n let opts = {\n host: gridInfo.host,\n port: gridInfo.port || 4444,\n path: gridInfo.path || '/wd/hub',\n protocol: gridInfo.protocol || 'http',\n logLevel: LOG_LEVEL,\n connectionRetryTimeout: driverRequestTimeout,\n connectionRetryCount: driverRequestRetries,\n getSessionTimeout: Math.max(lambdatestService.getSessionTimeout, browserOptions.getSessionTimeout),\n getSessionRetries: lambdatestService.getSessionRetries || browserOptions.getSessionRetries,\n deprecationWarnings: false,\n desiredCapabilities: {\n javascriptEnabled: true,\n locationContextEnabled: true,\n handlesAlerts: true,\n rotatable: true,\n acceptSslCerts: true,\n unexpectedAlertBehaviour: 'accept', // What the browser should do with an unhandled alert before throwing out the UnhandledAlertException - automatically click on accept\n nativeEvents: true,\n testName,\n },\n };\n\n const headers = buildHeaders(browserOptions, gridInfo);\n if (!_.isEmpty(headers)) {\n opts.headers = headers;\n }\n\n if (isDFGrid(gridInfo)) {\n browserOptions.oldCapabilities = false;\n browserOptions.w3cCapabilities = true;\n opts.desiredCapabilities = {\n unexpectedAlertBehaviour: 'accept',\n };\n }\n\n if (browserOptions.proxyForGrid) {\n opts.agent = new global.ProxyAgent(global.proxyUri);\n }\n\n if (browserOptions.disableNativeEvents) {\n opts.desiredCapabilities.nativeEvents = false;\n }\n\n if (gridInfo.user && gridInfo.key) {\n if (gridInfo.type === 'saucelabs') {\n browserOptions.saucelabs = browserOptions.saucelabs || {};\n browserOptions.saucelabs.username = browserOptions.saucelabs.username || gridInfo.user;\n browserOptions.saucelabs.accessKey = browserOptions.saucelabs.accessKey || gridInfo.key;\n }\n\n if (gridInfo.type === 'browserstack') {\n browserOptions.browserstack = browserOptions.browserstack || {};\n browserOptions.browserstack['browserstack.user'] = browserOptions.browserstack['browserstack.user'] || gridInfo.user;\n browserOptions.browserstack['browserstack.key'] = browserOptions.browserstack['browserstack.key'] || gridInfo.key;\n }\n }\n\n if (gridInfo.key && gridInfo.type === 'perfecto') {\n browserOptions.perfecto.securityToken = gridInfo.key;\n }\n\n const browserTimeoutSec = Number(browserOptions.browserTimeout / 1000);\n const browser = browserOptions.browser || testRunConfig?.browserValue;\n\n _.merge(\n opts.desiredCapabilities,\n buildSaucelabs(browserOptions, testName, testRunConfig),\n buildBrowserstack(browserOptions, testName, testRunConfig),\n buildPerfecto(browserOptions, testName, testRunConfig),\n buildExperitest(browserOptions, browser, browserTimeoutSec),\n lambdatestService?.getCapabilities(browserOptions, browser, executionId, testResultId, testName),\n );\n\n let predefinedTestimExtension = null;\n if (!browserOptions.ext && !browserOptions.extensionPath && gridInfo.host?.endsWith('.testim.io') && !browserOptions.canary && browserOptions.mode === CLI_MODE.EXTENSION) {\n if (browser === 'chrome') {\n predefinedTestimExtension = '/opt/testim-headless';\n } else if (browser === 'edge-chromium') {\n predefinedTestimExtension = 'C:/selenium/testim-headless';\n }\n }\n\n if (gridInfo.host?.endsWith('.testim.io') && browser === 'edge-chromium') {\n opts.desiredCapabilities.version = '83'; // Need to match GGR filter\n }\n\n switch (browser) {\n case 'chrome':\n case 'edge-chromium':\n opts = buildChromiumOptions(opts, browserOptions, testRunConfig, customExtensionLocalLocation, gridInfo, predefinedTestimExtension, lambdatestService);\n break;\n case 'firefox':\n opts = buildFirefoxOptions(opts, browserOptions, lambdatestService);\n break;\n case 'safari':\n case 'safari technology preview':\n opts = buildSafariOptions(opts, browser);\n break;\n default:\n break;\n }\n\n _.merge(opts.desiredCapabilities, browserOptions.seleniumCapsFileContent);\n\n try {\n /**\n * Targeted custom capabilities can be added to the desired capabilities object via the addCustomCapabilities FF.\n * No targeting: { selenium_version: '3.141.59' }\n * One level targeting (either grid provider, host, browser name or browser version): { \"devicefarm\": { selenium_version: '3.141.59' } }\n * Two level targeting: { \"internet explorer\": { \"11\": { selenium_version: '3.141.59' } } }\n */\n const hostToProvider = {\n 'hub.lambdatest.com': 'lambdatest',\n [featureFlags.flags.publicGridURL.getValue()]: 'testim',\n 'testgrid-devicefarm.us-west-2.amazonaws.com': 'devicefarm',\n };\n const byGrid = (capabilities) => capabilities[gridInfo.provider] || capabilities[opts.host] || capabilities[hostToProvider[opts.host]];\n const getTargetingGroup = capabilities =>\n byGrid(capabilities) ||\n capabilities[opts.desiredCapabilities?.browserName] ||\n capabilities[opts.desiredCapabilities?.version] ||\n capabilities ||\n {};\n const capabilities = JSON.parse(featureFlags.flags.addCustomCapabilities.getValue() || '{}');\n const customCapabilities = getTargetingGroup(getTargetingGroup(capabilities));\n\n if (Object.keys(customCapabilities).length) {\n logger.info(`Adding custom capabilities: ${JSON.stringify(customCapabilities)}`);\n Object.assign(opts.desiredCapabilities, customCapabilities);\n }\n } catch (error) {\n logger.error('Failed to load custom capabilities', {\n error,\n customCapabilities: featureFlags.flags.addCustomCapabilities.getValue(),\n });\n }\n\n if (isDFGrid(gridInfo) && opts.desiredCapabilities && !opts.capabilities) {\n convertToNewCapabilitiesFormat(opts.desiredCapabilities);\n opts.capabilities = { alwaysMatch: opts.desiredCapabilities, firstMatch: [{}] };\n delete opts.desiredCapabilities;\n }\n\n return opts;\n}\n\n//testRunConfig not in used for now\nfunction buildAppiumOptions({ projectType, gridInfo, testRunConfig, nativeApp, options, appPath, androidActivityWait }) {\n const { deviceModel, osVersion, deviceUdid } = options;\n const headspinSelector = {};\n\n if (!nativeApp && !appPath) {\n throw Error('missing mobile app!');\n }\n if (gridInfo.type !== gridTypes.TESTIM_HEADSPIN) {\n throw Error('unsupported grid was detected please make sure to select supported mobile grid');\n }\n const connection = {\n protocol: gridInfo.protocol || 'https',\n hostname: gridInfo.host,\n port: gridInfo.port,\n path: `/v0/${gridInfo.accessToken}/wd/hub`,\n logLevel: options.appiumLogLevel,\n // connectionRetryTimeout: 900000, -- not used for now\n };\n //TODO: check if more caps should be defined as default\n let appCaps = {\n 'headspin:capture': true,\n 'appium:autoAcceptAlerts': true,\n 'appium:noReset': true,\n };\n switch (projectType) {\n case 'ios':\n appCaps = {\n ...appCaps,\n platformName: 'iOS',\n 'appium:automationName': 'XCUITest',\n ...(nativeApp && { 'appium:bundleId': nativeApp.id }),\n ...(appPath && {\n 'appium:app': appPath,\n }),\n };\n break;\n case 'android':\n appCaps = {\n ...appCaps,\n platformName: 'Android',\n 'appium:automationName': 'UiAutomator2',\n 'appium:appWaitActivity': androidActivityWait,\n ...(nativeApp && {\n 'appium:appPackage': nativeApp.id || nativeApp.packageName,\n 'appium:appActivity': nativeApp.activity,\n }),\n ...(appPath && {\n 'appium:app': appPath,\n }),\n };\n break;\n default:\n throw Error(`unsupported mobile project ${projectType}`);\n }\n if (deviceModel) {\n headspinSelector.model = deviceModel;\n }\n if (osVersion) {\n headspinSelector.os_version = osVersion;\n }\n if (deviceUdid) {\n headspinSelector.device_id = deviceUdid;\n delete headspinSelector.model;\n delete headspinSelector.os_version;\n }\n if (!_.isEmpty(headspinSelector)) {\n appCaps['headspin:selector'] = headspinSelector;\n }\n return {\n ...connection,\n desiredCapabilities: appCaps,\n capabilities: appCaps,\n };\n}\n\nmodule.exports = {\n buildSeleniumOptions,\n buildAppiumOptions,\n\n};\n","/*\n * Copyright (C) 2017 Apple Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS\n * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// https://github.com/webdriverio/webdriverio/blob/master/packages/webdriverio/src/scripts/isElementDisplayed.js\n\n/**\n * check if element is visible\n * @param {HTMLElement} element element to check\n * @return {Boolean} true if element is within viewport\n */\nmodule.exports = function isElementDisplayed(element) {\n function nodeIsElement(node) {\n if (!node) {\n return false\n }\n\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n return true\n\n default:\n return false\n }\n }\n\n function parentElementForElement(element) {\n if (!element) {\n return null\n }\n\n return enclosingNodeOrSelfMatchingPredicate(element.parentNode, nodeIsElement)\n }\n\n function enclosingNodeOrSelfMatchingPredicate(targetNode, predicate) {\n for (let node = targetNode; node && node !== targetNode.ownerDocument; node = node.parentNode)\n if (predicate(node)) {\n return node\n }\n\n return null\n }\n\n function enclosingElementOrSelfMatchingPredicate(targetElement, predicate) {\n for (let element = targetElement; element && element !== targetElement.ownerDocument; element = parentElementForElement(element))\n if (predicate(element)) {\n return element\n }\n\n return null\n }\n\n function cascadedStylePropertyForElement(element, property) {\n if (!element || !property) {\n return null\n }\n // if document-fragment, skip it and use element.host instead. This happens\n // when the element is inside a shadow root.\n // window.getComputedStyle errors on document-fragment.\n if (element instanceof DocumentFragment) {\n element = element.host\n }\n\n let computedStyle = window.getComputedStyle(element)\n let computedStyleProperty = computedStyle.getPropertyValue(property)\n if (computedStyleProperty && computedStyleProperty !== 'inherit') {\n return computedStyleProperty\n }\n\n // Ideally getPropertyValue would return the 'used' or 'actual' value, but\n // it doesn't for legacy reasons. So we need to do our own poor man's cascade.\n // Fall back to the first non-'inherit' value found in an ancestor.\n // In any case, getPropertyValue will not return 'initial'.\n\n // FIXME: will this incorrectly inherit non-inheritable CSS properties?\n // I think all important non-inheritable properties (width, height, etc.)\n // for our purposes here are specially resolved, so this may not be an issue.\n // Specification is here: https://drafts.csswg.org/cssom/#resolved-values\n let parentElement = parentElementForElement(element)\n return cascadedStylePropertyForElement(parentElement, property)\n }\n\n function elementSubtreeHasNonZeroDimensions(element) {\n let boundingBox = element.getBoundingClientRect()\n if (boundingBox.width > 0 && boundingBox.height > 0) {\n return true\n }\n\n // Paths can have a zero width or height. Treat them as shown if the stroke width is positive.\n if (element.tagName.toUpperCase() === 'PATH' && boundingBox.width + boundingBox.height > 0) {\n let strokeWidth = cascadedStylePropertyForElement(element, 'stroke-width')\n return !!strokeWidth && (parseInt(strokeWidth, 10) > 0)\n }\n\n let cascadedOverflow = cascadedStylePropertyForElement(element, 'overflow')\n if (cascadedOverflow === 'hidden') {\n return false\n }\n\n // If the container's overflow is not hidden and it has zero size, consider the\n // container to have non-zero dimensions if a child node has non-zero dimensions.\n return Array.from(element.childNodes).some((childNode) => {\n if (childNode.nodeType === Node.TEXT_NODE) {\n return true\n }\n\n if (nodeIsElement(childNode)) {\n return elementSubtreeHasNonZeroDimensions(childNode)\n }\n\n return false\n })\n }\n\n function elementOverflowsContainer(element) {\n let cascadedOverflow = cascadedStylePropertyForElement(element, 'overflow')\n if (cascadedOverflow !== 'hidden') {\n return false\n }\n\n // FIXME: this needs to take into account the scroll position of the element,\n // the display modes of it and its ancestors, and the container it overflows.\n // See Selenium's bot.dom.getOverflowState atom for an exhaustive list of edge cases.\n return true\n }\n\n function isElementSubtreeHiddenByOverflow(element) {\n if (!element) {\n return false\n }\n\n if (!elementOverflowsContainer(element)) {\n return false\n }\n\n if (!element.childNodes.length) {\n return false\n }\n\n // This element's subtree is hidden by overflow if all child subtrees are as well.\n return Array.from(element.childNodes).every((childNode) => {\n // Returns true if the child node is overflowed or otherwise hidden.\n // Base case: not an element, has zero size, scrolled out, or doesn't overflow container.\n // Visibility of text nodes is controlled by parent\n if (childNode.nodeType === Node.TEXT_NODE) {\n return false\n }\n if (!nodeIsElement(childNode)) {\n return true\n }\n\n if (!elementSubtreeHasNonZeroDimensions(childNode)) {\n return true\n }\n\n // Recurse.\n return isElementSubtreeHiddenByOverflow(childNode)\n })\n }\n // walk up the tree testing for a shadow root\n function isElementInsideShadowRoot(element) {\n if (!element) {\n return false\n }\n if (element.parentNode && element.parentNode.host) {\n return true\n }\n return isElementInsideShadowRoot(element.parentNode)\n }\n\n // This is a partial reimplementation of Selenium's \"element is displayed\" algorithm.\n // When the W3C specification's algorithm stabilizes, we should implement that.\n // If this command is misdirected to the wrong document (and is NOT inside a shadow root), treat it as not shown.\n if (!isElementInsideShadowRoot(element) && !document.contains(element)) {\n return false\n }\n\n // Special cases for specific tag names.\n switch (element.tagName.toUpperCase()) {\n case 'BODY':\n return true\n\n case 'SCRIPT':\n case 'NOSCRIPT':\n return false\n\n case 'OPTGROUP':\n case 'OPTION': {\n // Option/optgroup are considered shown if the containing <select> is shown.\n let enclosingSelectElement = enclosingNodeOrSelfMatchingPredicate(element, (e) => e.tagName.toUpperCase() === 'SELECT')\n return isElementDisplayed(enclosingSelectElement)\n }\n case 'INPUT':\n // <input type=\"hidden\"> is considered not shown.\n if (element.type === 'hidden') {\n return false\n }\n break\n // case 'MAP':\n // FIXME: Selenium has special handling for <map> elements. We don't do anything now.\n\n default:\n break\n }\n\n if (cascadedStylePropertyForElement(element, 'visibility') !== 'visible') {\n return false\n }\n\n let hasAncestorWithZeroOpacity = !!enclosingElementOrSelfMatchingPredicate(element, (e) => {\n return Number(cascadedStylePropertyForElement(e, 'opacity')) === 0\n })\n let hasAncestorWithDisplayNone = !!enclosingElementOrSelfMatchingPredicate(element, (e) => {\n return cascadedStylePropertyForElement(e, 'display') === 'none'\n })\n if (hasAncestorWithZeroOpacity || hasAncestorWithDisplayNone) {\n return false\n }\n\n if (!elementSubtreeHasNonZeroDimensions(element)) {\n return false\n }\n\n if (isElementSubtreeHiddenByOverflow(element)) {\n return false\n }\n\n return true\n}\n","function isOldProtocol(err) {\n return (\n (err.message && err.message.match(/Command not found/)) ||\n err.message === 'HTTP method not allowed' ||\n err.message === 'Unknown error' ||\n (err.message && err.message.match(/Unknown timeout type/)) ||\n (err.seleniumStack && err.seleniumStack.type === 'UnknownCommand') ||\n (err.message && err.message.match(/did not match a known command/)) ||\n (err.message && err.message.match(/Server returned HTTP response code: 405 for URL/)) ||\n (err.seleniumStack && err.seleniumStack.message === 'The arguments passed to a command are either invalid or malformed.') ||\n err.message.match(/Invalid timeout type specified: ms/)\n );\n}\n\nfunction encodeForSafari(url, isSafari, logger) {\n if (!isSafari || !url) {\n return url;\n }\n\n // don't touch the URL if it has %. Technically incorrect (% alone breaks Safari),\n // but otherwise we can break other people's URLs. Replace spaces because it's safe.\n if (url.includes('%')) {\n return url.replace(/ /g, '%20');\n }\n\n try {\n const isAlreadyEncoded = decodeURI(url) !== url;\n if (isAlreadyEncoded) {\n return url;\n }\n return encodeURI(url);\n } catch (err) {\n if (logger) {\n logger.warn('tried to encode url but failed', { err, url });\n }\n return url;\n }\n}\n\nmodule.exports = { isOldProtocol, encodeForSafari };\n","'use strict';\n\nconst webdriverio = require('@testim/webdriverio');\nconst Queue = require('promise-queue');\nconst config = require('../commons/config');\nconst { UNICODE_CHARACTERS, W3C_ELEMENT_ID } = require('./constants');\nconst isElementDisplayed = require('./scripts/isElementDisplayed');\nconst logger = require('../commons/logger').getLogger('WebDriverApi');\nconst { isOldProtocol, encodeForSafari } = require('./webDriverUtils');\nconst { extractElementId } = require('../utils');\nconst { SELENIUM_PERF_MARKS } = require('../commons/SeleniumPerfStats');\n\nQueue.configure(Promise);\nconst perf = require('../commons/performance-logger');\n\nconst getViewportSizeHelper = function () {\n return {\n screenWidth: Math.floor(window.innerWidth || 0),\n screenHeight: Math.floor(window.innerHeight || 0),\n };\n};\n\nclass WebdriverioWebDriverApi {\n constructor() {\n this.w3cRequests = {};\n }\n\n windowHandleMaximize() {\n return this.addToQueue(() => this.client.windowHandleMaximize().then(result => ({\n height: result.value.height,\n width: result.value.width,\n })));\n }\n\n rejectWithLog(err, func) {\n const { testName, testResultId } = this;\n const crashingFunc = func ? func.toString().substr(0, 2000) : '';\n logger.warn('error from selenium', {\n err, testResultId, testName, crashingFunc,\n });\n return Promise.reject(err);\n }\n\n initQueueRequests() {\n let maxConcurrent = Infinity;\n if (this.isAndroid()) {\n maxConcurrent = 1;\n }\n if (typeof config.REQUESTS_QUEUE_SIZE !== 'undefined') {\n maxConcurrent = config.REQUESTS_QUEUE_SIZE;\n }\n const maxQueue = Infinity;\n this.queue = new Queue(maxConcurrent, maxQueue);\n }\n\n /** @returns {Promise<any>} */\n addToQueue(func) {\n const perfId = this.seleniumPerfStats.markStart();\n return this.queue.add(func)\n .catch(err => this.rejectWithLog(err, func))\n .finally(() => this.seleniumPerfStats.markEnd(perfId));\n }\n\n async initClient(capabilities, testName, testResultId) {\n this.testName = testName;\n this.testResultId = testResultId;\n // silence warning regarding `buttonPress` being deprecated\n capabilities.deprecationWarnings = false;\n this.client = webdriverio.remote(capabilities);\n this.initQueueRequests();\n perf.log('right before addToQueue');\n const perfId = this.seleniumPerfStats.markStart(SELENIUM_PERF_MARKS.GET_BROWSER);\n try {\n await this.addToQueue(() => {\n logger.info('requesting browser', { testResultId, testName });\n perf.log('before this.client.init');\n return this.client.init();\n });\n perf.log('after client init');\n } finally {\n await this.seleniumPerfStats.markEnd(perfId, SELENIUM_PERF_MARKS.GET_BROWSER);\n }\n }\n\n get isMobile() {\n return this.client.isMobile;\n }\n\n getSessionId() {\n return this.client?.requestHandler?.sessionID;\n }\n\n isChrome() {\n return this.client.desiredCapabilities.browserName === 'chrome';\n }\n\n isChromium() {\n return this.isChrome() || this.isEdgeChromium();\n }\n\n isFirefox() {\n return this.client.desiredCapabilities.browserName === 'firefox';\n }\n\n isSafari() {\n return this.client.desiredCapabilities.browserName === 'safari' || this.client.desiredCapabilities.browserName === 'safari technology preview';\n }\n\n isAndroid() {\n return this.client.desiredCapabilities.platformName === 'Android';\n }\n\n isEdgeChromium() {\n return this.client.desiredCapabilities.browserName === 'MicrosoftEdge' && !this.client.desiredCapabilities._isOldEdge;\n }\n\n execute(...args) {\n return this.addToQueue(() => {\n let script = args.shift();\n\n /*!\n * parameter check\n */\n if ((typeof script !== 'string' && typeof script !== 'function')) {\n return Promise.reject(new Error('number or type of arguments don\\'t agree with execute protocol command'));\n }\n\n /*!\n * instances started as multibrowserinstance can't getting called with\n * a function parameter, therefor we need to check if it starts with \"function () {\"\n */\n if (typeof script === 'function') {\n script = `return (${script}).apply(null, arguments)`;\n }\n\n const decorateErrorWithExecutedScript = (err => {\n err.executedScript = script;\n throw err;\n });\n const newEndpoint = () => this.client.requestHandler.create('/session/:sessionId/execute/sync', {\n script,\n args,\n }).catch(decorateErrorWithExecutedScript);\n const oldEndpoint = () => this.client.requestHandler.create('/session/:sessionId/execute', { script, args })\n .catch(decorateErrorWithExecutedScript);\n\n if (this.w3cRequests.execute) {\n return newEndpoint();\n }\n\n return oldEndpoint()\n .catch(err => {\n /**\n * jsonwire command not supported try webdriver endpoint\n */\n if (isOldProtocol(err)) {\n this.w3cRequests.execute = true;\n return newEndpoint();\n }\n\n throw err;\n });\n });\n }\n\n /**\n * note that script received here must accept a callback, and call it when they finish running!\n * @param {...any} args - the first argument is a script, the others are the script arguments.\n */\n executeAsync(...args) {\n return this.addToQueue(() => {\n let script = args.shift();\n\n /*!\n * parameter check\n */\n if ((typeof script !== 'string' && typeof script !== 'function')) {\n return Promise.reject(new Error('number or type of arguments don\\'t agree with execute protocol command'));\n }\n\n /*!\n * instances started as multibrowserinstance can't getting called with\n * a function parameter, therefor we need to check if it starts with \"function () {\"\n */\n if (typeof script === 'function') {\n script = `return (${script}).apply(null, arguments)`;\n }\n\n const newEndpoint = () => this.client.requestHandler.create('/session/:sessionId/execute/async', {\n script,\n args,\n });\n const oldEndpoint = () => this.client.requestHandler.create('/session/:sessionId/execute_async', {\n script,\n args,\n });\n\n if (this.w3cRequests.executeAsync) {\n return newEndpoint();\n }\n\n return oldEndpoint()\n .catch(err => {\n /**\n * jsonwire command not supported try webdriver endpoint\n */\n if (isOldProtocol(err)) {\n this.w3cRequests.executeAsync = true;\n return newEndpoint();\n }\n\n throw err;\n });\n });\n }\n\n async executeCDP(command, parameters = {}) {\n if (!this.isChromium()) {\n return undefined;\n }\n const result = await this.client.requestHandler.create({\n path: '/session/:sessionId/chromium/send_command_and_get_result',\n method: 'POST',\n }, {\n cmd: command,\n params: parameters,\n });\n if (!result || !result.value || !result.value.targetInfos) {\n return [];\n }\n return result.value.targetInfos;\n }\n\n takeScreenshot() {\n const perfId = this.seleniumPerfStats.markStart(SELENIUM_PERF_MARKS.GET_SCREENSHOT);\n return this.addToQueue(() => this.client.screenshot())\n .finally(() => this.seleniumPerfStats.markEnd(perfId, SELENIUM_PERF_MARKS.GET_SCREENSHOT));\n }\n\n /**\n * @param {string} selector\n * @returns {Promise<{ value: HTMLElement }>}\n */\n getElementBySelector(selector) {\n return this.addToQueue(() => this.client.element(selector));\n }\n\n elementIdDisplayed(elementId) {\n return this.addToQueue(() => {\n const oldEndpoint = () => this.client.elementIdDisplayed(elementId);\n const newEndpoint = () => this.execute(isElementDisplayed, { ELEMENT: elementId, [W3C_ELEMENT_ID]: elementId });\n\n if (this.w3cRequests.elementIdDisplayed) {\n return newEndpoint();\n }\n\n return oldEndpoint()\n .catch(err => {\n /**\n * jsonwire command not supported try webdriver endpoint\n */\n if (isOldProtocol(err)) {\n this.w3cRequests.elementIdDisplayed = true;\n return newEndpoint();\n }\n\n throw err;\n });\n });\n }\n\n windowHandles() {\n return this.addToQueue(() => {\n const oldEndpoint = () => this.client.requestHandler.create('/session/:sessionId/window_handles');\n const newEndpoint = () => this.client.requestHandler.create('/session/:sessionId/window/handles');\n\n if (this.w3cRequests.windowHandles) {\n return newEndpoint();\n }\n\n return oldEndpoint()\n .catch(err => {\n /**\n * jsonwire command not supported try webdriver endpoint\n */\n if (isOldProtocol(err)) {\n this.w3cRequests.windowHandles = true;\n return newEndpoint();\n }\n\n throw err;\n });\n });\n }\n\n url(url) {\n return this.addToQueue(() => this.client.url(encodeForSafari(url, this.isSafari(), logger)));\n }\n\n reloadTab() {\n return this.addToQueue(() => this.client.refresh());\n }\n\n source() {\n return this.addToQueue(() => this.client.source());\n }\n\n timeouts(type, ms) {\n return this.addToQueue(() => {\n const oldEndpoint = () => this.client.requestHandler.create('/session/:sessionId/timeouts', {\n type,\n ms,\n });\n\n const newEndpoint = () => this.client.requestHandler.create('/session/:sessionId/timeouts', {\n [type]: ms,\n });\n\n if (this.w3cRequests.timeouts) {\n return newEndpoint();\n }\n\n return oldEndpoint()\n .catch(err => {\n if (isOldProtocol(err)) {\n this.w3cRequests.timeouts = true;\n return newEndpoint();\n }\n throw err;\n });\n });\n }\n\n scroll(xoffset, yoffset) {\n xoffset = typeof xoffset === 'number' ? xoffset : 0;\n yoffset = typeof yoffset === 'number' ? yoffset : 0;\n\n const scroll = function (x, y) {\n window.scrollTo(x, y);\n };\n\n return this.execute(scroll, xoffset, yoffset);\n }\n\n setValue(element, value) {\n return this.elementIdClear(extractElementId(element))\n .then(() => this.elementIdValue(extractElementId(element), value));\n }\n\n getViewportSize(prop) {\n return this.execute(getViewportSizeHelper).then((res) => {\n if (typeof prop === 'string' && prop.match(/(width|height)/)) {\n prop = `screen${prop.slice(0, 1).toUpperCase()}${prop.slice(1)}`;\n return res.value[prop];\n }\n\n return {\n width: res.value.screenWidth || 0,\n height: res.value.screenHeight || 0,\n };\n });\n }\n\n keys(value) {\n const checkUnicode = _value => (UNICODE_CHARACTERS.hasOwnProperty(_value) ? [UNICODE_CHARACTERS[_value]] : _value.split(''));\n\n let key = [];\n\n /**\n * replace key with corresponding unicode character\n */\n if (typeof value === 'string') {\n key = checkUnicode(value);\n } else if (value instanceof Array) {\n for (const charSet of value) {\n key = key.concat(checkUnicode(charSet));\n }\n } else {\n return Promise.reject(new Error('number or type of arguments don\\'t agree with keys protocol command'));\n }\n\n const oldEndpoint = () => this.client.requestHandler.create('/session/:sessionId/keys', { value: key });\n const newEndpoint = () => {\n const keyDownActions = key.map((_value) => ({ type: 'keyDown', value: _value }));\n const keyUpActions = key.map((_value) => ({ type: 'keyUp', value: _value }));\n\n return this.actions([{\n type: 'key',\n id: 'keys',\n actions: [...keyDownActions, ...keyUpActions],\n }]);\n };\n\n if (this.w3cRequests.keys) {\n return newEndpoint();\n }\n\n return this.addToQueue(() => oldEndpoint().catch(err => {\n /**\n * use W3C path if old path failed\n */\n if (isOldProtocol(err)) {\n this.w3cRequests.keys = true;\n return newEndpoint();\n }\n\n throw err;\n }));\n }\n\n elementIdValue(elementId, value) {\n return this.addToQueue(() => this.client.elementIdValue(elementId, value));\n }\n\n elementIdClear(elementId) {\n return this.addToQueue(() => this.client.elementIdClear(elementId));\n }\n\n submitForm(element) {\n return this.addToQueue(() => this.client.submit(extractElementId(element)));\n }\n\n buttonPress(button) {\n return this.addToQueue(() => this.client.buttonPress(button));\n }\n\n findElementAndPress(element, xOffset, yOffset, button) {\n return this.moveTo(extractElementId(element), xOffset, yOffset)\n .then(() => this.buttonPress(button));\n }\n\n rightClick(element, xOffset, yOffset) {\n return this.findElementAndPress(element, xOffset, yOffset, 'right');\n }\n\n leftClick(element, xOffset, yOffset) {\n return this.findElementAndPress(element, xOffset, yOffset, 'left');\n }\n\n elementIdClick(elementId) {\n return this.addToQueue(() => this.client.elementIdClick(elementId));\n }\n\n actions(actions) {\n return this.addToQueue(() => this.client.actions(actions));\n }\n\n doDoubleClick() {\n return this.addToQueue(() => this.client.doDoubleClick());\n }\n\n dragAndDrop(sourceSelector, destinationSelector) {\n return this.addToQueue(() => this.client.dragAndDrop(sourceSelector, destinationSelector));\n }\n\n buttonDown() {\n return this.addToQueue(() => this.client.buttonDown());\n }\n\n buttonUp() {\n return this.addToQueue(() => this.client.buttonUp());\n }\n\n moveTo(element, xoffset, yoffset) {\n const data = {};\n\n if (typeof xoffset === 'number') {\n data.xoffset = xoffset;\n }\n\n if (typeof yoffset === 'number') {\n data.yoffset = yoffset;\n }\n\n // wordaround change offset to x=1 y=1 on Safari\n if (this.isSafari() && !data.hasOwnProperty('yoffset')) {\n data.yoffset = 1;\n }\n\n if (this.isSafari() && !data.hasOwnProperty('xoffset')) {\n data.xoffset = 1;\n }\n\n if (typeof element === 'string') {\n data.element = element;\n }\n\n return this.addToQueue(() => this.client.requestHandler.create('/session/:sessionId/moveto', data));\n }\n\n uploadFile(localFileLocation) {\n return this.addToQueue(() => this.client.uploadFile(localFileLocation));\n }\n\n getUrl() {\n return this.addToQueue(() => this.client.getUrl());\n }\n\n getTitle() {\n return this.addToQueue(() => this.client.getTitle());\n }\n\n // eslint-disable-next-line default-param-last\n windowHandleSize(windowHandle = 'current', size) {\n return this.addToQueue(() => {\n let data = {};\n\n if (typeof windowHandle === 'object') {\n [windowHandle, size] = ['current', windowHandle];\n }\n\n /*!\n * protocol options\n */\n const requestOptions = {\n path: `/session/:sessionId/window/${windowHandle}/size`,\n method: 'GET',\n };\n\n /*!\n * change window size if the new size is given\n */\n if (typeof size === 'object' && size.width && size.height) {\n requestOptions.method = 'POST';\n // The width and height value might return as a negative value, so\n // we make sure to use its absolute value.\n data = {\n width: Math.abs(size.width),\n height: Math.abs(size.height),\n };\n }\n\n /*!\n * type check\n */\n if (requestOptions.method === 'POST' && typeof data.width !== 'number' && typeof data.height !== 'number') {\n return Promise.reject(new Error('number or type of arguments don\\'t agree with windowHandleSize protocol command'));\n }\n\n const oldEndpoint = () => this.client.requestHandler.create(requestOptions, data);\n const newEndpoint = () => {\n requestOptions.path = '/session/:sessionId/window/rect';\n return this.client.requestHandler.create(requestOptions, data);\n };\n\n if (this.w3cRequests.windowHandleSize) {\n return newEndpoint();\n }\n\n return oldEndpoint()\n .catch(err => {\n /**\n * use W3C path if old path failed\n */\n if (isOldProtocol(err)) {\n this.w3cRequests.windowHandleSize = true;\n return newEndpoint();\n }\n\n throw err;\n });\n });\n }\n\n setCookie(name, value, domain, httpOnly, secure, path, expiry) {\n return this.addToQueue(() => this.client.setCookie({\n name,\n value,\n domain,\n httpOnly,\n secure,\n path,\n expiry: expiry ? Math.floor(expiry) : expiry,\n }));\n }\n\n getCookie(name) {\n return this.addToQueue(() => this.client.requestHandler.create('/session/:sessionId/cookie')\n .then(res => {\n res.value = res.value || [];\n\n if (typeof name === 'string') {\n return res.value.find((cookie) => cookie.name === name || cookie.name === encodeURIComponent(encodeURIComponent(name))) || null;\n }\n\n return res.value || (typeof name === 'string' ? null : []);\n }));\n }\n\n deleteCookie(name) {\n return this.addToQueue(() => this.client.deleteCookie(name));\n }\n\n isVisibleWithinViewport(selector) {\n return this.addToQueue(() => this.client.isVisibleWithinViewport(selector));\n }\n\n getCurrentTabId() {\n return this.addToQueue(() => this.client.getCurrentTabId());\n }\n\n frame(id) {\n return this.addToQueue(() => this.client.frame(id));\n }\n\n switchTab(tabId) {\n return this.addToQueue(() => this.client.switchTab(tabId));\n }\n\n alertAccept() {\n return this.addToQueue(() => this.client.alertAccept());\n }\n\n log(type = 'browser') {\n return this.addToQueue(() => this.client.log(type));\n }\n\n end() {\n this.w3cRequests = {};\n return this.queue ? this.addToQueue(() => this.client.end()) : Promise.resolve();\n }\n\n forceEnd() {\n this.w3cRequests = {};\n return this.client ? this.client.end() : Promise.resolve();\n }\n\n touchPerform(actions) {\n return this.addToQueue(() => this.client.touchPerform(actions));\n }\n\n touchAction(attr) {\n return this.addToQueue(() => this.client.touchAction(attr));\n }\n\n pressKeycode(keyCode) {\n return this.addToQueue(() => this.client.pressKeycode(keyCode));\n }\n\n setImmediateValue(elementId, text) {\n return this.addToQueue(() => this.client.setImmediateValue(elementId, text));\n }\n\n elementIdText(elementId) {\n return this.addToQueue(() => this.client.elementIdText(elementId))\n .then(res => res.value);\n }\n\n isAppInstalled(packageName) {\n return this.addToQueue(() => this.client.isAppInstalled(packageName))\n .then(isInstalled => {\n const ret = !!isInstalled.value;\n logger.info(`is app (${packageName}) installed? ${ret}`, isInstalled);\n return ret;\n });\n }\n\n launch() {\n return this.addToQueue(() => this.client.launch());\n }\n\n context(id) {\n return this.addToQueue(() => this.client.context(id));\n }\n\n elementIdLocation(elementId) {\n return this.addToQueue(() => this.client.elementIdLocation(elementId));\n }\n}\n\nmodule.exports = WebdriverioWebDriverApi;\n","/* global getLocatedElement, dispatchFocus */\n\nconst doubleClick = function (eventData, done) {\n const POINTER_EVENTS = ['pointerup', 'pointerdown', 'pointermove'];\n const element = getLocatedElement(eventData.locatedElement);\n\n if (!element) {\n throw new Error('element not found');\n }\n const events = eventData.events;\n\n const successObject = {\n status: 'done',\n success: true,\n };\n\n window.__unloadNavigator = function () { done(successObject); };\n\n const getEventPosition = function (userEvent) {\n function isWithinBounds(start, end, point) {\n return (point > start) && (point < end);\n }\n\n const pointerPosition = userEvent.pointerPosition || {};\n const rect = element.getBoundingClientRect();\n const clientX = pointerPosition.originX && isWithinBounds(rect.left, rect.left + rect.width, pointerPosition.originX) ? pointerPosition.originX : rect.left + (rect.width / 2);\n const clientY = pointerPosition.originY && isWithinBounds(rect.top, rect.top + rect.height, pointerPosition.originY) ? pointerPosition.originY : rect.top + (rect.height / 2);\n return { x: clientX, y: clientY };\n };\n\n const getPointerEventDictionary = function (clientX, clientY) {\n return {\n screenX: 0,\n screenY: 0,\n clientX,\n clientY,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n bubbles: true,\n cancelable: true,\n button: 0,\n pointerType: 'mouse',\n isPrimary: true,\n };\n };\n\n const createPointerEvent = function (eventType, clientX, clientY) {\n if (!window.PointerEvent) {\n return undefined;\n }\n const eventProperties = getPointerEventDictionary(clientX, clientY);\n return new window.PointerEvent(eventType, eventProperties);\n };\n\n const createMouseEvent = function (eventType, clientX, clientY) {\n const event = document.createEvent('MouseEvents');\n event.initMouseEvent(\n eventType,\n true, /* bubbles */\n true, /* cancelable */\n document.defaultView, /* view */\n 1, /* detail */\n 0, /* screenX */\n 0, /* screenY */\n clientX, /* clientX */\n clientY, /* clientY */\n false, /* ctrl */\n false, /* alt */\n false, /* shift */\n false, /* meta */\n 0, /* button */\n document.body ? document.body.parentNode : document.documentElement);\n return event;\n };\n\n const findEffectiveActiveElement = function () {\n let activeElement = document.activeElement;\n while (activeElement.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n };\n\n const getEvent = function (userEventData) {\n const pos = getEventPosition(userEventData);\n const eventType = userEventData.event;\n if (POINTER_EVENTS.includes(eventType)) {\n return createPointerEvent(eventType, pos.x, pos.y);\n }\n return createMouseEvent(eventType, pos.x, pos.y);\n };\n try {\n events\n .map((userEventData) => getEvent(userEventData))\n .filter(Boolean)\n .forEach((event) => element.dispatchEvent(event));\n const oldActiveElement = findEffectiveActiveElement();\n dispatchFocus(eventData.elementToFocusLocatedElement, oldActiveElement);\n if (window.__unloadNavigator) {\n window.removeEventListener('unload', window.__unloadNavigator);\n window.__unloadNavigator = null;\n }\n done(successObject);\n } catch (e) {\n if (window.__unloadNavigator) {\n window.removeEventListener('unload', window.__unloadNavigator);\n window.__unloadNavigator = null;\n }\n done({\n status: 'done',\n result: e.toString(),\n success: false,\n });\n }\n};\n\nmodule.exports = doubleClick;\n","module.exports = function dispatchFocus(targetElement, oldActiveElement) {\n function createFocusEvent(eventName) {\n const event = document.createEvent('HTMLEvents');\n // TODO we want to use new Event, but mootools (used by zuora which is used by jfrog)\n // overrides window.Event and throws an error\n event.initEvent(eventName, true, false);\n return event;\n }\n\n function findEffectiveActiveElement() {\n let activeElement = document.activeElement;\n while (activeElement.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n }\n\n function setFocus(element, oldActiveElement) {\n if (oldActiveElement) {\n oldActiveElement.dispatchEvent(createFocusEvent('focusout'));\n oldActiveElement.dispatchEvent(createFocusEvent('blur'));\n }\n element.dispatchEvent(createFocusEvent('focusin'));\n element.dispatchEvent(createFocusEvent('focus'));\n if (typeof element.focus === 'function') {\n element.focus();\n }\n const currentActiveElement = findEffectiveActiveElement();\n if (oldActiveElement && currentActiveElement === oldActiveElement && typeof oldActiveElement.blur === 'function') {\n oldActiveElement.blur();\n }\n }\n\n if (targetElement) {\n const elementToFocus = getLocatedElement(targetElement);\n if (elementToFocus && (elementToFocus !== oldActiveElement)) {\n try {\n setFocus(elementToFocus, oldActiveElement);\n } catch (e) {\n // ignore\n }\n }\n } else if (oldActiveElement && typeof oldActiveElement.blur === 'function') {\n oldActiveElement.blur();\n }\n};\n","/* eslint-disable arrow-body-style, no-shadow, @typescript-eslint/prefer-optional-chain, comma-spacing, no-empty, padded-blocks, semi, indent, unicorn/no-useless-promise-resolve-reject, default-param-last, comma-dangle, semi-style, consistent-return, radix, prefer-template, prefer-const, object-shorthand, no-trailing-spaces, operator-linebreak, no-else-return, unicorn/prefer-includes, prefer-arrow-callback, max-len, no-var */\n\n'use strict';\n\nconst _ = require('lodash');\nconst logger = require('../commons/logger').getLogger('webdriver');\nconst parser = require('ua-parser-js');\nconst desiredCapabilitiesBuilder = require('../commons/testimDesiredCapabilitiesBuilder');\nconst { SeleniumError, SeleniumCrashError } = require('../errors');\nconst utils = require('../utils');\nconst WebDriverApi = require('./WebdriverioWebDriverApi');\nconst doubleClick = require('./stepActions/scripts/doubleClick');\nconst dispatchFocus = require('./stepActions/scripts/focusElement');\nconst { isOldProtocol } = require('./webDriverUtils');\nconst featureFlags = require('../commons/featureFlags');\nconst { W3C_ELEMENT_ID } = require('./constants');\n\nconst [LEFT, RIGHT] = [0, 2];\nconst { extractElementId, getCdpAddressForHost } = utils;\nconst perf = require('../commons/performance-logger');\nconst { SeleniumPerfStats, SELENIUM_PERF_MARKS } = require('../commons/SeleniumPerfStats');\n\nconst codeSnippets = () => {\n const sessionPlayer = require('../commons/getSessionPlayerRequire').getSessionPlayer();\n return sessionPlayer.codeSnippets;\n};\nconst locatorBuilderUtils = () => {\n const sessionPlayer = require('../commons/getSessionPlayerRequire').getSessionPlayer();\n return sessionPlayer.locatorBuilderUtils;\n};\nconst playerUtils = () => {\n const sessionPlayer = require('../commons/getSessionPlayerRequire').getSessionPlayer();\n return sessionPlayer.utils;\n};\n\nasync function getCdpAddress(initResult) {\n try {\n const debuggerHost = initResult?.value?.['goog:chromeOptions']?.debuggerAddress;\n if (!debuggerHost) {\n return undefined;\n }\n return await getCdpAddressForHost(debuggerHost);\n } catch (e) {\n logger.info('Error getting cdpAddress', e);\n return undefined;\n }\n}\nclass WebDriver extends WebDriverApi {\n constructor() {\n super();\n this.started = false;\n this.keepAliveTimer = null;\n this.unsupportedActions = {};\n this._isAlive = false;\n this._keepAliveRequests = [];\n this.cdpUrl = undefined;\n this.browserClosedCallbacks = [];\n this.browserClosedFailedKeepAlives = 0;\n this.ignoreHiddenTagsText = false;\n }\n\n registerToClosedBrowser(callback) {\n this.browserClosedCallbacks.push(callback);\n }\n\n unregisterToClosedBrowser(callback) {\n this.browserClosedCallbacks = this.browserClosedCallbacks.filter(cb => cb !== callback);\n }\n\n // eslint-disable-next-line max-len, default-param-last\n async init(browserOptions, testName, testRunConfig, gridInfo, customExtensionLocalLocation, executionId, testResultId, seleniumPerfStats = new SeleniumPerfStats(), fastInit = false, lambdatestService) {\n this.browserClosedFailedKeepAlives = 0;\n this.ignoreHiddenTagsText = browserOptions?.company?.activePlan?.premiumFeatures?.ignoreHiddenTagsText;\n this.browserClosedCallbacks = [];\n // eslint-disable-next-line max-len\n const capabilities = desiredCapabilitiesBuilder.buildSeleniumOptions(browserOptions, testName, testRunConfig, gridInfo, customExtensionLocalLocation, executionId, testResultId, lambdatestService);\n if (capabilities.desiredCapabilities) {\n delete capabilities.desiredCapabilities.marionette;\n }\n if (capabilities.capabilities) {\n delete capabilities.capabilities.alwaysMatch.marionette;\n }\n this.initUnsupportedActions(lambdatestService?.isLambdatestRun());\n this.browserAndOS = null;\n this.seleniumPerfStats = seleniumPerfStats;\n const driverDelay = fastInit ? 0 : 1500;\n const focus = fastInit ? (() => { }) : () => this.executeJS('window.focus()');\n try {\n perf.log('before initClient in webdriver.js init');\n const initResult = await this.initClient(capabilities, testName, testResultId);\n perf.log('after initResult before getCdpAddress in init');\n this.cdpUrl = await getCdpAddress(initResult);\n perf.log('after getCdpAddress in webdriver.js init');\n logger.info(`init new session testName: ${testName}`, { sessionId: this.getSessionId(), testResultId });\n await utils.delay(driverDelay);\n await focus();\n perf.log('after focus and delay in webdriver.js init');\n } catch (err) {\n logger.error('failed to init webdriver', { err });\n if (err.seleniumStack) {\n const newError = new SeleniumError(err.seleniumStack);\n const isFreeCompany = browserOptions?.company?.activePlan?.plan === 'free';\n if (newError.message.includes('timed out waiting for a node') && isFreeCompany) {\n throw new Error('Our free grids are in full capacity, please try again or upgrade to our Professional plan');\n }\n throw newError;\n }\n throw new Error('failed to init client driver');\n }\n }\n\n initUnsupportedActions(isLambdatestRun) {\n if (isLambdatestRun) {\n this.unsupportedActions = {\n ...this.unsupportedActions,\n move: true,\n };\n }\n }\n\n isAlive() {\n return this._isAlive;\n }\n\n maxKeepAliveGap() {\n const slidingPairsWindow = (arr) => _.zip(_.dropRight(arr, 1), _.drop(arr, 1));\n const startTimeArray = this._keepAliveRequests.map(({ start }) => start).filter(Boolean);\n const timeGaps = slidingPairsWindow(startTimeArray).map(([a, b]) => b - a);\n return Math.max(...timeGaps);\n }\n\n isClosedBrowserError(err) {\n if (!err || !err.seleniumStack || !err.message) {\n return false;\n }\n return ((err.seleniumStack.type === 'UnknownError') &&\n (err.message.includes('CLIENT_STOPPED_SESSION') || err.message.includes('BROWSER_TIMEOUT') || err.message.includes('was terminated due to TIMEOUT'))) ||\n (err.seleniumStack.type === 'NoSuchWindow' && err.message.includes('window was already closed')) ||\n (err.seleniumStack.type === 'SelectorTimeoutError' && err.message.includes('chrome not reachable'));\n }\n\n start() {\n if (this.started) {\n return;\n }\n this.started = true;\n const that = this;\n const keepAlive = function () {\n function createKeepAliveRequestData(id) {\n that._keepAliveRequests.push({ start: Date.now(), id });\n }\n function updateKeepAliveRequestData(field, id) {\n (that._keepAliveRequests.find(item => item.id === id) || {})[field] = Date.now();\n }\n\n function checkKeepAliveScript() {\n return window.getTestimStatus && window.getTestimStatus();\n }\n\n if (that.queue.getQueueLength() > 0) {\n return Promise.resolve();\n }\n\n const requestId = utils.guid();\n createKeepAliveRequestData(requestId);\n return that.executeJS(checkKeepAliveScript)\n .then(() => {\n that._isAlive = true;\n updateKeepAliveRequestData('end', requestId);\n that.browserClosedFailedKeepAlives = 0;\n })\n .catch(err => {\n updateKeepAliveRequestData('error', requestId);\n if (err.seleniumStack && err.seleniumStack.type === 'UnexpectedAlertOpen') {\n that.browserClosedFailedKeepAlives = 0;\n logger.warn('close unexpected alert open');\n return that.alertAccept().catch(innerErr => logger.warn('failed to click on alert', { err: innerErr }));\n }\n logger.warn('err while getting testim status', { err });\n that._isAlive = false;\n if (that.isClosedBrowserError(err)) {\n that.browserClosedFailedKeepAlives++;\n const CLOSED_BROWSER_THRESHOLD_COUNT = 3;\n if (that.browserClosedFailedKeepAlives >= CLOSED_BROWSER_THRESHOLD_COUNT) {\n that.browserClosedCallbacks.forEach(cb => {\n try {\n cb(err);\n } catch { /* ignore */ }\n });\n }\n } else {\n that.browserClosedFailedKeepAlives = 0;\n }\n return undefined;\n });\n };\n\n this.keepAliveTimer = setInterval(keepAlive, 10000);\n }\n\n switchToLocatedFrame(locatedElement) {\n return this.getElement(locatedElement)\n .then(async el => {\n const elementId = extractElementId(el.value);\n await this.switchToFrame({ ELEMENT: elementId, [W3C_ELEMENT_ID]: elementId });\n return el;\n });\n }\n\n switchToFrame(el) {\n return this.frame(el);\n }\n\n switchToTopFrame() {\n return this.frame().catch(err => {\n if (err.message?.includes('ECONNREFUSED')) {\n throw new SeleniumCrashError();\n }\n throw err;\n });\n }\n\n /**\n * @returns {Promise<{ value: HTMLElement | { [W3C_ELEMENT_ID]: string } | { ELEMENT: string } }>}\n */\n getElement(locatedElement) {\n const perfId = this.seleniumPerfStats.markStart(SELENIUM_PERF_MARKS.GET_ELEMENT);\n if (typeof locatedElement === 'string' || typeof locatedElement === 'number') { // support testimId in the meanwhile for backwards compatibility\n return this.getElementBySelector(`[testim_dom_element_id='${locatedElement}']`)\n .finally(() => this.seleniumPerfStats.markEnd(perfId, SELENIUM_PERF_MARKS.GET_ELEMENT));\n }\n const getElementAtAut = (locatedElement && locatedElement.shadowPath && locatedElement.shadowPath.length) ||\n (featureFlags.flags.runGetElementCodeInAut.isEnabled() && this.isSafari());\n\n if (getElementAtAut) {\n return this.execute(`\n var fn = ${codeSnippets().getLocatedElementCode};\n return fn.apply(null, arguments);\n `, locatedElement\n ).finally(() => this.seleniumPerfStats.markEnd(perfId, SELENIUM_PERF_MARKS.GET_ELEMENT));\n }\n\n return this.getElementBySelector(`[testim_dom_element_id='${locatedElement && locatedElement.testimId}']`)\n .finally(() => this.seleniumPerfStats.markEnd(perfId, SELENIUM_PERF_MARKS.GET_ELEMENT));\n }\n\n executeJS(fn, args) {\n return this.execute(fn, args);\n }\n\n executeJSWithArray(fn, args) {\n args.unshift(fn);\n return this.execute.apply(this, args);\n }\n\n executeCodeAsync(fn, timeout, args) {\n return this.timeouts('script', timeout)\n .then(() => this.executeAsync(fn, args));\n }\n\n /** @type {import('clickim/src/background/stepActions/stepActionUtils').StepActionUtils['markDynamicParent']} */\n async markDynamicParent(target, dynamicParentId, frameHandler) {\n function setDynamicParentAttribute(data) {\n var attributeName = data.attributeName;\n var attributeValue = data.attributeValue;\n var element = getLocatedElement(data.locatedElement);\n if (!element) {\n throw new Error('could not find dynamic parent');\n }\n element.setAttribute(attributeName, attributeValue);\n }\n\n return this.executeJS(`\n var getLocatedElement = ${codeSnippets().getLocatedElementCode};\n var setDynamicParentAttribute = ${setDynamicParentAttribute.toString()};\n return setDynamicParentAttribute.apply(null, arguments)\n `, {\n attributeName: locatorBuilderUtils().DYNAMIC_PARENT_FIELD_NAME,\n attributeValue: dynamicParentId,\n locatedElement: target.locatedElement\n });\n }\n\n /** @return {Promise<{ value: { top: number; left: number } | null }>} */\n getLocatedElementRectWithPadding(locatedElement) {\n // this is here to conform with clickim's logic in frame offset calculations\n function getLocationCode(locatedElement) {\n var element = getLocatedElement(locatedElement);\n if (!element) {\n return null;\n }\n var paddingTop = parseInt(window.getComputedStyle(element).paddingTop.replace('px', ''), 10) || 0;\n var paddingLeft = parseInt(window.getComputedStyle(element).paddingLeft.replace('px', ''), 10) || 0;\n var rect = element.getBoundingClientRect();\n return { top: Math.round(rect.top + paddingTop), left: Math.round(rect.left + paddingLeft) };\n }\n\n return this.executeJS(`\n var getLocatedElement = ${codeSnippets().getLocatedElementCode};\n var getLocation = ${getLocationCode.toString()};\n return getLocation.apply(null, arguments)\n `, locatedElement);\n }\n\n getElementLocationWithPadding(locatedElement) {\n return this.getLocatedElementRectWithPadding(locatedElement);\n }\n\n /** @returns {Promise<{ value: null | Record<'bottom' | 'height' | 'x' | 'right' | 'y' | 'width', number> }>} */\n getLocatedElementRect(locatedElement) {\n function getLocationCode(locatedElement) {\n var element = getLocatedElement(locatedElement);\n if (!element) {\n return null;\n }\n var rect = element.getBoundingClientRect();\n return {\n bottom: Math.round(rect.bottom),\n height: Math.round(rect.height),\n x: Math.round(rect.left),\n right: Math.round(rect.right),\n y: Math.round(rect.top),\n width: Math.round(rect.width),\n };\n }\n\n return this.executeJS(`\n var getLocatedElement = ${codeSnippets().getLocatedElementCode};\n var getLocation = ${getLocationCode.toString()};\n return getLocation.apply(null, arguments)\n `, locatedElement);\n }\n\n getElementLocation(target) {\n return this.getLocatedElementRect(target.locatedElement);\n }\n\n getTargetText(target) {\n return this.getElementTextJS(target.locatedElement);\n }\n\n getElementTextJS(locatedElement) {\n function extractTextCode(locatedElement, ignoreHiddenTagsText) {\n // copy of utils.getElementTextContent to run inside content script\n // sadly .children doesn't work for SVG elements in IE11\n function clearTitleTags(node) {\n if (!node.childNodes || node.childNodes.length === 0) {\n return node;\n }\n\n var children = Array.apply(null, node.childNodes).filter(function (x) { return x.nodeType === Node.ELEMENT_NODE; });\n // eslint-disable-next-line prefer-arrow-callback\n children.forEach(function (child) {\n if (typeof child.tagName === 'string' && child.tagName.toLowerCase() === 'title') {\n node.removeChild(child);\n } else {\n clearTitleTags(child);\n }\n });\n return node;\n }\n\n function isTextElement(element) {\n var tagName = element.tagName;\n return (tagName === 'INPUT' || tagName === 'TEXTAREA');\n }\n\n function getFixedTextContent(element) {\n try { // fix for salesforce's custom-elements\n if (element.shadowRoot && Object.getOwnPropertyDescriptor(element.ownerDocument.defaultView.Node.prototype,'textContent').get.toString().indexOf('[native code]') === -1) {\n return element.shadowRoot.textContent.replace(/(\\r\\n|\\n|\\r)/gm, '');\n }\n // eslint-disable-next-line no-empty\n } catch (err) { }\n // eslint-disable-next-line prefer-arrow-callback\n if (ignoreHiddenTagsText && Array.prototype.some.call(element.children, function (elem) { return elem.hidden; })) {\n var dupElement = element.cloneNode(true);\n // eslint-disable-next-line prefer-arrow-callback\n var hiddenChildren = Array.prototype.filter.call(dupElement.children, function (elem) { return elem.hidden; });\n // eslint-disable-next-line prefer-arrow-callback\n hiddenChildren.forEach(function (child) { \n dupElement.removeChild(child);\n });\n return dupElement.textContent.replace(/(\\r\\n|\\n|\\r)/gm, '');\n }\n return element.textContent.replace(/(\\r\\n|\\n|\\r)/gm, '');\n }\n\n function getElementTextContent(element) {\n if (isTextElement(element)) {\n return element.value;\n } else if (element instanceof SVGElement) {\n var copyElement = element.cloneNode(true);\n return clearTitleTags(copyElement).textContent.replace(/(\\r\\n|\\n|\\r)/gm, '');\n } else {\n return getFixedTextContent(element);\n }\n }\n\n var element = getLocatedElement(locatedElement);\n return element ? getElementTextContent(element) : '';\n }\n\n return this.executeJS(`\n var getLocatedElement = ${codeSnippets().getLocatedElementCode};\n var extractText = ${extractTextCode.toString()};\n return extractText.apply(null, arguments)\n `, locatedElement, this.ignoreHiddenTagsText)\n .then(result => result.value);\n }\n\n getHTML(locateStep) {\n const getHTMLCode = codeSnippets().getHtmlCode(null, locateStep);\n const perfId = this.seleniumPerfStats.markStart(SELENIUM_PERF_MARKS.GET_HTML);\n return this.executeJS(getHTMLCode)\n .then(result => {\n this.seleniumPerfStats.markEnd(perfId, SELENIUM_PERF_MARKS.GET_HTML);\n return result.value;\n })\n .catch(err => {\n this.seleniumPerfStats.markEnd(perfId, SELENIUM_PERF_MARKS.GET_HTML);\n const testimInternalError = Object.assign(new Error(), { success: false, reason: err.toString(), errorType: 'internal-error' });\n if (!this.client.requestHandler.sessionID) {\n // we got here after the driver has been disposed of. It's impossible to run JavaScript on the page.\n testimInternalError.extraInfo = 'Inside getHtml catch and trying to check if in quirks mode - but the session has already terminated';\n throw testimInternalError;\n }\n throw testimInternalError;\n });\n }\n\n maximizeWithoutValidation() {\n return this.windowHandleMaximize();\n }\n\n setViewportSizeNEW(size, type) {\n const MAX_TRIES = 5;\n\n const getViewportSizeScript = function () {\n return {\n screenWidth: Math.floor(window.innerWidth || 0),\n screenHeight: Math.floor(window.innerHeight || 0)\n };\n };\n\n /**\n * to set viewport size properly we need to execute the process multiple times\n * since the difference between the inner and outer size changes when browser\n * switch between fullscreen modes or visibility of scrollbar\n */\n const _setViewportSize = (size, tryNo = 1) => {\n /**\n * get window size\n */\n return this.windowHandleSize()\n .then((windowHandleSize) => {\n /**\n * get viewport size\n */\n return this.execute(getViewportSizeScript)\n .then(viewportSize => {\n const widthDiff = windowHandleSize.value.width - viewportSize.value.screenWidth;\n const heightDiff = windowHandleSize.value.height - viewportSize.value.screenHeight;\n /**\n * change window size with indent\n */\n return this.windowHandleSize({\n width: size.width + widthDiff,\n height: size.height + heightDiff\n });\n })\n .then(() => this.execute(getViewportSizeScript))\n .then(res => {\n /**\n * if viewport size not equals desired size, execute process again\n */\n if (tryNo < MAX_TRIES && (res.value.screenWidth !== size.width || res.value.screenHeight !== size.height)) {\n return _setViewportSize(size, tryNo + 1);\n }\n });\n });\n };\n\n /**\n * parameter check\n */\n if (typeof size !== 'object' ||\n typeof size.width !== 'number' ||\n typeof size.height !== 'number' ||\n (typeof type !== 'undefined' && typeof type !== 'boolean')) {\n throw new Error('number or type of arguments don\\'t agree with setViewportSize command');\n }\n\n const shouldIndent = (typeof type === 'undefined') ? true : type;\n\n return shouldIndent ? _setViewportSize(size) : this.windowHandleSize(size);\n }\n\n setViewportSize(width, height) {\n var type = true; //set to false to change window size, true (default) to change viewport size\n return this.setViewportSizeNEW({\n width: width,\n height: height\n }, type);\n }\n\n getBrowserMajorVersion(parse) {\n try {\n return parseInt(parse.browser.major, 10);\n } catch (err) {\n logger.error('failed to get browser version', { err: err });\n return 0;\n }\n }\n\n getBrowserAndOS() {\n function getBrowserName(ua, browserDetails) {\n var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n if (/trident/i.test(M[1])) {\n return 'Internet Explorer ' + browserDetails.major;\n }\n if (M[1] === 'Chrome' && ua.match(/\\bOPR\\/(\\d+)/) !== null) {\n return 'opera';\n }\n if (M[1] === 'Chrome' && ua.match(/\\bEdge|Edg\\/(\\d+)/) !== null) {\n return 'edge';\n }\n M = M[2] ? [M[1], M[2]] : [ua.appName, ua.appVersion, '-?'];\n var tem = ua.match(/version\\/(\\d+)/i);\n if (tem !== null) {\n M.splice(1, 1, tem[1]);\n }\n return M[0].toLowerCase();\n }\n\n if (this.browserAndOS) {\n return Promise.resolve(this.browserAndOS);\n }\n\n // eslint-disable-next-line prefer-arrow-callback\n return this.executeJS(function () {\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent) {\n return 'unknown';\n }\n return window.navigator.userAgent;\n }).then(userAgent => {\n const rawUserAgent = userAgent.value;\n const parse = parser(rawUserAgent);\n const osDetails = parse.os;\n this.browserAndOS = {\n os: osDetails.name + ' ' + osDetails.version,\n browserMajor: this.getBrowserMajorVersion(parse),\n browser: getBrowserName(userAgent.value, parse.browser),\n userAgent: rawUserAgent,\n browserVersion: parse.browser.version\n };\n return this.browserAndOS;\n });\n }\n\n getUserAgentInfo() {\n return this.executeJS(`return ${codeSnippets().getUserAgentInfo()}`)\n .then(result => result.value);\n }\n\n setValue(element, value) {\n return super.setValue(element, value);\n }\n\n getRelativeMoveActions(offsets, element) {\n const { rect, clickOffset } = offsets;\n const inViewCenter = this.inViewCenter(rect);\n const left = Math.floor(clickOffset.x - inViewCenter.x);\n const top = Math.floor(clickOffset.y - inViewCenter.y);\n\n if (!playerUtils().isWithinBounds(-inViewCenter.x, inViewCenter.x, left) ||\n !playerUtils().isWithinBounds(-inViewCenter.y, inViewCenter.y, top)) {\n // [NOTE] the code is not supposed to get here! - using center (0,0) instead of step offsets.\n // this is a fallback so the action will take place even if for some reason calculation went out of element..\n logger.warn('using center as fallback for offset');\n return this.getMoveActions(0, 0, element);\n }\n return this.getMoveActions(left, top, element);\n }\n\n computeAbsoluteMovement(offsets) {\n const { frameOffset, rect, clickOffset } = offsets;\n const fallbackLeft = rect.left + clickOffset.x + frameOffset.x;\n const fallbackTop = rect.top + clickOffset.y + frameOffset.y;\n return { x: fallbackLeft, y: fallbackTop };\n }\n\n actWithActionsAPI(offsets, button, element, actions) {\n const moveActions = this.getRelativeMoveActions(offsets, element);\n const clickActions = this.getClickActions(actions, button);\n return this.actions([{\n type: 'pointer',\n id: 'mouse',\n parameters: { pointerType: 'mouse' },\n actions: moveActions.concat(clickActions),\n }]).catch(err => {\n logger.error('tried to use element origin but failed because of visibility, trying absolute', err);\n const { x, y } = this.computeAbsoluteMovement(offsets);\n const moveActions = this.getMoveActions(x, y);\n return this.actions([{\n type: 'pointer',\n id: 'mouse',\n parameters: { pointerType: 'mouse' },\n actions: moveActions.concat(clickActions),\n }]);\n });\n }\n\n doubleClickWithActionsAPI(element, offsets) {\n return this.actWithActionsAPI(offsets, LEFT, element, ['pointerDown', 'pointerUp', 'pointerDown', 'pointerUp']);\n }\n\n doubleClickWithJS(eventData) {\n return this.executeCodeAsync(`\n var getLocatedElement = ${codeSnippets().getLocatedElementCode};\n var dispatchFocus = ${dispatchFocus.toString()};\n var doubleClick = ${doubleClick.toString()};\n var eventData = arguments[0];\n var done = arguments[1];\n return doubleClick.call(null, eventData, done);\n `, eventData.timeout, eventData);\n }\n\n // eslint-disable-next-line default-param-last\n getClickActions(types = [], button) {\n return types.map(type => ({ type: type, button }));\n }\n // eslint-disable-next-line default-param-last\n getClickActionList(types = [], button) {\n return [{\n type: 'pointer',\n id: 'mouse',\n actions: this.getClickActions(types, button),\n }];\n }\n\n leftClickWithActionsAPI(element, offsets) {\n return this.actWithActionsAPI(offsets, LEFT, element, ['pointerDown', 'pointerUp']);\n }\n\n rightClickWithActionsAPI(element, offsets) {\n return this.actWithActionsAPI(offsets, RIGHT, element, ['pointerDown', 'pointerUp']);\n }\n\n rightClick(element, offsets) {\n if (this.unsupportedActions.move) {\n return this.rightClickWithActionsAPI(element, offsets);\n }\n return super.rightClick(element)\n .catch(err => {\n if (isOldProtocol(err)) {\n this.unsupportedActions.move = true;\n return this.rightClickWithActionsAPI(element, offsets);\n }\n throw err;\n });\n }\n\n leftClick(element, offsets) {\n if (this.unsupportedActions.move) {\n return this.leftClickWithActionsAPI(element, offsets);\n }\n return super.leftClick(element)\n .catch(err => {\n if (isOldProtocol(err)) {\n this.unsupportedActions.move = true;\n return this.leftClickWithActionsAPI(element, offsets);\n }\n throw err;\n });\n }\n\n dragAndDropOldAPI(sourceSeleniumElement, destinationSeleniumElement) {\n return this.moveTo(extractElementId(sourceSeleniumElement))\n .then(() => this.buttonDown())\n .then(() => this.moveTo(extractElementId(destinationSeleniumElement)))\n .then(() => this.buttonUp());\n }\n\n calculateElementMiddlePoint(locatedElement, offset = { top: 0, left: 0 }) {\n return this.getLocatedElementRect(locatedElement).then(response => {\n if (!response || !response.value) {\n logger.warn(`could not find element for locatedElement ${locatedElement}`);\n throw new Error('could not calculate rect');\n }\n const { x, y, width, height } = response.value;\n return {\n x: offset.left + x + (width / 2),\n y: offset.top + y + (height / 2),\n };\n });\n }\n\n hover(seleniumElement, offsets) {\n // this will attempt to use the old api with moveTOObject (using the selector)\n // if the old api is unsupported, it will move absolutePoint, or calc the point using the seleniumElement and offset\n if (this.unsupportedActions.move) {\n return this.moveToElementWithActionsAPI(seleniumElement, offsets);\n }\n\n const { rect, clickOffset } = offsets;\n const center = this.inViewCenter(rect);\n // moveto element (actions and legacy) is always vs. the center of an element, so the offset needs to get fixed.\n const xOffset = Math.floor(clickOffset.x - center.x);\n const yOffset = Math.floor(clickOffset.y - center.y);\n\n return this.moveTo(extractElementId(seleniumElement), xOffset, yOffset)\n .catch(err => {\n if (isOldProtocol(err)) {\n this.unsupportedActions.move = true;\n return this.moveToElementWithActionsAPI(seleniumElement, offsets);\n }\n\n throw err;\n });\n }\n\n getMoveActions(x = 1, y = 1, origin = 'viewport', duration = 0) {\n // force x != 0 ,y != 0 because of Safari issues\n return [{ type: 'pointerMove', duration, x: Math.floor(x) || 1, y: Math.floor(y) || 1, origin }];\n }\n\n moveWithActionsAPI(point) {\n const actions = this.getMoveActions(point.x, point.y);\n return this.actions([{\n type: 'pointer',\n id: 'mouse',\n actions,\n }]);\n }\n\n moveToElementWithActionsAPI(seleniumElement, offsets) {\n return this.actions([{\n type: 'pointer',\n id: 'mouse',\n actions: this.getRelativeMoveActions(offsets, seleniumElement),\n }]).catch(err => {\n logger.error('tried to use element origin but failed because of visibility, trying location', err);\n const point = this.computeAbsoluteMovement(offsets);\n return this.moveWithActionsAPI(point);\n });\n }\n\n getDragCoordinates(events) {\n const mouseEvents = events.filter(e => e.event === 'mousemove' || e.event === 'pointermove');\n\n const first = _.first(mouseEvents).pointerPosition;\n const last = _.last(mouseEvents).pointerPosition;\n\n return {\n xDiff: last.screenX - first.screenX,\n yDiff: last.screenY - first.screenY,\n };\n }\n\n dragWithMoveTo(seleniumElement, xDiff, yDiff, xOffset, yOffset) {\n return this.moveTo(extractElementId(seleniumElement), xOffset, yOffset)\n .then(() => this.buttonDown())\n .then(() => this.moveTo(extractElementId(seleniumElement), xDiff, yDiff))\n .then(() => this.buttonUp());\n }\n\n dragWithActionsAPI(seleniumElement, xDiff, yDiff, xOffset, yOffset) {\n const goToDrag = this.getMoveActions(xOffset, yOffset, seleniumElement, 1);\n const startDrag = this.getClickActions(['pointerDown'], LEFT);\n const doDrag = this.getMoveActions(xDiff, yDiff, 'pointer', 1);\n const endDrag = this.getClickActions(['pointerUp'], LEFT);\n return this.actions([{\n type: 'pointer',\n id: 'mouse',\n actions: goToDrag.concat(startDrag).concat(doDrag).concat(endDrag),\n }]);\n }\n\n drag(seleniumElement, targetRect, xElementOffset, yElementOffset, events) {\n const { width, height } = targetRect;\n const midXRelative = (xElementOffset - width / 2 + 1);\n const midYRelative = (yElementOffset - height / 2);\n return this.getDragCoordinates(events)\n .then(coordinates => {\n const { xDiff, yDiff } = coordinates;\n if (this.unsupportedActions.move) {\n return this.dragWithActionsAPI(seleniumElement, xDiff, yDiff, midXRelative, midYRelative);\n }\n return this.dragWithMoveTo(seleniumElement, xDiff, yDiff, midXRelative, midYRelative)\n .catch(err => {\n if (isOldProtocol(err)) {\n this.unsupportedActions.move = true;\n return this.dragWithActionsAPI(seleniumElement, xDiff, yDiff, midXRelative, midYRelative);\n }\n throw err;\n });\n });\n }\n\n getMoveRelativeSequence(startLeft, startTop, endLeft, endTop) {\n const sqr = x => x * x;\n const distance = (p1, p2) => Math.sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));\n\n const from = { x: startLeft, y: startTop };\n const to = { x: endLeft, y: endTop };\n const MOVE_EVENT_DIST = 10;\n const eventCount = Math.round(distance(from, to) / MOVE_EVENT_DIST);\n\n /* generate move events array */\n const moves = Array.apply([], new Array(eventCount))\n .map(() => ({\n x: Math.round((to.x - from.x) / eventCount),\n y: Math.round((to.y - from.y) / eventCount)\n }));\n return [{ x: 1, y: 1 }].concat(moves);\n }\n\n getMoveAbsoluteSequence(startLeft, startTop, endLeft, endTop) {\n const relativeMoves = this.getMoveRelativeSequence(startLeft, startTop, endLeft, endTop);\n return relativeMoves.reduce((newMoves, relativeMove) => {\n const lastMove = _.last(newMoves);\n return newMoves.concat({ x: Math.round(lastMove.x + relativeMove.x), y: Math.round(lastMove.y + relativeMove.y) });\n }, [{ x: Math.round(startLeft), y: Math.round(startTop) }]);\n }\n\n async dragAndDropWithGeneratedMoves(sourceSeleniumElement, destinationSeleniumElement, rectsAndOffsets) {\n const { fromRect, fromX, fromY, toRect, toX, toY } = rectsAndOffsets;\n const moveSequence = this.getMoveRelativeSequence(fromRect.left + fromX, fromRect.top + fromY, toRect.left + toX, toRect.top + toY);\n\n await this.moveTo(extractElementId(sourceSeleniumElement), Math.round(fromX), Math.round(fromY));\n await this.buttonDown();\n for (const movePosition of moveSequence) {\n await this.moveTo(null, movePosition.x, movePosition.y);\n }\n await this.moveTo(extractElementId(destinationSeleniumElement), Math.round(toX), Math.round(toY));\n return await this.buttonUp();\n }\n\n dragAndDropWithActionsAPIWithGeneratedMoves(rectsAndOffsets) {\n const { fromRect, fromX, fromY, toRect, toX, toY } = rectsAndOffsets;\n const startLeft = Math.round(fromRect.left + fromX);\n const startTop = Math.round(fromRect.top + fromY);\n const endLeft = Math.round(toRect.left + toX);\n const endTop = Math.round(toRect.top + toY);\n const moveSequence = this.getMoveAbsoluteSequence(fromRect.left + fromX, fromRect.top + fromY, toRect.left + toX, toRect.top + toY);\n const startMovePositionActions = this.getMoveActions(startLeft, startTop);\n const pointerDownActions = this.getClickActions(['pointerDown'], LEFT);\n const moveSequenceActions = _.flatMap(moveSequence, movePosition => this.getMoveActions(movePosition.x, movePosition.y));\n const endMovePositionActions = this.getMoveActions(endLeft, endTop);\n const pointerUpActions = this.getClickActions(['pointerUp'], LEFT);\n const actions = startMovePositionActions.concat(pointerDownActions).concat(moveSequenceActions).concat(endMovePositionActions).concat(pointerUpActions);\n\n return this.actions([{\n type: 'pointer',\n id: 'mouse',\n actions,\n }]);\n }\n\n dragAndDrop(sourceSeleniumElement, destinationSeleniumElement, rectsAndOffsets) {\n if (this.isSafari()) {\n if (this.unsupportedActions.move) {\n return this.dragAndDropWithActionsAPIWithGeneratedMoves(rectsAndOffsets);\n }\n return this.dragAndDropWithGeneratedMoves(sourceSeleniumElement, destinationSeleniumElement, rectsAndOffsets)\n .catch(err => {\n if (isOldProtocol(err)) {\n this.unsupportedActions.move = true;\n return this.dragAndDropWithActionsAPIWithGeneratedMoves(rectsAndOffsets);\n }\n throw err;\n });\n }\n if (this.unsupportedActions.move) {\n return this.dragAndDropWithActionsAPI(rectsAndOffsets);\n }\n return this.dragAndDropOldAPI(sourceSeleniumElement, destinationSeleniumElement)\n .catch(err => {\n if (isOldProtocol(err)) {\n this.unsupportedActions.move = true;\n return this.dragAndDropWithActionsAPI(rectsAndOffsets);\n }\n throw err;\n });\n }\n\n doubleClickFallback(element, eventData, offsets) {\n if (this.isSafari()) {\n return this.doubleClickWithJS(eventData);\n }\n return this.doubleClickWithActionsAPI(element, offsets);\n }\n\n doubleClick(element, eventData, offsets) {\n if (this.unsupportedActions.move || this.isSafari()) { // doDoubleClick API doesn't work in Safari browser\n return this.doubleClickFallback(element, eventData, offsets);\n }\n return this.moveTo(extractElementId(element))\n .then(() => this.doDoubleClick())\n .catch(err => {\n if (isOldProtocol(err)) {\n this.unsupportedActions.move = true;\n return this.doubleClickFallback(element, eventData, offsets);\n }\n throw err;\n });\n }\n\n dragAndDropWithActionsAPI(rectsAndOffsets) {\n const { fromRect, fromX, fromY, toRect, toX, toY } = rectsAndOffsets;\n const startLeft = Math.round(fromRect.left + fromX);\n const startTop = Math.round(fromRect.top + fromY);\n const endLeft = Math.round(toRect.left + toX);\n const endTop = Math.round(toRect.top + toY);\n return this.moveWithActionsAPI({ x: startLeft, y: startTop })\n .then(() => {\n const actions = this.getClickActionList(['pointerDown'], LEFT);\n return this.actions(actions);\n })\n .then(() => this.moveWithActionsAPI({ x: endLeft, y: endTop }))\n .then(() => {\n const actions = this.getClickActionList(['pointerUp'], LEFT);\n return this.actions(actions);\n });\n }\n\n getTabIds() {\n return this.windowHandles().then(r => r.value);\n }\n\n isVisible(el) {\n return this.elementIdDisplayed(extractElementId(el)).then(r => r.value);\n }\n\n getSource() {\n return this.source();\n }\n\n getElementRect(target) {\n const defaultLocation = { width: 0, height: 0, top: 0, left: 0 };\n return this.getElementLocation(target).catch((err) => logger.error('error getting element location', { err }))\n .then(loc => {\n if (loc?.value) {\n return {\n top: loc.value.y,\n left: loc.value.x,\n width: loc.value.width,\n height: loc.value.height,\n };\n }\n return defaultLocation;\n });\n }\n\n end() {\n logger.info('delete session', { sessionId: this.getSessionId() });\n if (!this.getSessionId()) {\n logger.warn('failed to close session because session is undefined');\n }\n clearInterval(this.keepAliveTimer);\n return super.end()\n .catch(() => {\n /* !!!!SILENCE!!!! */\n });\n }\n\n inViewCenter(rectangle) {\n return {\n x: rectangle.width / 2,\n y: rectangle.height / 2,\n };\n }\n}\n\nmodule.exports = WebDriver;\n","\"use strict\";\n\nconst logger = require('../../commons/logger').getLogger('cookies-utils');\n\nmodule.exports = function (driver) {\n class CookieUtils {\n set(cookie) {\n let domain = cookie.domain;\n if(!cookie.hostOnly) {\n if (domain && !domain.startsWith('.')) {\n domain = `.${domain}`;\n }\n }\n return driver.setCookie(cookie.name, cookie.value, domain, cookie.httpOnly, cookie.secure, cookie.path, cookie.expirationDate)\n .catch(err => {\n logger.error(\"failed to set cookie\", {err});\n throw err;\n });\n }\n\n get(cookie) {\n return driver.getCookie(cookie.name)\n .catch(err => {\n logger.error(\"failed to get cookie\", {err});\n throw err;\n });\n }\n\n remove(cookie) {\n return driver.deleteCookie(cookie.name)\n .catch(err => {\n logger.error(\"failed to remove cookie\", {err});\n throw err;\n });\n }\n }\n\n return new CookieUtils();\n};\n","// @ts-check\n\n'use strict';\n\nconst pRetry = require('p-retry');\nconst { delay } = require('../../utils');\nconst { PageNotAvailableError } = require('../../errors');\nconst utils = require('../../utils');\nconst logger = require('../../commons/logger').getLogger('window-utils');\n\nclass WindowUtils {\n /**\n * @param {number} id tab or worker id\n * @param {import('../webdriver')} driver\n * */\n constructor(id, driver) {\n this.id = id;\n this.driver = driver;\n }\n\n // Seems unused and not working since bad args to executeJS\n getElementFromPoint(x, y) {\n /* eslint-disable */\n function elementFromPoint(x, y) {\n var el = document.elementFromPoint(x, y);\n return { testimId: el ? el.getAttribute('testim_dom_element_id') : null, tagName: el ? el.tagName : null };\n }\n /* eslint-enable */\n\n return this.driver.executeJS(elementFromPoint, x, y).then(result => result.value);\n }\n\n getLocation() {\n return this.driver.getUrl();\n }\n\n stopListeningToScroll() {\n return Promise.resolve();\n }\n\n resumeListeningToScroll() {\n return Promise.resolve();\n }\n\n scrollToPosition(pos) {\n return this.driver.scroll(pos.x, pos.y);\n }\n\n scrollToPositionWithoutAnimation(pos) {\n /* eslint-disable */\n // if scroll behavior is not supported, then the scrolling is not animated anyway\n function scrollWithoutAnimation(position) {\n var scrollBehaviorSupported = 'scrollBehavior' in document.documentElement.style;\n if (scrollBehaviorSupported) {\n return window.scrollTo({ left: position.x, top: position.y, behavior: 'instant' });\n }\n return window.scrollTo(position.x, position.y);\n }\n /* eslint-enable */\n return this.driver.executeJS(scrollWithoutAnimation, pos);\n }\n\n getCurrentScrollPosition() {\n /* eslint-disable */\n function scrollPosition() {\n return { x: window.scrollX, y: window.scrollY };\n }\n /* eslint-enable */\n\n return this.driver.executeJS(scrollPosition).then(result => result.value);\n }\n\n navigate(location, NAVIGATION_MAX_TIME = 15000) {\n const that = this;\n\n async function navigate(retries = 3) {\n try {\n await that.driver.url(location);\n } catch (err) {\n const shouldRetryNavigation = err.seleniumStack && err.message.includes('method IWebBrowser2::Navigate2() failed');\n if (shouldRetryNavigation && retries > 0) {\n logger.warn('selenium navigation failed. retrying to navigate', { err });\n await delay(1500);\n return navigate(retries - 1);\n }\n throw err;\n }\n return undefined;\n }\n\n return Promise.race([navigate(), delay(NAVIGATION_MAX_TIME)]);\n }\n\n reloadTab(timeoutMSec = 15000) {\n return Promise.race([\n this.driver.reloadTab(),\n delay(timeoutMSec),\n ]);\n }\n\n getViewportSize() {\n return this.driver.getViewportSize();\n }\n\n maximizeWithoutValidation() {\n return this.driver.maximizeWithoutValidation();\n }\n\n getFullPageSize() {\n /* eslint-disable */\n function fullPageSize() {\n var body = document.body;\n var html = document.documentElement;\n var height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n var width = Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth);\n return {\n height: height,\n width: width\n };\n }\n /* eslint-enable */\n\n return this.driver.executeJS(fullPageSize).then(result => result.value);\n }\n\n extractToNewWindow() {\n return Promise.resolve();\n }\n\n async checkSize(size) {\n await utils.delay(1000);\n const actualSize = await this.getViewportSize();\n if (actualSize.width !== size.width || actualSize.height !== size.height) {\n return Promise.reject({ actualSize, expectedSize: size });\n }\n return { actualSize, expectedSize: size };\n }\n\n async setViewportSize(size) {\n await this.driver.setViewportSize(size.width, size.height);\n return await this.checkSize(size);\n }\n\n async validatePageIsAvailable() {\n /* eslint-disable */\n function pageIsAvailable() {\n var locationObj;\n // this sometimes happens on IE\n if (typeof location !== 'undefined') {\n locationObj = location;\n } else if (typeof window !== 'undefined' && typeof window.location !== 'undefined') {\n locationObj = window.location;\n } else {\n return false;\n }\n\n return (\n locationObj.href !== 'chrome-error://chromewebdata/' &&\n locationObj.href !== 'safari-resource:/ErrorPage.html' &&\n locationObj.href.indexOf('res://ieframe.dll/http_404.htm') !== 0 &&\n locationObj.href.indexOf('ms-appx-web://microsoft.microsoftedge/assets/errorpages/') !== 0\n );\n }\n /* eslint-enable */\n\n const result = await this.driver.executeJS(pageIsAvailable);\n if (!result.value) {\n throw new PageNotAvailableError('validatePageIsAvailable:PageNotAvailableError');\n }\n }\n\n focusTab() {\n return this.driver.switchTab(this.id);\n }\n\n quit() {\n return undefined;\n }\n\n async getOsAndBrowser() {\n const osAndBrowser = await pRetry(() => this.driver.getBrowserAndOS(), { retries: 3 });\n return {\n uaBrowserName: osAndBrowser.browser,\n uaOs: osAndBrowser.os,\n userAgent: osAndBrowser.userAgent,\n browserVersion: osAndBrowser.browserVersion,\n };\n }\n\n getUserAgentInfo() {\n return pRetry(() => this.driver.getUserAgentInfo(), { retries: 3 });\n }\n}\n\nmodule.exports = WindowUtils;\n","// @ts-check\n\n'use strict';\n\nconst pRetry = require('p-retry');\n\nclass ScreenshotUtils {\n /**\n * @param {any} tabId\n * @param {import('../webdriver')} driver\n */\n constructor(tabId, driver, options = { takeScreenshots: true }) {\n this.tabId = tabId;\n this.driver = driver;\n this.options = options;\n }\n\n base64AddPadding(str) {\n return str + Array(((4 - (str.length % 4)) % 4) + 1).join('=');\n }\n\n shouldTakeScreenshots() {\n if (typeof this.options.takeScreenshots !== 'boolean') {\n return true;\n }\n return this.options.takeScreenshots;\n }\n\n async takeScreenshot() {\n if (!this.shouldTakeScreenshots()) {\n return { devicePixelRatio: 1, image: '' };\n }\n const MAX_RETRY_COUNT = 3;\n const SCREENSHOT_RETRY_DELAY = 2000;\n const devicePixelRatioPromise = this.currentDevicePixelRatio ? Promise.resolve(this.currentDevicePixelRatio) : this.getDevicePixelRatio();\n const getScreenshot = () => Promise.all([devicePixelRatioPromise, this.driver.takeScreenshot()]);\n const [devicePixelRatio, image] = await pRetry(getScreenshot, { retries: MAX_RETRY_COUNT, minTimeout: SCREENSHOT_RETRY_DELAY });\n const base64 = image ? image.value : '';\n const dataUrl = `data:image/png;base64,${this.base64AddPadding(base64.replace(/[\\r\\n]/g, ''))}`;\n return {\n image: dataUrl,\n devicePixelRatio,\n };\n }\n\n getDevicePixelRatio() {\n function devicePixelRatioJS() {\n try {\n return window.devicePixelRatio;\n } catch (err) {\n return 1;\n }\n }\n\n return this.driver.executeJS(devicePixelRatioJS).then(result => result.value);\n }\n\n forcePixelRatio(forceRatio = 1) {\n this.currentDevicePixelRatio = forceRatio;\n return Promise.resolve();\n }\n\n getCurrentDevicePixelRatio() {\n return this.currentDevicePixelRatio;\n }\n}\n\nmodule.exports = ScreenshotUtils;\n","// @ts-check\n\n'use strict';\n\nconst _ = require('lodash');\nconst Jimp = require('jimp');\nconst utils = require('../../utils');\n\nconst logger = require('../../commons/logger').getLogger('image-capture-utils');\n\nclass RectIsOutsideOfImageError extends Error {\n constructor(message) {\n super(message);\n this.rectIsOutsideOfImageError = true;\n Object.setPrototypeOf(this, RectIsOutsideOfImageError.prototype);\n }\n}\n\nasync function cropImageFromImageData(imageData, imageInfo) {\n const _image = imageInfo.image || imageInfo;\n const pixelRatio = imageInfo.devicePixelRatio;\n\n if (!_image) {\n throw new Error('Failed to get image');\n }\n\n const imageRegExMatch = _image.match(/^data\\:[^;]*\\;base64,(.*)$/);\n if (!imageRegExMatch) {\n throw new Error('Image is not in base64 format');\n }\n\n // chromeCropImage2\n const offset = imageData.offset || { top: 0, left: 0 };\n\n offset.top *= pixelRatio;\n offset.left *= pixelRatio;\n\n // elementImage\n if (!imageData.elementRect) {\n logger.warn('missing elementRect', _.omit(imageData, 'image'));\n return {};\n }\n\n const { elementRect } = imageData;\n const image = await Jimp.read(Buffer.from(imageRegExMatch[1], 'base64'));\n let x = elementRect.left * pixelRatio + offset.left * pixelRatio;\n let y = elementRect.top * pixelRatio + offset.top * pixelRatio;\n let width = elementRect.width * pixelRatio;\n let height = elementRect.height * pixelRatio;\n\n if (x < 0) {\n width += x;\n width = width < 0 ? 0 : width;\n x = 0;\n }\n\n if (y < 0) {\n height += y;\n height = height < 0 ? 0 : height;\n y = 0;\n }\n\n const imageWidth = image.bitmap.width;\n const imageHeight = image.bitmap.height;\n if ((x + width) > imageWidth) {\n width = imageWidth - x;\n }\n\n if ((y + height) > imageHeight) {\n height = imageHeight - y;\n }\n\n if (height <= 0 || width <= 0) {\n throw new RectIsOutsideOfImageError('height or width is equal or lower than zero');\n }\n\n const cImage = image.crop(x, y, width, height);\n const base64 = await cImage.getBase64Async(Jimp.MIME_PNG);\n return { elementImage: base64 };\n}\n\nasync function chromeStitchImage(fullSize, parts) {\n const fullImage = await Jimp.read(fullSize.width, fullSize.height);\n\n for (const part of parts) {\n const imageRegExMatch = part.image.match(/^data\\:[^;]*\\;base64,(.*)$/);\n const partImage = await Jimp.read(Buffer.from(imageRegExMatch[1], 'base64'));\n // From the code or types doesn't seem like `fullImage.composite` has an async Promise API\n await new Promise((resolve, reject) => {\n fullImage.composite(partImage, part.position.left, part.position.top, (err) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n });\n });\n }\n const base64 = await fullImage.getBase64Async(Jimp.MIME_PNG);\n return base64;\n}\n\nfunction stitchImage(fullSize, parts) {\n return chromeStitchImage(fullSize, parts);\n}\n\n// ???????????\nfunction uploadDataUrl() {\n return Promise.resolve();\n}\n\nfunction uploadAllDataUrls(imagesObject) {\n function isImageUrl(key) {\n return (typeof imagesObject[key] === 'string') && imagesObject[key].startsWith('data');\n }\n\n function updateKey(key) {\n return uploadDataUrl(imagesObject[key]).then((imageUrl) => ({ key, url: imageUrl }));\n }\n\n return Promise.all(Object.keys(imagesObject).filter(isImageUrl).map(updateKey))\n .then((keyUrlList) => keyUrlList.reduce((obj, current) => {\n obj[current.key] = current.url;\n return obj;\n }, imagesObject));\n}\n\nfunction getElementAbsoluteRectangle(elementRect, pixelRatio) {\n pixelRatio = pixelRatio || 1;\n elementRect = elementRect || {\n left: 0, top: 0, width: 0, height: 0,\n };\n return {\n left: pixelRatio * Math.round(elementRect.left),\n top: pixelRatio * Math.round(elementRect.top),\n width: pixelRatio * Math.round(elementRect.width),\n height: pixelRatio * Math.round(elementRect.height),\n pixelRatio,\n };\n}\n\nclass ImageCaptureUtils {\n /**\n * @param {unknown} _unusedId\n * @param {import('./windowUtils')} windowUtils\n * @param {import('./screenshotUtils')} screenshotUtils\n * */\n constructor(_unusedId, windowUtils, screenshotUtils) {\n this.windowUtils = windowUtils;\n this.screenshotUtils = screenshotUtils;\n }\n\n async takeViewPortImage() {\n const imageInfo = await this.screenshotUtils.takeScreenshot();\n return ((typeof imageInfo === 'string') ? imageInfo : imageInfo.image);\n }\n\n takeImageForComparison() {\n return this.takeViewPortImage();\n }\n\n async takeAreaDataUrl(areas, format) {\n // Future changes in clickim will pass parameters to this function as a single object\n if (areas.areas) {\n areas = areas.areas;\n }\n\n const imageInfo = await this.screenshotUtils.takeScreenshot(format);\n const result = await cropImageFromImageData(areas, imageInfo);\n result.screenImage = imageInfo.image;\n result.absoluteScreenHighlight = getElementAbsoluteRectangle(areas.elementRect, imageInfo.devicePixelRatio);\n return result;\n }\n\n async takeArea(areas) {\n // Future changes in clickim will pass parameters to this function as a single object\n if (areas.areas) {\n areas = areas.areas;\n }\n\n const imageInfo = await this.screenshotUtils.takeScreenshot();\n return uploadAllDataUrls({\n screenImage: imageInfo.image,\n absoluteScreenHighlight: getElementAbsoluteRectangle(areas.elementRect, imageInfo.devicePixelRatio),\n });\n }\n\n forcePixelRatio(forceRatio) {\n return this.screenshotUtils.forcePixelRatio(forceRatio);\n }\n\n getCurrentDevicePixelRatio() {\n return this.screenshotUtils.getCurrentDevicePixelRatio();\n }\n\n async takeStitchedDataUrl(useImprovedScreenshotStitching) {\n const { windowUtils, screenshotUtils } = this;\n\n const stabilize = () => utils.delay(250);\n const usingImprovedStitching = Boolean(useImprovedScreenshotStitching);\n\n async function createPart(position, crop) {\n if (usingImprovedStitching) {\n await windowUtils.scrollToPositionWithoutAnimation(position);\n } else {\n await windowUtils.scrollToPosition(position);\n }\n await stabilize();\n const imageInfo = await screenshotUtils.takeScreenshot();\n const cropResult = await cropImageFromImageData({ elementRect: crop }, imageInfo);\n return ({\n position: { left: position.x + crop.left, top: position.y + crop.top },\n size: { width: crop.width, height: crop.height },\n image: cropResult.elementImage,\n });\n }\n\n async function takeAllParts(positionsData) {\n const allParts = [];\n for (const nextPos of positionsData) {\n const part = await createPart(nextPos.scrollPos, nextPos.cropData);\n allParts.push(part);\n }\n return allParts;\n }\n\n function getPartsPositions(fullPageSize, viewPortSize) {\n const FPW = Math.max(fullPageSize.width, viewPortSize.width);\n const VPW = viewPortSize.width;\n const FPH = Math.max(fullPageSize.height, viewPortSize.height);\n const VPH = viewPortSize.height;\n const Ws = Array.from({ length: Math.ceil(FPW / VPW) }, (__, i) => ({\n scrollX: Math.min(i * VPW, FPW - VPW),\n cropX: i * VPW - Math.min(i * VPW, FPW - VPW),\n cropW: VPW - (i * VPW - Math.min(i * VPW, FPW - VPW)),\n }));\n const Hs = Array.from({ length: Math.ceil(FPH / VPH) }, (__, i) => ({\n scrollY: Math.min(i * VPH, FPH - VPH),\n cropY: i * VPH - Math.min(i * VPH, FPH - VPH),\n cropH: VPH - (i * VPH - Math.min(i * VPH, FPH - VPH)),\n }));\n return Ws.flatMap(w => Hs.map(h => ({\n scrollPos: { x: w.scrollX, y: h.scrollY },\n cropData: {\n top: h.cropY,\n left: w.cropX,\n width: w.cropW,\n height: h.cropH,\n },\n }))\n );\n }\n\n async function createStitchImage(fullPageSize, viewPortSize) {\n const originalPosition = await windowUtils.getCurrentScrollPosition();\n const positions = getPartsPositions(fullPageSize, viewPortSize);\n const parts = await takeAllParts(positions);\n await windowUtils.scrollToPosition(originalPosition);\n return stitchImage(fullPageSize, parts);\n }\n\n const [fullPageSize, viewPortSize] = await Promise.all([windowUtils.getFullPageSize(), windowUtils.getViewportSize()]);\n return await createStitchImage(fullPageSize, viewPortSize);\n }\n}\n\nmodule.exports = ImageCaptureUtils;\n","// @ts-check\n\n'use strict';\n\n\nconst semver = require('semver');\nconst utils = require('../../utils');\nconst WindowUtils = require('../utils/windowUtils');\nconst ScreenshotUtils = require('../utils/screenshotUtils');\nconst ImageCaptureUtils = require('../utils/imageCaptureUtils');\nconst { getLogger } = require('../../commons/logger');\nconst { getSessionPlayer } = require('../../commons/getSessionPlayerRequire');\n\nconst logger = getLogger('tab-service');\n\n/**\n * @typedef {{\n * attachDebugger(): Promise<any>,\n * detachDebugger(): Promise<any>,\n * onDebuggerDetached(): {},\n * tabId: string,\n * domUtils: { getDOM(): Promise<any> },\n * windowUtils: WindowUtils,\n * imageCaptureUtils: ImageCaptureUtils\n * }} TabUtil\n * */\n/**\n * @typedef {{\n * infoId: any;\n * url: any;\n * title: any;\n * favIconUrl: any;\n * order: any;\n * from: any;\n * isMain: any;\n * openerStepId: any;\n * openerOriginalStepId?: any;\n * isClosed?: boolean;\n * currentUrl?: any;\n * lastUpdatedUrl?: any;\n * }} TabInfo\n */\n/**\n * @typedef {{\n * tabCount: number;\n * tabInfos: Record<string, TabInfo>;\n * lastActiveTabInfo?: any;\n * currentTab?: any;\n * }} SessionTab\n */\n\nclass TabService {\n /** @param {import('../webdriver')} driver */\n constructor(driver) {\n this.driver = driver;\n /** @type {Record<string, TabUtil>} */\n this._utils = {};\n /** @type {Record<string, SessionTab>} */\n this.sessionTabs = {};\n /** @type {Record<string, string>} */\n this.pendingTabs = {};\n /** @type {Record<string, Set<any>>} */\n this.addedTabs = {};\n }\n\n on() {}\n\n tabCount(sessionId) {\n if (this.sessionTabs[sessionId]) {\n return this.sessionTabs[sessionId].tabCount;\n }\n return undefined;\n }\n\n getAllOpenTabIds(sessionId) {\n const allTabInfos = this.getAllTabInfos(sessionId);\n return Object.keys(allTabInfos)\n .filter(tabId => !allTabInfos[tabId].isClosed);\n }\n\n /**\n * Get last tab info for pixel validation\n *\n * @returns last tab info\n */\n getActiveTabInfo(sessionId) {\n return this.sessionTabs[sessionId].lastActiveTabInfo;\n }\n\n getAllTabIds(sessionId) {\n return Object.keys(this.getAllTabInfos(sessionId)).map(id => id);\n }\n\n isSessionTab(sessionId, tabId) {\n return this.getAllTabIds(sessionId).includes(tabId);\n }\n\n createSesion(sessionId) {\n if (this.sessionTabs[sessionId]) { // joining an existing session\n return;\n }\n this.addedTabs[sessionId] = new Set();\n this.sessionTabs[sessionId] = {\n tabCount: 0,\n tabInfos: {},\n };\n }\n\n setAddFrameHandlerCallBack(addFrameHandlerCb) {\n this.addFrameHandler = addFrameHandlerCb;\n }\n\n getAllTabInfoStrings(sessionId) {\n const allIds = this.getAllTabIds(sessionId);\n return allIds.map(tabId => {\n const tabInfo = this.getTabInfo(sessionId, tabId);\n return `tabId=${tabId}, url=${tabInfo.url}, order=${tabInfo.order}, isMain=${tabInfo.isMain}, openerStepId=${tabInfo.openerStepId}, isClosed=${tabInfo.isClosed}, currentUrl: ${tabInfo.currentUrl}, lastUpdatedUrl: ${tabInfo.lastUpdatedUrl}`;\n });\n }\n\n getAllTabInfos(sessionId) {\n return this.sessionTabs[sessionId].tabInfos;\n }\n\n addNewTab(sessionId, tabId, openerStepId, options = {}) {\n if (this.addedTabs[sessionId].has(tabId)) {\n return Promise.resolve();\n }\n this.addedTabs[sessionId].add(tabId);\n logger.info(`Adding a new tab sessionId: ${sessionId}, tabId: ${tabId}, openerId: ${openerStepId}`);\n return this.addTab(sessionId, tabId, this.sessionTabs[sessionId].tabCount++, openerStepId, options);\n }\n\n addOpenerStepId(sessionId, tabId, openerStepId) {\n this.sessionTabs[sessionId].tabInfos[tabId].openerStepId = openerStepId;\n }\n addOpenerStep(sessionId, tabId, openerStep) {\n this.sessionTabs[sessionId].tabInfos[tabId].openerStepId = openerStep.id;\n this.sessionTabs[sessionId].tabInfos[tabId].openerOriginalStepId = openerStep.originalStepId;\n }\n\n fixMissingMainTab(sessionId) {\n const mainTab = this.getMainTabInfo(sessionId);\n if (mainTab) {\n return;\n }\n const allTabInfos = this.getAllTabInfos(sessionId);\n if (Object.keys(allTabInfos).length === 0) {\n // no tab infos 🤷\n return;\n }\n Object.values(this.getAllTabInfos(sessionId))[0].isMain = true;\n }\n\n async buildTabInfo(sessionId, tabId, order, openerStepId, options = {}) {\n /** @type {{ title: any; url: any; isMainTab: string; favIconUrl?: any, openerTabId?: any }} */\n const tab = await this.getTabDetails(tabId, sessionId, options);\n const infoId = utils.guid();\n function isMainTab(tabService) {\n if (options.checkForMainTab) {\n return tab.isMainTab;\n }\n\n if (!tab.isMainTab || tab.isMainTab === 'unknown') {\n const missingMainTab = !tabService.getMainTabInfo(sessionId);\n return missingMainTab;\n }\n return tab.isMainTab;\n }\n this.sessionTabs[sessionId].tabInfos[tabId] = {\n infoId,\n url: tab.url,\n title: tab.title,\n favIconUrl: tab.favIconUrl,\n order,\n from: this.getTabInfo(sessionId, tab.openerTabId),\n isMain: isMainTab(this),\n openerStepId,\n };\n return infoId;\n }\n\n async addTab(sessionId, id, order, openerStepId, options = {}) {\n const infoId = await this.buildTabInfo(sessionId, id, order, openerStepId, options);\n const _windowUtils = new WindowUtils(id, this.driver);\n this._utils[infoId] = {\n attachDebugger: () => Promise.resolve(),\n detachDebugger: () => Promise.resolve(),\n onDebuggerDetached: () => {},\n tabId: id,\n domUtils: { getDOM: () => Promise.resolve() },\n windowUtils: _windowUtils,\n imageCaptureUtils: new ImageCaptureUtils(\n id,\n _windowUtils,\n new ScreenshotUtils(id, this.driver, { takeScreenshots: options.takeScreenshots })\n ),\n };\n }\n\n getTabUtilsByTabIdAndSessionId(sessionId, tabId) {\n const tabInfo = this.sessionTabs[sessionId].tabInfos[tabId];\n return this._utils[tabInfo.infoId];\n }\n\n getTabUtilsByTabId(tabId) {\n const infoId = Object.keys(this._utils).find(uId => this._utils[uId].tabId === tabId);\n return this._utils[infoId];\n }\n\n getTabInfo(sessionId, id) {\n return this.sessionTabs[sessionId].tabInfos[id];\n }\n\n getTabUtils(sessionId, tabInfo) {\n if (!tabInfo) {\n return this.getMainTabUtils(sessionId);\n }\n\n if (this._utils[tabInfo.infoId]) {\n return this._utils[tabInfo.infoId];\n }\n\n if (tabInfo.isMain) {\n return this.getMainTabUtils(sessionId);\n }\n\n const infos = this.getAllTabInfos(sessionId);\n const nonMainTabs = Object.keys(infos)\n .map(tabId => infos[tabId])\n .filter(info => !info.isMain);\n if (nonMainTabs.length === 1) {\n return this._utils[nonMainTabs[0].infoId];\n }\n\n const sameTabs = Object.keys(sessionId)\n .map(key => sessionId[key])\n .filter(info => this.isSameTab(sessionId, tabInfo, info));\n if (sameTabs.length > 0) {\n return this._utils[sameTabs[0].infoId];\n }\n\n // if nothing else\n return this.getMainTabUtils(sessionId);\n }\n\n exactUrlMatch(first, second, allUrls) {\n const exactUrlMatch = allUrls\n .filter(url => url === second.url);\n\n if ((first.url === second.url || first.currentUrl === second.url || (first.currentUrl && (first.currentUrl === second.currentUrl))) && (exactUrlMatch.length === 1)) {\n return true;\n }\n return false;\n }\n\n singleExactMatchForParts(first, second, allUrls, combinePartsFunction) {\n const { urlUtils } = getSessionPlayer();\n const firstUrlParts = urlUtils.urlBreaker(first.url || first.currentUrl);\n const secondUrlParts = urlUtils.urlBreaker(second.url || second.currentUrl);\n const firstPartsCombined = combinePartsFunction(firstUrlParts);\n const secondPartsCombined = combinePartsFunction(secondUrlParts);\n const allDomainAndPathMatches = allUrls.map(url => urlUtils.urlBreaker(url))\n .map(urlParts => combinePartsFunction(urlParts))\n .filter(combinedParts => combinedParts === firstPartsCombined);\n if ((firstPartsCombined === secondPartsCombined) && (allDomainAndPathMatches.length === 1)) {\n return true;\n }\n return false;\n }\n\n isSameTab(sessionId, first, second) {\n const { tabMatcher } = getSessionPlayer();\n if (tabMatcher) {\n const infos = this.getAllTabInfos(sessionId);\n const allTabInfos = Object.keys(infos).map(tabId => infos[tabId]);\n return tabMatcher.isSameTab(allTabInfos, first, second);\n }\n // flow:\n // both main => exact match => exact match for domain and path => exact match for domain path and hash\n // => order (legacy data)\n if (first.isMain && second.isMain) {\n return true;\n }\n\n if (first.openerStepId && second.openerStepId && first.openerStepId === second.openerStepId) {\n return true;\n }\n\n const infos = this.getAllTabInfos(sessionId);\n const allTopFrameUrls = Object.keys(infos)\n .map(tabId => infos[tabId].url);\n\n if (this.exactUrlMatch(first, second, allTopFrameUrls)) {\n return true;\n }\n\n const combineDomainAndPath = urlParts => (`${urlParts.domain}/${urlParts.path.join('/')}`);\n if (this.singleExactMatchForParts(first, second, allTopFrameUrls, combineDomainAndPath)) {\n return true;\n }\n\n const combineDomainPathAndHash = urlParts => (`${urlParts.domain}/${urlParts.path.join('/')}#${urlParts.hash}`);\n if (this.singleExactMatchForParts(first, second, allTopFrameUrls, combineDomainPathAndHash)) {\n return true;\n }\n\n if (first.order === second.order) {\n return true;\n }\n\n return false;\n }\n\n getMainTabInfo(sessionId) {\n const infos = this.getAllTabInfos(sessionId);\n return Object.keys(infos)\n .map(id => infos[id])\n .find(tabInfo => tabInfo.isMain);\n }\n\n getMainTabUtils(sessionId) {\n const mainTabInfo = this.getMainTabInfo(sessionId);\n if (!mainTabInfo) {\n return {};\n }\n return this.getTabUtils(sessionId, mainTabInfo);\n }\n\n removeTabInfo(sessionId, tabId) {\n const infos = this.getAllTabInfos(sessionId);\n const info = infos[tabId];\n delete this.sessionTabs[sessionId].tabInfos[tabId];\n delete this._utils[info.infoId];\n this.sessionTabs[sessionId].tabCount--;\n }\n\n getMainTabId(sessionId) {\n const infos = this.getAllTabInfos(sessionId);\n return Object.keys(infos).find(id => infos[id].isMain);\n }\n\n isMainTabExists(sessionId) {\n const mainTabId = this.getMainTabId(sessionId);\n if (!mainTabId) {\n return Promise.resolve(false);\n }\n return Promise.resolve(true);\n }\n\n clearAllTabs(sessionId) {\n const infos = this.getAllTabInfos(sessionId);\n\n this.sessionTabs[sessionId].tabCount = 0;\n Object.keys(infos)\n .forEach(tabId => this.removeTabInfo(sessionId, tabId));\n }\n\n clearNonMainTabs(sessionId) {\n const infos = this.getAllTabInfos(sessionId);\n Object.keys(infos)\n .filter(tabId => !infos[tabId].isMain)\n .forEach(tabId => this.removeTabInfo(sessionId, tabId));\n\n this.sessionTabs[sessionId].tabCount = 1;\n }\n\n switchTab(tabId, sessionId, { forceSwitch = false } = {}) {\n const tabCount = this.sessionTabs[sessionId] ? this.sessionTabs[sessionId].tabCount : 1;\n // looking at session tabs here and tabCount only works if we already \"know\" all the tabs, so we\n // opt out of it in hybrid steps and other cases.\n if ((typeof tabCount === 'number' && tabCount > 1) || forceSwitch) {\n return this.driver.switchTab(tabId);\n }\n return Promise.resolve();\n }\n\n getTabDetails(tabId, sessionId, options = {}) {\n return this.switchTab(tabId, sessionId, options)\n .then(() => {\n if (options.skipLoadInfo) { // the tab title and url are not interesting yet\n return { title: '', url: '' };\n }\n let mainTabPromise = Promise.resolve('unknown');\n if (options.checkForMainTab) {\n mainTabPromise = this.driver.executeJS('return window.__isMainTestimTab').then(r => r.value);\n }\n\n return Promise.all([this.driver.getTitle(), this.driver.getUrl(), mainTabPromise]).then(\n ([title, url, isMainTab]) => ({ title, url, isMainTab }),\n err => {\n logger.error('failed to get url or title', { err });\n return {\n title: '',\n url: '',\n };\n },\n );\n })\n .catch(err => {\n logger.error('failed to switch to tab', { tabId, err });\n });\n }\n\n async getUnregisteredTabId(sessionId) {\n const ids = await this.driver.getTabIds();\n return ids.find(tabId => !this.getAllTabIds(sessionId).includes(tabId));\n }\n\n async waitForTabToOpen(sessionId) {\n const newId = await this.getUnregisteredTabId(sessionId);\n if (newId) {\n return newId;\n }\n await utils.delay(500);\n return await this.waitForTabToOpen(sessionId);\n }\n\n async tryToAddTab(sessionId, openerStepId) {\n if (this.pendingTabs[sessionId]) {\n // don't mess with the main flow\n return;\n }\n const newId = await this.getUnregisteredTabId(sessionId);\n if (!newId) {\n return;\n }\n await this.addNewTab(sessionId, newId);\n await this.addFrameHandler(newId);\n this.sessionTabs[sessionId].currentTab = null;\n }\n\n addNewPopup(id, openerStepId) {\n const tabInfos = this.getAllTabInfos(id);\n const stepWasAdded = Object.keys(tabInfos).find(tabId => tabInfos[tabId].openerStepId === openerStepId);\n if (stepWasAdded) {\n return Promise.resolve();\n }\n if (this.pendingTabs[id]) {\n logger.info(`overriding opener step id from ${this.pendingTabs[id]} to ${openerStepId}`);\n this.pendingTabs[id] = openerStepId;\n return Promise.resolve();\n }\n this.pendingTabs[id] = openerStepId;\n return this.waitForTabToOpen(id)\n .then(newTabId => this.addNewTab(id, newTabId, this.pendingTabs[id])\n .then(() => this.addFrameHandler(newTabId))\n .then(() => delete this.pendingTabs[id])\n .then(() => (this.sessionTabs[id].currentTab = null)));\n }\n\n waitToPendingTabs(id, openerStepId) {\n const retryInterval = 500;\n let timeToWait = 3000;\n const that = this;\n\n if (!openerStepId) {\n return Promise.resolve();\n }\n\n return new Promise(resolve => {\n function checkPendingTabs() {\n if (that.pendingTabs[id] === openerStepId) {\n if (timeToWait - retryInterval > 0) {\n timeToWait -= retryInterval;\n setTimeout(checkPendingTabs, retryInterval);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n }\n\n checkPendingTabs();\n });\n }\n\n isMainTabIncognito() {\n return Promise.resolve(false);\n }\n\n isInvalidStepVersion(step) {\n const isOldVersion = semver.lt(step._version || step.version, '1.2.0');\n const hasParams = !!step.parameterValues;\n const hasBadLocateParams = hasParams &&\n step.parameterValues\n .filter(param => param.type === 'locate')\n .filter(param => !param.frameLocators)\n .length > 0;\n\n return isOldVersion && (!hasParams || hasBadLocateParams);\n }\n\n getTabIdByTabInfo(sessionId, step) {\n const { tabMatcher, commonConstants } = getSessionPlayer();\n if (this.isInvalidStepVersion(step)) {\n return Promise.reject({\n success: false,\n shouldRetry: false,\n errorType: commonConstants.stepResult.INVALID_TEST_VERSION,\n });\n }\n const openerStepId = step.tabInfo?.openerStepId;\n return this.waitToPendingTabs(sessionId, openerStepId)\n .then(() => {\n let tabId;\n if (tabMatcher) {\n const allTabInfos = this.getAllTabIds(sessionId)\n .map((tabId) => Object.assign({}, this.getTabInfo(sessionId, tabId), { tabId }))\n .filter((tabInfo) => !tabInfo.isClosed);\n tabId = tabMatcher.matchTabs(step, allTabInfos);\n } else {\n // old session player (clickim) version - remove once enough time passed\n const stepTabInfo = step.tabInfo;\n if (!stepTabInfo) {\n tabId = this.getMainTabId(sessionId);\n } else {\n tabId = this.getAllTabIds(sessionId).find(tabId => {\n const tabInfo = this.getTabInfo(sessionId, tabId);\n return this.isSameTab(sessionId, tabInfo, stepTabInfo);\n });\n }\n }\n\n if (!tabId) {\n return this.tryToAddTab(sessionId, openerStepId)\n .then(() => { throw new Error('No tab ID found'); });\n }\n if (this.sessionTabs[sessionId].currentTab === tabId) {\n return tabId;\n }\n return this.switchTab(tabId, sessionId)\n .then(() => {\n this.sessionTabs[sessionId].currentTab = tabId;\n return tabId;\n })\n .catch(err => {\n const windowClosedErrors = ['no such window', 'no window found', 'the window could not be found'];\n if (err.message && windowClosedErrors.some(errorString => err.message.toLowerCase().includes(errorString))) {\n this.sessionTabs[sessionId].tabCount--;\n this.sessionTabs[sessionId].tabInfos[tabId].isClosed = true;\n return this.getTabIdByTabInfo(sessionId, step);\n }\n throw err;\n });\n });\n }\n}\n\nmodule.exports = TabService;\n","'use strict';\n\n// Legacy code not supported in selenium mode\nclass PortSelector {\n // eslint-disable-next-line no-useless-constructor, no-empty-function\n constructor() { }\n select() {\n // eslint-disable-next-line no-console\n console.log('\\n\\t\\t\\tinternal error - cant use port selector in selenium!!!!\\n');\n // eslint-disable-next-line prefer-promise-reject-errors\n return Promise.reject({ reason: 'cant use port selector in selenium!' });\n }\n prepare() {}\n handleLegacyDataCaching() {}\n}\n\nmodule.exports = new PortSelector();\n\n\n","const CookieUtils = require('./cookieUtils');\nconst { getSessionPlayer } = require('../../commons/getSessionPlayerRequire');\n\nclass StepActionUtils {\n /** @param {import('../webdriver')} driver */\n constructor(driver, cookieUtils) {\n this.driver = driver;\n this._abortedSteps = [];\n this.cookieUtils = cookieUtils || new CookieUtils(this.driver);\n }\n\n /** @private */\n get sessionPlayerInit() {\n return getSessionPlayer();\n }\n\n getTimeStamp() {\n return Date.now();\n }\n\n getTestimId(element) {\n if (!element) {\n return undefined;\n }\n const { locatorBuilderUtils } = this.sessionPlayerInit;\n const testimIDFieldName = locatorBuilderUtils.TESTIM_ID_FIELD_NAME;\n return locatorBuilderUtils.isEmptyResult(element) ? locatorBuilderUtils.EMPTY_RESULT_ID : element.getAttribute(testimIDFieldName);\n }\n\n resetAbort() {\n this._abortedSteps = [];\n }\n\n abort(result) {\n this._abortedSteps.push(result);\n }\n\n get abortedSteps() {\n return this._abortedSteps;\n }\n\n restoreNativeAlerts() {}\n\n executeOverloadNativeAlertsInFrame() {}\n\n getClickOffset(clickOffset, rect) {\n const { utils } = this.sessionPlayerInit;\n if (clickOffset && utils.isWithinBounds(0, rect.width, clickOffset.x) && utils.isWithinBounds(0, rect.height, clickOffset.y)) {\n return {\n xOffset: clickOffset.x,\n yOffset: clickOffset.y,\n };\n }\n return {\n xOffset: rect.width / 2,\n yOffset: rect.height / 2,\n };\n }\n\n executeInAut(context, code) {\n return this.driver.executeJS(code).then(r => r.value);\n }\n\n extractTargetText(target) {\n return this.driver.getTargetText(target);\n }\n\n extractText(locatedElement) {\n return this.driver.getElementTextJS(locatedElement);\n }\n\n /** @type {import('clickim/src/background/stepActions/stepActionUtils').StepActionUtils['markDynamicParent']} */\n async markDynamicParent(target, id, frameHandler) {\n return this.driver.markDynamicParent(target, id, frameHandler);\n }\n\n getCookie(name) {\n return this.cookieUtils.get({ name }).then(cookie => (cookie ? [cookie] : []));\n }\n setCookie(cookieObject, frameHandler) {\n return this.cookieUtils.set(cookieObject).then(cookie => [cookie]);\n }\n\n getNextDynamicParent(frameHandler, dynamicParentOptions) {\n const code = `return ${this.sessionPlayerInit.codeSnippets.getNextDynamicParent(dynamicParentOptions)}`;\n return this.driver.executeJS(code).then(res => res.value);\n }\n}\n\nmodule.exports = StepActionUtils;\n","// @ts-check\n\n'use strict';\n\nconst featureFlags = require('../../commons/featureFlags');\nconst { getLogger } = require('../../commons/logger');\nconst { getSessionPlayer } = require('../../commons/getSessionPlayerRequire');\n\nconst logger = getLogger('frame-locator');\nconst SELENIUM_ELEMENT_KEY = 'ELEMENT';\nconst SELENIUM_GUID_KEY = 'element-6066-11e4-a52e-4f735466cecf';\n\nconst _getGuidFromSeleniumElement = (seleniumElement) => {\n if (!seleniumElement) {\n return null;\n }\n\n return seleniumElement[SELENIUM_ELEMENT_KEY] || seleniumElement[SELENIUM_GUID_KEY];\n};\n\n/** @typedef {import('clickim/src/background/frameLocator').FrameLocator} FrameLocator */\n/** @typedef {import(\"clickim/src/locators/dynamicParentUtils\").FrameHandler} FrameHandler */\n/** @typedef {import(\"clickim/src/background/playbackContext\").PlaybackContext} PlaybackContext */\n/** @typedef {import(\"clickim/src/background/frameTree\").FrameTree} FrameTree */\n/** @typedef {import(\"clickim/src/common/models/locateStep\").LocateStep} LocateStep */\n/** @typedef {import(\"clickim/src/common/models/step\").Step} Step */\n/** @typedef {FrameLocator['findFrame']} findFrameFn */\n/** @typedef {ConstructorParameters<typeof import('clickim/src/background/frameLocator').FrameLocator>} ClickimFrameLocatorCtorArgs */\n\n/** @param {import('../webdriver')} driver*/\nmodule.exports = function frameLocatorFactory(driver) {\n class FrameLocator {\n /** @type {(...args: ClickimFrameLocatorCtorArgs) => this}} */\n constructor(frameManager, locateElementPlayer) {\n this.frameManager = frameManager;\n this.locateElementPlayer = locateElementPlayer;\n /** @type {Record<string, string>} */\n this._cache = {};\n }\n\n cacheResults(seleniumGuid, resultsUrl) {\n this._cache[seleniumGuid] = resultsUrl;\n }\n\n getResultsFromCache(seleniumGuid) {\n return this._cache[seleniumGuid];\n }\n\n cacheFrameLocateResults(frameHandler) {\n if (frameHandler?.seleniumFrameElement && frameHandler.frameLocateResultUrl) {\n const guid = _getGuidFromSeleniumElement(frameHandler.seleniumFrameElement);\n if (guid) {\n this.cacheResults(guid, frameHandler.frameLocateResultUrl);\n }\n }\n }\n\n /**\n * @param {FrameTree} frameTree\n * @param {string | number} testimFrameId\n * @returns {Promise<FrameHandler>}\n */\n async foundFrameCallback(result, frameTree, testimFrameId) {\n const { frameOffset, locatedElement } = result;\n const { locatorBuilderUtils } = getSessionPlayer();\n if (locatorBuilderUtils.isEmptyResult(locatedElement)) {\n const errorMsg = 'got empty result in frame result, not rejected from locate element player';\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n const el = await driver.switchToLocatedFrame(locatedElement);\n const guid = _getGuidFromSeleniumElement(el.value);\n const frameLocateResultUrl = this.getResultsFromCache(guid);\n\n return {\n frameId: -1,\n frameOffset,\n tabInfo: frameTree.tabInfo,\n tabId: frameTree.tabId,\n testimFrameId,\n testimFullFrameId: `${this.currentFrameHandler.testimFullFrameId}-${testimFrameId}`,\n // @ts-ignore\n seleniumFrameElement: el.value,\n frameLocateResultUrl,\n };\n }\n\n /**\n * @param {LocateStep & { targetId: NonNullable<LocateStep['targetId']>}} frameLocator\n * @param {number} frameDepth\n * @param {FrameHandler & { frameOffset: NonNullable<FrameHandler['frameOffset']> }} currentFrame\n * @param {PlaybackContext} context\n * @param {FrameTree} frameTree\n * @param {Step} stepData\n */\n locate(frameLocator, frameDepth, currentFrame, context, frameTree, stepData) {\n // eslint-disable-next-line new-cap\n const locateElementPlayer = new this.locateElementPlayer(context);\n frameLocator.targetId = `frameLocator_${frameDepth}`;\n return locateElementPlayer.locate(frameLocator, currentFrame, frameLocator.targetId)\n .then(result => {\n result.isVisible = true; // frame visibility check is done on the target element\n return locateElementPlayer.handleLocateResult(result, stepData, frameLocator)\n .catch(() => { throw new Error(); }); // silence [object object] errors;\n })\n .then(result => {\n const { locatedElement } = context.data[frameLocator.targetId];\n return driver.getElementLocationWithPadding(locatedElement)\n .then(location => {\n const value = location.value || { top: 0, left: 0 };\n result.frameOffset = {\n top: currentFrame.frameOffset.top + value.top,\n left: currentFrame.frameOffset.left + value.left,\n };\n return result;\n });\n })\n .then(result => {\n if (locateElementPlayer.addFrameDataToContext) {\n locateElementPlayer.addFrameDataToContext(result.targetId, result.locateResult);\n }\n return this.foundFrameCallback(result, frameTree, frameLocator.testimFrameId);\n })\n .then(frameHandler => {\n this.currentFrameHandler = frameHandler;\n return frameHandler;\n });\n }\n\n /** @type {findFrameFn} */\n async findFrame(stepData, frameLocators, context, frameTree) {\n const allowNoFrameSwitch = featureFlags.flags.enableFrameSwitchOptimization.isEnabled();\n const chronologicalResults = context.playback.resultsHandler.resultsByChronologicOrder;\n const lastResult = chronologicalResults[chronologicalResults.length - 1];\n const allowedRetries = 1;\n const moreThanAllowedRetries = Boolean(lastResult) && lastResult.stepId === stepData.id && lastResult.results.length > allowedRetries;\n if (allowNoFrameSwitch && !moreThanAllowedRetries && this.currentFrameHandler) {\n const currentFramePos = frameLocators.findIndex(x => x.testimFrameId === this.currentFrameHandler.testimFrameId);\n if (currentFramePos > -1) {\n const shorterPath = frameLocators.slice(currentFramePos + 1);\n let frameIndex = 0;\n // Changes to the deepest frame\n for (const frameLocator of shorterPath) {\n frameIndex++;\n this.currentFrameHandler = await this.locate(frameLocator, frameIndex, this.currentFrameHandler, context, frameTree, stepData);\n }\n return this.currentFrameHandler;\n }\n }\n\n const topFrameHandler = await frameTree.getTopFrameHandler();\n topFrameHandler.frameOffset = { top: 0, left: 0 };\n const switchToTop = (allowNoFrameSwitch && this.currentFrameHandler === topFrameHandler) ?\n this.currentFrameHandler :\n driver.switchToTopFrame();\n await switchToTop;\n this.cacheFrameLocateResults(this.currentFrameHandler);\n this.currentFrameHandler = topFrameHandler;\n let frameIndex = 0;\n let currentFrame = topFrameHandler;\n for (const frameLocator of frameLocators) {\n frameIndex++;\n currentFrame = await this.locate(frameLocator, frameIndex, currentFrame, context, frameTree, stepData);\n }\n return currentFrame;\n }\n }\n\n return FrameLocator;\n};\n","'use strict';\n\nconst pRetry = require('p-retry');\nconst io = require('socket.io-client');\nconst config = require('../config');\nconst utils = require('../../utils');\n\nconst MAX_SOCKET_RECONNECT_ATTEMPT = 50;\nconst MAX_RECONNECT_ATTEMPT_BEFORE_SWITCH = 10;\nconst EMIT_PROMISE_TIMEOUT = 5000;\nconst POLLING_TRANSPORT_TIMEOUT_MS = 10 * 1000;\n\nconst logger = require('../logger').getLogger('base socket service');\n\nclass BaseSocketServiceSocketIO {\n constructor() {\n this.attempts = 0;\n /** @type {{ [testResultId: string]: testId }} */\n this.rooms = {};\n /** @type {undefined | Promise<void>} */\n this.emitPromiseQueue = undefined;\n }\n\n joinToMultipleResults() {\n const testResultIds = Object.keys(this.rooms);\n logger.info('re-join all existing rooms', { testResultIds });\n testResultIds.forEach(resultId => {\n const testId = this.rooms[resultId];\n this.emitJoinRoom?.(resultId, testId);\n });\n }\n\n /**\n * @param {string} resultId\n * @param {string} testId\n */\n joinRoom(resultId, testId) {\n this.rooms[resultId] = testId;\n }\n\n /**\n * @param {string} resultId\n * @param {string} testId\n */\n leaveRoom(resultId) {\n delete this.rooms[resultId];\n }\n\n addSocketHandlers() {\n const socketError = (method, err) => {\n let transport = 'websocket';\n try {\n transport = this._socket.io.engine.transport.name;\n } catch (e) {\n /* empty */\n }\n logger.error(`Error in SocketService websocket _${method}_ socket ${this._socket.id} ` +\n `is ${this.url} over ${transport}. Reconnect attempts ${this.attempts}. Error is: ${err?.message}`);\n };\n\n this._socket.on('reconnect_attempt', (attempt) => {\n socketError('reconnect_attempt', { message: 'reconnect attempt', attempt });\n this.attempts++;\n if (this.attempts === MAX_RECONNECT_ATTEMPT_BEFORE_SWITCH && !this.isAllowedWS) {\n this._socket.io.opts.transports = ['polling'];\n this._socket.io.opts.upgrade = false;\n }\n if (this.attempts >= MAX_SOCKET_RECONNECT_ATTEMPT) {\n throw new Error('Can\\'t connect to Testim Servers.\\n' +\n `Action required: Please allow opening a websockets connection to ${config.SERVICES_HOST} in your firewall/proxy`);\n }\n });\n\n this._socket.on('connect_error', (err) => {\n socketError('connect_error', err);\n });\n\n this._socket.on('connect_timeout', (err) => {\n socketError('connect_timeout', err);\n });\n\n this._socket.on('error', err => {\n socketError('error', err);\n });\n\n this._socket.on('reconnect_error', err => {\n if (this.prevErr && this.prevErr.type === err.type) {\n return;\n }\n this.prevErr = err;\n socketError('reconnect_error', err);\n });\n\n this._socket.on('reconnect', () => {\n logger.info('reconnect to socket and re-join to rooms');\n this.joinToMultipleResults();\n });\n\n this._socket.on('connect', () => {\n this.attempts = 0;\n if (this.isAllowedWS === undefined) {\n this.isAllowedWS = this._socket.io.engine.transport && this._socket.io.engine.transport.name === 'websocket';\n }\n if (this.onConnect) {\n this.onConnect();\n }\n });\n }\n\n /**\n * @param {string} projectId\n * @param {string} ns\n */\n initNewSocket(projectId, ns) {\n const opts = {\n query: { projectId },\n requestTimeout: POLLING_TRANSPORT_TIMEOUT_MS,\n transports: ['websocket'],\n upgrade: false,\n forceNew: true,\n rejectUnauthorized: process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0',\n };\n\n if (global.caFileContent) {\n opts.ca = global.caFileContent;\n }\n\n if (global.proxyUri) {\n opts.agent = new global.ProxyAgent(global.proxyUri);\n }\n\n return new Promise(resolve => {\n this.url = `${config.SERVICES_HOST}/${ns}`;\n this._socket = io.connect(this.url, opts);\n this.addSocketHandlers();\n this._socket.on('connect', resolve);\n this._socket.open();\n });\n }\n\n /**\n * @param {string} projectId\n * @param {string} ns\n */\n init(projectId, ns) {\n const opts = {\n query: { projectId },\n requestTimeout: POLLING_TRANSPORT_TIMEOUT_MS,\n transports: ['websocket'],\n upgrade: false,\n rejectUnauthorized: process.env.NODE_TLS_REJECT_UNAUTHORIZED !== '0',\n };\n\n if (global.caFileContent) {\n opts.ca = global.caFileContent;\n }\n\n if (global.proxyUri) {\n opts.agent = new global.ProxyAgent(global.proxyUri);\n }\n\n this.url = `${config.SERVICES_HOST}/${ns}`;\n this._socket = io.connect(this.url, opts);\n this.addSocketHandlers();\n }\n\n /**\n * @param {string} eventName\n * @param {*} eventData\n */\n emitPromise(eventName, eventData) {\n const errorneousEvents = {};\n\n const emitAndWait = () => new Promise((resolve, reject) => {\n this._socket.emit(eventName, eventData, data => {\n if (data?.success) {\n return resolve();\n }\n errorneousEvents[eventName] = eventData;\n\n return reject(new Error('bad ack'));\n });\n });\n\n this.emitPromiseQueue = (this.emitPromiseQueue || Promise.resolve())\n .then(() => pRetry(() => utils.promiseTimeout(emitAndWait(), EMIT_PROMISE_TIMEOUT), { retries: 200, minTimeout: 3000, factor: 1 }))\n .finally(() => {\n if (Object.keys(errorneousEvents).length > 0) {\n logger.error('Bad acknowledge from socket emit', { errorneousEvents });\n }\n });\n\n return this.emitPromiseQueue;\n }\n}\n\nmodule.exports = BaseSocketServiceSocketIO;\n","'use strict';\n\nconst BaseSocketService = require('./baseSocketServiceSocketIO');\n\nclass TestResultServiceSocketIO extends BaseSocketService {\n init(projectId) {\n super.init(projectId, 'testResult');\n this.listerers = {};\n }\n\n listenToTestResult(resultId, testId, onTestResultStatus) {\n if (this.listerers[resultId]) {\n this._socket.off('testResult:updated', this.listerers[resultId]);\n delete this.listerers[resultId];\n }\n\n this.listerers[resultId] = data => {\n if (data.resultId === resultId && data.testId === testId) {\n onTestResultStatus(data.testResult);\n }\n };\n\n this._socket.on('testResult:updated', this.listerers[resultId]);\n }\n\n emitJoinRoom(resultId, testId) {\n return this.emitPromise('testResult:join', {\n resultId,\n testId,\n });\n }\n\n joinToTestResult(resultId, testId) {\n if (this.rooms[resultId]) {\n return Promise.resolve();\n }\n this.joinRoom(resultId, testId);\n return this.emitJoinRoom(resultId, testId);\n }\n\n emitLeaveRoom(resultId, testId) {\n return this.emitPromise('testResult:leave', {\n resultId,\n testId,\n });\n }\n\n leaveTestResult(resultId, testId) {\n if (!this.listerers[resultId]) {\n return Promise.resolve();\n }\n\n this.leaveRoom(resultId);\n this._socket.off('testResult:updated', this.listerers[resultId]);\n delete this.listerers[resultId];\n return this.emitLeaveRoom(resultId, testId);\n }\n\n getSocket() {\n return this._socket;\n }\n}\n\nmodule.exports = new TestResultServiceSocketIO();\n","'use strict';\n\nconst WebSocket = require('ws');\nconst _ = require('lodash');\nconst { WEBSOCKET_HOST } = require('../config');\nconst utils = require('../../utils');\nconst logger = require('../logger').getLogger('socket-ng-service');\nconst { EventEmitter } = require('events');\nconst testimCustomToken = require('../testimCustomToken');\n\nconst WAIT_BETWEEN_RECONNECT_MS = 5000;\n\nclass SocketService extends EventEmitter {\n constructor() {\n super();\n this.clientId = utils.guid();\n this.ws = null;\n this.filterMap = {};\n this.listeners = {};\n }\n\n onReconnect(projectId) {\n logger.info('test result websocket re-connect');\n setTimeout(() => this.connect(projectId), WAIT_BETWEEN_RECONNECT_MS);\n }\n\n /** @param {string} url */\n formatUrl(url) {\n if (url.startsWith('http://')) {\n return url.replace('http://', 'ws://');\n }\n\n if (url.startsWith('https://')) {\n return url.replace('https://', 'wss://');\n }\n\n return url;\n }\n\n parseEvent(event) {\n try {\n return JSON.parse(event);\n } catch (err) {\n logger.error('failed to parse or trigger event', { err });\n }\n return undefined;\n }\n\n connect(projectId) {\n const wsBaseUrl = this.formatUrl(WEBSOCKET_HOST);\n return testimCustomToken.getCustomTokenV3()\n .then(token => new Promise((resolve) => {\n const options = {};\n if (global.proxyUri) {\n options.agent = new global.ProxyAgent(global.proxyUri);\n }\n this.ws = new WebSocket(`${wsBaseUrl}?projectId=${projectId}&clientId=${this.clientId}&token=${token}`, options);\n\n this.ws.on('open', () => {\n logger.info('websocket opened');\n this.reSendAllExistingFilters();\n if (this.onConnect) {\n this.onConnect();\n }\n return resolve();\n });\n\n this.ws.on('close', (event) => {\n logger.info('websocket closed', { event });\n if (!this.ws || this.ws.readyState === WebSocket.CLOSED) {\n this.onReconnect(projectId, token, wsBaseUrl);\n }\n });\n\n this.ws.on('error', (event) => {\n logger.info('websocket error', { event });\n });\n\n this.ws.on('message', (event) => {\n const evObject = this.parseEvent(event);\n if (evObject?.type) {\n this.emit(evObject.type, evObject.data);\n }\n });\n }));\n }\n\n // this is private because our sockets are supposed to be read-only to\n // external consumers and writes need to happen through the REST API\n // this is important since recovery of messages is the case of reconnects is\n // done in the code calling sendMessage and not in sendMessage itself\n sendMessage(msg) {\n if (!this.ws) {\n logger.warn('tried to send error when websocket was disconnected');\n return;\n }\n try {\n this.ws.send(JSON.stringify(msg));\n } catch (err) {\n logger.error('failed to stringify message for sending', { err });\n }\n }\n\n listenOnce(eventName, eventMatcher, listener) {\n const onEvent = (data) => {\n if (eventMatcher(data)) {\n listener(data);\n this.removeListener(eventName, onEvent);\n }\n };\n\n this.on(eventName, onEvent);\n }\n\n listenTo(key, eventName, eventMatcher, listener) {\n //TODO - Consider doing key:value event name subscriptions here, routing inside the .on('message' into an event name based on the key and removing the listeners array.\n function fireIfSameMatchEventMatcher(data) {\n if (eventMatcher(data)) {\n listener(data);\n }\n }\n\n const eventNameArray = Array.isArray(eventName) ? eventName : [eventName];\n eventNameArray.forEach(name => {\n this.listeners[`${key}:${name}`] = this.listeners[`${key}:${name}`] || [];\n const _listener = fireIfSameMatchEventMatcher.bind(this);\n this.listeners[`${key}:${name}`].push(_listener);\n this.on(name, _listener);\n });\n }\n\n reSendAllExistingFilters() {\n Object.keys(this.filterMap).forEach(key => {\n const filter = this.filterMap[key];\n this.sendMessage({ type: 'add-filter', filter });\n });\n }\n\n addFilter(key, query, type, returnFullDocument = false) {\n return new Promise(resolve => {\n const filterId = utils.guid();\n const filter = { query, id: filterId, type, fullDocument: returnFullDocument };\n this.listenOnce('add-filter:done', data => data.id === filterId, resolve);\n this.sendMessage({ type: 'add-filter', filter });\n this.filterMap[key] = filter;\n });\n }\n\n removeListeners(key, typeArray) {\n if (Object.keys(this.listeners).length === 0) {\n return;\n }\n typeArray.forEach(name => {\n const listeners = this.listeners[`${key}:${name}`];\n if (listeners) {\n delete this.listeners[`${key}:${name}`];\n listeners.forEach(listener => this.removeListener(name, listener));\n }\n });\n }\n\n removeFilter(key, type) {\n const filter = this.filterMap[key];\n if (!filter) {\n return;\n }\n\n const typeArray = Array.isArray(type) ? type : [type];\n this.removeListeners(key, typeArray);\n delete this.filterMap[key];\n this.sendMessage({ type: 'remove-filter', filter });\n }\n}\n\nmodule.exports = new SocketService();\n","const testResultServiceSocketIO = require('./testResultServiceSocketIO');\nconst socketService = require('./socketService');\n\nconst { EventEmitter } = require('events');\nconst featureFlags = require('../featureFlags');\n\nconst { socketEventTypes } = require('../constants');\n\nclass TestResultService extends EventEmitter {\n init(projectId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n socketService.onConnect = () => this.emit('socket-connected');\n return;\n }\n testResultServiceSocketIO.init(projectId);\n testResultServiceSocketIO.onConnect = () => this.emit('socket-connected');\n }\n\n joinToTestResult(resultId, testId) {\n //TODO - Consider unifying the joinToTestResult and listenToTestResult flows\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return socketService.addFilter(`${resultId}:testResult`, { resultId, testId }, [\n socketEventTypes.TEST_RESULT_UPDATED,\n socketEventTypes.TEST_RESULT_CREATED,\n ]);\n }\n testResultServiceSocketIO.joinRoom(resultId, testId);\n return testResultServiceSocketIO.emitJoinRoom(resultId, testId);\n }\n\n leaveTestResult(resultId, testId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n socketService.removeFilter(`${resultId}:testResult`, [socketEventTypes.TEST_RESULT_UPDATED, socketEventTypes.TEST_RESULT_CREATED]);\n return Promise.resolve();\n }\n\n return testResultServiceSocketIO.leaveTestResult(resultId, testId);\n }\n\n listenToTestResult(resultId, testId, onTestResultStatus) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n socketService.listenTo(\n `${resultId}:testResult`,\n [socketEventTypes.TEST_RESULT_UPDATED, socketEventTypes.TEST_RESULT_CREATED],\n data => data.resultId === resultId && data.testId === testId,\n data => onTestResultStatus(data)\n );\n return;\n }\n\n testResultServiceSocketIO.listenToTestResult(resultId, testId, onTestResultStatus);\n }\n\n getSocket() {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return undefined;\n }\n return testResultServiceSocketIO.getSocket();\n }\n}\n\nmodule.exports = new TestResultService();\n","\"use strict\";\n\n// Only for extension mode\nclass WindowCreationListener {\n on(){}\n}\n\nmodule.exports = new WindowCreationListener();\n","'use strict';\n\nconst _ = require('lodash');\n\nconst COMMUNICATION_BUFFER_TIME = 1000;\nconst UI_VERIFICATION_STEPS = ['simple-ui-verification', 'wait-for-simple-ui-verification'];\nconst FULL_TIMEOUT_STEP_TYPES = [\n ...UI_VERIFICATION_STEPS,\n 'custom-validation',\n 'sfdc-recorded-step',\n 'sfdc-step-login',\n 'sfdc-step-logout',\n 'sfdc-step-sobjectcreate',\n 'sfdc-step-sobjectdelete',\n 'sfdc-step-findrecord',\n 'sfdc-step-quickaction',\n 'sfdc-step-sobjectvalidate',\n 'sfdc-step-launchapp',\n 'sfdc-step-closeconsoletabs',\n 'sfdc-step-sobjectedit',\n 'sfdc-step-relatedlistaction',\n];\n\nclass PlaybackTimeoutCalculator {\n constructor(isDebuggerConnected) {\n this.resetStepVariables();\n this.resetRetryVariables();\n this.isDebuggerConnected = isDebuggerConnected;\n }\n\n resetStepVariables(totalStepTime, currentRetryTimes) {\n this.currentRetryTimes = currentRetryTimes || [];\n this.totalStepTime = totalStepTime || 0;\n this.totalStepTimesReport = [];\n this.currentRetryTimesReport = {};\n const now = Date.now();\n this.currentRetryStart = now;\n this.lastUpdateTime = now;\n }\n\n resetRetryVariables() {\n const now = Date.now();\n this.currentRetryStart = now;\n this.lastUpdateTime = now;\n this.totalStepTimesReport.push(this.currentRetryTimesReport);\n this.currentRetryTimesReport = {};\n }\n\n initStepRun(stepPlayback) {\n const getRetryTimeoutSuggestions = (totalStepTime) => {\n const timeToPlayStep = this.getTotalStepTimeLeftToPlay(stepPlayback, totalStepTime);\n const MINIMAL_RETRY_TIME = 5000;\n if (timeToPlayStep <= MINIMAL_RETRY_TIME) {\n return [MINIMAL_RETRY_TIME];\n }\n return [Math.max(MINIMAL_RETRY_TIME, timeToPlayStep / 3)];\n };\n stepPlayback.setStartTimestamp();\n const totalStepTime = this.getTotalStepRunTime(stepPlayback);\n const currentRetryTimes = FULL_TIMEOUT_STEP_TYPES.includes(stepPlayback.stepType) ? [totalStepTime] : getRetryTimeoutSuggestions(totalStepTime);\n this.resetStepVariables(totalStepTime, currentRetryTimes);\n stepPlayback.context.data.maxTotalStepTime = totalStepTime;\n }\n\n getStepTimes() {\n this.totalStepTimesReport.push(this.currentRetryTimesReport);\n return _.cloneDeep(this.totalStepTimesReport);\n }\n\n initRetryTime() {\n this.resetRetryVariables();\n }\n\n getTotalStepRunTime(stepPlayback) {\n const HALF_HOUR_IN_MS = 30 * 60 * 1000;\n let fallbackTimeout = stepPlayback.context.config.stepTimeout;\n if (UI_VERIFICATION_STEPS.includes(stepPlayback.stepType)) {\n fallbackTimeout = stepPlayback.context.config.applitoolsStepTimeout || HALF_HOUR_IN_MS;\n }\n if (stepPlayback.step.type.startsWith('sfdc-')) {\n fallbackTimeout = stepPlayback.step.defaultTimeout;\n }\n return (stepPlayback.step.useStepTimeout && stepPlayback.step.stepTimeout) ? stepPlayback.step.stepTimeout : fallbackTimeout;\n }\n getTotalStepTimeLeftToPlay(stepPlayback, totalStepTime = this.totalStepTime) {\n const playTimeSoFar = Date.now() - stepPlayback.startTimestamp;\n return totalStepTime - playTimeSoFar;\n }\n getCurrentRetryTime(stepPlayback) {\n return (stepPlayback.retryIndex < this.currentRetryTimes.length) ?\n this.currentRetryTimes[stepPlayback.retryIndex] :\n this.getTotalStepTimeLeftToPlay(stepPlayback);\n }\n getTotalCurrentRetryTimeLeft(stepPlayback) {\n const totalRetryTime = Date.now() - this.currentRetryStart;\n return this.getCurrentRetryTime(stepPlayback) - totalRetryTime + COMMUNICATION_BUFFER_TIME;\n }\n getTabTimeout(stepPlayback) {\n return this.getTotalCurrentRetryTimeLeft(stepPlayback);\n }\n getDynamicParentTimeout(stepPlayback) {\n return this.getTotalCurrentRetryTimeLeft(stepPlayback);\n }\n getFrameTimeout(stepPlayback) {\n return this.getTotalCurrentRetryTimeLeft(stepPlayback);\n }\n getLocateTimeout(stepPlayback) {\n return this.getTotalCurrentRetryTimeLeft(stepPlayback);\n }\n\n calcAndroidScrollTimeout(stepPlayback) {\n const buffer = 5000;\n let timePerEvent = 2000; // absolute scroll - 2 seconds per event + buffer\n\n if (stepPlayback.step.isScrollToElement) {\n // scroll to element, 4 secs per event to account for locate flow in each event\n timePerEvent = 4000;\n }\n\n return (stepPlayback.step.events.length * timePerEvent) + buffer;\n }\n\n getActionTimeout(stepPlayback) {\n if (this.isDebuggerConnected) {\n return 6e5;\n }\n const SLEEP_ERROR_MARGIN_MS = 5000;\n const actionType = stepPlayback.step.type;\n const MIN_ACTION_PLAYBACK_TIME = 30000;\n\n let actionTime;\n if (actionType === 'sleep') {\n actionTime = stepPlayback.step.durationMS + SLEEP_ERROR_MARGIN_MS;\n } else if (actionType === 'android-scroll') {\n actionTime = Math.max(this.calcAndroidScrollTimeout(stepPlayback), MIN_ACTION_PLAYBACK_TIME);\n } else {\n actionTime = Math.max(this.getTotalStepTimeLeftToPlay(stepPlayback), MIN_ACTION_PLAYBACK_TIME);\n }\n return actionTime;\n }\n\n setStepPhaseTime(phase) {\n const now = Date.now();\n const totalTime = now - this.lastUpdateTime;\n this.lastUpdateTime = now;\n this.currentRetryTimesReport[phase] = totalTime;\n }\n\n reportGetTabTime() {\n this.setStepPhaseTime('tab');\n }\n\n reportGetFrameTime() {\n this.setStepPhaseTime('frame');\n }\n\n reportCalcConditionTime() {\n this.setStepPhaseTime('condition');\n }\n\n reportPreLocateActionsTime() {\n this.setStepPhaseTime('pre-locate');\n }\n\n reportFindElementsTime() {\n this.setStepPhaseTime('locate');\n }\n\n reportStepActionTime() {\n this.setStepPhaseTime('action');\n }\n}\n\n\nmodule.exports = PlaybackTimeoutCalculator;\n","'use strict';\n\nconst { DISABLE_DEBUGGER_INFINITE_TIMEOUT } = require('./config');\n\nmodule.exports.isDebuggerConnected = () => {\n try {\n if (DISABLE_DEBUGGER_INFINITE_TIMEOUT) {\n return false;\n }\n const inspector = require('inspector');\n //https://github.com/GoogleChrome/puppeteer/blob/14fb3e38db7c97fc3ea76c65e6f219b0ddb3b54f/utils/testrunner/TestRunner.js#L279\n if (inspector.url()) {\n return true;\n }\n } catch (e) {\n /* empty */\n }\n return false;\n};\n","'use strict';\n\nconst { getSessionPlayer } = require('../../commons/getSessionPlayerRequire');\n\n/** @typedef {typeof import('clickim/src/background/stepActions/stepAction').StepAction} ClickimStepActionCtor */\n/** @typedef {ConstructorParameters<ClickimStepActionCtor>} ClickimStepActionCtorParams */\n/** @typedef {InstanceType<ClickimStepActionCtor>} ClickimStepAction */\n\nclass StepAction {\n /** @type {(...args: ClickimStepActionCtorParams) => this} */\n constructor(\n step,\n context,\n frameHandler,\n exportsGlobal = {},\n stepActionUtils = undefined,\n locateElementPlayer = undefined,\n exportsTest = {},\n ) {\n this.step = step;\n this.context = context;\n this.frameHandler = frameHandler;\n this.frameId = 0;\n /** @type {import('../utils/stepActionUtils'))} */\n this.stepActionUtils = stepActionUtils;\n this.locateElementPlayer = locateElementPlayer;\n this.exportsGlobal = exportsGlobal;\n this.exportsTest = exportsTest;\n }\n\n get driver() {\n return this.stepActionUtils.driver;\n }\n\n /** @protected */\n get sessionPlayerInit() {\n return getSessionPlayer();\n }\n\n async performAction() {\n throw new Error('not implemented');\n }\n\n getTarget() {\n const targetId = this.step.targetId || 'targetId';\n return this.context.data[targetId];\n }\n\n /** @type {ClickimStepAction['execute']} */\n async execute(stepActionFactory, step) {\n try {\n const res = await this.performAction(stepActionFactory, step);\n return { success: true, ...res };\n } catch (err) {\n const errorMsg = err?.message || err?.seleniumStack?.message;\n const displayMsg = err?.displayMessage;\n return {\n success: false,\n reason: errorMsg,\n exception: err,\n errorType: this.sessionPlayerInit.commonConstants.stepResult.ACTION_EXCEPTION,\n resultInfo: {\n exception: `selenium exception: ${errorMsg}`,\n // clickim -> playbackStepResultHandler.js -> FAILURE_REASON_MAPPING -> ACTION_EXCEPTION\n // expects resultInfo.error or resultInfo.reason\n error: displayMsg || errorMsg,\n },\n };\n }\n }\n}\n\nmodule.exports = StepAction;\n","// @ts-check\n\n'use strict';\n\nconst StepAction = require('./stepAction');\nconst featureFlags = require('../../commons/featureFlags');\nconst { JSDOM, VirtualConsole } = require('jsdom');\nconst { getLogger } = require('../../commons/logger');\nconst { getSessionPlayer } = require('../../commons/getSessionPlayerRequire');\n\n\nconst logger = getLogger('locate-step-action');\nconst DEFAULT_VISIBILITY_RESULT = { opacity: 1, clientRects: {} };\n\n/**\n * @param {import('../webdriver')} driver\n*/\nfunction createUtils(driver) {\n return {\n getFrameIdByTestimFrameId() { },\n\n async setElementResultDataOnContext(target) {\n const seleniumResponse = await driver.getElement(target.locatedElement);\n target.seleniumElement = seleniumResponse.value;\n },\n\n getElementRectangle(target) {\n return driver.getElementRect(target);\n },\n\n getOffsets(frameHandler) {\n return Promise.resolve([frameHandler.frameOffset || {}]);\n },\n\n /** @type {typeof import('clickim/src/background/stepActions/locateStepAction').LocateStepAction['htmlStringToDom']} */\n htmlStringToDom(htmlString, url, nonBodyElements, bodyTagName, setDomTimeout = true) {\n const virtualConsole = new VirtualConsole();\n const jsdom = new JSDOM(htmlString, {\n virtualConsole,\n });\n\n const { window } = jsdom;\n if (setDomTimeout) {\n // memory leak fix.\n // this used to be nexttick, but it was too soon.\n\n setTimeout(() => {\n window.close();\n }, 1000 * 60);\n }\n return Object.assign(window.document, { TESTIM_URL: url });\n },\n\n shouldUseNativeVisibilityCheck(locateStep, driver, visibilityUtils, positionUtils) {\n if (locateStep.opacity === 0) {\n return false;\n }\n if (locateStep.isShadowed) {\n return false;\n }\n if ((visibilityUtils === undefined) || (positionUtils === undefined)) {\n return true;\n }\n if (featureFlags.flags.useClickimVisibilityChecks.isEnabled()) {\n return false;\n }\n if (driver.isSafari()) {\n return featureFlags.flags.useSafariWebdriverVisibilityChecks.isEnabled();\n }\n return true;\n },\n\n /** @type {typeof import('clickim/src/background/stepActions/locateStepAction').LocateStepAction['isVisible']} */\n async isVisible(target, targetElement, rect, locateStep, frameHandler, allOffsets, dom) {\n const { locatorBuilderUtils, codeSnippets, visibilityUtils, positionUtils } = getSessionPlayer();\n const useNativeVisibilityCheck = this.shouldUseNativeVisibilityCheck(locateStep, driver, visibilityUtils, positionUtils);\n if (useNativeVisibilityCheck) {\n return driver.isVisible(target.seleniumElement);\n }\n\n if (!target.seleniumElement) {\n return { visible: false, invisibleReason: 'element not found' };\n }\n\n // this is here for the side effects.\n try {\n await driver.isVisible(target.seleniumElement);\n } catch {\n /* ignored */\n }\n if (!targetElement || locatorBuilderUtils.isEmptyResult(targetElement)) {\n return { visible: false, invisibleReason: 'element not found' };\n }\n const middlePosition = positionUtils.calculateElementMiddlePoint(rect);\n const points = [middlePosition, positionUtils.calculateClickPoint(locateStep.clickOffset, rect)].filter(Boolean);\n const code = codeSnippets.getVisibilityCode.getCompoundVisibilityInfoCode(target.locatedElement, points, false, locateStep);\n let response;\n try {\n response = await driver.execute(`return ${code}`);\n } catch (err) {\n logger.error('failed to execute getVisibilityCode', { err });\n throw err;\n }\n const { value } = response || {};\n const elementVisibilityInfo = value.elementVisibilityInfo || DEFAULT_VISIBILITY_RESULT;\n const [middleElementFromPoint, clickElementFromPoint] = value.elementsFromPointResults || [null, null];\n return visibilityUtils.checkElementVisibility(elementVisibilityInfo, locateStep, clickElementFromPoint, middleElementFromPoint, dom, targetElement);\n },\n\n scrollToElement(frameHandler, locatedElement) {\n const { codeSnippets } = getSessionPlayer();\n const code = codeSnippets.scrollToElement;\n return driver.execute(code(locatedElement));\n },\n };\n}\n\nclass LocateStepAction extends StepAction {\n execute() {\n return this.driver.getHTML(this.step);\n }\n\n static getUtils(driver) {\n return Object.assign(createUtils(driver), { useLocatedElement: true });\n }\n\n static getFrameIdByTestimFrameId(...args) {\n logger.warn('Unplanned access to getFrameIdByTestimFrameId()');\n throw new Error('Use .getUtils() instead');\n }\n\n static setElementResultDataOnContext(...args) {\n logger.warn('Unplanned access to setElementResultDataOnContext()');\n throw new Error('Use .getUtils() instead');\n }\n\n static getElementRectangle(...args) {\n logger.warn('Unplanned access to getElementRectangle()');\n throw new Error('Use .getUtils() instead');\n }\n\n static getOffsets(...args) {\n logger.warn('Unplanned access to getOffsets()');\n throw new Error('Use .getUtils() instead');\n }\n\n static htmlStringToDom(...args) {\n logger.warn('Unplanned access to htmlStringToDom()');\n throw new Error('Use .getUtils() instead');\n }\n\n static isVisible(...args) {\n logger.warn('Unplanned access to isVisible()');\n throw new Error('Use .getUtils() instead');\n }\n}\n\nmodule.exports = LocateStepAction;\n\n","/* globals getLocatedElement, elementScrollTo */\n\n'use strict';\n\nconst scroll = function (elementToScrollOn, elementToScrollTo, isScrollToElement, isDynamicScroll, expectedX, expectedY, shouldScrollLeft, shouldScrollTop) {\n function doScroll(expectedPosition, element) {\n if (!element) {\n return { success: false };\n }\n\n elementScrollTo(element, expectedPosition.x, expectedPosition.y);\n\n const actualX = element.scrollLeft;\n const actualY = element.scrollTop;\n\n const success = (Math.abs(actualY - expectedPosition.y) < 1) && (Math.abs(actualX - expectedPosition.x) < 1);\n return { success, actualX, actualY };\n }\n\n function getExpectedPosition(parentElement, locatedElement, isScrollToElement, expectedX, expectedY, shouldScrollLeft, shouldScrollTop) {\n if (!isScrollToElement) {\n return { x: expectedX, y: expectedY };\n }\n\n const target = getLocatedElement(locatedElement);\n\n if (isDynamicScroll && !target) {\n return { x: parentElement.scrollWidth, y: parentElement.scrollHeight };\n }\n\n if (!target) {\n throw new Error('could not find target element');\n }\n\n const targetRect = target.getBoundingClientRect();\n\n\n let yScroll = 0;\n let xScroll = 0;\n const MAX_HEIGHT = Math.max(window.innerHeight - (targetRect.height + 10), 0);\n const MAX_WIDTH = Math.max(window.innerWidth - (targetRect.width + 10), 0);\n\n yScroll = shouldScrollTop ?\n parentElement.scrollTop + targetRect.top - Math.min(expectedY, MAX_HEIGHT) :\n parentElement.scrollTop;\n\n xScroll = shouldScrollLeft ?\n parentElement.scrollLeft + targetRect.left - Math.min(expectedX, MAX_WIDTH) :\n parentElement.scrollLeft;\n\n return { x: Math.round(xScroll), y: Math.round(yScroll) };\n }\n\n const isDocument = !elementToScrollOn;\n elementToScrollOn = !isDocument ? getLocatedElement(elementToScrollOn) : (document.scrollingElement || document.documentElement);\n\n if (!elementToScrollOn) {\n throw new Error('could not find target to scroll on');\n }\n const positionBeforeScroll = { top: elementToScrollOn.scrollTop, left: elementToScrollOn.scrollLeft };\n let expectedPosition = getExpectedPosition(elementToScrollOn, elementToScrollTo, isScrollToElement, expectedX, expectedY, shouldScrollLeft, shouldScrollTop);\n\n let result = doScroll(expectedPosition, elementToScrollOn);\n\n if (isDocument && (!document.scrollingElement) && (!result.success) && (positionBeforeScroll.top === elementToScrollOn.scrollTop) && (positionBeforeScroll.left === elementToScrollOn.scrollLeft)) {\n elementToScrollOn = document.body;\n expectedPosition = getExpectedPosition(elementToScrollOn, elementToScrollTo, isScrollToElement, expectedX, expectedY, shouldScrollLeft, shouldScrollTop);\n result = doScroll(expectedPosition, elementToScrollOn);\n }\n\n let actualXString = result.actualX;\n let actualYString = result.actualY;\n const actualScrollToElement = getLocatedElement(elementToScrollTo);\n\n if (isScrollToElement && isDynamicScroll && !actualScrollToElement) {\n return { success: false, expectedPosition };\n }\n\n if (isScrollToElement) {\n if (!actualScrollToElement) {\n throw new Error('could not find target to scroll to');\n }\n const rect = actualScrollToElement.getBoundingClientRect();\n actualXString = rect.left;\n actualYString = rect.top;\n }\n return { success: result.success, actualX: actualXString, actualY: actualYString };\n};\n\nmodule.exports = scroll;\n","'use strict';\n\nconst scroll = require('./scripts/scroll');\nconst StepAction = require('./stepAction');\n\nclass ScrollStepAction extends StepAction {\n getFailureString(step, expectedX, expectedY, actualX, actualY) {\n if (!step.isScrollToElement) {\n return `Scrolling limit reached. Expected:(y: ${expectedY}, x: ${expectedX}); Actual:(y:${actualY}, x: ${actualX})`;\n }\n let failureMessage = 'Scrolling limit reached';\n if (step.shouldScrollTop) {\n failureMessage += `. Expected top margin: ${expectedY}, actual: ${actualY}`;\n }\n if (step.shouldScrollLeft) {\n failureMessage += `. Expected left margin: ${expectedX}, actual: ${actualX}`;\n }\n return failureMessage;\n }\n\n async scroll(elementToScrollTo, step, elementToScrollOn) {\n const { codeSnippets, commonConstants: { stepResult } } = this.sessionPlayerInit;\n const expectedY = Math.round(Number(step.isScrollToElement ? step.marginTop : step.y));\n const expectedX = Math.round(Number(step.isScrollToElement ? step.marginLeft : step.x));\n\n // in Firefox setting scrollTop and scrollLeft propeties simultaneously takes only the lates,\n const elementScrollTo = this.driver.isFirefox() ? function (element, x, y) {\n element.scrollTo(x, y);\n } : function (element, x, y) {\n element.scrollTop = y;\n element.scrollLeft = x;\n };\n const scrollCode = `\n var getLocatedElement = ${codeSnippets.getLocatedElementCode};\n var elementScrollTo = ${elementScrollTo.toString()};\n var scroll = ${scroll.toString()};\n return scroll.apply(null, arguments)\n `;\n\n try {\n const res = await this.driver.executeJSWithArray(scrollCode, [\n elementToScrollOn,\n elementToScrollTo,\n Boolean(step.isScrollToElement),\n Boolean(step.isDynamicScroll),\n expectedX,\n expectedY,\n step.shouldScrollLeft,\n step.shouldScrollTop,\n ]);\n if (!res?.value) {\n return {\n errorType: stepResult.SCROLL_ACTION_FAILURE,\n success: false,\n };\n }\n\n const { success, actualX, actualY } = res.value;\n\n if (success) {\n return { success: true };\n }\n\n return {\n errorType: stepResult.SCROLL_ACTION_FAILURE,\n success: false,\n resultInfo: { error: this.getFailureString(step, expectedX, expectedY, actualX, actualY) },\n };\n } catch (error) {\n return {\n errorType: stepResult.SCROLL_ACTION_FAILURE,\n success: false,\n };\n }\n }\n\n scrollOnDocument(step, elementToScrollTo) {\n return this.scroll(elementToScrollTo, step);\n }\n\n scrollOnElement(step, elementToScrollTo) {\n return this.scroll(elementToScrollTo, step, this.getTarget().locatedElement);\n }\n\n execute() {\n const context = this.context;\n const step = this.step;\n const elementToScrollTo = step.isScrollToElement ? context.data.scrollToElement.locatedElement : null;\n\n return step.element.isDocument ?\n this.scrollOnDocument(step, elementToScrollTo) :\n this.scrollOnElement(step, elementToScrollTo);\n }\n}\n\nmodule.exports = ScrollStepAction;\n","/* globals getLocatedElement, dispatchFocus */\n\n'use strict';\n\nconst doClick = (eventData, done) => {\n const eventConstructorSupported = typeof Event === 'function';\n\n window.__unloadNavigator = resolve;\n\n window.addEventListener('unload', window.__unloadNavigator);\n\n function handleReactSelectFocusQuirk(context, event) {\n function focusReactSelect(element) {\n function getReactSelectRoot(_element) {\n // eslint-disable-next-line prefer-spread\n return getParents(_element).find((el) => Array.apply(null, el.classList || []).includes('Select-control'));\n }\n\n function getReactSelectInput(_element) {\n const root = getReactSelectRoot(_element);\n return root ? root.querySelector('INPUT') : null;\n }\n\n const reactSelectInput = getReactSelectInput(element);\n if (reactSelectInput) {\n reactSelectInput.focus();\n }\n }\n\n const isReactSelectElement = context.quirks?.isReactSelect;\n if (event.type === 'mousedown' && isReactSelectElement) {\n focusReactSelect(context.element);\n }\n }\n\n function handleCKEditorQuirk(context, event) {\n const isCKEditorFrame = context.quirks?.isCKEditorFrame;\n if (event.type === 'click' && isCKEditorFrame) {\n document.body.focus();\n }\n }\n\n function getParents(el) {\n return el ? [el].concat(getParents(el.parentNode)) : [];\n }\n\n function resolve(result) {\n const status = {\n status: 'done',\n result,\n success: true,\n };\n if (context.isNonTextableElemnet) {\n status.reason = 'Set text on non input element';\n }\n\n done(status);\n }\n\n function reject(result) {\n result = result || {};\n const status = {\n status: 'failed',\n result,\n success: false,\n };\n\n done(status);\n }\n\n function dispatchMouseOver(element) {\n const event = eventConstructorSupported ? new Event('mouseover', { composed: true }) : document.createEvent('Events');\n event.initEvent('mouseover', true, true);\n element.dispatchEvent(event);\n }\n\n function dispatchMouseMove(element) {\n const modifiers = {};\n const rect = element.getBoundingClientRect();\n const clientX = rect.left + (rect.width / 2);\n const clientY = rect.top + (rect.height / 2);\n const button = 0;\n const eventType = 'mousemove';\n const event = createMouseEvent(eventType, modifiers, clientX, clientY, button);\n element.dispatchEvent(event);\n }\n\n function getEventPosition(userEvent, element) {\n function isWithinBounds(start, end, point) {\n return (point > start) && (point < end);\n }\n\n const pointerPosition = userEvent.pointerPosition || {};\n const rect = element.getBoundingClientRect();\n const clientX = pointerPosition.originX && isWithinBounds(rect.left, rect.left + rect.width, pointerPosition.originX) ? pointerPosition.originX : rect.left + (rect.width / 2);\n const clientY = pointerPosition.originY && isWithinBounds(rect.top, rect.top + rect.height, pointerPosition.originY) ? pointerPosition.originY : rect.top + (rect.height / 2);\n return { x: clientX, y: clientY };\n }\n\n function getEventDictionary(modifiers, clientX, clientY) {\n return {\n screenX: 0,\n screenY: 0,\n clientX,\n clientY,\n ctrlKey: Boolean(modifiers.ctrl),\n altKey: Boolean(modifiers.alt),\n shiftKey: Boolean(modifiers.shift),\n metaKey: Boolean(modifiers.meta),\n bubbles: true,\n cancelable: true,\n composed: true,\n };\n }\n\n function createPointerEvent(eventType, modifiers, clientX, clientY) {\n if (!window.PointerEvent) {\n return undefined;\n }\n const eventProperties = getEventDictionary(modifiers, clientX, clientY);\n eventProperties.pointerType = 'mouse';\n eventProperties.isPrimary = true;\n return new window.PointerEvent(eventType, eventProperties);\n }\n\n function createMouseEvent(eventType, modifiers, clientX, clientY, button) {\n const event = eventConstructorSupported ? new MouseEvent('click', { composed: true }) : document.createEvent('MouseEvents');\n event.initMouseEvent(\n eventType,\n true,\n true,\n document.defaultView,\n 1,\n 0,\n 0,\n clientX,\n clientY,\n Boolean(modifiers.ctrl),\n Boolean(modifiers.alt),\n Boolean(modifiers.shift),\n Boolean(modifiers.meta),\n button,\n document.body ? document.body.parentNode : document.documentElement);\n return event;\n }\n\n function getMouseEvent(userEvent, context) {\n const pointerEvents = ['pointerup', 'pointerdown', 'pointermove'];\n const modifiers = context.modifiers || {};\n const pos = getEventPosition(userEvent, context.element);\n const button = context.button || 0;\n const eventType = userEvent.event;\n if (pointerEvents.includes(eventType)) {\n return createPointerEvent(eventType, modifiers, pos.x, pos.y);\n }\n return createMouseEvent(eventType, modifiers, pos.x, pos.y, button);\n }\n\n function findEffectiveActiveElement() {\n let activeElement = document.activeElement;\n while (activeElement.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n }\n\n function executeSynchronousEventSequence(context) {\n context.events\n .map((userEvent) => {\n try {\n return getMouseEvent(userEvent, context);\n } catch (e) {\n // pointer events not supported :shrug:\n return undefined;\n }\n })\n .filter(Boolean)\n .forEach((event) => {\n context.element.dispatchEvent(event);\n handleReactSelectFocusQuirk(context, event);\n handleCKEditorQuirk(context, event);\n });\n\n if (window.__unloadNavigator) {\n window.removeEventListener('unload', window.__unloadNavigator);\n }\n }\n\n const element = eventData.isRoot ? document.documentElement : getLocatedElement(eventData.locatedElement);\n // eslint-disable-next-line no-var\n var context = {\n element,\n events: eventData.events,\n quirks: eventData.quirks,\n modifiers: eventData.modifiers,\n button: eventData.button,\n };\n\n if (!context.element) {\n reject('element not found');\n return;\n }\n\n dispatchMouseOver(context.element);\n dispatchMouseMove(context.element);\n try {\n executeSynchronousEventSequence(context);\n const oldActiveElement = findEffectiveActiveElement();\n const quirks = context.quirks;\n const isReactSelectElement = quirks?.isReactSelect;\n const isCKEditorFrame = quirks?.isCKEditorFrame;\n if (!isReactSelectElement && !isCKEditorFrame) {\n dispatchFocus(eventData.elementToFocusLocatedElement, oldActiveElement);\n }\n resolve();\n } catch (e) {\n reject(e.toString());\n }\n};\n\nmodule.exports = doClick;\n","'use strict';\n\n\nconst doDragPath = function (eventData, done) {\n const eventConstructorSupported = typeof Event === 'function';\n const pointerEventConstructorSupported = typeof PointerEvent === 'function';\n const MAX_EVENT_TIMEOUT = 40; //max msec between events\n\n window.__unloadNavigator = resolve;\n\n window.addEventListener('unload', window.__unloadNavigator);\n\n function resolve(result) {\n const status = {\n status: 'done',\n result,\n success: true,\n };\n done(status);\n }\n\n function reject(result) {\n result = result || {};\n const status = {\n status: 'failed',\n result,\n success: false,\n };\n\n done(status);\n }\n\n function dispatchMouseOver(element) {\n const event = eventConstructorSupported ? new Event('mouseover', { composed: true }) : document.createEvent('Events');\n event.initEvent('mouseover', true, true);\n\n element.dispatchEvent(event);\n }\n\n function dispatchMouseMove(element) {\n const modifiers = {};\n const rect = element.getBoundingClientRect();\n const clientX = rect.left + (rect.width / 2);\n const clientY = rect.top + (rect.height / 2);\n const button = 0;\n const eventType = 'mousemove';\n const event = createMouseEvent(eventType, modifiers, clientX, clientY, button);\n\n element.dispatchEvent(event);\n }\n\n function getEventPosition(userEvent, element) {\n function isWithinBounds(start, end, point) {\n return (point > start) && (point < end);\n }\n\n const pointerPosition = userEvent.pointerPosition || {};\n if (context.isDrag) {\n return { x: pointerPosition.originX || 0, y: pointerPosition.originY || 0 };\n }\n const rect = element.getBoundingClientRect();\n const clientX = pointerPosition.originX && isWithinBounds(rect.left, rect.left + rect.width, pointerPosition.originX) ? pointerPosition.originX : rect.left + (rect.width / 2);\n const clientY = pointerPosition.originY && isWithinBounds(rect.top, rect.top + rect.height, pointerPosition.originY) ? pointerPosition.originY : rect.top + (rect.height / 2);\n return { x: clientX, y: clientY };\n }\n\n function getEventDictionary(modifiers, clientX, clientY) {\n return {\n screenX: 0,\n screenY: 0,\n clientX,\n clientY,\n ctrlKey: Boolean(modifiers.ctrl),\n altKey: Boolean(modifiers.alt),\n shiftKey: Boolean(modifiers.shift),\n metaKey: Boolean(modifiers.meta),\n bubbles: true,\n cancelable: true,\n composed: true,\n };\n }\n\n function createPointerEvent(eventType, modifiers, clientX, clientY, button) {\n if (pointerEventConstructorSupported) {\n const eventProperties = getEventDictionary(modifiers, clientX, clientY);\n eventProperties.pointerType = 'mouse';\n eventProperties.isPrimary = true;\n return new window.PointerEvent(eventType, eventProperties);\n }\n const event = document.createEvent('PointerEvent');\n event.initPointerEvent(\n eventType,\n true, /* bubbles */\n true, /* cancelable */\n document.defaultView, /* view */\n 1, /* detail */\n 0, /* screenX */\n 0, /* screenY */\n clientX, /* clientX */\n clientY, /* clientY */\n Boolean(modifiers.ctrl), /* ctrl */\n Boolean(modifiers.alt), /* alt */\n Boolean(modifiers.shift), /* shift */\n Boolean(modifiers.meta), /* meta */\n button, /* button */\n document.body ? document.body.parentNode : document.documentElement,\n 0, /* offsetYArg */\n 0, /* offsetXArg */\n 0, /* widthArg */\n 0, /* heightArg */\n 0, /* pressure */\n 0, /* rotation */\n 0, /* tiltX */\n 0, /* tiltY */\n 0, /* pointerIdArg */\n 'mouse', /* pointerType */\n 0, /* hwTimestampArg */\n true, /* isPrimary */\n );\n\n return event;\n }\n\n function createMouseEvent(eventType, modifiers, clientX, clientY, button) {\n const event = eventConstructorSupported ? new MouseEvent('click', { composed: true }) : document.createEvent('MouseEvents');\n event.initMouseEvent(\n eventType,\n true, /* bubbles */\n true, /* cancelable */\n document.defaultView, /* view */\n 1, /* detail */\n 0, /* screenX */\n 0, /* screenY */\n clientX, /* clientX */\n clientY, /* clientY */\n Boolean(modifiers.ctrl), /* ctrl */\n Boolean(modifiers.alt), /* alt */\n Boolean(modifiers.shift), /* shift */\n Boolean(modifiers.meta), /* meta */\n button, /* button */\n document.body ? document.body.parentNode : document.documentElement);\n return event;\n }\n\n function getMouseEvent(userEvent, context) {\n const pointerEvents = ['pointerup', 'pointerdown', 'pointermove'];\n const modifiers = context.modifiers || {};\n const pos = getEventPosition(userEvent, context.element);\n const button = context.button || 0;\n const eventType = userEvent.event;\n if (pointerEvents.includes(eventType)) {\n return createPointerEvent(eventType, modifiers, pos.x, pos.y, button);\n }\n return createMouseEvent(eventType, modifiers, pos.x, pos.y, button);\n }\n\n function shouldSkipEvent(currentEvent, context) {\n function isClickInDragAndDrop() {\n return currentEvent.event === 'click' &&\n context.isDrag &&\n !context.allEventsOnSameElement;\n }\n return isClickInDragAndDrop();\n }\n\n function executeAsyncNextEventRecursive(index, context, done) {\n try {\n const event = getMouseEvent(context.events[index], context);\n if (!shouldSkipEvent(event, context)) {\n context.element.dispatchEvent(event);\n }\n } catch (ignore) { /* ignored */ }\n\n if (index + 1 === context.events.length) {\n done();\n } else {\n const delay = Math.min(context.events[index + 1].timeStamp - context.events[index].timeStamp, MAX_EVENT_TIMEOUT);\n setTimeout(() => {\n executeAsyncNextEventRecursive(index + 1, context, done);\n }, delay);\n }\n }\n\n function executeAsyncEventSequence(context, done) {\n executeAsyncNextEventRecursive(0, context, () => {\n if (window.__unloadNavigator) {\n window.removeEventListener('unload', window.__unloadNavigator);\n }\n done();\n });\n }\n\n // eslint-disable-next-line no-undef\n const element = eventData.isRoot ? document.documentElement : getLocatedElement(eventData.locatedElement);\n\n const context = {\n eventIndex: 0,\n element,\n events: eventData.events,\n eventType: eventData.eventType,\n eventData: eventData.eventData,\n stepId: eventData.id,\n testResultId: eventData.testResultId,\n quirks: eventData.quirks,\n isDoubleClick: eventData.isDoubleClick,\n isDrag: eventData.isDrag,\n useRecordedMousedown: eventData.useRecordedMousedown,\n trackActiveElement: eventData.trackActiveElement,\n allEventsOnSameElement: eventData.allEventsOnSameElement,\n };\n\n if (!context.element) {\n reject('element not found');\n return;\n }\n\n dispatchMouseOver(context.element);\n dispatchMouseMove(context.element);\n\n executeAsyncEventSequence(context, () => {\n resolve();\n });\n};\n\nmodule.exports = doDragPath;\n","/* global getLocatedElement */\n\n'use strict';\n\nconst html5dndAction = function (eventData) {\n const data = {};\n function convertType(type) {\n if (!type?.toLowerCase) {\n return type;\n }\n type = type.toLowerCase();\n if (type === 'text') {\n return 'text/plain';\n }\n if (type === 'url') {\n return 'text/uri-list';\n }\n return type;\n }\n const dataTransfer = {\n data: {\n },\n setData(type, val) {\n data[convertType(type)] = val;\n },\n getData(type) {\n return data[convertType(type)];\n },\n };\n const fromElement = getLocatedElement(eventData.fromLocatedElement);\n const toElement = getLocatedElement(eventData.toLocatedElement);\n\n if (!fromElement) {\n throw new Error('from element not found');\n }\n\n if (!toElement) {\n throw new Error('to element not found');\n }\n\n const dispatchEvent = function (element, type) {\n const event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, null);\n event.dataTransfer = dataTransfer;\n if (element.dispatchEvent) {\n element.dispatchEvent(event);\n } else if (element.fireEvent) {\n element.fireEvent(`on${type}`, event);\n }\n };\n dispatchEvent(fromElement, 'dragstart');\n dispatchEvent(toElement, 'drop');\n dispatchEvent(fromElement, 'dragend');\n};\n\nmodule.exports = html5dndAction;\n","/* global getLocatedElement */\n\n'use strict';\n\nconst html5dndAction = function (eventData, done) {\n const mouseEventConstructorSupported = typeof MouseEvent === 'function';\n const dragEventConstructorSupported = typeof DragEvent === 'function';\n const pointerEventConstructorSupported = typeof PointerEvent === 'function';\n const data = {};\n\n window.__unloadNavigator = resolve;\n\n window.addEventListener('unload', window.__unloadNavigator);\n\n function resolve(result) {\n const status = {\n status: 'done',\n result,\n success: true,\n };\n done(status);\n }\n\n function reject(result) {\n result = result || {};\n const status = {\n status: 'failed',\n result,\n success: false,\n keep: true,\n };\n\n done(status);\n }\n\n function convertType(type) {\n if (!type?.toLowerCase) {\n return type;\n }\n type = type.toLowerCase();\n if (type === 'text') {\n return 'text/plain';\n }\n if (type === 'url') {\n return 'text/uri-list';\n }\n return type;\n }\n\n function createDataTransfer() {\n try {\n return new DataTransfer();\n } catch (err) {\n return {\n data: {},\n setData(type, val) {\n data[convertType(type)] = val;\n },\n getData(type) {\n return data[convertType(type)];\n },\n };\n }\n }\n\n const dragFromElementEvents = ['drag', 'dragstart', 'dragend'];\n const pointerEvents = ['pointerup', 'pointerdown', 'pointermove'];\n const dragEvents = dragFromElementEvents.concat(['drop', 'dragenter', 'dragover']);\n\n function findClosestDraggable(element) {\n // drag events are always fired on the closest element with draggable=true\n // rather than on the target mouse element - so when dispatching a drag\n // event we need to fire the correct target\n let current = element;\n while (current && current !== document.documentElement) {\n if (current.draggable) {\n return current;\n }\n current = current.parentElement;\n }\n return null;\n }\n\n function getElement(event, context, currentEvent) {\n const element = context.element;\n const dispatchDragEventsOnClosestDraggable = currentEvent.dispatchDragEventsOnClosestDraggable;\n if (dragFromElementEvents.includes(event.type) && dispatchDragEventsOnClosestDraggable) {\n if (!element && context.lastDraggedElement) {\n // fallback for elements being removed from DOM, but parent draggable still being there\n return context.lastDraggedElement;\n }\n\n const draggable = findClosestDraggable(element);\n if (draggable) {\n context.lastDraggedElement = draggable;\n return draggable;\n }\n }\n return element;\n }\n\n function getEventPosition(userEvent, isDrag, element) {\n function isWithinBounds(start, end, point) {\n return (point > start) && (point < end);\n }\n\n const pointerPosition = userEvent.pointerPosition || {};\n // Technically should always be true here.\n if (isDrag) {\n return { x: pointerPosition.originX || 0, y: pointerPosition.originY || 0 };\n }\n const rect = element.getBoundingClientRect();\n const clientX = pointerPosition.originX && isWithinBounds(rect.left, rect.left + rect.width, pointerPosition.originX) ? pointerPosition.originX : rect.left + (rect.width / 2);\n const clientY = pointerPosition.originY && isWithinBounds(rect.top, rect.top + rect.height, pointerPosition.originY) ? pointerPosition.originY : rect.top + (rect.height / 2);\n return { x: clientX, y: clientY };\n }\n\n function getMouseEvent(userEvent, eventData, context) {\n const modifiers = eventData?.modifiers || {};\n const pos = getEventPosition(userEvent, context.isDrag, context.element);\n const button = eventData?.button || 0;\n const eventType = userEvent.event;\n if (pointerEvents.includes(eventType)) {\n return createPointerEvent(eventType, modifiers, pos.x, pos.y, button);\n }\n if (dragEvents.includes(eventType)) {\n return createDragEvent(eventType, modifiers, pos.x, pos.y, button);\n }\n return createMouseEvent(eventType, modifiers, pos.x, pos.y, button);\n }\n\n function getEventDictionary(modifiers, clientX, clientY) {\n return {\n screenX: 0,\n screenY: 0,\n clientX,\n clientY,\n ctrlKey: Boolean(modifiers.ctrl),\n altKey: Boolean(modifiers.alt),\n shiftKey: Boolean(modifiers.shift),\n metaKey: Boolean(modifiers.meta),\n bubbles: true,\n cancelable: true,\n composed: true,\n };\n }\n\n function createPointerEvent(eventType, modifiers, clientX, clientY, button) {\n if (pointerEventConstructorSupported) {\n const eventProperties = getEventDictionary(modifiers, clientX, clientY);\n eventProperties.pointerType = 'mouse';\n eventProperties.isPrimary = true;\n return new window.PointerEvent(eventType, eventProperties);\n }\n const event = document.createEvent('PointerEvent');\n event.initPointerEvent(\n eventType,\n true, /* bubbles */\n true, /* cancelable */\n document.defaultView, /* view */\n 1, /* detail */\n 0, /* screenX */\n 0, /* screenY */\n clientX, /* clientX */\n clientY, /* clientY */\n Boolean(modifiers.ctrl), /* ctrl */\n Boolean(modifiers.alt), /* alt */\n Boolean(modifiers.shift), /* shift */\n Boolean(modifiers.meta), /* meta */\n button, /* button */\n document.body ? document.body.parentNode : document.documentElement,\n 0, /* offsetYArg */\n 0, /* offsetXArg */\n 0, /* widthArg */\n 0, /* heightArg */\n 0, /* pressure */\n 0, /* rotation */\n 0, /* tiltX */\n 0, /* tiltY */\n 0, /* pointerIdArg */\n 'mouse', /* pointerType */\n 0, /* hwTimestampArg */\n true, /* isPrimary */\n );\n return event;\n }\n\n function createMouseEvent(eventType, modifiers, clientX, clientY, button) {\n const event = mouseEventConstructorSupported ? new MouseEvent('click', { composed: true }) : document.createEvent('MouseEvents');\n event.initMouseEvent(\n eventType,\n true, /* bubbles */\n true, /* cancelable */\n document.defaultView, /* view */\n 1, /* detail */\n 0, /* screenX */\n 0, /* screenY */\n clientX, /* clientX */\n clientY, /* clientY */\n Boolean(modifiers.ctrl), /* ctrl */\n Boolean(modifiers.alt), /* alt */\n Boolean(modifiers.shift), /* shift */\n Boolean(modifiers.meta), /* meta */\n button, /* button */\n document.body ? document.body.parentNode : document.documentElement);\n return event;\n }\n\n function createDragEvent(eventType, modifiers, clientX, clientY) {\n if (eventType === 'dragstart') {\n if (!window.TSTA) {\n window.TSTA = {};\n }\n window.TSTA.dataTransfer = createDataTransfer();\n }\n\n if (!dragEventConstructorSupported) {\n const event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventType, true, true, null);\n event.dataTransfer = window.TSTA.dataTransfer;\n return event;\n }\n\n const eventProperties = getEventDictionary(modifiers, clientX, clientY);\n const event = new window.DragEvent(eventType, eventProperties);\n Object.defineProperties(event, {\n dataTransfer: { get() { return window.TSTA.dataTransfer; } },\n });\n return event;\n }\n\n function executeAsyncEvent(event, context, currentEvent) {\n const element = getElement(event, context, currentEvent);\n if (element) {\n element.dispatchEvent(event);\n }\n }\n\n function shouldSkipEvent(currentEvent, context) {\n function isClickInDragAndDrop() {\n return currentEvent.event === 'click' &&\n context.isDrag &&\n !context.allEventsOnSameElement;\n }\n return isClickInDragAndDrop();\n }\n\n function nextAsyncEvent(context, currentEvent, nextEvent) {\n if (nextEvent) {\n const delay = Math.min(nextEvent.timeStamp - currentEvent.timeStamp, 40);\n setTimeout(() => {\n executeAsyncNext(context);\n }, delay);\n } else {\n if (window.__unloadNavigator) {\n window.removeEventListener('unload', window.__unloadNavigator);\n }\n resolve();\n }\n }\n\n function executeAsyncNext(context) {\n let event;\n const currentEvent = context.events[context.eventIndex];\n // eslint-disable-next-line no-param-reassign\n const nextEvent = context.events[++context.eventIndex];\n try {\n context.element = getLocatedElement(currentEvent.locatedElement);\n event = getMouseEvent(currentEvent, eventData, context);\n } catch (err) {\n return reject(`exception in get event in drag step:${err.message}`);\n }\n\n if (shouldSkipEvent(currentEvent, context)) {\n return nextAsyncEvent(context, currentEvent, nextEvent);\n }\n\n if (event) {\n try {\n executeAsyncEvent(event, context, currentEvent);\n } catch (err) {\n return reject(`exception in executeEvent in drag step:${err.message}`);\n }\n } else {\n return reject(`cannot execute event ${currentEvent.event}`);\n }\n nextAsyncEvent(context, currentEvent, nextEvent);\n return undefined;\n }\n\n const context = {\n eventIndex: 0,\n allEventsOnSameElement: eventData.allEventsOnSameElement,\n events: eventData.events,\n eventType: eventData.eventType,\n eventData: eventData.eventData,\n stepId: eventData.id,\n testResultId: eventData.testResultId,\n isDrag: eventData.isDrag,\n useRecordedMousedown: eventData.useRecordedMousedown,\n trackActiveElement: eventData.trackActiveElement,\n };\n\n setTimeout(() => {\n try {\n executeAsyncNext(context);\n } catch (err) {\n reject(err);\n }\n }, 0);\n};\nmodule.exports = html5dndAction;\n","// @ts-check\n\nconst _ = require('lodash');\nconst StepAction = require('./stepAction');\nconst doClickScript = require('./scripts/doClick');\nconst dispatchFocus = require('./scripts/focusElement');\nconst doDragPathScript = require('./scripts/doDragPath');\nconst html5dndAction = require('./scripts/html5dragAction');\nconst html5dndActionV2 = require('./scripts/html5dragActionV2');\nconst featureFlagService = require('../../commons/featureFlags');\n\nclass MouseStepAction extends StepAction {\n getDnDRectsAndOffsets(target, destTarget, clickOffset, toClickOffset) {\n const fromOffsets = this.stepActionUtils.getClickOffset(clickOffset, target.rectWithoutFrameOffset);\n const toOffsets = this.stepActionUtils.getClickOffset(toClickOffset, destTarget.rectWithoutFrameOffset);\n return {\n fromRect: target.rectWithoutFrameOffset,\n fromX: fromOffsets.xOffset,\n fromY: fromOffsets.yOffset,\n toRect: destTarget.rectWithoutFrameOffset,\n toX: toOffsets.xOffset,\n toY: toOffsets.yOffset,\n };\n }\n\n async clickJs() {\n const step = this.step;\n const context = this.context;\n const target = context.data[step.targetId || 'targetId'];\n const timeout = context.data.timeToPlayStep + 3000;\n const events = step.events;\n\n if (!events?.length) {\n return undefined;\n }\n\n const eventMessage = {\n isRoot: target.isRoot,\n locatedElement: target.locatedElement,\n events,\n quirks: step.quirks,\n modifiers: step.modifiers,\n button: step.button,\n };\n\n const doClickCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var dispatchFocus = ${dispatchFocus.toString()};\n var doClick = ${doClickScript.toString()};\n var eventData = arguments[0];\n var done = arguments[1];\n return doClick.call(null, eventData, done);\n `;\n\n\n try {\n const result = await this.driver.executeCodeAsync(doClickCode, timeout, eventMessage);\n if (result.value?.success) {\n return { success: true };\n }\n return { success: false };\n } catch (err) {\n return {\n success: false,\n reason: err.message,\n exception: err,\n };\n }\n }\n\n isWithinBounds(start, end, point) {\n return (point > start) && (point < end);\n }\n\n getEventSequenceOffset() {\n const initialPosition = this.step.events[0]?.pointerPosition;\n if (!initialPosition) {\n return { xOffset: 0, yOffset: 0 };\n }\n\n const target = this.context.data[this.step.targetId || 'targetId'];\n const targetElementRect = target.rectWithoutFrameOffset;\n const isXWithinBounds = this.isWithinBounds(targetElementRect.left, targetElementRect.left + targetElementRect.width, initialPosition.originX);\n const isYWithinBounds = this.isWithinBounds(targetElementRect.top, targetElementRect.top + targetElementRect.height, initialPosition.originY);\n const xOffset = isXWithinBounds ? 0 : targetElementRect.left + targetElementRect.width / 2 - initialPosition.originX;\n const yOffset = isYWithinBounds ? 0 : targetElementRect.top + targetElementRect.height / 2 - initialPosition.originY;\n return { xOffset, yOffset };\n }\n\n addOffsetToEvents(offsetFromElement) {\n this.step.events.forEach(event => {\n if (event?.pointerPosition) {\n event.pointerPosition.originX += offsetFromElement.xOffset;\n event.pointerPosition.originY += offsetFromElement.yOffset;\n }\n });\n }\n\n generateEventOfType(baseEvent, type) {\n const cloneEvent = _.cloneDeep(baseEvent);\n cloneEvent.event = type;\n return cloneEvent;\n }\n\n fixAbsoluteDragEventSequence() {\n const downEvent = this.step.events.find(event => ['mousedown', 'pointerdown'].includes(event.event));\n if (downEvent) {\n const mousedownEventIndex = this.step.events.indexOf(downEvent);\n this.step.events.splice(mousedownEventIndex, 0, this.generateEventOfType(downEvent, 'mouseover'));\n }\n\n const { recordPointerMoveEvents = false } = this.context.project.defaults || {};\n const mouseUpEvent = this.step.events.find(event => event.event === 'mouseup') || (recordPointerMoveEvents && this.step.events.find(event => event.event === 'pointerup'));\n const lastMouseMoveEventIndex =\n _.findLastIndex(this.step.events, event => event.event === 'mousemove') ||\n (recordPointerMoveEvents && _.findLastIndex(this.step.events, event => event.event === 'pointermove'));\n if (mouseUpEvent && lastMouseMoveEventIndex > 0 && !this.step.allEventsOnSameElement) {\n this.step.events.splice(lastMouseMoveEventIndex + 1, 0, this.generateEventOfType(mouseUpEvent, 'mouseover'));\n }\n\n if (this.step.isHTML5Drag && !this.step.toElement) {\n this.step.events = this.addDragendIfNeeded(this.step.events);\n }\n\n this.addOffsetToEvents(this.getEventSequenceOffset());\n }\n\n async dragPathJs() {\n const step = this.step;\n const context = this.context;\n const target = context.data[step.targetId || 'targetId'];\n const timeout = context.data.timeToPlayStep + 3000;\n\n if (!this.step.events?.length) {\n return undefined;\n }\n\n this.fixAbsoluteDragEventSequence();\n\n const events = step.events;\n\n const eventMessage = {\n isRoot: target.isRoot,\n locatedElement: target.locatedElement,\n events,\n quirks: step.quirks,\n modifiers: step.modifiers,\n button: step.button,\n isDrag: true,\n allEventsOnSameElement: step.allEventsOnSameElement,\n };\n\n const doDragPathCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var dispatchFocus = ${dispatchFocus.toString()};\n var doDragPath = ${doDragPathScript.toString()};\n return doDragPath.apply(null, arguments);\n `;\n\n try {\n const result = await this.driver.executeCodeAsync(doDragPathCode, timeout, eventMessage);\n if (result.value?.success) {\n return { success: true };\n }\n return { success: false };\n } catch (err) {\n return {\n success: false,\n reason: err.message,\n exception: err,\n };\n }\n }\n\n chooseAndRunAction() {\n const target = this.getTarget();\n const { locatedElement, seleniumElement, rectWithoutFrameOffset, rect } = target;\n const { xOffset, yOffset } = this.stepActionUtils.getClickOffset(this.step.element.clickOffset, rectWithoutFrameOffset);\n\n // used for fallback native click\n const offsets = {\n frameOffset: {\n x: rect.left - rectWithoutFrameOffset.left,\n y: rect.top - rectWithoutFrameOffset.top,\n },\n rect: rectWithoutFrameOffset,\n clickOffset: { x: xOffset, y: yOffset },\n };\n // will skip left click and double click on Edge.\n const skipFileInputClick =\n featureFlagService.flags.skipFileInputClicks.isEnabled() &&\n target.tagName === 'INPUT' &&\n (target.elementSymbol.includes('type=\"file\"') ||\n target.elementSymbol.includes('type=\\'file\\'') ||\n target.elementSymbol.includes('type=file'));\n\n if (skipFileInputClick) {\n return Promise.resolve({\n keep: true,\n success: 'skipped',\n reason: 'Clicking on input type=file is disabled',\n });\n }\n\n if (this.step.isDoubleClick) {\n const eventData = {\n elementToFocusLocatedElement: target.elementToFocusLocatedElement,\n locatedElement,\n events: this.step.events,\n timeout: this.context.data.timeToPlayStep + 3000,\n };\n return this.driver.doubleClick(seleniumElement, eventData, offsets);\n }\n if (this.step.isDrag) {\n if (this.step.toElement) {\n const destTarget = this.context.data.toElement;\n if (this.step.isHTML5Drag) {\n if (featureFlagService.flags.usePortedHtml5DragDrop.isEnabled()) {\n const events = this.generateHTML5DragEventSequence();\n const timeout = this.context.data.timeToPlayStep + 3000;\n const contextTarget = this.context.data[this.step.targetId || 'targetId'];\n const eventMessage = {\n transactionId: `${this.context.testResultId}:${this.step.id}`,\n id: this.step.id,\n testResultId: this.context.testResultId,\n eventType: this.step.type,\n events,\n eventData: {\n modifiers: this.step.modifiers,\n button: this.step.button,\n },\n quirks: this.step.quirks,\n isDrag: this.step.isDrag,\n useRecordedMousedown: this.step.useRecordedMousedown,\n allEventsOnSameElement: this.step.allEventsOnSameElement,\n elementToFocusLocatedElement: contextTarget.elementToFocusLocatedElement,\n trackActiveElement: this.step.trackActiveElement,\n locatedElement: contextTarget.locatedElement,\n isRoot: contextTarget.isRoot,\n };\n const html5DNDCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var dnd = ${html5dndActionV2.toString()};\n var eventData = arguments[0];\n var done = arguments[1];\n return dnd.call(null, eventData, done);\n `;\n return this.driver.executeCodeAsync(html5DNDCode, timeout, eventMessage);\n }\n\n const html5DNDCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var dnd = ${html5dndAction.toString()};\n var eventData = arguments[0];\n return dnd.call(null, eventData);\n `;\n\n const eventMessage = { fromLocatedElement: locatedElement, toLocatedElement: destTarget.locatedElement };\n return this.driver.executeJS(html5DNDCode, eventMessage);\n }\n\n const rectsAndOffsets = this.getDnDRectsAndOffsets(target, destTarget, this.step.element.clickOffset, this.step.toElement.clickOffset);\n return this.driver.dragAndDrop(seleniumElement, destTarget.seleniumElement, rectsAndOffsets);\n }\n return this.dragPathJs();\n\n // This is the old way, which uses selenium action (AKA \"native\" drag).\n // return this.driver.drag(seleniumElement, rectWithoutFrameOffset, xOffset, yOffset, this.step.events);\n }\n const useRightClickJS = this.driver.isSafari() && this.step.button === 2;\n const forceNativeEvent = this.driver.isSafari() && target.tagName === 'SELECT';\n\n if (this.driver.isSafari() && forceNativeEvent) {\n // NOTE:\n // We want to skip click on SELECT elements because of a safari driver bug\n // that not allowing to set the selected option after this click.\n return Promise.resolve({\n keep: true, success: 'skipped', forceTreatAsWarning: true, reason: 'Safari does not support clicking on select elements',\n });\n }\n if (!forceNativeEvent && (!this.step.nativeEvents || useRightClickJS)) {\n return this.clickJs();\n }\n if (this.step.button === 2) {\n return this.driver.rightClick(seleniumElement, offsets);\n }\n return this.driver.leftClick(seleniumElement, offsets);\n }\n\n async performAction() {\n let res = await this.chooseAndRunAction();\n if (!res.status && res.value && res.value.keep) {\n res = res.value;\n }\n if (res.keep) {\n delete res.keep;\n return res;\n }\n return undefined;\n }\n\n addDragendIfNeeded(events) {\n if (events.some(event => event.event === 'dragend')) {\n return events;\n }\n const dragendDefaultEvent = {\n event: 'dragend',\n eventInfo: {\n detail: 0,\n },\n pointerPosition: this.getToElementPosition(),\n };\n return events.concat(dragendDefaultEvent);\n }\n\n getToElementPosition() {\n if (!(this.context.data?.toElement?.rect)) {\n return undefined;\n }\n const { rect } = this.context.data.toElement;\n return {\n originX: rect.left + (rect.width / 2),\n originY: rect.top + (rect.height / 2),\n };\n }\n\n addDragOverBeforeDragEnd(events) {\n const dropOrEndEventIndex = events.findIndex(e => ['dragend', 'drop'].includes(e.event));\n const oneBeforeLastEvent = events[dropOrEndEventIndex - 1];\n if (!oneBeforeLastEvent || (oneBeforeLastEvent.event !== 'dragover')) {\n const dragenterDefaultEvent = {\n event: 'dragover',\n eventInfo: {\n detail: 0,\n },\n pointerPosition: this.getToElementPosition(),\n fireOnTarget: true,\n };\n events.splice(dropOrEndEventIndex, 0, dragenterDefaultEvent);\n } else {\n oneBeforeLastEvent.fireOnTarget = true;\n }\n return events;\n }\n\n fixEventSequence(events) {\n const withDragEnd = this.addDragendIfNeeded(events);\n return this.addDragOverBeforeDragEnd(withDragEnd);\n }\n\n addElementLocatedElementToDragEvents(events, fromElementLocatedElement, toElementLocatedElement) {\n const isOnToElement = e => e.fireOnTarget || ['drop', 'dragenter'].includes(e.event);\n events.forEach(event => (event.locatedElement = isOnToElement(event) ? toElementLocatedElement : fromElementLocatedElement));\n return events;\n }\n\n generateHTML5DragEventSequence() {\n const fromElement = this.context.data.targetId;\n const toElement = this.context.data.toElement;\n let events = this.step.events.filter(event => event.event !== 'mousemove' && event.event !== 'pointermove');\n events = this.fixEventSequence(events);\n events = this.addElementLocatedElementToDragEvents(events, fromElement.locatedElement, toElement.locatedElement);\n if (this.step.dispatchDragEventsOnClosestDraggable) {\n events.forEach(event => (event.dispatchDragEventsOnClosestDraggable = true));\n }\n return events;\n }\n}\n\nmodule.exports = MouseStepAction;\n","'use strict';\n\nconst StepAction = require('./stepAction');\n\nclass TextValidationStepAction extends StepAction {\n async performAction(stepActionFactory) {\n const { step, context, frameHandler, sessionPlayerInit: { paramEvaluator, utils, commonConstants } } = this;\n const target = this.getTarget();\n\n try {\n const text = await this.stepActionUtils.extractTargetText(target);\n let actual;\n let expected;\n if (paramEvaluator) {\n const evaluation = paramEvaluator.computeExpression(\n step.expression2,\n context,\n this.exportsGlobal,\n this.exportsTest,\n );\n actual = text;\n expected = evaluation.evaluatedText;\n } else {\n const res = await stepActionFactory.executeStep(\n step.expression2,\n context,\n frameHandler,\n this.exportsGlobal,\n this.locateElementPlayer,\n this.exportsTest,\n );\n actual = text;\n expected = res.evaluatedText;\n }\n try {\n const compareResult = utils.compareOrMatch(expected, actual);\n if (compareResult) {\n return { success: true };\n }\n return {\n success: false,\n errorType: commonConstants.stepResult.TEXT_COMPARE_FAILURE,\n resultInfo: { expected: String(expected), actual },\n };\n } catch (err) {\n return {\n success: false,\n errorType: commonConstants.stepResult.TEXT_COMPARE_FAILURE,\n resultInfo: { expected: expected.toString(), actual },\n };\n }\n } catch (err) {\n return {\n success: false,\n reason: err.message,\n exception: err,\n shouldRetry: true,\n };\n }\n }\n}\n\nmodule.exports = TextValidationStepAction;\n\n","'use strict';\n\nconst _ = require('lodash');\nconst StepAction = require('./stepAction');\nconst { getLogger } = require('../../commons/logger');\n\nconst logger = getLogger('evaluate-expression-step-action');\n\nclass EvaluateExpressionStepAction extends StepAction {\n async execute() {\n const step = this.step;\n const context = this.context;\n const exportsGlobal = this.exportsGlobal;\n const exportsTest = this.exportsTest;\n\n try {\n logger.info('runner running incoming params evaluation');\n let incomingParams = context.incomingParams || {};\n if (_.isEmpty(incomingParams)) {\n incomingParams = this.sessionPlayerInit.stepParamBuilder.getStepInputs(step, context, exportsGlobal, exportsTest);\n }\n\n const params = ['context', ...incomingParams.as.functionParameters];\n const args = [context, ...incomingParams.as.functionArguments];\n const expressionToEvaluate = step.subType === 'text' ? `'${step.expression.replace(/'/g, \"\\\\\\'\")}'` : step.expression;\n const code = `return ${expressionToEvaluate}`.replace(/\\n/g, '\\\\n');\n const textEvaluateFunction = Function.apply(Function, params.concat([code]));\n const evaluatedText = textEvaluateFunction.apply(null, args);\n\n context.data[step.targetName] = evaluatedText;\n context.data[step.targetId] = evaluatedText;\n if (context.internalParams) {\n context.internalParams.add(step.targetId);\n }\n\n const result = {\n success: true,\n evaluatedText,\n data: context.data,\n };\n\n return result;\n } catch (e) {\n const { stepResult } = this.sessionPlayerInit.commonConstants;\n // TODO: Fix throwing non-error\n // eslint-disable-next-line no-throw-literal\n throw { errorType: stepResult.EVALUATE_EXPRESSION_EXCEPTION, resultInfo: { exception: e.toString() }, success: false };\n }\n }\n}\n\nmodule.exports = EvaluateExpressionStepAction;\n","/* globals getLocatedElement, dispatchFocus */\n\n'use strict';\n\nconst setText = function (eventData, done) {\n const eventConstructorSupported = typeof Event === 'function';\n const element = eventData.isRoot ? document.documentElement : getLocatedElement(eventData.locatedElement);\n const context = {\n eventIndex: 0,\n element,\n events: eventData.events,\n eventType: eventData.eventType,\n quirks: eventData.quirks,\n };\n\n if (!element) {\n throw new Error('element not found');\n }\n\n window.__unloadNavigator = function () {\n resolve();\n };\n\n window.addEventListener('unload', window.__unloadNavigator);\n\n const keyboardEventNames = ['keydown', 'keyup', 'keypress'];\n const MAX_KEYBOARD_EVENT_TIMEOUT = 15; //max msec between keyboard events\n\n function getTextInputEventObject(userEvent) {\n try {\n if (!eventConstructorSupported) {\n return undefined;\n }\n\n const event = new CustomEvent('textInput', {\n bubbles: true,\n cancelable: true,\n });\n if (userEvent.eventData) {\n event.data = userEvent.eventData.data;\n }\n return event;\n } catch (err) { /* ignored */ }\n return undefined;\n }\n\n function initTextInputEvent(userEvent) {\n try {\n const event = document.createEvent('TextEvent');\n event.data = userEvent.eventData.data;\n const method = 1; // keyboard\n const locale = userEvent.eventData.locale || 'en-US';\n event.initTextEvent('textInput', true, true, window, userEvent.eventData.data, method, locale);\n return event;\n } catch (err) { /* ignored */ }\n return undefined;\n }\n\n function getTextInputEvent(userEvent) {\n return getTextInputEventObject(userEvent) || initTextInputEvent();\n }\n\n function createKeyboardEventObject(eventType, eventData, modifiers) {\n try {\n return new KeyboardEvent(eventType, {\n bubbles: true,\n cancelable: true,\n location: eventData.location || 0,\n key: eventData.key || '',\n ctrlKey: Boolean(modifiers.ctrl),\n shiftKey: Boolean(modifiers.shift),\n altKey: Boolean(modifiers.alt),\n metaKey: Boolean(modifiers.meta),\n });\n } catch (err) { /* ignored */ }\n return undefined;\n }\n\n function initKeyboardEvent(eventType, eventData, modifiers) {\n try {\n const event = document.createEvent('KeyboardEvent');\n\n event.initKeyEvent(\n eventType, // typeArg,\n true, // canBubbleArg,\n true, // cancelableArg,\n null, // viewArg, Specifies UIEvent.view. This value may be null.\n Boolean(modifiers.ctrl),\n Boolean(modifiers.alt),\n Boolean(modifiers.shift),\n Boolean(modifiers.meta),\n eventData.key || '',\n 0, // charCodeArg\n );\n\n return event;\n } catch (err) { /* ignored */ }\n return undefined;\n }\n\n function createKeyboardEvents(eventType, eventData, modifiers) {\n try {\n const event = document.createEvent('Events');\n event.initEvent(eventType, true, true);\n event.altKey = Boolean(modifiers.alt);\n event.ctrlKey = Boolean(modifiers.ctrl);\n event.metaKey = Boolean(modifiers.meta);\n event.shiftKey = Boolean(modifiers.shift);\n event.keyCode = eventData.key || '';\n return event;\n } catch (err) { /* ignored */ }\n return undefined;\n }\n\n function createKeyboardEvent(eventType, eventData, modifiers) {\n return createKeyboardEventObject(eventType, eventData, modifiers) ||\n initKeyboardEvent(eventType, eventData, modifiers) ||\n createKeyboardEvents(eventType, eventData, modifiers);\n }\n\n function getKeyboardEvent(userEvent) {\n // some apps override Array.indexOf to return undefined if element not found (like Arkia)\n const index = keyboardEventNames.indexOf(userEvent.event);\n if ((typeof index !== 'number') || (index < 0)) {\n return null;\n }\n\n const eventData = userEvent.eventData;\n const modifiers = eventData.modifiers || {};\n\n const event = createKeyboardEvent(userEvent.event, eventData, modifiers);\n\n // workaround for chromium bugs which make keycode etc readonly\n Object.defineProperties(event, {\n keyCode: {\n enumerable: true,\n get() {\n return this._keyCode_;\n },\n },\n charCode: {\n enumerable: true,\n get() {\n return this._charCode_;\n },\n },\n which: {\n enumerable: true,\n get() {\n return this._keyCode_;\n },\n },\n });\n event._keyCode_ = eventData.keyCode;\n event._charCode_ = eventData.charCode || 0;\n return event;\n }\n\n function getEvent(userEvent) {\n return userEvent.event === 'textInput' ?\n getTextInputEvent(userEvent) :\n getKeyboardEvent(userEvent);\n }\n\n function shouldSkipEvent(currentEvent, context) {\n const isTextInputAuth0Form = function () {\n return currentEvent.event === 'textInput' && !context.quirks?.isAuth0Form;\n };\n return isTextInputAuth0Form();\n }\n\n function getTextEventTimeout(currentEvent, nextEvent) {\n return ((currentEvent.event === 'keyup') && (nextEvent.event === 'keydown')) ?\n MAX_KEYBOARD_EVENT_TIMEOUT :\n 0;\n }\n\n function getTimeBetweenFiringEvents(context, currentEvent, nextEvent) {\n const maxTimeout = getTextEventTimeout(currentEvent, nextEvent);\n return Math.min(nextEvent.timeStamp - currentEvent.timeStamp, maxTimeout);\n }\n\n function handleReactFormFocus(element) {\n // solution taken partially from https://github.com/vitalyq/react-trigger-change\n const descriptor = Object.getOwnPropertyDescriptor(element, 'value');\n if (!descriptor) {\n return;\n }\n const initialValue = element.value;\n element.value = `${initialValue}#`;\n if (descriptor.configurable) {\n delete element.value;\n }\n element.value = initialValue;\n const event = document.createEvent('HTMLEvents');\n event.initEvent('input', true, false);\n element.dispatchEvent(event);\n Object.defineProperty(element, 'value', descriptor);\n }\n\n function handleChangeEventIfNeeded(context) {\n if (!context.isInput) {\n return;\n }\n try {\n handleReactFormFocus(context.element);\n if (eventConstructorSupported) {\n context.element.dispatchEvent(new Event('change'));\n } else {\n const event = document.createEvent('HTMLEvents');\n event.initEvent('change', false, true);\n context.element.dispatchEvent(event);\n }\n } catch (e) { /* ignored */ }\n }\n\n function nextAsyncEvent(context, currentEvent, nextEvent) {\n if (nextEvent) {\n setTimeout(() => {\n executeAsyncNext(context);\n }, getTimeBetweenFiringEvents(context, currentEvent, nextEvent));\n } else {\n if (window.__unloadNavigator) {\n window.removeEventListener('unload', window.__unloadNavigator);\n }\n handleChangeEventIfNeeded(context);\n resolve();\n }\n }\n\n function shouldDispatchOnParentElement(eventType, context) {\n return (eventType === 'change' || eventType === 'blur') && context.element.tagName === 'OPTION';\n }\n\n function getElement(event, context, currentEvent) {\n if (shouldDispatchOnParentElement(event.type, context)) {\n return context.element.parentElement;\n } if (currentEvent.locatedElement) {\n return getLocatedElement(currentEvent.locatedElement);\n }\n return context.element;\n }\n\n function findTextNode(element, offsetData) {\n let child = element.firstChild;\n let innerChild;\n while (child) {\n if (child.nodeType === 3) {\n if (offsetData.offset-- <= 0) {\n return child;\n }\n } else if (child.nodeType === 1) {\n innerChild = findTextNode(child, offsetData);\n if (innerChild) {\n return innerChild;\n }\n }\n child = child.nextSibling;\n }\n return null;\n }\n\n function setSelection(element, selection) {\n if (!element || !selection) {\n return;\n }\n // eslint-disable-next-line no-restricted-globals\n if (!isNaN(selection.start)) {\n element.selectionStart = selection.start;\n element.selectionEnd = selection.end;\n // eslint-disable-next-line no-restricted-globals\n } else if (!isNaN(selection.nodeOffset)) {\n let startNode;\n if (element.firstChild) {\n startNode = findTextNode(element, { offset: selection.nodeOffset });\n } else {\n startNode = element;\n }\n if (startNode) {\n const sel = window.getSelection();\n const range = document.createRange();\n\n try { // until we get our act together regarding contenteditable, this may throw when the numbers in the recorded data don't match the current text\n sel.removeAllRanges();\n range.setStart(startNode, selection.textOffset);\n range.setEnd(startNode, selection.textOffset);\n sel.addRange(range);\n } catch (ignore) { /* ignored */ }\n }\n }\n }\n\n function executeAsyncEvent(event, context, currentEvent) {\n if (context.isFocusable && context.isSelectable(event) && event.type !== 'submit') {\n try {\n setSelection(context.element, currentEvent.eventData.selection);\n } catch (ignore) { /* ignored */ }\n }\n const element = getElement(event, context, currentEvent);\n if (!element) {\n throw new Error('could not find element');\n }\n if (event.type === 'submit' && element.action) {\n element.submit();\n } else {\n element.dispatchEvent(event);\n }\n }\n\n function executeAsyncNext(context) {\n let event;\n const currentEvent = context.events[context.eventIndex];\n const nextEvent = context.events[++context.eventIndex];\n try {\n event = getEvent(currentEvent);\n } catch (err) {\n return reject(`exception in get event in text step:${err.message}`);\n }\n\n if (shouldSkipEvent(currentEvent, context)) {\n return nextAsyncEvent(context, currentEvent, nextEvent);\n } if (event) {\n try {\n executeAsyncEvent(event, context, currentEvent);\n } catch (err) {\n return reject(`exception in executeEvent in text step:${err.message}`);\n }\n } else if (context.noEventExecuter) {\n context.noEventExecuter(context, currentEvent);\n } else {\n return reject(`cannot execute event ${currentEvent.event}`);\n }\n nextAsyncEvent(context, currentEvent, nextEvent);\n return undefined;\n }\n\n function isFocusableInput(target) {\n const tagName = target.tagName;\n return (tagName === 'INPUT' || tagName === 'TEXTAREA');\n }\n\n function isContentEditable(target) {\n return target.getAttribute ?\n Boolean(target.getAttribute('contenteditable') === 'true') :\n false;\n }\n\n function executeSetValue(context, userEvent) {\n if (context.isInput) {\n context.element.value = userEvent.eventData.text;\n const inputEvent = document.createEvent('Event');\n inputEvent.initEvent('input', true, false);\n context.element.dispatchEvent(inputEvent);\n } else if (context.isContentEditable) {\n context.element.innerHTML = userEvent.eventData.text;\n }\n }\n\n function findEffectiveActiveElement() {\n let activeElement = document.activeElement;\n while (activeElement.shadowRoot?.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n return activeElement;\n }\n\n function resolve(result) {\n const status = {\n status: 'done',\n result,\n success: true,\n };\n if (context.isNonTextableElemnet) {\n status.reason = 'Set text on non input element';\n }\n\n done(status);\n }\n\n function reject(result) {\n result = result || {};\n const status = {\n status: 'failed',\n result,\n success: false,\n };\n if (context.isNonTextableElemnet) {\n status.reason = 'Set text on non input element';\n }\n\n done(status);\n }\n\n try {\n context.isInput = isFocusableInput(context.element);\n context.isContentEditable = isContentEditable(context.element);\n if (!context.isInput && !context.isContentEditable) {\n context.isNonTextableElemnet = true;\n }\n context.isFocusable = context.isInput || context.isContentEditable;\n context.isSelectable = function (event) {\n return event.type !== 'keyup';\n };\n context.noEventExecuter = executeSetValue;\n } catch (err) {\n reject(`exception in set text step:${err.message}`);\n return;\n }\n\n const oldActiveElement = findEffectiveActiveElement();\n dispatchFocus(eventData.elementToFocusLocatedElement, oldActiveElement);\n executeAsyncNext(context);\n};\n\nmodule.exports = setText;\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst setTextScript = require('./scripts/setText');\nconst dispatchFocus = require('./scripts/focusElement');\nconst { extractElementId, delay } = require('../../utils');\n\nclass TextStepAction extends StepAction {\n async setValueNative() {\n const context = this.context;\n const target = this.getTarget();\n if (!this.step.delayBetweenChars) {\n return this.driver.setValue(target.seleniumElement, context.stepText);\n }\n\n await this.driver.elementIdClear(extractElementId(target.seleniumElement));\n return await this.setTextDelayed();\n }\n\n async setValueJS() {\n const step = this.step;\n const context = this.context;\n const target = context.data[step.targetId || 'targetId'];\n const timeout = context.data.timeToPlayStep + 3000;\n const events = step.events;\n\n const { setTextDraftJs } = this.sessionPlayerInit.codeSnippets;\n if (target.isDraftEditor && setTextDraftJs) {\n return this.driver.executeJS(setTextDraftJs(target.locatedElement, context.stepText));\n }\n\n if (!events?.length) {\n return undefined;\n }\n\n const eventMessage = {\n eventType: step.type,\n events,\n quirks: step.quirks,\n locatedElement: target.locatedElement,\n isRoot: target.isRoot,\n elementToFocusLocatedElement: target.elementToFocusLocatedElement,\n };\n\n const setTextCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var dispatchFocus = ${dispatchFocus};\n var setText = ${setTextScript.toString()};\n var eventData = arguments[0];\n var done = arguments[1];\n return setText.call(null, eventData, done);\n `;\n\n const result = await this.driver.executeCodeAsync(setTextCode, timeout, eventMessage);\n return { success: Boolean(result.value?.success) };\n }\n\n async setTextDelayed() {\n const letters = this.context.stepText;\n const target = this.getTarget();\n for (let i = 0; i < letters.length; i++) {\n await this.driver.elementIdValue(extractElementId(target.seleniumElement), letters[i]);\n // don't delay on last step.\n if (i < letters.length - 1) {\n await delay(this.step.delayBetweenChars);\n }\n }\n }\n\n async setValueAppendNative() {\n const keys = [];\n const context = this.context;\n const target = this.getTarget();\n\n if (target?.seleniumElement) {\n if (!this.step.delayBetweenChars) {\n keys.push(Array.from(context.stepText));\n return this.driver.elementIdValue(extractElementId(target.seleniumElement), keys);\n }\n\n return this.setTextDelayed();\n }\n throw new Error('missing selenium element');\n }\n\n async performAction() {\n const target = this.getTarget();\n const forceJsEvent = this.driver.isSafari() &&\n target.locatedElement && target.locatedElement.shadowPath &&\n Array.isArray(target.locatedElement.shadowPath) && target.locatedElement.shadowPath.length > 1;\n\n if (this.step.appendText) {\n if (this.step.nativeEvents) {\n return this.setValueAppendNative();\n }\n const { stepResult } = this.sessionPlayerInit.commonConstants;\n return {\n success: false,\n errorType: stepResult.TEXT_ACTION_FAILURE,\n resultInfo: { error: \"'Append Text' is only supported in Native Mode\" },\n };\n }\n if (this.step.nativeEvents && !forceJsEvent) {\n return this.setValueNative();\n }\n return this.setValueJS();\n }\n}\n\nmodule.exports = TextStepAction;\n","/* global getLocatedElement */\n\n'use strict';\n\nconst runCode = function (eventData, preCompiledCode) {\n function appendToStorage(name, data) {\n const sessionItem = `data-testim-${name}`;\n\n const nativeFuncErrMsg = 'Native sessionStorage is not available';\n function isNativeFunction(fn) {\n if (!fn?.toString) {\n return false;\n }\n return fn.toString().includes('[native code]');\n }\n try {\n if (![window.sessionStorage.setItem, window.sessionStorage.getItem].every(isNativeFunction)) {\n throw new Error(nativeFuncErrMsg);\n }\n const oldData = JSON.parse(window.sessionStorage.getItem(sessionItem) || '{}');\n const newData = Object.assign({}, oldData, data);\n window.sessionStorage.setItem(sessionItem, JSON.stringify(newData));\n } catch (err) {\n // any variation QuotaExceededError from browsers\n const isQuotaExceededError = err.message.toLowerCase().includes('quota');\n const isNativeFunctionError = err.message === nativeFuncErrMsg;\n\n if (\n err.message.includes('sessionStorage') || // Chrome + Firefox\n err.message.includes('The operation is insecure') || // Safari\n isQuotaExceededError ||\n isNativeFunctionError\n ) {\n let storage = document.head.querySelector('#testim-storage-backup');\n if (!storage) {\n storage = document.createElement('meta');\n storage.id = 'testim-storage-backup';\n document.head.append(storage);\n }\n const oldData = JSON.parse(storage.getAttribute(sessionItem) || '{}');\n const newData = Object.assign({}, oldData, data);\n storage.setAttribute(sessionItem, JSON.stringify(newData));\n if (isQuotaExceededError || isNativeFunctionError) {\n try {\n window.sessionStorage.removeItem(sessionItem);\n } catch (e) {\n // Prevents future retries from looking in sessionStorage with old data\n }\n (window.TSTA = window.TSTA || {}).useFallbackStorage = true;\n }\n return;\n }\n throw err;\n }\n }\n\n function getExecutionArguments(eventData) {\n // New code with stepParamsBuilder\n if (eventData.function) {\n return eventData.function.args\n .map((arg) => (arg?.locatedElement ? getLocatedElement(arg.locatedElement) : arg));\n }\n\n // Old code\n return eventData.directParams\n .map((p) => (p.selector ? document.querySelector(p.selector) : p.value))\n .concat(eventData.otherParams);\n }\n\n function constructWithArguments(constructor, args) {\n function F() {\n return constructor.apply(this, args);\n }\n\n F.prototype = constructor.prototype;\n return new F();\n }\n\n const exportedData = {};\n const exportedTestData = {};\n const exportedGlobalData = {};\n\n const functionParams = eventData.functionParams;\n const transactionId = eventData.transactionId;\n\n try {\n const args = getExecutionArguments(eventData);\n\n args.push(exportedData, exportedTestData, exportedGlobalData);\n\n const params = eventData.function?.params || functionParams;\n\n const functionToRun = preCompiledCode || constructWithArguments(Function, params);\n const result = functionToRun.apply(null, args);\n\n if (typeof Promise !== 'undefined' && result instanceof Promise) {\n appendToStorage(transactionId, { type: 'promise' });\n result.then((res) => {\n appendToStorage(transactionId, {\n status: 'done',\n success: true,\n result: {\n resultValue: res,\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData,\n },\n });\n }, (res) => {\n appendToStorage(transactionId, {\n status: 'failed',\n success: false,\n result: {\n resultValue: res.toString(),\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData,\n },\n });\n });\n } else {\n appendToStorage(transactionId, {\n status: 'done',\n success: true,\n result: {\n resultValue: result,\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData,\n },\n });\n }\n } catch (e) {\n appendToStorage(transactionId, {\n status: 'failed',\n success: false,\n result: {\n resultValue: e.toString(),\n exports: exportedData,\n exportsTest: exportedTestData,\n exportsGlobal: exportedGlobalData,\n },\n });\n }\n};\n\nmodule.exports = runCode;\n","'use strict';\n\n\nconst _ = require('lodash');\nconst utils = require('../../utils');\nconst StepAction = require('./stepAction');\nconst runnerUtils = require('../../utils');\nconst runCodeScript = require('./scripts/runCode');\nconst featureFlags = require('../../commons/featureFlags');\nconst { getLogger } = require('../../commons/logger');\n\nconst logger = getLogger('base-js-step-action');\n\n\nclass BaseJsStepAction extends StepAction {\n isExceedingMaxResultSize(data, context) {\n try {\n const shouldEnforceMaxSize = context.project.defaults.enforceMaximumJsResultSize;\n const maximumJsResultSize = featureFlags.flags.maximumJsResultSize.getValue();\n const dataSizeExceeded = JSON.stringify(data).length > maximumJsResultSize;\n if (!shouldEnforceMaxSize) {\n if (dataSizeExceeded) {\n logger.warn(`js result size exceeded ${maximumJsResultSize}, stepId: ${this.step.id}`);\n }\n return false;\n }\n return dataSizeExceeded;\n } catch (e) {\n return false;\n }\n }\n\n executeGetStatus(transactionId) {\n return this.driver.executeJS(_transactionId => {\n /* eslint-disable no-undef */\n const sessionItem = `data-testim-${_transactionId}`;\n try {\n return window.sessionStorage.getItem(sessionItem);\n } catch (err) {\n if (\n err.message.includes('sessionStorage') || // Chrome + Firefox\n err.message.includes('The operation is insecure') // Safari\n ) {\n const storage = document.head.querySelector('#testim-storage-backup');\n if (!storage) {\n return '{}';\n }\n return storage.getAttribute(sessionItem);\n }\n throw err;\n }\n /* eslint-enable no-undef */\n }, transactionId);\n }\n\n constructJSFunParams(eventData) {\n const incomingParams = eventData.incomingParams;\n\n const params = [\n 'context', ...incomingParams.as.functionParameters,\n 'exports', 'exportsTest', 'exportsGlobal',\n ];\n\n const args = [eventData.context, ...incomingParams.as.functionArguments];\n\n params.push(eventData.code);\n args.forEach(arg => {\n if (_.isObject(arg)) {\n runnerUtils.removePropertyFromObject(arg, 'seleniumElement', _.isEqual);\n }\n });\n return {\n function: {\n params,\n args,\n },\n transactionId: eventData.transactionId,\n browser: eventData.browser,\n browserMajor: eventData.browserMajor,\n };\n }\n\n\n checkStatus(transactionId) {\n const that = this;\n const retryInterval = that.context.config.retryTimeout;\n let timeToPlayStep = that.context.data.timeToPlayStep - retryInterval;\n async function checkScriptStatus() {\n let selRes;\n try {\n selRes = await that.executeGetStatus(transactionId);\n } catch (err) {\n logger.warn('failed to get js status', { err });\n selRes = { value: { status: 'exception' } };\n }\n let res;\n try {\n res = JSON.parse(selRes ? selRes.value : '{}');\n } catch (e) {\n logger.warn('non object value', { selRes });\n res = { status: 'exception' };\n }\n const abortReason = that.stepActionUtils.abortedSteps.find(abortedStep => abortedStep.id === that.step.id);\n if (abortReason) {\n return abortReason;\n }\n if (!res) {\n return { success: true };\n }\n if (res.status && res.status === 'done') {\n return res;\n }\n if (res.status && res.status === 'failed') {\n return { success: false, shouldRetry: true, result: res.result };\n }\n if (timeToPlayStep - retryInterval <= 0) {\n return Object.assign(res, { success: false, shouldRetry: true });\n }\n timeToPlayStep -= retryInterval;\n await utils.delay(retryInterval);\n return checkScriptStatus();\n }\n\n return checkScriptStatus();\n }\n\n executeInAut(eventMessage) {\n const useExperimentalPreCompilation = featureFlags.flags.experimentalPreCodeCompilation.isEnabled();\n const experimentalAsyncCustomCode = featureFlags.flags.experimentalAsyncCustomCode.isEnabled();\n const rawParams = this.constructJSFunParams(eventMessage);\n const hasLocateParams = rawParams.function.args.some(x => Boolean(x?.locatedElement));\n let funcToRunString = 'undefined';\n if (useExperimentalPreCompilation) {\n const paramNames = rawParams.function.params.slice(0, -1);\n funcToRunString = experimentalAsyncCustomCode ? `async function(${paramNames.join(',')}) {\n ${eventMessage.code}\n };` : `function(${paramNames.join(',')}) {\n ${eventMessage.code}\n };`;\n // remove code from call.\n rawParams.function.params.pop();\n }\n\n const { codeSnippets } = this.sessionPlayerInit;\n\n const runCode = `\n ${hasLocateParams ? `var getLocatedElement = ${codeSnippets.getLocatedElementCode};` : ';'}\n var runCode = ${runCodeScript.toString()};\n var eventData = arguments[0];\n var funcToRun = ${funcToRunString};\n return runCode.call(null, eventData, funcToRun);\n `;\n if (!useExperimentalPreCompilation) {\n return this.driver.executeJS(runCode, rawParams);\n }\n\n return this.driver.executeJS(runCode, rawParams).catch(err => this.handleExecutionError(err));\n }\n\n codeExecDone(resp) {\n const { stepResult: constants } = this.sessionPlayerInit.commonConstants;\n const { context } = this;\n const {\n result = {}, tstConsoleLogs, nodeVersion, navigateToDifferentDomain,\n } = resp;\n if (result.exports) {\n context.data.exports = result.exports;\n }\n\n const resultObj = {\n nodeVersion,\n tstConsoleLogs,\n data: context.data,\n };\n\n if (this.isFailedResult(result.resultValue)) {\n Object.assign(resultObj, {\n success: false,\n errorType: constants.JS_ASSERTION_FAILED,\n });\n } else if (this.isExceedingMaxResultSize({ result, tstConsoleLogs }, context)) {\n Object.assign(resultObj, {\n success: false,\n errorType: constants.JS_RESULT_MAX_SIZE_EXCEEDED,\n });\n } else {\n Object.assign(resultObj, {\n success: true,\n exportsTest: result.exportsTest,\n exportsGlobal: result.exportsGlobal,\n });\n if (navigateToDifferentDomain) {\n resultObj.navigateToDifferentDomain = navigateToDifferentDomain;\n }\n }\n return Promise.resolve(resultObj);\n }\n\n codeExecFailed(resp) {\n const { stepResult: constants } = this.sessionPlayerInit.commonConstants;\n const { context } = this;\n if (resp.type === 'promise') {\n return Promise.resolve({\n data: context.data,\n success: false,\n shouldRetry: true,\n isPendingPromise: true,\n errorType: constants.JS_ASSERTION_FAILED,\n });\n }\n if (resp.reason === 'stopped') {\n return Promise.resolve(Object.assign({}, resp, { errorType: constants.STOPPED }));\n }\n const { result = {}, tstConsoleLogs } = resp;\n const message = {\n tstConsoleLogs,\n data: context.data,\n exportsGlobal: result.exportsGlobal,\n exportsTest: result.exportsTest,\n success: false,\n errorType: constants.UNWRAPPED_AUT_REJECT,\n resultInfo: { error: result.resultValue },\n };\n return Promise.resolve(message);\n }\n\n checkCodeResponse(resp) {\n return resp?.success ? this.codeExecDone(resp) : this.codeExecFailed(resp);\n }\n\n async performAction() {\n const step = this.step;\n const context = this.context;\n\n this.startTimestamp = Date.now();\n\n const eventMessage = {\n transactionId: `${context.testResultId}:${step.id}`,\n id: step.id,\n eventType: step.type,\n code: step.code,\n incomingParams: context.incomingParams,\n exportsGlobal: this.exportsGlobal,\n exportsTest: this.exportsTest,\n context: {\n config: context.config,\n data: context.data,\n },\n testResultId: context.testResultId,\n };\n\n const browserAndOS = await this.driver.getBrowserAndOS();\n Object.assign(eventMessage, { browser: browserAndOS.browser, browserMajor: browserAndOS.browserMajor });\n\n if (!this.context.isPendingPromise) {\n await this.executeInAut(eventMessage);\n }\n\n const resp = await this.checkStatus(eventMessage.transactionId);\n return await this.checkCodeResponse(resp);\n }\n\n handleExecutionError(err) {\n const canExtractError = err?.seleniumStack && err.seleniumStack.type === 'JavaScriptError' &&\n err.seleniumStack.orgStatusMessage;\n\n if (canExtractError) {\n const endOfMessage = err.seleniumStack.orgStatusMessage.indexOf('\\nBuild info');\n const reason = err.seleniumStack.orgStatusMessage.slice(0, endOfMessage === -1 ? undefined : endOfMessage);\n throw new Error(reason);\n }\n\n throw err;\n }\n}\n\nmodule.exports = BaseJsStepAction;\n","'use strict';\n\nconst BaseJsStepAction = require('./baseJsStepAction');\n\nclass JsCodeStepAction extends BaseJsStepAction {\n isFailedResult(resultValue) {\n return resultValue === false;\n }\n}\n\nmodule.exports = JsCodeStepAction;\n","'use strict';\n\nconst BaseJsStepAction = require('./baseJsStepAction');\n\nclass JsConditionStepAction extends BaseJsStepAction {\n isFailedResult(resultValue) {\n return !resultValue;\n }\n}\n\nmodule.exports = JsConditionStepAction;\n","'use strict';\n\nconst { extractElementId } = require('../../utils');\nconst StepAction = require('./stepAction');\n\nconst keyMap = {\n 8: '\\uE008', // (Backspace)\n 9: '\\uE004', // (tab)\n 13: '\\uE007', // (enter)\n 27: '\\uE00C', // (esc)\n 33:\t'\\uE00E', // (page up)\n 34: '\\uE00F', // (page down)\n 35: '\\uE010', // (end)\n 36: '\\uE011', // (home)\n 45:\t'\\uE016', // (insert)\n 112: '\\uE031', // (f1)\n 113: '\\uE032', // (f2)\n 114: '\\uE033', // (f3)\n 115: '\\uE034', // (f4)\n 116: '\\uE035', // (f5)\n 117: '\\uE036', // (f6)\n 118: '\\uE037', // (f7)\n 119: '\\uE038', // (f8)\n 120: '\\uE039', // (f9)\n 121: '\\uE03A', // (f10)\n 122: '\\uE03B', // (f11)\n 123: '\\uE03C', // (f12)\n};\n\nclass SpecialKeyStepAction extends StepAction {\n setWithValueApi(keys) {\n const target = this.getTarget();\n if (target?.seleniumElement) {\n return this.driver.elementIdValue(extractElementId(target.seleniumElement), keys);\n }\n return Promise.reject(new Error('missing selenium element'));\n }\n\n performAction() {\n const keys = [];\n const keyCode = this.step.events[0].eventData.keyCode;\n\n if (keyCode >= 32 && keyCode <= 127) {\n keys.push(String.fromCharCode(keyCode));\n } else {\n keys.push(keyMap[keyCode]);\n }\n return this.setWithValueApi(keys);\n }\n}\n\nmodule.exports = SpecialKeyStepAction;\n","/* eslint-disable no-restricted-syntax */ // This code only runs in Safari, not in IE.\nmodule.exports = function (locatedElement, dispatchEventOnSelectElement) {\n function closest(el, selectors) {\n const originalMatches = Element.prototype.matches;\n /* eslint-disable-next-line no-proto, no-undef */ // Some customers override the native Element prototype, so we need to create a new one if they messed it up.\n const matches = originalMatches && isNativeFunction(originalMatches) ? originalMatches : document.createElement(el.tagName).__proto__.matches;\n do {\n if (matches.call(el, selectors)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n }\n\n try {\n /* eslint-disable-next-line no-undef */ // This code depends on pre-injecting this function as well.\n const optionEl = getLocatedElement(locatedElement);\n if (!optionEl) {\n return { success: false, status: 'failed', result: 'option element not found' };\n }\n\n const selectEl = closest(optionEl, 'select');\n if (!selectEl) {\n return { success: false, status: 'failed', result: 'select element not found' };\n }\n selectEl.focus();\n if (optionEl.selected) {\n return { success: true, status: 'done' };\n }\n optionEl.selected = true;\n\n const events = [\n 'input',\n 'change',\n ];\n events.map((userEvent) => {\n const event = document.createEvent('HTMLEvents');\n event.initEvent(userEvent, true, false);\n return event;\n }).forEach((event) => {\n if (dispatchEventOnSelectElement) {\n selectEl.dispatchEvent(event);\n return;\n }\n optionEl.dispatchEvent(event);\n });\n\n return { success: true, status: 'done' };\n } catch (err) {\n return { success: false, status: 'failed', result: err.toString() };\n }\n};\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst selectOption = require('./scripts/selectOption');\nconst featureFlags = require('../../commons/featureFlags');\nconst { extractElementId } = require('../../utils');\n\nclass SelectOptionStepAction extends StepAction {\n async performAction() {\n const target = this.context.data[this.step.targetId || 'targetId'];\n const { seleniumElement, locatedElement } = target;\n\n const browserAndOS = await this.driver.getBrowserAndOS();\n\n const browserMajor = browserAndOS.browserMajor;\n const isSafari = this.driver.isSafari();\n const isShadowed = Boolean(this.step.element?.isShadowed);\n\n // TODO: Remove the special handling for safari < 12 after we upgrade our grid to safari 13.\n // force use js code when element is shadow dom\n if (!isSafari || (isSafari && browserMajor >= 13 && !isShadowed)) {\n try {\n const res = await this.driver.elementIdClick(extractElementId(seleniumElement));\n return res;\n } catch (err) {\n // If customer overrides the native Element prototype, this click will fail for this reason. in such a case, fallback to use js code.\n if (!err.message.includes('Cannot check the displayedness of a non-Element argument')) {\n throw err;\n }\n }\n }\n\n const safariSelectOptionDispatchEventOnSelectElement = featureFlags.flags.safariSelectOptionDispatchEventOnSelectElement.isEnabled();\n const selectOptionCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var isNativeFunction = ${this.sessionPlayerInit.utils.isNativeFunction.toString()};\n var selectOption = ${selectOption.toString()};\n return selectOption.apply(null, arguments);\n `;\n\n const result = await this.driver.executeJSWithArray(selectOptionCode, [locatedElement, safariSelectOptionDispatchEventOnSelectElement]);\n if (result.value?.success) {\n return { success: true };\n }\n return { success: false };\n }\n}\n\nmodule.exports = SelectOptionStepAction;\n","'use strict';\n\nconst StepAction = require('./stepAction');\n\nclass SubmitStepAction extends StepAction {\n async performAction() {\n await this.driver.submitForm(this.getTarget().seleniumElement);\n }\n}\n\nmodule.exports = SubmitStepAction;\n\n","const StepAction = require('./stepAction');\n\nconst toDOMRect = (height, width, x, y) => ({\n x,\n y,\n width,\n height,\n get top() { return this.y; },\n get left() { return this.x; },\n get right() { return this.x + this.width; },\n get bottom() { return this.y + this.height; },\n toJSON() { },\n});\n\nclass HoverStepAction extends StepAction {\n getRect() {\n return this.driver.isFirefox() ?\n this.getTarget().rectWithoutFrameOffset :\n this.getTarget().rect;\n }\n\n async performAction() {\n const target = this.getTarget();\n const { seleniumElement, rectWithoutFrameOffset, rect } = target;\n\n const { width, height } = rect;\n\n let clickOffsetX = width / 2;\n let clickOffsetY = height / 2;\n\n const offset = this.step.element.clickOffset;\n if (offset && this.step.shouldAccountForMouseOffsetInHover) {\n const { x, y } = offset;\n\n if (this.sessionPlayerInit.utils.isWithinTargetRect(toDOMRect(height, width, 0, 0), x, y)) {\n clickOffsetX = x;\n clickOffsetY = y;\n }\n }\n\n const offsets = {\n frameOffset: {\n x: rect.left - rectWithoutFrameOffset.left,\n y: rect.top - rectWithoutFrameOffset.top,\n },\n rect: rectWithoutFrameOffset,\n clickOffset: { x: Math.floor(clickOffsetX), y: Math.floor(clickOffsetY) },\n };\n\n await this.driver.hover(seleniumElement, offsets);\n return { success: true };\n }\n}\n\nmodule.exports = HoverStepAction;\n","/* global getLocatedElement */\n\n'use strict';\n\nconst wheel = function (eventData, done) {\n const MAX_WHEEL_EVENT_TIMEOUT = 200;\n\n function getEventPosition(userEvent, element) {\n function isWithinBounds(start, end, point) {\n return (point > start) && (point < end);\n }\n const pointerPosition = userEvent.pointerPosition || {};\n const rect = element.getBoundingClientRect();\n const clientX = pointerPosition.originX && isWithinBounds(rect.left, rect.left + rect.width, pointerPosition.originX) ? pointerPosition.originX : rect.left + (rect.width / 2);\n const clientY = pointerPosition.originY && isWithinBounds(rect.top, rect.top + rect.height, pointerPosition.originY) ? pointerPosition.originY : rect.top + (rect.height / 2);\n return { x: clientX, y: clientY };\n }\n\n function getWheelEvent(userEvent, eventData, element) {\n const pos = getEventPosition(userEvent, element);\n const modifiers = eventData?.modifiers || {};\n const dict = {\n deltaX: userEvent.deltaX,\n deltaY: userEvent.deltaY,\n deltaZ: userEvent.deltaZ,\n deltaMode: userEvent.deltaMode,\n clientX: pos.x,\n clientY: pos.y,\n bubbles: true,\n cancelable: true,\n ctrl: Boolean(modifiers.ctrl),\n alt: Boolean(modifiers.alt),\n shift: Boolean(modifiers.shift),\n meta: Boolean(modifiers.meta),\n };\n return new WheelEvent('wheel', dict);\n }\n\n function executeEvents(events, element) {\n if (events.length === 0) {\n done({ state: 'success' });\n return;\n }\n if (!element) {\n throw new Error('element not found');\n }\n\n const event = events.shift();\n const currentEvent = getWheelEvent(event, eventData.eventData, element);\n const timeout = events[0] ? Math.min(events[0].timeStamp - event.timeStamp, MAX_WHEEL_EVENT_TIMEOUT) : MAX_WHEEL_EVENT_TIMEOUT;\n element.dispatchEvent(currentEvent);\n setTimeout(() => {\n executeEvents(events, element);\n }, timeout);\n }\n\n const element = getLocatedElement(eventData.locatedElement);\n executeEvents(eventData.events, element);\n};\n\nmodule.exports = wheel;\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst wheelScript = require('./scripts/wheel');\n\nclass WheelStepAction extends StepAction {\n async performAction() {\n const step = this.step;\n const context = this.context;\n const events = step.events;\n\n if (!events?.length) {\n return undefined;\n }\n\n const eventMessage = {\n events,\n eventData: {\n modifiers: step.modifiers,\n button: step.button,\n },\n locatedElement: this.getTarget().locatedElement,\n };\n\n const timeout = context.data.timeToPlayStep + 3000;\n\n const wheelCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var wheel = ${wheelScript.toString()};\n var eventData = arguments[0];\n var done = arguments[1];\n return wheel.call(null, eventData, done);\n `;\n\n const result = await this.driver.executeCodeAsync(wheelCode, timeout, eventMessage);\n return { success: result.value?.state === 'success' };\n }\n}\n\nmodule.exports = WheelStepAction;\n\n","/* global getLocatedElement, createDropEvent */\n\n'use strict';\n\nconst downloadFileAndFireDropEvent = function (locatedElement, fileUrls) {\n // eslint-disable-next-line no-undef\n const element = getLocatedElement(locatedElement);\n\n if (!element) {\n throw new Error('element not found');\n }\n\n function simpleBarrier() {\n let callbackIndex = -1;\n let doneCallbacks = 0;\n const results = [];\n const instance = {\n waitOn() {\n const curIndex = ++callbackIndex;\n return function (result) {\n if (curIndex in results) {\n return;\n }\n results[curIndex] = result;\n doneCallbacks++;\n if (fileUrls.length === doneCallbacks) {\n instance.endWithCallback(results);\n }\n };\n },\n endWith(fn) { instance.endWithCallback = fn; },\n };\n return instance;\n }\n\n function getBlob(url, name, cb) {\n const xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n if (this.status >= 200 && this.status < 300) {\n cb({ blob: xhr.response, name });\n } else {\n throw new Error('Failed to load blob response code is not between 200 - 300');\n }\n };\n xhr.onerror = function () {\n throw new Error('Failed to load blob');\n };\n xhr.send();\n }\n\n const barrier = simpleBarrier();\n fileUrls.forEach((fileUrl) => {\n getBlob(fileUrl.url, fileUrl.name, barrier.waitOn());\n });\n barrier.endWith((blobs) => {\n const event = createDropEvent(blobs);\n element.dispatchEvent(event);\n });\n};\n\nmodule.exports = downloadFileAndFireDropEvent;\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst featureFlagService = require('../../commons/featureFlags');\nconst downloadFileAndFireDropEvent = require('./scripts/dropEvent');\nconst { getLogger } = require('../../commons/logger');\n\nconst logger = getLogger('drop-file-step-action');\n\nclass DropFileStepAction extends StepAction {\n async performAction() {\n const { codeSnippets, utils } = this.sessionPlayerInit;\n const target = this.context.data[this.step.targetId || 'targetId'];\n const overrideAzureStorageUrl = featureFlagService.flags.overrideAzureStorageUrl.isEnabled();\n const fileUrls = await utils.addTokenToFileUrl(\n this.context.project.id,\n this.step.fileUrls,\n this.stepActionUtils.testimServicesApi,\n overrideAzureStorageUrl,\n logger,\n );\n\n const dropFileCode = `\n var getLocatedElement = ${codeSnippets.getLocatedElementCode};\n var createDropEvent = ${codeSnippets.createDropEvent.toString()};\n var downloadFileAndFireDropEvent = ${downloadFileAndFireDropEvent.toString()};\n return downloadFileAndFireDropEvent.apply(null, arguments)\n `;\n\n return await this.driver.executeJSWithArray(dropFileCode, [target.locatedElement, fileUrls]);\n }\n}\n\nmodule.exports = DropFileStepAction;\n","'use strict';\n\nconst httpRequest = require('./commons/httpRequest');\nconst fsPromises = require('fs/promises');\nconst os = require('os');\nconst { promiseMap } = require('./utils');\nconst { getLogger } = require('./commons/logger');\n\nconst logger = getLogger('input-file-utils');\n\nfunction getVisibleElementScript(positionAndSize = {\n width: '2px', height: '2px', left: '0px', top: '400px',\n}) {\n const zIndex = 100000000;\n const opacity = 1;\n return `function getVisibleElement(locatedElement) {\n var input = getLocatedElement(locatedElement);\n if(input) {\n function parents(element, _elements) {\n _elements = _elements || [];\n _elements.push(element);\n if(element.parentNode && element.tagName !== 'BODY') {\n return parents(element.parentNode, _elements);\n }\n return _elements;\n }\n\n function forceStyle(el, name, value) {\n el.style.setProperty(name, value, 'important');\n }\n\n Array.apply(null, parents(input)).forEach(function(el) {\n let element = el;\n if (element instanceof DocumentFragment) {\n element = element.host\n }\n\n var displayMode = window.getComputedStyle(element).display;\n if(displayMode === \"none\") {\n forceStyle(element, 'display', 'block');\n }\n })\n\n forceStyle(input, 'visibility', 'visible');\n forceStyle(input, 'width', '${positionAndSize.width}');\n forceStyle(input, 'max-width', '${positionAndSize.width}');\n forceStyle(input, 'height', '${positionAndSize.height}');\n forceStyle(input, 'max-height', '${positionAndSize.height}');\n forceStyle(input, 'z-index', ${zIndex});\n forceStyle(input, 'opacity', ${opacity});\n forceStyle(input, 'top', '${positionAndSize.top}');\n forceStyle(input, 'left', '${positionAndSize.left}');\n forceStyle(input, 'position', 'fixed');\n forceStyle(input, 'pointer-events', 'all');\n input.removeAttribute(\"disabled\");\n input.focus();\n }\n }`;\n}\n\nasync function downloadFile(fileUrl, fileName) {\n let body = null;\n try {\n const res = await httpRequest.download(fileUrl);\n body = res.body;\n } catch (err) {\n logger.error('failed to download input-file content',\n { err: { message: err.message, stack: err.stack, status: err.status } });\n if (err.response) {\n // try to emulate what we essentially do in clickim\n body = err.response.body;\n } else {\n // we have a circular object\n if (err.cause) {\n throw new Error(err.message);\n }\n throw err;\n }\n }\n\n const localFileLocation = `${os.tmpdir()}/${fileName}`;\n await fsPromises.writeFile(localFileLocation, body);\n return localFileLocation;\n}\n\nfunction downloadFiles(fileUrls) {\n return promiseMap(fileUrls, file => downloadFile(file.url, file.name));\n}\n\nfunction uploadFileToGrid(localFileLocation, uploadFileFn) {\n return uploadFileFn(localFileLocation);\n}\n\nasync function downloadFilesAndUploadToGrid(fileUrls, uploadFileFn) {\n const filesOnDisk = await downloadFiles(fileUrls);\n const gridLocalFiles = await promiseMap(filesOnDisk, localFileLocation => uploadFileToGrid(localFileLocation, uploadFileFn));\n return Array.isArray(gridLocalFiles) && gridLocalFiles.map(gridLocalFile => gridLocalFile?.value);\n}\n\nmodule.exports = {\n getVisibleElementScript,\n downloadFilesAndUploadToGrid,\n};\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst inputFileUtils = require('../../inputFileUtils');\nconst featureFlagService = require('../../commons/featureFlags');\nconst { getLogger } = require('../../commons/logger');\nconst { extractElementId, download } = require('../../utils');\n\nconst logger = getLogger('input-file-step-action');\n\nclass InputFileStepAction extends StepAction {\n uploadFile(localFileLocation) {\n return this.driver.uploadFile(localFileLocation);\n }\n\n forceInputToBeVisible(target, visibleScriptOptions) {\n logger.info('workaround - stepaction - move element to visible position');\n\n const getVisibleElementCode = `\n var getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n var getVisibleElement = ${inputFileUtils.getVisibleElementScript(visibleScriptOptions)};\n return getVisibleElement.apply(null, arguments);\n `;\n\n return this.driver.executeJS(getVisibleElementCode, target.locatedElement);\n }\n\n async safariPreUploadActions(target) {\n const options = {\n width: '150px',\n height: '150px',\n left: '10px',\n top: '10px',\n };\n try {\n return await this.forceInputToBeVisible(target, options);\n } catch (err) {\n logger.error('failed to set input file in Safari recovery', { err });\n throw err;\n }\n }\n\n async uploadFilesAndForceVisibility(gridLocalFiles, target) {\n try {\n if (this.driver.isSafari()) {\n await this.safariPreUploadActions(target);\n }\n await this.uploadFiles(gridLocalFiles, target);\n } catch (err) {\n const edgeErrorEditableMessage = 'The element is not editable';\n const edgeErrorFocusableMessage = 'The element is not focusable';\n const safariErrorVisibleMessage = 'An element command could not be completed because the element is not visible on the page.';\n const elementNotInteractable = 'element not interactable';\n const elementNotPointerOrKeyboardInteractable = 'element is not pointer- or keyboard interactable';\n const invalidStateMsg = 'invalid element state: Element is not currently interactable and may not be manipulated';\n const mustBeVisibleMsg = 'Element must not be hidden, disabled or read-only';\n const notReachableByKeyboard = 'is not reachable by keyboard';\n /** @type {string} */\n const errorMsg = err ? err.message : '';\n // Workaround move element if element is not visible or disabled\n if (\n errorMsg === invalidStateMsg ||\n errorMsg.startsWith(mustBeVisibleMsg) ||\n errorMsg.startsWith(edgeErrorEditableMessage) ||\n errorMsg.startsWith(edgeErrorFocusableMessage) ||\n errorMsg.startsWith(safariErrorVisibleMessage) ||\n errorMsg.includes(notReachableByKeyboard) ||\n errorMsg.includes(elementNotInteractable) ||\n errorMsg.includes(elementNotPointerOrKeyboardInteractable)\n ) {\n await this.forceInputToBeVisible(target);\n await this.uploadFiles(gridLocalFiles, target);\n return;\n }\n\n logger.error('failed to set input file', { err });\n throw err;\n }\n }\n\n async uploadFiles(gridLocalFiles, target) {\n for (const file of gridLocalFiles) {\n await this.driver.elementIdValue(extractElementId(target.seleniumElement), file);\n }\n }\n\n async performAction() {\n const target = this.context.data[this.step.targetId || 'targetId'];\n const overrideAzureStorageUrl = featureFlagService.flags.overrideAzureStorageUrl.isEnabled();\n const useJsInputCodeInSafari = featureFlagService.flags.useJsInputCodeInSafari.isEnabled();\n const useJsInputCodeInFirefox = featureFlagService.flags.useJsInputCodeInFirefox.isEnabled();\n const downloadToBase64 = featureFlagService.flags.downloadToBase64.isEnabled();\n\n let fileUrls = await this.sessionPlayerInit.utils.addTokenToFileUrl(this.context.project.id, this.step.fileUrls, this.stepActionUtils.testimServicesApi, overrideAzureStorageUrl, logger);\n\n\n const isSafariJsInputCode = this.driver.isSafari() && (useJsInputCodeInSafari || fileUrls.length > 1);\n const isFirefoxJsInputCode = this.driver.isFirefox() && (useJsInputCodeInFirefox || fileUrls.length > 1);\n\n if (downloadToBase64) {\n fileUrls = await Promise.all(fileUrls.map(async ({ name, url }) => {\n const res = await download(url);\n return { name, url: `data:${res.type};base64,${Buffer.from(res.body).toString('base64')}` };\n }));\n }\n if (isSafariJsInputCode || isFirefoxJsInputCode) {\n await this.driver.executeJSWithArray(`\n const getLocatedElement = ${this.sessionPlayerInit.codeSnippets.getLocatedElementCode};\n const downloadAndUploadFile = ${downloadAndUpload()};\n return downloadAndUploadFile.apply(null, arguments);`, [target.locatedElement, fileUrls]);\n return;\n }\n\n const gridLocalFiles = await inputFileUtils.downloadFilesAndUploadToGrid(fileUrls, this.uploadFile.bind(this));\n await this.uploadFilesAndForceVisibility(gridLocalFiles, target);\n }\n}\n\nmodule.exports = InputFileStepAction;\nfunction downloadAndUpload() {\n return `async function downloadAndUpload(locatedElement, fileUrls) {\n const fileIsNative = typeof window.File === 'function' && (window.File.toString().indexOf('native code') > -1);\n const File = fileIsNative ? window.File : (function obtainSafeGlobals() {\n const attachTo = document.body || document.documentElement;\n if (attachTo) {\n let tempIFrame;\n try {\n tempIFrame = document.createElement('iframe');\n tempIFrame.style.setProperty('display', 'none');\n tempIFrame.style.setProperty('pointer-events', 'none');\n attachTo.appendChild(tempIFrame);\n const { File } = tempIFrame.contentWindow;\n return File;\n } finally {\n if (tempIFrame) {\n tempIFrame.parentElement.remove(frame);\n }\n }\n } else {\n return window.File;\n }\n })();\n const element = getLocatedElement(locatedElement);\n if(!element) {\n throw new Error('element not found');\n }\n\n function getFileBlob(url) {\n return new Promise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'blob';\n\n xhr.onload = function() {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('Could not load file, failure status:' + this.status));\n }\n }\n xhr.onerror = function(e) {\n reject(new Error(\"Error \" + e.target.status + \" occurred while loading the file.\"));\n };\n xhr.send();\n });\n\n }\n\n const fileList = await Promise.all(fileUrls.map(async ({ url, name }) => {\n let blob;\n try {\n const res = await fetch(url)\n blob = await res.blob();\n } catch (err) {\n blob = await getFileBlob(url); // Sometimes the fetch fails, try using XHR as fallback\n }\n return new File([blob], name, { type: blob.type });\n }));\n\n const dt = new DataTransfer();\n for (const file of fileList) {\n dt.items.add(file);\n }\n element.files = dt.files;\n\n let changeWasFired = false;\n const changeFiredHandler = (e) => {\n changeWasFired = true;\n };\n\n element.addEventListener(\"change\", changeFiredHandler, true);\n await Promise.resolve(); // wait microtick\n element.dispatchEvent(new Event(\"input\", { bubbles: true }));\n if (!changeWasFired) {\n element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }\n element.removeEventListener(\"change\", changeFiredHandler, true);\n }`;\n}\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst requiredUrl = require('url');\n\nclass NavigationStepAction extends StepAction {\n async updateBaseUrl(location) {\n const orgUrl = requiredUrl.parse(location);\n const baseLocation = requiredUrl.parse(this.context.recordedBaseUrl);\n const newBaseLocation = requiredUrl.parse(this.context.baseUrl);\n if (orgUrl.host === baseLocation.host && baseLocation.host !== newBaseLocation.host) {\n orgUrl.host = newBaseLocation.host;\n }\n return orgUrl.href;\n }\n\n async performAction() {\n const url = this.context.data.testimNavigationStepDestination || this.context.data.url;\n // Opens a new tab and switches to new tab\n if (this.step.openInNewTab) {\n await this.driver.client.newWindow(url);\n return;\n }\n const updatedUrl = await this.updateBaseUrl(url);\n await this.driver.url(updatedUrl);\n }\n}\n\nmodule.exports = NavigationStepAction;\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst { delay } = require('../../utils');\n\nclass SleepStepAction extends StepAction {\n async performAction() {\n await delay(this.step.durationMS);\n }\n}\n\nmodule.exports = SleepStepAction;\n","'use strict';\n\nconst StepAction = require('./stepAction');\n\nclass RefreshStepAction extends StepAction {\n async execute() {\n try {\n await this.driver.reloadTab();\n return { success: true };\n } catch (error) {\n return { success: false, reason: error.message };\n }\n }\n}\n\nmodule.exports = RefreshStepAction;\n","// @ts-check\n\n'use strict';\n\nconst StepAction = require('./stepAction');\n\nclass ApiStepAction extends StepAction {\n async runApiInAut(eventData) {\n eventData.withCredentials = true;\n const timeout = this.context.data.timeToPlayStep + 3000;\n const { apiCall } = this.sessionPlayerInit;\n try {\n const autRes = await this.driver.executeCodeAsync(apiCall, timeout, eventData);\n const resp = autRes?.value;\n return resp || {};\n } catch (err) {\n if (err?.message?.includes('Javascript execution context no longer exists')) {\n throw new Error(\n 'The page refreshed or changed while executing this step. Please consider unchecking \"Send via web page\" if this is expected.');\n }\n throw err;\n }\n }\n\n runApiInBg(eventData) {\n const { apiCall } = this.sessionPlayerInit;\n return new Promise(resolve => { apiCall(eventData, resolve); });\n }\n\n async performAction() {\n const { commonConstants } = this.sessionPlayerInit;\n /** @type {import('clickim/src/common/models/apiStep').ApiStep} */\n const step = this.step;\n const context = this.context;\n\n const eventData = {\n id: step.id,\n url: context.apiUrl,\n method: step.method,\n headers: context.apiHeaders,\n body: context.apiBody,\n timeout: context.data.maxTotalStepTime,\n omitCookies: step.omitCookies,\n formData: step.formData,\n fileUrls: context.fileUrls,\n };\n\n let resp;\n if (step.sendViaWebApp) {\n resp = await this.runApiInAut(eventData);\n } else {\n resp = await this.runApiInBg(eventData);\n }\n const result = resp.result || {};\n const resultInfo = {\n method: step.method,\n status: result.status,\n url: step.url,\n };\n if (resp.success) {\n if (result.status === 0) {\n return {\n result,\n resultInfo,\n shouldRetry: false,\n success: false,\n reason: 'Connection problem',\n errorType: commonConstants.stepResult.API_REQUEST_NETWORK_ERROR,\n };\n }\n return {\n result,\n resultInfo,\n shouldRetry: false,\n success: true,\n };\n }\n return {\n result,\n resultInfo,\n shouldRetry: false,\n success: false,\n reason: result.error || commonConstants.error.REQUEST_TIMED_OUT,\n errorType: result.error ? commonConstants.stepResult.API_FAILURE : commonConstants.stepResult.API_REQUEST_NETWORK_ERROR,\n };\n }\n}\n\nmodule.exports = ApiStepAction;\n","'use strict';\n\nconst StepAction = require('./stepAction');\n\nclass ExtractTextStepAction extends StepAction {\n async performAction() {\n const paramName = this.step.extractTextParamName;\n\n const extractedText = await this.stepActionUtils.extractTargetText(this.getTarget());\n this.context.data.exports = this.context.data.exports || {};\n this.context.data.exports[paramName] = extractedText;\n return {\n success: true,\n data: this.context.data,\n };\n }\n}\n\nmodule.exports = ExtractTextStepAction;\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst { execute } = require('../../stepPlayers/hybridStepPlayback');\n\nclass TdkHybridStepAction extends StepAction {\n async performAction() {\n return await execute(\n this.step,\n this.context,\n this.driver,\n this.stepActionUtils.testimServicesApi.authenticationManager.getLoggedUserInfo(),\n this.frameHandler.frameManager\n );\n }\n}\n\nmodule.exports = TdkHybridStepAction;\n","/**\n * @typedef {import('@applitools/types').SpecDriver} SpecDriver\n * @typedef {import('@applitools/types').Core} Core\n */\n\nconst _ = require('lodash');\nconst { makeSDK } = require('@applitools/eyes-sdk-core');\nconst { W3C_ELEMENT_ID } = require('../constants');\nconst { getSessionPlayer } = require('../../commons/getSessionPlayerRequire');\nconst { dependencies } = require('../../../package.json');\n\nconst LEGACY_ELEMENT_ID = 'ELEMENT';\n\nfunction extractElementId(element) {\n if (_.has(element, 'elementId')) {\n return element.elementId;\n }\n if (_.has(element, W3C_ELEMENT_ID)) {\n return element[W3C_ELEMENT_ID];\n }\n if (_.has(element, LEGACY_ELEMENT_ID)) {\n return element[LEGACY_ELEMENT_ID];\n }\n return undefined;\n}\n\n/**\n * Applitools Spec Driver for webdriverIO 4.\n * @see https://github.com/applitools/eyes.sdk.javascript1/blob/master/packages/eyes-webdriverio-4/src/spec-driver.ts\n * @implements {SpecDriver}\n */\nclass EyesSpec {\n // #region UTILITY\n isDriver(driver) {\n return Boolean(driver?.getPrototype && driver.desiredCapabilities && driver.requestHandler);\n }\n\n isElement(element) {\n if (!element) {\n return false;\n }\n const elementToCheck = element.value || element;\n return Boolean(elementToCheck[W3C_ELEMENT_ID] || elementToCheck[LEGACY_ELEMENT_ID]);\n }\n\n isSelector(selector) {\n return typeof selector === 'string';\n }\n\n transformDriver(driver) {\n return new Proxy(driver, {\n get: (target, key) => {\n if (key === 'then') {\n return undefined;\n }\n return Reflect.get(target, key);\n },\n });\n }\n\n transformElement(element) {\n const elementId = extractElementId(element.value || element);\n return { [W3C_ELEMENT_ID]: elementId, [LEGACY_ELEMENT_ID]: elementId };\n }\n\n transformSelector(selector) {\n if (!_.has(selector, 'selector')) {\n return selector;\n }\n if (!_.has(selector, 'type')) {\n return selector.selector;\n }\n if (selector.type === 'css') {\n return `css selector:${selector.selector}`;\n }\n return `${selector.type}:${selector.selector}`;\n }\n\n extractSelector(element) {\n return _.has(element, 'selector') ? element.selector : undefined;\n }\n\n isStaleElementError(error, selector) {\n if (!error) {\n return false;\n }\n const errOrResult = error.originalError || error;\n return errOrResult instanceof Error ?\n errOrResult.seleniumStack && errOrResult.seleniumStack.type === 'StaleElementReference' :\n errOrResult.value && errOrResult.selector && errOrResult.selector === selector;\n }\n\n isEqualElements(_browser, element1, element2) {\n if (!element1 || !element2) {\n return false;\n }\n const elementId1 = extractElementId(element1);\n const elementId2 = extractElementId(element2);\n return elementId1 === elementId2;\n }\n // #endregion\n\n // #region COMMANDS\n async executeScript(driver, script, arg) {\n const { value } = await driver.execute(script, arg);\n return value;\n }\n\n async mainContext(driver) {\n await driver.frame(null);\n return driver;\n }\n\n async parentContext(driver) {\n await driver.frameParent();\n return driver;\n }\n\n async childContext(driver, element) {\n await driver.frame(element);\n return driver;\n }\n\n async findElement(driver, selector, parent) {\n const { value } = parent ? await driver.elementIdElement(extractElementId(parent), selector) : await driver.element(selector);\n return value;\n }\n\n async findElements(driver, selector, parent) {\n const { value } = parent ? await driver.elementIdElements(extractElementId(parent), selector) : await driver.elements(selector);\n return value;\n }\n\n async getWindowSize(driver) {\n const { value: size } = await driver.windowHandleSize();\n return { width: size.width, height: size.height };\n }\n\n async setWindowSize(driver, size) {\n await driver.windowHandlePosition({ x: 0, y: 0 });\n await driver.windowHandleSize(size);\n }\n\n async getDriverInfo(driver) {\n const desiredCapabilities = driver.desiredCapabilities;\n\n return {\n sessionId: driver.requestHandler.sessionID || driver.sessionId,\n isMobile: driver.isMobile,\n isNative: driver.isMobile && !desiredCapabilities.browserName,\n deviceName: desiredCapabilities.deviceName,\n platformName: desiredCapabilities.platformName || desiredCapabilities.platform,\n platformVersion: desiredCapabilities.platformVersion,\n browserName: desiredCapabilities.browserName ?? desiredCapabilities.name,\n browserVersion: desiredCapabilities.browserVersion ?? desiredCapabilities.version,\n pixelRatio: desiredCapabilities.pixelRatio,\n };\n }\n\n async getTitle(driver) {\n return driver.getTitle();\n }\n\n async getUrl(driver) {\n return driver.getUrl();\n }\n\n async visit(driver, url) {\n await driver.url(url);\n }\n\n async takeScreenshot(driver) {\n return driver.saveScreenshot();\n }\n\n async click(driver, element) {\n if (this.isSelector(element)) {\n element = await this.findElement(driver, element);\n }\n await driver.elementIdClick(extractElementId(element));\n }\n\n async hover(driver, element, offset) {\n if (this.isSelector(element)) {\n element = await this.findElement(driver, element);\n }\n await driver.moveTo(extractElementId(element), offset?.x, offset?.y);\n }\n\n async type(driver, element, keys) {\n if (this.isSelector(element)) {\n element = await this.findElement(driver, element);\n } else {\n driver.elementIdValue(extractElementId(element), keys);\n }\n }\n\n async scrollIntoView(driver, element, align = false) {\n if (this.isSelector(element)) {\n element = await this.findElement(driver, element);\n }\n await driver.execute('arguments[0].scrollIntoView(arguments[1])', element, align);\n }\n\n async waitUntilDisplayed(driver, selector, timeout) {\n await driver.waitForVisible(selector, timeout);\n }\n // #endregion\n}\n\nclass EyeSdkService {\n constructor() {\n const { EyeSdkBuilder } = getSessionPlayer();\n const sdkVersion = dependencies['@applitools/eyes-sdk-core'] || 'N/A';\n\n /** @type {Core} */\n this.sdk = makeSDK({\n name: 'Testim.io',\n version: `4.0.0/eyes-sdk-core/${sdkVersion}`,\n spec: new EyesSpec(),\n });\n /** @type {typeof EyeSdkBuilder['handleApplitoolsSdkResult']} */\n this.handleApplitoolsSdkResult = EyeSdkBuilder.handleApplitoolsSdkResult;\n }\n async getManager(useVisualGrid, concurrency, batchId, applitoolsIntegrationData) {\n const { EyeSdkBuilder } = getSessionPlayer();\n const manager = await this.sdk.makeManager({ type: useVisualGrid ? 'vg' : 'classic', concurrency });\n EyeSdkBuilder.rememberCreatedBatch(batchId, applitoolsIntegrationData);\n return manager;\n }\n}\n\nexports.eyeSdkService = new EyeSdkService();\n","'use strict';\n\nconst _ = require('lodash');\nconst StepAction = require('./stepAction');\nconst { eyeSdkService } = require('../utils/eyeSdkService');\nconst { getLogger } = require('../../commons/logger');\n\nconst logger = getLogger('pixel-validation-step-action');\n\nclass PixelValidationStepAction extends StepAction {\n async performAction() {\n const { shouldUseVisualGrid, applitoolsSdkConfig: config, applitoolsSdkLogger, testResultId } = this.context;\n this.runContext = this.context.getRunContext(undefined);\n const finalParams = this.runContext.incomingParams?.final || {};\n const batchId = config.batch?.id || testResultId;\n const eyeManager = await eyeSdkService.getManager(shouldUseVisualGrid, this.context.config.applitoolsConcurrency || 5, batchId, this.runContext.applitoolsIntegrationData);\n const targetElementData = this.getTarget() || {};\n let result;\n try {\n const openedEye = await eyeManager.openEyes({ driver: this.driver.client, config, logger: applitoolsSdkLogger });\n const region = (this.step.action === 'element' && targetElementData.seleniumElement) || undefined;\n const settings = { region, fully: this.step.action === 'stitched' };\n if (_.isPlainObject(finalParams.applitoolsStepSettings)) {\n Object.assign(settings, finalParams.applitoolsStepSettings);\n logger.info('Applitools SDK step executed with applitoolsStepSettings parameter', { applitoolsStepSettings: finalParams.applitoolsStepSettings });\n }\n await openedEye.check({ settings });\n const eyesResults = await openedEye.close();\n\n result = { isApplitoolsSdkResult: true, success: true, eyesResults };\n } catch (err) {\n logger.error('Applitools SDK step failed', { err, info: err.info });\n result = { isApplitoolsSdkResult: true, success: false, err };\n }\n return await eyeSdkService.handleApplitoolsSdkResult(this.context, result, this.step);\n }\n}\n\nmodule.exports = PixelValidationStepAction;\n","'use strict';\n\nconst utils = require('../../utils');\nconst BaseJsStepAction = require('./baseJsStepAction');\nconst service = require('../../agent/routers/cliJsCode/service');\n\nclass BaseCliJsStepAction extends BaseJsStepAction {\n async executeCliCode() {\n const { step, context } = this;\n const isMobile = this.stepActionUtils.driver.isMobile;\n const hasCliAction = context.company?.activePlan?.premiumFeatures?.cliAction;\n\n if (!hasCliAction && !isMobile) {\n return {\n success: 'skipped',\n reason: 'CLI action is not enabled in your current plan',\n };\n }\n\n const { code, id } = step;\n const { incomingParams, testResultId, retryIndex, stepResultId } = context;\n const contextData = {\n config: context.config,\n data: context.data,\n };\n const runTimeout = context.data.timeToPlayStep;\n const data = await service.runCodeWithPackages(code, id, incomingParams, contextData, testResultId, retryIndex, stepResultId, runTimeout);\n return await this.checkCodeResponse(data);\n }\n\n async performAction() {\n try {\n return await this.executeCliCode();\n } catch (err) {\n const { stepResult } = this.sessionPlayerInit.commonConstants;\n if (err instanceof utils.TimeoutError) {\n return {\n success: false,\n errorType: stepResult.ACTION_TIMEOUT,\n };\n }\n return {\n success: false,\n reason: err.message,\n exception: err,\n };\n }\n }\n}\n\nmodule.exports = BaseCliJsStepAction;\n","'use strict';\n\nconst BaseCliJsStepAction = require('./baseCliJsStepAction');\n\nclass CliJsStepAction extends BaseCliJsStepAction {\n isFailedResult(resultValue) {\n return resultValue === false;\n }\n}\n\nmodule.exports = CliJsStepAction;\n","'use strict';\n\nconst BaseCliJsStepAction = require('./baseCliJsStepAction');\n\nclass CliConditionStepAction extends BaseCliJsStepAction {\n isFailedResult(resultValue) {\n return !resultValue;\n }\n}\n\nmodule.exports = CliConditionStepAction;\n","'use strict';\n\nconst StepAction = require('./stepAction');\nconst { NpmPackageError } = require('../../errors');\n\nconst service = require('../../agent/routers/cliJsCode/service');\nconst utils = require('../../utils');\n\nclass NodePackageStepAction extends StepAction {\n async performAction() {\n const { context } = this;\n const { stepId, packageData, resultId, retryIndex, stepResultId, timeToPlayBeforeExec } = context;\n\n try {\n const data = await service.installPackage(\n stepId,\n resultId,\n retryIndex,\n packageData,\n stepResultId,\n timeToPlayBeforeExec,\n );\n return ({ data, success: true });\n } catch (err) {\n if (err instanceof NpmPackageError) {\n return {\n success: false,\n code: 'invalid-node-package',\n message: err.message,\n };\n }\n if (err instanceof utils.TimeoutError) {\n return {\n success: false,\n code: 'timeout',\n };\n }\n return {\n success: false,\n reason: err.message,\n exception: err,\n };\n }\n }\n}\n\nmodule.exports = NodePackageStepAction;\n","const StepAction = require('./stepAction');\n\nclass ExtensionOnlyStepAction extends StepAction {\n async performAction() {\n return {\n success: 'skipped',\n reason: 'This step can run only on Chrome',\n };\n }\n}\n\nmodule.exports = ExtensionOnlyStepAction;\n","const StepAction = require('./stepAction');\n\nclass SfdcStepAction extends StepAction {\n async performAction() {\n const { sfdc } = this.sessionPlayerInit;\n const page = sfdc.sfdcNewSePage(this.driver, (level, message) => this.context.playback.sfdcAddLog(level, message));\n page.log.info(`BEGIN STEP '${this.step.getStepPreview?.()}'`);\n try {\n const actions = this.context.sfdcTestActions;\n if (actions === undefined) {\n throw new Error('No test actions were compiled');\n }\n const warnings = await sfdc.sfdcExecute(page, actions, this.context);\n return { success: true, reason: warnings };\n } catch (err) {\n return {\n success: false,\n reason: err.reason || err.message,\n exception: err,\n shouldRetry: false, // TODO - check this. Our (bFormat) steps are probably not retryable?\n };\n } finally {\n page.releaseObjects();\n }\n }\n}\n\nmodule.exports = SfdcStepAction;\n","const StepAction = require('./stepAction');\n\nclass SfdcRecordedStepAction extends StepAction {\n async performAction() {\n const { sfdc } = this.sessionPlayerInit;\n const page = sfdc.sfdcNewSePage(this.driver, (level, message) => this.context.playback.sfdcAddLog(level, message));\n page.log.info(`BEGIN STEP '${this.step.getStepPreview?.()}'`);\n try {\n const warnings = await sfdc.sfdcExecuteRecordedStep(page, this.step.recordedData, this.context);\n return { success: true, reason: warnings };\n } catch (err) {\n return {\n success: false,\n reason: err.reason || err.message,\n exception: err,\n shouldRetry: false, // TODO - check this. Our (bFormat) steps are probably not retryable?\n };\n } finally {\n page.releaseObjects();\n }\n }\n}\n\nmodule.exports = SfdcRecordedStepAction;\n","// @ts-check\n\n'use strict';\n\nconst LocateStepAction = require('./locateStepAction');\nconst ScrollStepAction = require('./scrollStepAction');\nconst MouseStepAction = require('./mouseStepAction');\nconst TextValidationStepAction = require('./textValidationStepAction');\nconst EvaluateExpressionStepAction = require('./evaluateExpressionStepAction');\nconst TextStepAction = require('./textStepAction');\nconst JsCodeStepAction = require('./jsCodeStepAction');\nconst JsConditionStepAction = require('./jsConditionStepAction');\nconst SpecialKeyStepAction = require('./specialKeyStepAction');\nconst SelectOptionStepAction = require('./selectOptionStepAction');\nconst SubmitStepAction = require('./submitStepAction');\nconst HoverStepAction = require('./hoverStepAction');\nconst WheelStepAction = require('./wheelStepAction');\nconst DropFileStepAction = require('./dropFileStepAction');\nconst InputFileStepAction = require('./inputFileStepAction');\nconst NavigationStepAction = require('./navigationStepAction');\nconst SleepStepAction = require('./sleepStepAction');\nconst RefreshStepAction = require('./RefreshStepAction');\nconst ApiStepAction = require('./apiStepAction');\nconst ExtractTextStepAction = require('./extractTextStepAction');\nconst TdkHybridStepAction = require('./tdkHybridStepAction');\nconst PixelValidationStepAction = require('./pixelValidationStepAction');\nconst CliJsStepAction = require('./cliJsStepAction');\nconst CliConditionStepAction = require('./cliConditionStepAction');\nconst NodePackageStepAction = require('./nodePackageStepAction');\nconst ExtensionOnlyStepAction = require('./extensionOnlyStepAction');\nconst SfdcStepAction = require('./sfdcStepAction');\nconst SfdcRecordedStepAction = require('./sfdcRecordedStepAction');\n\nfunction register(stepActionByType, stepActionFactory) {\n Object.keys(stepActionByType).forEach(type => {\n stepActionFactory.registerStepAction(type, stepActionByType[type]);\n });\n}\n\nconst STEP_ACTION_MAPPING = {\n locate: LocateStepAction,\n scroll: ScrollStepAction,\n mouse: MouseStepAction,\n submit: SubmitStepAction,\n text: TextStepAction,\n 'special-key': SpecialKeyStepAction,\n 'user-code': JsCodeStepAction,\n 'validation-code-step': JsCodeStepAction,\n 'wait-for-code-step': JsCodeStepAction,\n 'action-code-step': JsCodeStepAction,\n 'condition-step': JsConditionStepAction,\n 'skip-code-step': JsConditionStepAction,\n 'element-code-step': JsConditionStepAction,\n 'evaluate-expression': EvaluateExpressionStepAction,\n 'text-validation': TextValidationStepAction,\n 'wait-for-text-validation': TextValidationStepAction,\n 'select-option': SelectOptionStepAction,\n 'drop-file': DropFileStepAction,\n 'input-file': InputFileStepAction,\n hover: HoverStepAction,\n navigation: NavigationStepAction,\n wheel: WheelStepAction,\n sleep: SleepStepAction,\n refresh: RefreshStepAction,\n 'api-validation': ApiStepAction,\n 'api-action': ApiStepAction,\n 'api-code-step': JsCodeStepAction,\n 'extract-text': ExtractTextStepAction,\n 'simple-ui-verification': PixelValidationStepAction,\n 'wait-for-simple-ui-verification': PixelValidationStepAction,\n\n 'cli-validation-download-file': ExtensionOnlyStepAction,\n 'cli-wait-for-download-file': ExtensionOnlyStepAction,\n 'network-validation-step': ExtensionOnlyStepAction,\n\n 'cli-validation-code-step': CliJsStepAction,\n 'cli-wait-for-code-step': CliJsStepAction,\n 'cli-action-code-step': CliJsStepAction,\n 'cli-api-code-step': CliJsStepAction,\n\n 'cli-condition-step': CliConditionStepAction,\n 'node-package': NodePackageStepAction,\n\n 'email-code-step': JsCodeStepAction,\n 'cli-email-code-step': CliJsStepAction,\n 'tdk-hybrid': TdkHybridStepAction,\n\n 'sfdc-recorded-step': SfdcRecordedStepAction,\n 'sfdc-step-login': SfdcStepAction,\n 'sfdc-step-logout': SfdcStepAction,\n 'sfdc-step-sobjectcreate': SfdcStepAction,\n 'sfdc-step-sobjectdelete': SfdcStepAction,\n 'sfdc-step-findrecord': SfdcStepAction,\n 'sfdc-step-quickaction': SfdcStepAction,\n 'sfdc-step-sobjectedit': SfdcStepAction,\n 'sfdc-step-sobjectvalidate': SfdcStepAction,\n 'sfdc-step-launchapp': SfdcStepAction,\n 'sfdc-step-closeconsoletabs': SfdcStepAction,\n 'sfdc-step-relatedlistaction': SfdcStepAction,\n};\n\n/**\n * @param {import('../webdriver')} driver\n * @param {import('clickim/src/background/stepActions/stepActionFactory').StepActionFactory} stepActionFactory\n*/\nmodule.exports = function (driver, stepActionFactory, runMode) {\n register(STEP_ACTION_MAPPING, stepActionFactory);\n if (stepActionFactory.registerLocateStepActionUtils) {\n stepActionFactory.registerLocateStepActionUtils(LocateStepAction.getUtils(driver));\n }\n};\n","'use strict';\n\nconst utils = require('../utils');\nconst WebDriver = require('./webdriver');\nconst CookieUtils = require('./utils/cookieUtils');\nconst TabService = require('./services/tabService');\nconst PortSelector = require('./services/portSelector');\nconst StepActionUtils = require('./utils/stepActionUtils');\nconst frameLocatorFactory = require('./services/frameLocator');\nconst testResultService = require('../commons/socket/testResultService');\nconst windowCreationListener = require('./services/windowCreationListener');\nconst PlaybackTimeoutCalculator = require('./services/playbackTimeoutCalculator');\nconst { isDebuggerConnected } = require('../commons/detectDebugger');\nconst { getSessionPlayer } = require('../commons/getSessionPlayerRequire');\n\n\nclass SeleniumTestPlayer {\n //eslint-disable-next-line default-param-last\n constructor(id, userParamsData, shouldMonitorPerformance, automationMode = 'code', driver = new WebDriver(), testRetryCount, previousTestResultId) {\n const { sessionPlayer: Player, commonConstants, stepActionFactory: StepActionFactory } = getSessionPlayer();\n this.driver = driver;\n this.id = id;\n\n const stepActionUtils = new StepActionUtils(this.driver);\n this.stepActionFactory = new StepActionFactory(stepActionUtils);\n require('./stepActions/stepActionRegistrar')(this.driver, this.stepActionFactory, 'selenium');\n\n this.tabService = this.driver.tabService || new TabService(this.driver);\n // expose the tabService on the driver so future sessions reusing the driver\n // know the tabs (for example - a TDK Hybrid step)\n this.driver.tabService = this.tabService;\n this.windowCreationListener = windowCreationListener;\n this.playbackTimeoutCalculator = new PlaybackTimeoutCalculator(isDebuggerConnected());\n\n this.tabService.createSesion(id);\n\n const FrameLocator = frameLocatorFactory(this.driver);\n\n this.sessionPlayer = new Player(\n id,\n this.tabService,\n CookieUtils(this.driver),\n windowCreationListener,\n FrameLocator,\n PortSelector,\n null,\n null /* Not in use, placeholder for the order of arguments */,\n stepActionUtils,\n this.stepActionFactory,\n this.playbackTimeoutCalculator,\n testResultService.getSocket(),\n automationMode,\n );\n\n if (this.sessionPlayer.setShouldMonitorPerformance) {\n this.sessionPlayer.setShouldMonitorPerformance(shouldMonitorPerformance);\n }\n\n this.tabService.setAddFrameHandlerCallBack(this.sessionPlayer.addPlaybackFrameHandler.bind(this.sessionPlayer));\n\n this.sessionPlayer.playbackManager.isRemoteSession = true;\n this.sessionPlayer.playbackManager.isLocalRun = false;\n this.sessionPlayer.playbackManager.testRetryCount = testRetryCount;\n this.sessionPlayer.playbackManager.previousTestResultId = previousTestResultId;\n\n this.sessionPlayer.playbackManager.userParamsData = userParamsData || {};\n\n this.onStepCompleted = this.onStepCompleted.bind(this);\n\n this.sessionPlayer.playbackManager.on(commonConstants.playback.RESULT, this.onStepCompleted);\n }\n\n onStepCompleted(result, testId, resultId, step) {\n if (step?.isTabOpener) {\n this.tabService.addNewPopup(this.id, step.id)\n .catch(() => { });\n }\n }\n\n onDone() {\n const { commonConstants } = getSessionPlayer();\n const END_DRIVER_TIMEOUT = 1000 * 60 * 2;\n return utils.promiseTimeout(this.driver.end(), END_DRIVER_TIMEOUT)\n .catch(error => {\n if (error instanceof utils.TimeoutError) {\n return this.driver.forceEnd().catch(() => null);\n }\n return undefined;\n })\n .then(() => {\n this.sessionPlayer.playbackManager.off(commonConstants.playback.RESULT, this.onStepCompleted);\n this.sessionPlayer = null;\n this.tabService = null;\n this.stepActionFactory = null;\n this.driver = null;\n });\n }\n\n clearSessionTabs() {\n this.tabService.clearAllTabs(this.id);\n }\n\n async addTab(openerStepId, options = { loadInfo: true }) {\n const ids = await this.driver.getTabIds();\n const lastId = ids.at(-1);\n await this.tabService.addNewTab(this.id, lastId, openerStepId, options);\n return this.sessionPlayer.addPlaybackFrameHandler(lastId, undefined, { emptyPage: true });\n }\n\n async addAllTabs(openerStepId, options = { loadInfo: true, checkForMainTab: true, takeScreenshots: true }, blackList = []) {\n const ids = await this.driver.getTabIds();\n // the ids are reversed so we search first in the last tab opened - otherwise it starts looking from the testim editor and not the AUT\n\n const PROHIBITED_URLS = ['app.testim.io'].concat(blackList);\n for (const id of ids.reverse()) {\n await this.tabService.addNewTab(this.id, id, openerStepId, { ...options, forceSwitch: true });\n const tabInfo = this.tabService.getTabInfo(this.id, id);\n if (PROHIBITED_URLS.some(bad => tabInfo.url.includes(bad))) {\n await this.tabService.removeTabInfo(this.id, id);\n continue;\n }\n await this.sessionPlayer.addPlaybackFrameHandler(id, undefined, { emptyPage: true });\n }\n if (this.tabService.tabCount(this.id) === 1) {\n // if we only have one tab because we removed the editor tab - we have to switchTab to one of the other tabs, otherwise\n // tabService will assume it's on a good context but it's not.\n const tabInfo = this.tabService.getMainTabInfo(this.id);\n const tabUtils = this.tabService.getTabUtils(this.id, tabInfo);\n await this.tabService.switchTab(tabUtils.tabId, this.id, { forceSwitch: true });\n }\n // deal with checkForMainTab failing due to the page refreshing or JavaScript not responding or a similar issue\n this.tabService.fixMissingMainTab(this.id);\n }\n\n getSessionId() {\n return this.driver.getSessionId();\n }\n}\n\nmodule.exports = SeleniumTestPlayer;\n","'use strict';\n\nclass AbortError extends Error {\n constructor(message = 'aborted') {\n super(message);\n this.name = 'AbortError';\n }\n}\n\nmodule.exports = {\n AbortError,\n};\n","'use strict';\n\nconst _ = require('lodash');\nconst path = require('path');\nconst MemoryFS = require('memory-fs');\nconst utils = require('../utils');\nconst lazyRequire = require('../commons/lazyRequire');\nconst { AbortError } = require('../commons/AbortError');\n\n// compiler instance we can reuse between calls\nconst state = {\n compiler: null,\n webpackConfig: null,\n};\n\nexports.buildCodeTests = async function buildCodeTestsGuarded(\n files,\n webpackConfig,\n runnerOptionsToMaybeCopyToTestEnvironment,\n fileSystem,\n optionalAbortSignal\n) {\n try {\n return await buildCodeTests(files, webpackConfig, runnerOptionsToMaybeCopyToTestEnvironment, fileSystem, optionalAbortSignal);\n } catch (e) {\n if (e && e.code === 'ENOENT') {\n // this is a webpack config error - it means webpack didn't pick up on a file change and didn't generate the correct bundle\n // according to the guid hash\n state.compiler = null;\n state.webpackConfig = null;\n fileSystem.data = {}; // reset the memory filesystem in case we left a mess there in the previous invocation\n return await buildCodeTests(files, webpackConfig, runnerOptionsToMaybeCopyToTestEnvironment, fileSystem, optionalAbortSignal);\n }\n throw e;\n }\n};\n\nasync function buildCodeTests(files, webpackConfig = { mode: 'development' }, runnerOptionsToMaybeCopyToTestEnvironment = undefined, fileSystem = undefined, optionalAbortSignal = undefined) {\n const webpack = await lazyRequire('webpack');\n\n const suite = {};\n const webpackConfigBeforeOurChanges = _.cloneDeep(webpackConfig);\n\n webpackConfig.externals = { // define testim as an external\n testim: '__testim',\n // 'chai': '__chai'\n };\n webpackConfig.devtool = webpackConfig.devtool || 'inline-source-map';\n\n webpackConfig.plugins = webpackConfig.plugins || [];\n\n webpackConfig.plugins.push(new webpack.DefinePlugin(getEnvironmentVariables(runnerOptionsToMaybeCopyToTestEnvironment)), new webpack.DefinePlugin({\n 'process.argv': JSON.stringify(process.argv),\n }));\n files = files.map(f => path.resolve(f));\n\n const fileHashes = files.map(() => utils.guid(30));\n\n webpackConfig.optimization = { minimize: false };\n\n const majorNodeVersion = Number(process.versions.node.split('.')[0]);\n if (majorNodeVersion >= 17) {\n // TODO ugly hack to be removed once using Webpack 5 - https://stackoverflow.com/a/73465262 + https://github.com/webpack/webpack/issues/14532\n const crypto = require('crypto');\n const originalCryptoCreateHash = crypto.createHash;\n crypto.createHash = (algorithm, options) => originalCryptoCreateHash(algorithm === 'md4' ? 'sha256' : algorithm, options);\n }\n\n webpackConfig.entry = Object.fromEntries(_.zip(files, fileHashes).map(([filename, hash]) => [hash, filename]));\n webpackConfig.output = Object.assign({\n devtoolModuleFilenameTemplate: (info) => `file:///${info.absoluteResourcePath}`,\n filename: '[name].bundle.js',\n }, webpackConfig.output);\n\n\n let compiler;\n // if we are passed a filesystem, assume reuse between calls and turn on watch mode\n if (fileSystem) {\n // were we passed a filesystem before to compile the same thing?\n if (_.isEqual(state.webpackConfig, webpackConfigBeforeOurChanges) && state.compiler) {\n // we already have a compiler up and running\n compiler = state.compiler;\n } else {\n state.webpackConfig = webpackConfigBeforeOurChanges;\n state.compiler = webpack(webpackConfig);\n compiler = state.compiler;\n }\n } else {\n compiler = webpack(webpackConfig); // no caching\n }\n\n const mfs = fileSystem || new MemoryFS();\n compiler.outputFileSystem = mfs; // no need to write compiled tests to disk\n\n // This can only reject\n const abortSignalPromise = utils.promiseFromCallback(cb => {\n if (optionalAbortSignal) {\n optionalAbortSignal.addEventListener('abort', () => {\n cb(new AbortError());\n });\n }\n });\n\n // run compiler:\n try {\n const stats = await Promise.race([utils.promiseFromCallback(cb => compiler.run(cb)), abortSignalPromise]);\n if (stats.hasErrors()) {\n throw new Error(stats.toJson().errors);\n }\n } catch (e) {\n const { ArgError } = require('../errors');\n\n const cantFindFile = e.message.match(/Entry module not found: Error: Can't resolve '(.*)'/);\n if (cantFindFile && cantFindFile.length === 2) {\n if (webpackConfig.output && webpackConfig.output.library === 'tdk') {\n throw new ArgError(`Could not open dev-kit functions file in ${cantFindFile[1]}`);\n }\n throw new ArgError(`Can't find test files in: '${cantFindFile[1]}'`);\n }\n\n throw new ArgError(`Compilation Webpack Error in tests: ${e.message}`);\n }\n\n /** @type {{ code: string; name: string; }[]} */\n const fileResults = files.map((file, i) => ({ code: mfs.readFileSync(path.resolve('./dist', `${fileHashes[i]}.bundle.js`)), name: file })); // read all files\n\n suite.tests = [fileResults.map(({ code, name }) => ({\n code: code.toString(),\n baseUrl: '', // not supported at the moment\n name: path.resolve(name),\n testConfig: {},\n testConfigId: null,\n testId: utils.guid(),\n resultId: utils.guid(),\n isTestsContainer: true,\n }))];\n suite.runName = `Testim Dev Kit Run ${new Date().toLocaleString()}`;\n return suite;\n}\n\n// copied mostly from facebook/create-react-app/blob/8b7b819b4b9e6ba457e011e92e33266690e26957/packages/react-scripts/config/env.js\nfunction getEnvironmentVariables(runnerOptionsToMaybeCopyToTestEnvironment) {\n const fromEnvironment = _.fromPairs(\n Object.keys(process.env)\n .filter(key => /^TDK_/i.test(key) || key === 'BASE_URL')\n .map(key => [key, process.env[key]])\n );\n\n const fromConfig = {\n BASE_URL: runnerOptionsToMaybeCopyToTestEnvironment.baseUrl,\n };\n\n return {\n 'process.env': stringifyValues({ ...fromConfig, ...fromEnvironment }),\n };\n}\nfunction stringifyValues(object) {\n return _.fromPairs(Object.entries(object).map(([key, value]) => [key, JSON.stringify(value)]));\n}\n","'use strict';\n\nconst _ = require('lodash');\nconst path = require('path');\nconst fsPromises = require('fs/promises');\nconst { fromPairs } = require('lodash');\nconst { buildCodeTests } = require('../../../runners/buildCodeTests');\nconst { AbortError } = require('../../../commons/AbortError');\n\nconst findTestFolder = _.memoize(async (fromFolder) => {\n const files = await fsPromises.readdir(fromFolder);\n // this is either invoked by running the Testim CLI from inside the tests folder or from inside the `init` folder\n // so deal with the case we're inside tests.\n const isInProjectFolder = files.includes('tests') && (await fsPromises.stat(path.join(fromFolder, 'tests'))).isDirectory();\n if (isInProjectFolder) {\n return path.join(fromFolder, 'tests');\n }\n return fromFolder;\n});\n\nasync function getLocalLocators() {\n const folder = await findTestFolder(process.cwd());\n const locatorsFilePath = path.join(folder, 'locators', 'locators.js');\n function parseLocators(buffer) {\n // remove require calls to not read all the locators into memory when evaluating\n // eslint-disable-next-line no-eval\n return eval(buffer.toString().replace(/require/g, '(x => /locator\\.(.*)\\.json/.exec(x)[1])'));\n }\n const locators = await fsPromises.readFile(locatorsFilePath).then(parseLocators, () => ({}));\n return _(Object.keys(locators)).map((id) => {\n const escapedId = id.replace(/\"/g, '\\\\\"');\n return [escapedId, locators[id]];\n }).fromPairs().value();\n}\n\nasync function findTests(folder = process.cwd()) {\n const testFolder = await findTestFolder(folder);\n const filesWithStat = await fsPromises.readdir(testFolder, { withFileTypes: true });\n\n // things we know are not tests but end in js\n const excluded = ['webpack.config.js', 'tsconfig.js', '.DS_Store', 'functions.js'];\n const excludedFileTypes = ['.html', '.json'];\n return filesWithStat\n .filter(x =>\n !excluded.includes(x.name) &&\n !excludedFileTypes.some(type => x.name.endsWith(type)) &&\n x.isFile() &&\n !x.name.startsWith('.'),\n )\n .map(x => x.name);\n}\n\n/**\n * @param {Record<string, object | Promise<object>>} propsObject\n * @returns {Promise<Record<string, object>>}\n * */\nasync function promiseFromProps(propsObject) {\n const entries = Object.entries(propsObject);\n const values = entries.map(([, value]) => value);\n const resolvedValues = await Promise.all(values);\n for (let i = 0; i < resolvedValues.length; i++) {\n entries[i][1] = resolvedValues[i];\n }\n return Object.fromEntries(entries);\n}\n\nasync function getLocalLocatorContents(locators, full = false, originFolder = process.cwd()) {\n const props = {};\n if (full) {\n const folder = await findTestFolder(originFolder);\n for (const key of Object.values(locators)) {\n props[key] = fsPromises.readFile(path.join(folder, 'locators', `locator.${key}.json`)).then(JSON.parse);\n }\n }\n try {\n const contents = await promiseFromProps(props);\n return contents;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n return {};\n }\n}\nasync function saveTest({\n body, name, locators, language = 'javascript',\n}) {\n const folder = await findTestFolder(process.cwd());\n const locatorsFilePath = path.join(folder, 'locators', 'locators.js');\n let filename = path.join(folder, name);\n if (!filename.startsWith(folder)) {\n throw new Error('A test name must be a valid file name and inside the tests directory');\n }\n if (language === 'javascript') {\n if (filename.endsWith('.js') && !filename.endsWith('.test.js')) {\n filename = `${filename.substr(0, filename.length - 3)}.test.js`;\n } else if (!filename.endsWith('.test.js')) {\n filename += '.test.js';\n }\n } else if (filename.endsWith('.ts') && !filename.endsWith('.test.ts')) {\n filename = `${filename.substr(0, filename.length - 3)}.test.ts`;\n } else if (!filename.endsWith('.test.ts')) {\n filename = `${filename}.test.ts`;\n }\n if (filename.endsWith('locators/locators.js')) {\n throw new Error('Cannot override locators file from the internet as it is evaluated by the runner');\n }\n await fsPromises.writeFile(filename, body);\n await fsPromises.mkdir(path.join(folder, 'locators')).catch(() => {});\n for (const { id, body } of locators) {\n await fsPromises.writeFile(path.join(folder, 'locators', `locator.${id}.json`), JSON.stringify(body));\n }\n const locatorMap = fromPairs(locators.map(({ name, id }) => [name, id]));\n const localLocatorMap = await getLocalLocators();\n Object.assign(localLocatorMap, locatorMap);\n await writeLocators(locatorsFilePath, localLocatorMap);\n}\nasync function writeLocators(locatorsFilePath, locatorMap) {\n let content = 'module.exports = {\\n';\n for (const [key, value] of Object.entries(locatorMap)) {\n content += ` \"${key}\": require('./locator.${value}.json'),\\n`;\n }\n content += '};';\n await fsPromises.writeFile(locatorsFilePath, content);\n}\nasync function saveLocators(locators, { mergeIntoExisting } = { mergeIntoExisting: false }) {\n const folder = await findTestFolder(process.cwd());\n const locatorsFilePath = path.join(folder, 'locators', 'locators.js');\n await fsPromises.mkdir(path.join(folder, 'locators')).catch(() => {});\n\n for (const { name, id, elementLocator } of locators) {\n await fsPromises.writeFile(path.join(folder, 'locators', `locator.${id}.json`), JSON.stringify({ name, id, elementLocator }));\n }\n const locatorMap = fromPairs(locators.map(({ name, id }) => [name, id]));\n if (mergeIntoExisting) {\n const localLocatorMap = await getLocalLocators();\n Object.assign(locatorMap, localLocatorMap);\n }\n\n await writeLocators(locatorsFilePath, locatorMap);\n}\n\nasync function compileFunctionsLibrary({ fileSystem, bypassWebpack } = {}, optionalAbortSignal = undefined) {\n const folder = await findTestFolder(process.cwd());\n if (optionalAbortSignal?.aborted) {\n throw new AbortError();\n }\n\n const functionsFile = path.join(folder, 'functions.js');\n if (bypassWebpack?.testim) {\n const Module = require('module');\n // attempt to require without webpack compile - useful for puppeteer/selenium hybrid\n const originalRequire = Module.prototype.require;\n Module.prototype.require = function requireThatOverridesTestimTDK(id) {\n if (id === 'testim') {\n return bypassWebpack.testim;\n }\n // eslint-disable-next-line prefer-rest-params\n return originalRequire.apply(this, arguments);\n };\n try {\n // delete references to the old __testim from previous invocations\n delete require.cache[require.resolve(functionsFile)];\n const functions = require(functionsFile); // eslint-disable-line import/no-dynamic-require\n // asynchronous require not supported - is this fine?\n return functions;\n } finally {\n Module.prototype.require = originalRequire;\n }\n }\n const functionsAsAWebpackModule = await buildCodeTests([functionsFile], {\n output: {\n libraryTarget: 'umd',\n library: 'tdk',\n globalObject: 'globalThis',\n },\n cache: {\n type: 'memory',\n },\n mode: 'development', // better debugging\n }, {}, fileSystem, optionalAbortSignal);\n // we always compile a single suite and a single file here\n return functionsAsAWebpackModule.tests[0][0].code;\n}\n\nmodule.exports = {\n findTestFolder,\n findTests,\n getLocalLocators,\n getLocalLocatorContents,\n saveTest,\n saveLocators,\n compileFunctionsLibrary,\n};\n","'use strict';\n\nmodule.exports.getArgumentsFromContext = async function getArgumentsFromContext(\n step,\n context,\n locatorStrategy\n) {\n const argsInCorrectOrder = fixArgsOrdering(step.parameterNames.map(p => p.displayName), context.incomingParams.as);\n\n return await Promise.all(argsInCorrectOrder.map(arg => {\n if (typeof arg === 'object' && arg.locatedElement) {\n return locatorStrategy(arg);\n }\n return arg;\n }));\n};\n\nfunction fixArgsOrdering(parametersInOrder, incomingParamsAs) {\n const finalList = [];\n\n for (const p of parametersInOrder) {\n // this is expected to always find index\n const index = incomingParamsAs.functionParameters.indexOf(p);\n finalList.push(incomingParamsAs.functionArguments[index]);\n }\n\n return finalList;\n}\n","'use strict';\n\nconst lazyRequire = require('../commons/lazyRequire');\nconst { getArgumentsFromContext } = require('../codim/hybrid-utils');\n\nmodule.exports.execute = async function executeSeleniumFunction(player, hybridFunction, step, context, source, abortSignal) {\n let onAbort;\n\n // with selenium - we don't have any instrumentation - so we just run the code.\n try {\n // selenium hybrid test\n /**\n * @type {import(\"selenium-webdriver\")}\n */\n const { WebDriver } = await lazyRequire('selenium-webdriver');\n\n if (abortSignal.aborted) {\n throw new AbortError();\n }\n\n const { Executor, HttpClient } = require('selenium-webdriver/http');\n\n const webdriverOptions = player.driver.client.requestHandler.defaultOptions;\n const startPath = player.driver.client.requestHandler.startPath;\n const seleniumServerUrl = `${webdriverOptions.protocol}://${webdriverOptions.hostname}:${webdriverOptions.port}`;\n const seleniumUrl = seleniumServerUrl + startPath; // we do not add startPath since selenium-webdriver adds /wd/hub on its own + startPath;\n const client = new HttpClient(seleniumUrl);\n const webDriver = new WebDriver(player.getSessionId() , new Executor(client));\n\n // find main tab\n await fixSeleniumMainTab(webDriver, player.driver);\n\n function getLocator(arg) {\n return webDriver.findElement({ css: arg.selector });\n }\n\n const args = await getArgumentsFromContext(step, context, getLocator);\n const fn = hybridFunction.bind(null, webDriver, ...args);\n\n onAbort = function onAbort() {\n // We don't have real way to abort user code,\n // So we kill the http client of the WebDriver\n client.send = async function send() {\n throw new AbortError();\n }\n }\n abortSignal.addEventListener(\"abort\", onAbort);\n\n await fn();\n return { success: true };\n } catch (e) {\n if (abortSignal.aborted) {\n return { success: false, shouldRetry: false, reason: \"aborted\" };\n }\n\n return {\n success: false,\n shouldRetry: false,\n reason: (e && e.message || e),\n extraInfo: e && e.constructor && e.constructor.name\n };\n } finally {\n if (onAbort) {\n abortSignal.removeEventListener(\"abort\", onAbort);\n }\n }\n};\n\nasync function fixSeleniumMainTab(webDriver, driver) {\n if (!driver.cdpUrl) {\n // remote run\n return;\n }\n {\n const contexts = await webDriver.getAllWindowHandles();\n for(const context of contexts) {\n await webDriver.switchTo().window(context);\n const isMainTab = await webDriver.executeScript(\"return window.__isMainTestimTab\");\n if (isMainTab) {\n break;\n }\n }\n }\n}\n","'use strict';\n\nconst lazyRequire = require('../commons/lazyRequire');\nconst { AbortError } = require('../commons/AbortError');\nconst { last } = require(\"lodash\");\nconst { getArgumentsFromContext } = require('../codim/hybrid-utils');\n\nmodule.exports.execute = async function executePuppeteerFunction(player, hybridFunction, step, context, source, abortSignal) {\n let onAbort;\n\n try {\n /**\n * @type {typeof import(\"puppeteer\")}\n */\n const puppeteer = await lazyRequire('puppeteer');\n\n if (abortSignal.aborted) {\n throw new AbortError();\n }\n\n const browser = await puppeteer.connect({\n browserWSEndpoint: player.driver.cdpUrl,\n defaultViewport: null, // disable puppeteer resize\n product: 'chrome', //\n });\n\n if (abortSignal.aborted) {\n browser.disconnect();\n throw new AbortError();\n }\n\n onAbort = function onAbort() {\n // this will make puppeteer action to fail\n browser.disconnect();\n }\n\n abortSignal.addEventListener(\"abort\", onAbort);\n\n const pages = await browser.pages();\n let foundMainPage;\n\n for (const page of pages) {\n if (await page.evaluate(function () {\n return window.__isMainTestimTab;\n })) {\n foundMainPage = page;\n break;\n }\n }\n\n const page = foundMainPage ? foundMainPage : last(pages);\n function getLocator(arg) {\n return page.$(arg.selector);\n }\n\n const args = await getArgumentsFromContext(step, context, getLocator);\n const fn = hybridFunction.bind(null, page, ...args);\n\n\n await fn();\n return { success: true }\n } catch (e) {\n if (abortSignal.aborted) {\n return { success: false, shouldRetry: false, reason: \"aborted\" };\n }\n\n return {\n success: false,\n shouldRetry: false,\n reason: (e && e.message || e),\n extraInfo: e && e.constructor && e.constructor.name\n };\n } finally {\n abortSignal.removeEventListener(\"abort\", onAbort);\n }\n}\n","'use strict';\n\nconst lazyRequire = require('../commons/lazyRequire');\nconst { AbortError } = require('../commons/AbortError');\nconst { last } = require('lodash');\nconst { getArgumentsFromContext } = require('../codim/hybrid-utils');\n\nmodule.exports.execute = async function executePlaywrightFunction(player, hybridFunction, step, testimContext, source, abortSignal) {\n let onAbort;\n\n try {\n const playwright = await lazyRequire('playwright');\n\n if (abortSignal.aborted) {\n throw new AbortError();\n }\n\n const browser = await playwright.chromium.connect({\n wsEndpoint: player.driver.cdpUrl,\n });\n\n if (abortSignal.aborted) {\n browser.disconnect();\n throw new AbortError();\n }\n\n onAbort = function onAbort() {\n // this will make any future browser action to fail\n browser.disconnect();\n }\n abortSignal.addEventListener(\"abort\", onAbort);\n\n //TODO(Benji) https://github.com/microsoft/playwright/issues/1985\n\n const playwrightContext = await browser.newContext({viewport: null })\n const pages = await playwrightContext.pages();\n const page = last(pages);\n function getLocator(arg) {\n return page.$(arg.selector);\n }\n const args = await getArgumentsFromContext(step, testimContext, getLocator);\n const fn = hybridFunction.bind(null, page, ...args);\n\n await fn();\n return { success: true }\n } catch (e) {\n if (abortSignal.aborted) {\n return { success: false, shouldRetry: false, reason: \"aborted\" };\n }\n\n return {\n success: false,\n reason: (e && e.message || e) ,\n extraInfo: e && e.constructor && e.constructor.name\n };\n } finally {\n if (onAbort) {\n abortSignal.removeEventListener(\"abort\", onAbort);\n }\n }\n}\n","'use strict';\n\nconst _ = require('lodash');\nconst perfLogger = require('../commons/performance-logger');\nconst { guid } = require('../utils');\nconst { AbortError } = require('../commons/AbortError');\nconst { getArgumentsFromContext } = require('../codim/hybrid-utils');\nconst { getSessionPlayer } = require('../commons/getSessionPlayerRequire');\n\nmodule.exports.execute = async function executeTdkFunction(player, hybridFunction, context, loginData, frameManager, step, source, abortSignal) {\n function onAbort() {\n player.sessionPlayer.stopPlaying();\n }\n\n abortSignal.addEventListener('abort', onAbort);\n\n function getLocator(arg) {\n if (step.parameterValues) { // tdk is all grown up and can run real locators\n const locateStep = step.parameterValues.find(param => param.type === 'locate' && param.id === arg.locatorId);\n return { elementLocator: locateStep.elementLocator, id: locateStep.id, name: 'Hybrid Step Locator' };\n }\n if (!arg.locatedElement.shadowPath) {\n return arg; // wat\n }\n // fallback to selector, this should never happen in practice except when there was\n // no locator to begin with (like if we expose reverse-hybrid to TDK)\n return arg.locatedElement.shadowPath[0];\n }\n const args = await getArgumentsFromContext(step, context, getLocator);\n const fn = hybridFunction.bind(null, ...args);\n\n // assign same framemanager\n const testId = guid();\n const executionId = guid(); // we don't use the same execution ID to not associate the run with the suite and trigger bugs in features like \"rerun by failed run id\"\n const resultId = context.testResultId; // this isn't the TDK result id - it's the _parent_ result ID tdk nests under.\n const baseUrl = context.config.baseUrl;\n const userData = _.cloneDeep(context); // the context contains everything needed as userData except login data\n userData.loginData = loginData;\n const sessionPlayerInit = getSessionPlayer();\n const version = sessionPlayerInit.manifestVersion || 'runner';\n const isLocalRun = false;\n const overrideTestConfigId = null;\n const branch = 'master'; // With TDK - branches are meaningless\n const testName = `Execute TDK Function '${step.functionName}'`;\n const ignoreNavigation = true;\n\n\n const codeTest = {\n fn,\n bypassSetup: true, // don't setup and resize according to the TestConfig when starting\n isBeforeOrAfterTest: true, // not a full test - don't perform \"must contain assertions\" validation\n name: testName,\n sourceCode: fn.toString(),\n sourceName: fn.name,\n testId,\n resultId: guid(), // we don't want to reuse the resultId of the parent for the child - we need a new resultId\n };\n const onlyLocalReporting = typeof hybridFunction.results === 'boolean' && !hybridFunction.results;\n try {\n perfLogger.log('tdkHybridStepPlayback before addAllTabs');\n if (frameManager) { // we have a frameManager we can reuse\n player.sessionPlayer.playbackAutUtils.frameManager = frameManager;\n player.sessionPlayer.frameManager = frameManager;\n } else {\n // otherwise, we have to tell the session player about them tabs\n //TODO(benji) call getEditorUrl?\n await player.addAllTabs(null, { loadInfo: true, checkForMainTab: true, takeScreenshots: !onlyLocalReporting }, [player.driver.initialUrl]);\n }\n player.sessionPlayer.playbackManager.dontAssociateChildResult = true; // don't associate child result to this test result.\n player.sessionPlayer.playbackManager.onlyLocalReporting = onlyLocalReporting;\n perfLogger.log('tdkHybridStepPlayback before playTestByCode');\n const testResult = await new Promise((resolve, reject) => {\n if (source === 'agent') {\n resolveOnTestResultAndNotAssetsUploaded(player, resolve);\n }\n function onAbort() {\n reject(new AbortError());\n abortSignal.removeEventListener('abort', onAbort);\n }\n\n abortSignal.addEventListener('abort', onAbort);\n\n player.sessionPlayer.playTestByCode(\n testId, executionId, resultId, baseUrl, userData, version, resolve, isLocalRun, overrideTestConfigId, branch, [codeTest], testName, ignoreNavigation,\n ).catch(reject);\n });\n perfLogger.log('tdkHybridStepPlayback after playTestByCode');\n // testResult.status?\n return { success: testResult.success, shouldRetry: false, resultInfo: { testId, executionId, resultId: codeTest.resultId } };\n } catch (e) {\n return { success: false, error: e, shouldRetry: false };\n } finally {\n abortSignal.removeEventListener('abort', onAbort);\n }\n};\n\nfunction resolveOnTestResultAndNotAssetsUploaded(player, resolve) {\n const { commonConstants } = getSessionPlayer();\n player.sessionPlayer.playbackManager.on(commonConstants.playback.START, ({ testResult }) => {\n let runnerStatus = testResult.runnerStatus;\n Object.defineProperty(testResult, 'runnerStatus', {\n get() { return runnerStatus; },\n set(value) {\n runnerStatus = value;\n if (value === 'FINISHED') {\n // resolve as soon as the runner is finished, before assets are uploaded\n resolve(testResult);\n }\n },\n });\n });\n}\n","'use strict';\n\nconst MemoryFS = require('memory-fs');\nconst AbortController = require('abort-controller');\nconst perfLogger = require('../commons/performance-logger');\nconst { getLogger } = require('../commons/logger');\nconst { sessionType } = require('../commons/constants');\n\nconst mfs = new MemoryFS();\nconst logger = getLogger('hybrid-step-playback');\n\n/**\n * @type {Map<string, import(\"abort-controller\")>}\n */\nconst runningStepsAbortControllersRegistry = new Map();\n\n// TODO(Benji) cache compile between runs with webpack cache plugin or runnerFileCache\n/** @type {import('clickim/src/background/session/code-session-player').CodeSessionPlayer['proxy'] | undefined} */\nlet stepsProxy;\n\nmodule.exports.run = (driver, remoteStep, projectData, userData) => {\n const { step, context } = remoteStep.data;\n return module.exports.execute(step, context, driver, userData.loginData);\n // (step, context, driver, loginData, frameManager)\n};\n\n// this function is exported as a \"make sense API\", `run` above is teh remote run signature for polymorphic dispatch\nmodule.exports.execute = async function execute(step, context, driver, loginData, frameManager, source = 'cli') {\n const abortController = new AbortController();\n const { signal: abortSignal } = abortController;\n\n runningStepsAbortControllersRegistry.set(context.stepResultId, abortController);\n\n try {\n perfLogger.log('before seleniumTestPlayer require');\n const SeleniumTestPlayer = require('../player/seleniumTestPlayer');\n const { compileFunctionsLibrary } = require('../agent/routers/codim/service');\n\n const { functionName } = step;\n const userParamsData = {}; // no tdk access\n //TODO (benji) read function parameters and arguments from context.incomingParams.as\n const shouldMonitorPerformance = false;\n const player = new SeleniumTestPlayer(\n context.id, // has to be on the same session ID to reuse the same tabs from tabService\n userParamsData,\n shouldMonitorPerformance,\n sessionType.CODEFUL,\n driver,\n );\n\n stepsProxy = player.sessionPlayer.codeSessionPlayer.proxy;\n // reuse the same memory filesystem between runs for cache\n\n const bypassWebpack = step.bypassWebpack ? { testim: stepsProxy.wrappedSteps() } : false;\n\n perfLogger.log('before compileFunctionsLibrary', { bypassWebpack: Boolean(step.bypassWebpack) });\n let code;\n try {\n code = await compileFunctionsLibrary({ fileSystem: mfs, bypassWebpack }, abortSignal);\n } catch (e) {\n return { success: false, shouldRetry: false, reason: `Unable to compile functions library. ${e.message}`, extraInfo: e.stack };\n }\n\n if (typeof globalThis === 'undefined') { // fix for Node 8 and Node 10\n global.globalThis = process;\n }\n let hybridFunction;\n if (!bypassWebpack) {\n global.globalThis.__testim = stepsProxy.wrappedSteps();\n // this evaluates the code while exposing __testim. We manually expose the proxy here since\n // our test-extractor code assumes it's extracting tests and this just needs to \"eval\" the whole file\n (0, eval)(code); // eslint-disable-line no-eval\n hybridFunction = globalThis.tdk[functionName];\n } else {\n hybridFunction = code[functionName];\n }\n\n perfLogger.log('after hybridFunction obtain and eval');\n if (!hybridFunction) {\n return {\n success: false,\n shouldRetry: false,\n reason: `Could not find function '${functionName}' locally. Please make sure you have a functions.js file with a '${functionName}' function defined`,\n extraInfo: Object.keys(globalThis.tdk), // log available functions to make debugging easier\n };\n }\n\n if (hybridFunction.type === 'selenium') {\n const seleniumPlayback = require('./seleniumHybridStepPlayback').execute;\n return await seleniumPlayback(player, hybridFunction, step, context, source, abortSignal);\n }\n if (hybridFunction.type === 'puppeteer') {\n if (!player.driver.cdpUrl) {\n return { success: false, shouldRetry: false, reason: 'running puppeteer code requires the remote debugging protocol to be open. Please contact Testim support.' };\n }\n perfLogger.log('before puppeteerPlayback');\n const puppeteerPlayback = require('./puppeteerHybridStepPlayback').execute;\n try {\n return await puppeteerPlayback(player, hybridFunction, step, context, source, abortSignal);\n } finally {\n perfLogger.log('after puppeteerPlayback');\n }\n }\n\n if (hybridFunction.type === 'playwright') {\n if (!player.driver.cdpUrl) {\n return { success: false, shouldRetry: false, reason: 'running playwright code requires the remote debugging protocol to be open. Please contact Testim support.' };\n }\n const playwrightPlayback = require('./playwrightHybridStepPlayback').execute;\n return await playwrightPlayback(player, hybridFunction, step, context, source, abortSignal);\n }\n\n if (hybridFunction.type === 'tdk' || !hybridFunction.type) {\n const tdkPlayback = require('./tdkHybridStepPlayback').execute;\n perfLogger.log('before tdkPlayback');\n try {\n return await tdkPlayback(player, hybridFunction, context, loginData, frameManager, step, source, abortSignal);\n } finally {\n perfLogger.log('after tdkPlayback');\n }\n }\n\n return { success: false, shouldRetry: false, reason: `unknown hybrid format ${hybridFunction.type}` };\n } catch (err) {\n logger.info('error running hybrid step', { err });\n return undefined;\n } finally {\n runningStepsAbortControllersRegistry.delete(context.stepResultId);\n }\n};\n\nmodule.exports.abort = function abort(stepResultId) {\n const abortController = runningStepsAbortControllersRegistry.get(stepResultId);\n\n if (abortController) {\n abortController.abort();\n } else {\n throw new Error('No such stepResultId');\n }\n};\n","'use strict';\n\nconst service = require('../agent/routers/cliJsCode/service');\nconst { NpmPackageError } = require('../errors');\nconst utils = require('../utils');\n\nmodule.exports.run = async (browser, step) => {\n const { stepId, testResultId, retryIndex, stepResultId, packageData, timeout } = step.data;\n try {\n const data = await service.installPackage(stepId, testResultId, retryIndex, packageData, stepResultId, timeout);\n return { data, success: true };\n } catch (err) {\n if (err instanceof NpmPackageError) {\n return {\n success: false,\n code: 'invalid-node-package',\n message: err.message,\n };\n }\n if (err instanceof utils.TimeoutError) {\n return {\n success: false,\n code: 'timeout',\n };\n }\n throw err;\n }\n};\n","'use strict';\n\nconst cliJsStepPlayback = require('./cliJsStepPlayback');\nconst hybridStepPlayback = require('./hybridStepPlayback');\nconst nodePackageStepPlayback = require('./nodePackageStepPlayback');\nconst testimServicesApi = require('../commons/testimServicesApi');\nconst { getLogger } = require('../commons/logger');\n\nconst logger = getLogger('step-playback');\n\nconst playbacks = {\n 'cli-validation-code-step': cliJsStepPlayback,\n 'cli-wait-for-code-step': cliJsStepPlayback,\n 'cli-action-code-step': cliJsStepPlayback,\n 'cli-api-code-step': cliJsStepPlayback,\n 'cli-condition-step': cliJsStepPlayback,\n 'cli-download-code-step': cliJsStepPlayback,\n 'node-package': nodePackageStepPlayback,\n 'tdk-hybrid': hybridStepPlayback,\n};\n\nasync function saveRemoteStep(projectId, resultId, stepId, remoteStepData) {\n try {\n return await testimServicesApi.saveRemoteStep(projectId, resultId, stepId, remoteStepData);\n } catch (e) {\n logger.error('failed to report remote step state', { projectId, resultId, stepId });\n return undefined;\n }\n}\n\nasync function onCompleted(projectId, resultId, stepId, runResult, sessionId) {\n logger.info('finished to run remote step', { stepId, sessionId });\n const remoteStepData = {\n status: 'completed',\n success: true,\n failureReason: null,\n data: runResult,\n };\n\n return await saveRemoteStep(projectId, resultId, stepId, remoteStepData);\n}\n\nasync function onFailed(projectId, resultId, stepId, failureReason, sessionId) {\n logger.info('failed to run remote step', { stepId, sessionId, failureReason });\n const remoteStepData = {\n status: 'completed',\n success: false,\n failureReason,\n };\n\n return await saveRemoteStep(projectId, resultId, stepId, remoteStepData);\n}\n\nasync function executeStep(options, driver, step, resultId) {\n if (!step?.type || step.status === 'completed') {\n return undefined;\n }\n\n const { project: projectId, projectData, userData } = options;\n const stepType = step.type;\n const sessionId = driver.getSessionId();\n const stepId = step.id;\n logger.info('start play remote step', { stepType, stepId, sessionId });\n\n const playback = playbacks[stepType];\n if (!playback) {\n return await onFailed(projectId, resultId, stepId, `Failed to find step type ${stepType}`, sessionId);\n }\n\n try {\n const runResult = await playback.run(driver, step, projectData, userData);\n return await onCompleted(projectId, resultId, stepId, runResult, sessionId);\n } catch (err) {\n return await onFailed(projectId, resultId, stepId, err.message, sessionId);\n }\n}\n\nmodule.exports = {\n executeStep,\n};\n","'use strict';\n\nconst BaseSocketService = require('./baseSocketServiceSocketIO');\n\nclass RemoteStepServiceSocketIO extends BaseSocketService {\n init(projectId) {\n super.init(projectId, 'remoteStep');\n this.listerers = {};\n }\n\n emitJoinRoom(resultId) {\n return this.emitPromise('remoteStep:join', { resultId });\n }\n\n emitLeaveRoom(resultId) {\n return this.emitPromise('remoteStep:leave', { resultId });\n }\n\n joinToRemoteStep(resultId) {\n if (this.rooms[resultId]) {\n return Promise.resolve();\n }\n this.joinRoom(resultId);\n return this.emitJoinRoom(resultId);\n }\n\n saveRemoteStep(resultId, stepId, remoteStep) {\n return this.emitPromise('remoteStep:save', {\n resultId,\n stepId,\n remoteStep,\n });\n }\n\n listenToRemoteStep(resultId, onRemoteStep) {\n if (this.listerers[resultId]) {\n this._socket.off('remoteStep:saved', this.listerers[resultId]);\n delete this.listerers[resultId];\n }\n\n this.listerers[resultId] = data => {\n if (data.resultId === resultId && data.remoteStep && data.remoteStep.status === 'pending') {\n onRemoteStep(data.remoteStep);\n }\n };\n this._socket.on('remoteStep:saved', this.listerers[resultId]);\n }\n\n unlistenToRemoteStep(resultId) {\n if (!this.listerers[resultId]) {\n return Promise.resolve();\n }\n\n this.leaveRoom(resultId);\n this._socket.off('remoteStep:saved', this.listerers[resultId]);\n delete this.listerers[resultId];\n return this.emitLeaveRoom(resultId);\n }\n}\n\nmodule.exports = new RemoteStepServiceSocketIO();\n","const socketService = require('./socketService');\nconst { socketEventTypes } = require('../constants');\nconst featureFlags = require('../featureFlags');\n\nconst { REMOTE_STEP_SAVED } = socketEventTypes;\n\nlet remoteStepServiceSocketIO; // required lazily since it takes 150ms to load\n\nclass RemoteStepService {\n init(projectId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return;\n }\n remoteStepServiceSocketIO = require('./remoteStepServiceSocketIO');\n remoteStepServiceSocketIO.init(projectId);\n }\n\n joinToRemoteStep(resultId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return socketService.addFilter(`${resultId}:remoteStep`, { resultId }, [REMOTE_STEP_SAVED]);\n }\n return remoteStepServiceSocketIO.joinToRemoteStep(resultId);\n }\n\n //TODO remove after migrate to save result via RestAPI\n saveRemoteStep(resultId, stepId, remoteStep) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return Promise.resolve();\n }\n return remoteStepServiceSocketIO.saveRemoteStep(resultId, stepId, remoteStep);\n }\n\n listenToRemoteStep(resultId, onRemoteStep) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n socketService.listenTo(\n `${resultId}:remoteStep`,\n [REMOTE_STEP_SAVED],\n data => data.resultId === resultId && data.remoteStep && data.remoteStep.status === 'pending',\n data => onRemoteStep(data.remoteStep)\n );\n return;\n }\n remoteStepServiceSocketIO.listenToRemoteStep(resultId, onRemoteStep);\n }\n\n unlistenToRemoteStep(resultId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n socketService.removeFilter(`${resultId}:remoteStep`, [REMOTE_STEP_SAVED]);\n return Promise.resolve();\n }\n return remoteStepServiceSocketIO.unlistenToRemoteStep(resultId);\n }\n}\n\nmodule.exports = new RemoteStepService();\n","'use strict';\n\nconst _ = require('lodash');\nconst pRetry = require('p-retry');\nconst utils = require('./utils');\nconst config = require('./commons/config');\nconst perf = require('./commons/performance-logger');\nconst analytics = require('./commons/testimAnalytics');\nconst testimCustomToken = require('./commons/testimCustomToken');\nconst testimServicesApi = require('./commons/testimServicesApi');\nconst remoteStepPlayback = require('./stepPlayers/remoteStepPlayback');\nconst remoteStepService = require('./commons/socket/remoteStepService');\nconst testResultService = require('./commons/socket/testResultService');\nconst { URL } = require('url');\nconst { getLogger } = require('./commons/logger');\nconst { preloadTests } = require('./commons/preloadTests');\nconst { timeoutMessages, CLI_MODE } = require('./commons/constants');\nconst { SeleniumPerfStats } = require('./commons/SeleniumPerfStats');\n\nconst logger = getLogger('test-run-handler');\nconst RETRIES_ON_TIMEOUT = 3;\nconst MAX_LIGHTWEIGHT_MODE_RUN_DATA_SIZE = 20 * 1000; // max size, in characters, of stringified run data sent over URL params. Chosen arbitrarily, this value should be changed according to data.\nconst canSendRunDataOverUrl = (runData) => JSON.stringify(runData).length < MAX_LIGHTWEIGHT_MODE_RUN_DATA_SIZE;\n\nclass TestRun {\n /**\n * @param {string} executionId\n * @param {string} executionName\n * @param {import('./runners/TestPlanRunner').ExecutionList[number]} test\n * @param {import('./runOptions').RunnerOptions} options\n * @param {string} branchToUse\n * @param {import('./testRunStatus')} testRunStatus\n */\n constructor(executionId, executionName, test, options, branchToUse, testRunStatus) {\n this._executionId = executionId;\n this._executionName = executionName;\n this._testStatus = test.testStatus;\n this._testId = test.testId;\n this._testName = test.name;\n this._testResultId = test.resultId;\n this._code = test.code;\n this._baseUrl = options.baseUrl || test.baseUrl || test.testConfig.baseUrl;\n this._nativeApp = test.nativeApp;\n this._overrideTestConfigId = test.overrideTestConfig?.id;\n this._options = options;\n this._branch = branchToUse;\n this._maxRetryCount = options.retries;\n this._remoteRunId = options.remoteRunId;\n this._retryCount = 1;\n this._timeoutRetryCount = 1;\n this._totalRetryCount = 1;\n\n this._testRunStatus = testRunStatus;\n const shouldUpdateConfig = !test.runConfig?.isMobileWeb && options.browser;\n this._runConfig = shouldUpdateConfig ? utils.getRunConfigByBrowserName(options.browser, options.saucelabs, options.browserstack) : test.runConfig;\n this.clearTestResultFinished = Promise.resolve();\n\n this.seleniumPerfStats = new SeleniumPerfStats();\n }\n\n async waitForExecutionStartedFinished() {\n return await this._testRunStatus.waitForExecutionStartedFinished() && await this.clearTestResultFinished;\n }\n\n get testStatus() {\n return this._testStatus;\n }\n\n get runMode() {\n return this._options.mode;\n }\n\n get automationMode() {\n return this._code ? 'codeful' : 'codeless';\n }\n\n get code() {\n return this._code;\n }\n\n get runConfig() {\n return this._runConfig;\n }\n\n get testResultId() {\n return this._testResultId;\n }\n\n get baseUrl() {\n return this._baseUrl;\n }\n\n get executionId() {\n return this._executionId;\n }\n\n get executionName() {\n return this._executionName;\n }\n\n get androidActivityWait() {\n const appData = 'appMetadata' in this._nativeApp ? this._nativeApp.appMetadata : this._nativeApp;\n if (appData.activity.includes(appData.id)) {\n return `${appData.id}.*`;\n }\n const { activity } = appData;\n const lastValue = activity.split('.').pop();\n return activity.replace(lastValue, '*');\n }\n\n get nativeAppLink() {\n let link = null;\n if ('filePath' in this._nativeApp) {\n link = `${config.SERVICES_HOST}/storage${this._nativeApp.filePath}?access_token=${this._options.authData.token}`;\n }\n return link;\n }\n\n async getNativeAppData() {\n const { appId, baseUrl } = this._options;\n if (baseUrl && !this._nativeApp && !appId) {\n const url = baseUrl || this.baseUrl;\n if (!url) {\n return null;\n }\n const [packageName, activity] = url.split(':');\n return {\n packageName,\n activity,\n };\n }\n if (this._nativeApp && !appId) {\n if ('appMetadata' in this._nativeApp) {\n return this._nativeApp.appMetadata;\n }\n return this._nativeApp;\n }\n return null;\n }\n\n get branch() {\n return this._branch;\n }\n\n get sfdcCredential() {\n return this._options.sfdcCredential;\n }\n\n get remoteRunId() {\n return this._remoteRunId;\n }\n\n get overrideTestConfigId() {\n return this._overrideTestConfigId;\n }\n\n markClearBrowser() {\n this.clearBrowser = true;\n }\n\n async getRunRequestParams() {\n const customTokenV3 = await testimCustomToken.getCustomTokenV3();\n const runRequestParams = {\n tokenV3: customTokenV3,\n refreshToken: testimCustomToken.getRefreshToken(),\n projectId: this._options.project,\n executionId: this._executionId,\n executionName: this._executionName,\n testId: this._testId,\n resultId: this._testResultId,\n baseUrl: this._baseUrl,\n branch: this._branch,\n servicesUrl: config.EXTENSION_SERVICES_HOST,\n remoteRunId: this.remoteRunId,\n previousTestResultId: this.previousTestResultId,\n testRetryCount: this.retryCount,\n ...(this.code && { isCodeMode: true, testName: this.testName }),\n ...(this._options.shouldMonitorPerformance && { shouldMonitorPerformance: true }),\n ...(this._options.company && {\n companyId: this._options.company.companyId,\n onprem: this._options.company.onprem,\n storageBaseUrl: this._options.company.storageBaseUrl,\n storageType: this._options.company.storageType,\n planType: this._options.company.planType,\n isPOC: this._options.company.isPOC,\n isStartUp: this._options.company.isStartUp,\n }),\n ...(this._options.collectCodeCoverage && { codeCoverageUrlFilter: this._options.codeCoverageUrlFilter || `${this.baseUrl}*` }),\n ...(this._options.disableMockNetwork && { disableMockNetwork: this._options.disableMockNetwork }),\n ...(this._options.lightweightMode && { lightweightMode: this._options.lightweightMode }),\n ...(this.clearBrowser && { clearBrowser: true }),\n ...(this._options.localRCASaver && { localRCASaver: this._options.localRCASaver }),\n ...(this.sfdcCredential && { sfdcCredential: this.sfdcCredential }),\n };\n\n if (this._options.disableMockNetwork) {\n analytics.trackWithCIUser('user-disable-mock');\n }\n\n if (this._options.lightweightMode?.general) {\n runRequestParams.company = this._options.company;\n const runData = this.runData;\n runRequestParams.lightweightMode.isRunDataSentInUrl = canSendRunDataOverUrl(runData);\n const stringifiedLength = JSON.stringify(runData).length;\n const testId = this.testId;\n if (runRequestParams.lightweightMode.isRunDataSentInUrl) {\n runRequestParams.runData = runData;\n logger.info(`Run data sent as URL param, test id: ${testId} run data length: ${stringifiedLength}`);\n } else {\n logger.warn(`Run data is too big to be sent as a URL param. Test id: ${testId}, run data size: ${stringifiedLength} (limit: ${MAX_LIGHTWEIGHT_MODE_RUN_DATA_SIZE} characters)`);\n }\n runRequestParams.isLocalRun = Boolean(this._options.useLocalChromeDriver || this._options.useChromeLauncher);\n }\n\n if (this._options.lightweightMode?.preloadTests && this._options.useChromeLauncher) {\n const preloadedTests = await preloadTests(this._options);\n runRequestParams.preloadedTest = preloadedTests[runRequestParams.testId];\n }\n\n return runRequestParams;\n }\n\n async getRunTestUrl() {\n const runRequestParams = await this.getRunRequestParams();\n const url = `https://run.testim.io/?params=${encodeURIComponent(JSON.stringify(runRequestParams))}`;\n logger.info(`Test (${this.testId}) run URL length: ${url.length}`);\n return url;\n }\n\n set sessionId(sessionId) {\n this._sessionId = sessionId;\n }\n\n get sessionId() {\n return this._sessionId;\n }\n\n get testId() {\n return this._testId;\n }\n\n get testName() {\n return this._testName;\n }\n\n get runParams() {\n return this._options.runParams[this._testResultId] || {};\n }\n\n get runData() {\n return {\n userParamsData: this.runParams,\n overrideTestConfigId: this._overrideTestConfigId || null,\n };\n }\n\n async clearTestResult() {\n const runData = this.runData;\n if (this.runMode === CLI_MODE.EXTENSION) {\n runData.code = this.code;\n }\n\n if (this._options.mockNetworkRules) {\n runData.mockNetworkRules = this._options.mockNetworkRules;\n }\n const mustClearPreviousStepResults = (this._timeoutRetryCount > 1 || this._retryCount > 1);\n\n if (this._options.lightweightMode?.disableResults && !mustClearPreviousStepResults && canSendRunDataOverUrl(runData)) {\n return undefined;\n }\n\n const uploadRunDataArtifactAndFallbackToEmptyString = async () => {\n try {\n return await testimServicesApi.uploadRunDataArtifact(this._options.project, this._testId, this._testResultId, runData);\n } catch (err) {\n logger.error('failed to upload run data artifact (runner)', { err });\n return '';\n }\n };\n const clearTestResultFinished = async () => {\n const runDataUrl = await uploadRunDataArtifactAndFallbackToEmptyString();\n // make sure the execution is created by now\n await this._testRunStatus.waitForExecutionStartedFinished();\n // we probably can save this backend call by initializing the execution\n return testimServicesApi.clearTestResult(this._options.project, this._testResultId, this._testId, {\n name: this._testName,\n resultId: this._testResultId,\n status: 'pending',\n retryCount: this._retryCount,\n runDataUrl, // links the run data url to the test.\n runData: runDataUrl ? undefined : runData, // put runData in mongo if we fail to upload to S3.\n testRetryKey: this.retryKey,\n });\n };\n this.clearTestResultFinished = clearTestResultFinished();\n return this.clearTestResultFinished;\n }\n\n hasMoreRetries() {\n return this._retryCount < this._maxRetryCount;\n }\n\n get retryKey() {\n return `${this._retryCount}:${this._timeoutRetryCount}`;\n }\n\n startNewRetry() {\n this._retryCount++;\n this._timeoutRetryCount = 1;\n return this.onRetry();\n }\n\n async runTestUsingCDP(cdpTestRunner) {\n perf.log('runTestUsingCDP');\n const { targetInfos } = await cdpTestRunner.cdpCommand('Target.getTargets') || { targetInfos: [] };\n const { targetId: extensionTargetId } = targetInfos.find(target => target.type === 'background_page' && target.title === 'Testim Editor') || {};\n const { targetId: AUTTargetId } = targetInfos.find(target => target.type === 'page') || {};\n if (!extensionTargetId) {\n throw new Error('testim extension not found');\n }\n if (!AUTTargetId) {\n throw new Error('AUT target not found');\n }\n\n try {\n perf.log('before Target.attachToTarget');\n const [extensionSession, runRequestParams] = await Promise.all([\n cdpTestRunner.cdpCommand('Target.attachToTarget', { targetId: extensionTargetId, flatten: true }),\n this.getRunRequestParams(),\n ]);\n const { sessionId: extensionSessionId } = extensionSession || {};\n perf.log('before Runtime.evaluate');\n\n await pRetry(async () => {\n const { result } = await cdpTestRunner.cdpCommand('Runtime.evaluate', { expression: 'typeof runTestimTest !== \\'undefined\\'', returnByValue: true }, extensionSessionId);\n if (!result.value) {\n throw new Error('runTestimTest not available on global scope');\n }\n }, { retries: 100, minTimeout: 30, factor: 1 });\n\n perf.log('after wait for runTestimTest function');\n const { result } = await cdpTestRunner.cdpCommand(\n 'Runtime.evaluate',\n { expression: `runTestimTest(${JSON.stringify(runRequestParams)})`, awaitPromise: true, returnByValue: true },\n extensionSessionId,\n );\n if (result.subtype === 'error') {\n throw new Error(result.description);\n }\n perf.log('after Runtime.evaluate');\n return result.value;\n } catch (err) {\n logger.error('error running test using CDP', { err });\n throw new Error('Error running test using CDP');\n }\n }\n\n isRetryKeyMismatch(testResult) {\n return testResult.testRetryKey && (testResult.testRetryKey !== this.retryKey);\n }\n\n validateRunConfig() {\n const { baseUrl, runConfig: { browserValue } } = this;\n\n if (baseUrl && browserValue === 'safari') {\n let parsedUrl;\n try {\n parsedUrl = new URL(baseUrl);\n } catch (err) {\n // ignore invalid URLs (missing http:// or https:// prefix)\n return;\n }\n const { username, password } = parsedUrl;\n\n if (username || password) {\n throw new Error('Basic authentication in URL is not supported in Safari');\n }\n }\n }\n\n /** @param {number} startTimeout */\n onStarted(startTimeout) {\n return new Promise(resolve => {\n // We can't leave the test result as it may remove other listeners as well\n // We need to implement an .off(resultId, listener) method\n let reportedStart = false;\n const resolveResult = testResult => {\n if (reportedStart) {\n return;\n }\n if (this.isRetryKeyMismatch(testResult)) {\n logger.warn(`ignoring result update for on started due to retry key mismatch, got ${testResult.testRetryKey}, current is ${this.retryKey}`, {\n resultId: this.testResultId,\n testId: this.testId,\n });\n return;\n }\n if (['running', 'completed'].includes(testResult.status)) {\n testResult.resultId = this.testResultId;\n if (testResult.status === 'completed') {\n logger.info('setting _wasCompletedOnStartedCheck to true', {\n testResult,\n resultId: this.testResultId,\n testId: this.testId,\n testRetryKey: this.retryKey,\n });\n this._wasCompletedOnStartedCheck = testResult;\n }\n reportedStart = true;\n resolve(testResult);\n }\n };\n if (this._options.disableSockets) {\n const timeLimit = Date.now() + startTimeout;\n const checkIfDone = async () => {\n if (Date.now() > timeLimit) {\n return;\n }\n const { testId, testResultId, branch, _options: { project: projectId } } = this;\n\n try {\n const restResult = await testimServicesApi.getTestResults(testId, testResultId, projectId, branch);\n resolveResult(restResult);\n if (!reportedStart) {\n setTimeout(checkIfDone, 3000);\n }\n } catch (err) {\n logger.error('failed to check if done', { err });\n setTimeout(checkIfDone, 3000);\n }\n };\n setTimeout(checkIfDone, 3000);\n } else {\n testResultService.listenToTestResult(this._testResultId, this._testId, resolveResult);\n }\n });\n }\n\n async checkViaRestAPIIfTestStarted() {\n const { testId, testResultId, _options: { project: projectId }, branch } = this;\n try {\n const testResult = testimServicesApi.getTestResults(testId, testResultId, projectId, branch);\n const expectedStatuses = ['running', 'completed'];\n if (expectedStatuses.includes(testResult.status)) {\n logger.info(`get status: ${testResult.status} after not get test started status`, { testId, testResultId, branch });\n return testResult;\n }\n logger.error(`test not start test status: ${testResult.status} (expected [${expectedStatuses.join(', ')}])`, { testId, testResultId, branch });\n throw new Error(timeoutMessages.TEST_START_TIMEOUT_MSG);\n } catch (err) {\n logger.error('failed to get test result after test start timeout', { err, testId, testResultId, branch });\n throw new Error(timeoutMessages.TEST_START_TIMEOUT_MSG);\n }\n }\n\n async onCompletedCleanup() {\n if (this._options.disableSockets) {\n return undefined;\n }\n return await testResultService.leaveTestResult(this._testResultId, this._testId);\n }\n\n async onCompleted() {\n let onConnected;\n try {\n const res = await new Promise(resolve => {\n if (this._wasCompletedOnStartedCheck && !this.isRetryKeyMismatch(this._wasCompletedOnStartedCheck)) {\n logger.info('test was already completed in on started check', {\n resultId: this.testResultId,\n testId: this.testId,\n });\n resolve(this._wasCompletedOnStartedCheck);\n return;\n }\n\n if (!this._options.disableSockets) {\n testResultService.listenToTestResult(this._testResultId, this._testId, testResult => {\n if (this.isRetryKeyMismatch(testResult)) {\n logger.warn(`ignoring result update for on completed due to retry key mismatch, got ${testResult.testRetryKey}, current is ${this.retryKey}`, {\n resultId: this.testResultId,\n testId: this.testId,\n });\n return;\n }\n if (testResult.status === 'completed') {\n testResult.resultId = this._testResultId;\n resolve(testResult);\n }\n });\n }\n const debounceDelay = this._options.disableSockets ? 0 : Math.floor(10000 + (Math.random() * 5000));\n const maxWait = this._options.disableSockets ? 0 : Math.floor(60000 + (Math.random() * 15000));\n onConnected = _.debounce(async () => {\n try {\n const testResult = await testimServicesApi.getTestResults(this._testId, this._testResultId, this._options.project, this.branch);\n if (this.isRetryKeyMismatch(testResult)) {\n logger.warn(`ignoring result update for on completed (in reconnect) due to retry key mismatch, got ${testResult.testRetryKey}, current is ${this.retryKey}`, {\n resultId: this.testResultId,\n testId: this.testId,\n });\n return false;\n }\n if (testResult?.status === 'completed') {\n logger.info('Socket reconnected - Test complete', { testId: this._testId, resultId: this._testResultId, projectId: this._options.project });\n testResult.resultId = this._testResultId;\n resolve(testResult);\n return true;\n }\n return false;\n } catch (err) {\n logger.warn('Error while trying to check status on socket connect', err);\n return false;\n }\n }, debounceDelay, { maxWait });\n if (!this._options.disableSockets) {\n testResultService.on('socket-connected', onConnected);\n } else {\n const waitForTestEnd = () => {\n setTimeout(async () => {\n try {\n const { isComplete } = await testimServicesApi.isTestResultCompleted(this._testResultId, this._options.project, this.retryKey);\n if (isComplete) {\n const isDone = await onConnected();\n if (!isDone) {\n logger.warn('onConnected returned false even though isComplete was true');\n waitForTestEnd();\n }\n } else {\n waitForTestEnd();\n }\n } catch (err) {\n logger.error('failed to check is complete', { err });\n waitForTestEnd();\n }\n }, 3000);\n };\n waitForTestEnd();\n }\n });\n await this.onCompletedCleanup();\n return res;\n } finally {\n if (onConnected && !this._options.disableSockets) {\n testResultService.off('socket-connected', onConnected);\n }\n }\n }\n\n listenToRemoteStep(browser) {\n remoteStepService.listenToRemoteStep(this.testResultId, step => {\n remoteStepPlayback.executeStep(this._options, browser, step, this.testResultId);\n });\n }\n\n hasMoreTimeoutRetries() {\n const maxRetryCount = this._options.disableTimeoutRetry ? 1 : RETRIES_ON_TIMEOUT;\n return this._timeoutRetryCount < maxRetryCount;\n }\n\n startNewTimeoutRetry() {\n this._timeoutRetryCount++;\n return this.onRetry();\n }\n\n get retryCount() {\n return this._retryCount;\n }\n\n get previousTestResultId() {\n return this._previousTestResultId;\n }\n\n isAllowReportTestResultRetries() {\n return Boolean(this._options.company?.activePlan?.premiumFeatures?.allowReportTestResultRetries);\n }\n\n async onRetry() {\n this._previousTestResultId = this.testResultId;\n\n if (!this.isAllowReportTestResultRetries()) {\n return;\n }\n\n this._totalRetryCount++;\n this._originalTestResultId = this._originalTestResultId || this._previousTestResultId;\n this._testResultId = utils.guid();\n\n if (this._options.lightweightMode?.onlyTestIdsNoSuite) {\n return;\n }\n\n await this._testRunStatus.addRetryTestResult({\n retryCount: this._totalRetryCount,\n executionId: this._executionId,\n projectId: this._options.project,\n newResultId: this._testResultId,\n originalTestResultId: this._originalTestResultId,\n previousTestResultId: this._previousTestResultId,\n });\n }\n}\n\nmodule.exports = TestRun;\n","'use strict';\n\nconst TestRun = require('./testRunHandler');\n\nclass ExecutionQueue {\n /**\n * @param {string} executionId\n * @param {string} executionName\n * @param {any[]} testList\n * @param {import('./runOptions').RunnerOptions} options\n * @param {string} branchToUse\n * @param {import('./testRunStatus')} testRunStatus\n */\n constructor(executionId, executionName, testList, options, branchToUse, testStatus) {\n this._waitingTests = testList.map(testInfo => new TestRun(executionId, executionName, testInfo, options, branchToUse, testStatus));\n }\n\n stop() {\n this._waitingTests = [];\n }\n\n getNext() {\n const nextTestRunHandler = this._waitingTests.shift();\n if (nextTestRunHandler) {\n return nextTestRunHandler;\n }\n return undefined;\n }\n\n hasMoreTests() {\n return Boolean(this._waitingTests.length);\n }\n}\n\n\n\nmodule.exports = ExecutionQueue;\n","'use strict';\n\nconst featureFlagService = require('../commons/featureFlags');\nconst { getLabFeaturesByProjectId } = require('../commons/testimServicesApi');\nconst _ = require('lodash');\n\nconst logger = require('../commons/logger').getLogger('lab-features-service');\n\nclass LabFeaturesService {\n constructor() {\n this.featuresForProject = [];\n this.labBatman = false;\n }\n\n async loadLabFeatures(projectId, companyPlan) {\n if (!companyPlan || !projectId) {\n logger.error('missing companyPlan or projectId when loading lab features', { companyPlan, projectId });\n this.featuresForProject = [];\n }\n\n try {\n const labBatman = this.isLabsEnabledForCompany(companyPlan);\n const features = labBatman ? (await getLabFeaturesByProjectId(projectId)) : [];\n this.featuresForProject = features;\n this.labBatman = labBatman;\n } catch (err) {\n logger.error('failed loading lab features', { err, companyPlan, projectId });\n this.featuresForProject = [];\n }\n }\n\n isFeatureAvailableForProject(featureFlagName) {\n const featureFlag = featureFlagService.flags[featureFlagName];\n this.validateAsLabFeatureFlag(featureFlag);\n const ffValue = featureFlag.getValue();\n if (ffValue === 'disabled') {\n return false;\n }\n if (ffValue === 'enabled') {\n return true;\n }\n\n const { featuresForProject: features, labBatman } = this;\n const labFeature = features.find(f => f.featureFlagName === featureFlagName);\n const featureEnabled = labFeature?.enabled;\n\n return Boolean(labBatman && featureEnabled);\n }\n\n isLabsEnabledForCompany(companyPlan) {\n return Boolean(companyPlan?.premiumFeatures?.enableLabFeatures);\n }\n\n validateAsLabFeatureFlag(featureFlag) {\n if ('getValue' in featureFlag) {\n return;\n }\n\n const msg = `Attempted querying a lab feature flag which isn't a variant. This means that a wrong configuration is being used in FeatureFlagsService (for feature flag: ${featureFlag.name}`;\n logger.error(msg, { featureFlagName: featureFlag.name });\n throw new Error(msg);\n }\n}\nmodule.exports = new LabFeaturesService();\n","const gridService = require('../services/gridService');\nconst logger = require('../commons/logger').getLogger('worker-utils');\n\nconst releaseGridSlot = async (workerId, releaseSlotOnTestFinished, projectId) => {\n if (!releaseSlotOnTestFinished) {\n return;\n }\n await gridService.releaseGridSlot(workerId, projectId);\n};\n\nconst releasePlayer = async (workerId, releaseSlotOnTestFinished, projectId, player) => {\n logger.info('releasing player', { hasPlayer: Boolean(player) });\n try {\n await player?.onDone();\n } finally {\n await releaseGridSlot(workerId, releaseSlotOnTestFinished, projectId);\n }\n};\n\nmodule.exports.releasePlayer = releasePlayer;\n","'use strict';\n\nconst moment = require('moment');\nconst pRetry = require('p-retry');\nconst ms = require('ms');\n\nconst { timeoutMessages, testRunStatus, stepResult, runnerTestStatus, CLI_MODE } = require('../commons/constants');\nconst logger = require('../commons/logger').getLogger('base-worker');\nconst testResultService = require('../commons/socket/testResultService');\nconst remoteStepService = require('../commons/socket/remoteStepService');\nconst { isNetworkHealthy, didNetworkConnectivityTestFail } = require('../commons/httpRequest');\nconst testimServicesApi = require('../commons/testimServicesApi');\nconst gridService = require('../services/gridService');\nconst LambdatestService = require('../services/lambdatestService');\nconst reporter = require('../reports/reporter');\nconst utils = require('../utils');\nconst { releasePlayer } = require('./workerUtils');\nconst featureFlags = require('../commons/featureFlags');\nconst perf = require('../commons/performance-logger');\nconst {\n SeleniumError, StopRunOnError, GridError, GetBrowserError, NotImplementedError, PageNotAvailableError, GridConcurrencyError,\n} = require('../errors');\n\nconst { GET_BROWSER_TIMEOUT_MSG, TEST_START_TIMEOUT_MSG, TEST_COMPLETE_TIMEOUT_MSG } = timeoutMessages;\nconst { SETUP_TIMEOUT, NETWORK_ERROR, GRID_ERROR, BROWSER_CLOSED, SELENIUM_ERROR, UNKNOWN_ERROR } = stepResult;\n\nconst DELAY_BETWEEN_TESTS = ms('1s');\nlet ordinal = 1;\n\n/**\n * @param {string} testId\n * @param {string} testName\n * @param {string} resultId\n * @param {string} reason\n */\nfunction buildFailureResult(testId, testName, resultId, reason) {\n return {\n testId,\n reason,\n name: testName,\n resultId,\n success: false,\n };\n}\n\nclass BaseWorker {\n /**\n * @param {import('../executionQueue')} executionQueue\n * @param {import('../runOptions').RunnerOptions} options\n * @param {string=} customExtensionLocalLocation\n * @param {string} executionId\n * @param {(workerId: number, testId: string, resultId: string, isRerun: boolean | undefined, testRetryKey: `${number}:${number}` ) => Promise<any>} onTestStarted\n * @param {(workerId: number, testId: string, testResult: any, sessionId: string, shouldRerun: boolean | undefined) => Promise<void>} onTestCompleted\n * @param {import('../testRunStatus')['onGridSlot']} onGridSlot\n * @param {(workerId: number, testResult: { name: string; testId: string; resultId: string; runnerStatus: 'SKIPPED'; testStatus: 'quarantine' }) => void} onTestIgnored\n * @param {boolean=} releaseSlotOnTestFinished\n */\n constructor(executionQueue, options, customExtensionLocalLocation, executionId, onTestStarted, onTestCompleted, onGridSlot, onTestIgnored, releaseSlotOnTestFinished = true) {\n this.lambdatestService = new LambdatestService();\n\n this.id = BaseWorker.getWorkerId();\n this.executionQueue = executionQueue;\n this.customExtensionLocalLocation = customExtensionLocalLocation;\n\n this.isCodeMode = options.files && options.files.length > 0;\n this.baseUrl = options.baseUrl;\n this.isRegressionBaselineRun = options.isRegressionBaselineRun;\n this.testRunTimeout = options.timeout;\n this.onTestStarted = onTestStarted;\n this.onTestCompleted = onTestCompleted;\n this.onGridSlot = onGridSlot;\n this.onTestIgnored = onTestIgnored;\n this.releaseSlotOnTestFinished = releaseSlotOnTestFinished;\n\n this.userData = options.userData;\n this.executionId = executionId;\n this.options = options;\n }\n\n static getWorkerId() {\n return ordinal++;\n }\n\n /**\n * @param {string} browser\n * @param {import('../testRunHandler')} testRunHandler\n */\n async getGridSlot(browser, testRunHandler) {\n const slot = await gridService.getGridSlot(browser, testRunHandler.executionId, this.options, this.id);\n this.onGridSlot(testRunHandler.testResultId, slot);\n return slot;\n }\n\n /** @param {import('../testRunHandler')} testRunHandler */\n async getSlotOnce(testRunHandler) {\n const { browserValue } = this.testRunConfig;\n reporter.onGetSlot(this.id, browserValue || 'chrome');\n const gridInfo = await this.getGridSlot(browserValue, testRunHandler);\n return gridInfo;\n }\n\n /**\n * @abstract\n * @returns {import('../player/appiumTestPlayer') | import('../player/seleniumTestPlayer') | import('../player/extensionTestPlayer') | import('../player/chromeLauncherTestPlayer')}\n */\n initPlayer() {\n throw new NotImplementedError(true);\n }\n\n async getBrowserOnce() {\n throw new NotImplementedError(true);\n }\n\n /**\n * @param {import('../testRunHandler')} testRunHandler\n * @param {ReturnType<typeof this['initPlayer']>} player\n */\n async runTestOnce(testRunHandler, player) {\n testRunHandler.sessionId = player.getSessionId();\n logger.info('Test run started', {\n testId: testRunHandler.testId,\n resultId: testRunHandler.testResultId,\n seleniumSession: player.getSessionId(),\n });\n\n return await testRunHandler.clearTestResult();\n }\n\n /** @param {import('../testRunHandler')} testRunHandler */\n handleQuarantine(testRunHandler) {\n if (!utils.isQuarantineAndNotRemoteRun({ testStatus: testRunHandler.testStatus }, this.options)) {\n return undefined;\n }\n const testResult = {\n name: testRunHandler.testName,\n testId: testRunHandler.testId,\n resultId: testRunHandler.testResultId,\n runnerStatus: runnerTestStatus.SKIPPED,\n testStatus: testRunHandler.testStatus,\n };\n this.onTestIgnored(this.id, testResult);\n return testResult;\n }\n\n setSessionTimeout() {\n if (this.options.mode === CLI_MODE.APPIUM) {\n return Math.max(ms('180s'), this.options.getSessionTimeout);\n }\n return Math.max(this.lambdatestService.getSessionTimeout, this.options.getSessionTimeout);\n }\n\n /**\n * @param {import('../testRunHandler')} testRunHandler\n * @param {string=} customExtensionLocalLocation\n */\n async getTestPlayer(testRunHandler, customExtensionLocalLocation) {\n const projectId = this.userData?.projectId;\n let testPlayer;\n\n try {\n perf.log('before getSlotOnce retries');\n let failedGetSlotAttempts = 0;\n\n let gridInfo = await pRetry(async () => {\n const startTime = Date.now();\n try {\n return await utils.promiseTimeout(this.getSlotOnce(testRunHandler), this.options.getBrowserTimeout, timeoutMessages.GET_BROWSER_TIMEOUT_MSG);\n } catch (error) {\n const logDetails = { testId: this.testId, testResultId: this.testResultId, executionId: this.executionId };\n if (error instanceof GridConcurrencyError) {\n logger.info('could not get grid slot due to concurrency issue', logDetails);\n } else {\n logger.error('error getting grid slot', { error, ...logDetails });\n }\n failedGetSlotAttempts++;\n await utils.delay(this.options.getBrowserTimeout - (Date.now() - startTime));\n throw error;\n }\n }, { retries: this.options.getBrowserRetries - 1, minTimeout: 0, factor: 1 });\n perf.log('after getSlotOnce retries');\n\n perf.log('before getBrowserOnce retries');\n const getBrowserRetriesNumber = this.options.getBrowserRetries - failedGetSlotAttempts;\n if (!getBrowserRetriesNumber) {\n throw new Error('No free browser slots in desired grid');\n }\n let failedGetBrowserAttempts = 0;\n testPlayer = await pRetry(async () => {\n const startTime = Date.now();\n const player = this.initPlayer(testRunHandler);\n try {\n gridInfo = await gridService.handleHybridOrVendorIfNeeded(\n this.options, gridInfo, this.testRunConfig, this.lambdatestService, { maxRetries: getBrowserRetriesNumber, currentRetry: failedGetBrowserAttempts + 1 },\n );\n this.options.gridData.provider = gridInfo.provider;\n this.options.gridData.host = gridInfo.host;\n this.options.gridData.failedGetBrowserAttempts = failedGetBrowserAttempts;\n const getSessionTimeout = this.setSessionTimeout();\n perf.log('before getBrowserOnce');\n const getBrowserRes = await utils.promiseTimeout(\n this.getBrowserOnce(testRunHandler, customExtensionLocalLocation, player, gridInfo),\n getSessionTimeout,\n timeoutMessages.GET_BROWSER_TIMEOUT_MSG,\n );\n perf.log('after getBrowserOnce');\n reporter.onGetBrowserSuccess(this.id, projectId);\n return player || getBrowserRes;\n } catch (error) {\n const grid = { provider: gridInfo.provider, host: gridInfo.host, failedGetBrowserAttempts, id: this.options.gridData.gridId, type: gridInfo.type };\n const instanceType = this.options.mode === CLI_MODE.APPIUM ? 'device' : 'browser';\n logger.error(`error getting ${instanceType} from grid`, { error, testId: this.testId, testResultId: this.testResultId, executionId: this.executionId, grid });\n reporter.onGetBrowserFailure(this.id, projectId, ++failedGetBrowserAttempts);\n player.onDone();\n\n if (!(error instanceof PageNotAvailableError)) {\n await utils.delay(this.options.getBrowserTimeout - (Date.now() - startTime));\n }\n throw error;\n }\n }, { retries: getBrowserRetriesNumber - 1, minTimeout: 0, factor: 1 });\n perf.log('after getBrowserOnce retries');\n } catch (err) {\n await releasePlayer(this.id, this.releaseSlotOnTestFinished, projectId, testPlayer);\n if (err instanceof PageNotAvailableError) {\n throw err;\n }\n if (err instanceof GridError) {\n throw new GetBrowserError(err, GRID_ERROR);\n }\n throw new GetBrowserError(err, SELENIUM_ERROR);\n }\n\n return testPlayer;\n }\n\n /**\n * @param {import('../testRunHandler')} testRunHandler\n * @param {string=} customExtensionLocalLocation\n * @param {boolean=} shouldRerun\n */\n async runTest(testRunHandler, customExtensionLocalLocation, shouldRerun) {\n perf.log('inside runTest');\n const projectId = this.userData?.projectId;\n const quarantineResult = this.handleQuarantine(testRunHandler);\n if (quarantineResult) {\n return quarantineResult;\n }\n\n perf.log('before runTest onTestStarted');\n const test = await this.onTestStarted(this.id, testRunHandler.testId, testRunHandler.testResultId, shouldRerun, testRunHandler.retryKey);\n testRunHandler._baseUrl = test.config.baseUrl;\n\n const testPlayer = await this.getTestPlayer(testRunHandler, customExtensionLocalLocation);\n try {\n return await this.runTestOnce(testRunHandler, testPlayer);\n } finally {\n await releasePlayer(this.id, this.releaseSlotOnTestFinished, projectId, testPlayer);\n }\n }\n\n async runTestCleanup() {\n return undefined;\n }\n\n onQueueCompleted() {\n return undefined;\n }\n\n run() {\n const runNextTest = () => process.nextTick(() => this.run());\n\n /**\n * @param {*} testResult\n * @param {import('../testRunHandler')} testRunHandler\n * @param {Error=} err\n */\n const onRunComplete = async (testResult, testRunHandler, err) => {\n if (utils.isQuarantineAndNotRemoteRun(testResult, this.options)) {\n return runNextTest();\n }\n const sessionId = testRunHandler.sessionId;\n\n const isTimeoutError = (timeoutMsg) => err.message.includes(timeoutMsg);\n const isIgnoreErrors = err && (err instanceof GetBrowserError);\n const isTimeoutErrors = err && (isTimeoutError(TEST_START_TIMEOUT_MSG) || isTimeoutError(TEST_COMPLETE_TIMEOUT_MSG));\n\n const shouldRerun =\n !testResult.success &&\n (\n (testRunHandler.hasMoreRetries() && !isIgnoreErrors && !isTimeoutErrors) ||\n (isTimeoutErrors && testRunHandler.hasMoreTimeoutRetries())\n );\n\n try {\n const testRetryKey = testRunHandler.retryKey;\n testResult.testRetryKey = testRetryKey;\n await this.onTestCompleted(this.id, this.testId, testResult, sessionId, shouldRerun);\n if (this.executionQueue.hasMoreTests() && !this.options.lightweightMode?.general) {\n await utils.delay(DELAY_BETWEEN_TESTS);\n }\n await this.runTestCleanup();\n if (shouldRerun) {\n if (isTimeoutErrors) {\n await testRunHandler.startNewTimeoutRetry();\n } else {\n await testRunHandler.startNewRetry();\n }\n logger.info(`retry test id: ${this.testId} name: ${this.testName} again`, {\n testId: this.testId,\n testName: this.testName,\n isTimeoutErrors,\n testRetryKey,\n totalRetries: testRunHandler._totalRetryCount,\n });\n this.testResultId = testRunHandler.testResultId;\n return await runTestAndCalcResult(testRunHandler, shouldRerun);\n }\n return await runNextTest();\n } catch (error) {\n if (error instanceof StopRunOnError) {\n return undefined;\n }\n logger.error('failed to process test result', { error });\n runNextTest();\n return undefined;\n }\n };\n const getNetworkErrorMessage = () => 'Due to network connectivity issues, Testim CLI has been unable to connect to the grid.\\n' +\n `Please make sure the CLI has stable access to the internet. ${didNetworkConnectivityTestFail() ? '(Internal: network connectivity test failed)' : ''}`;\n\n /**\n * @param {Error} err\n * @param {boolean} wasNetworkHealthy\n */\n const buildError = (err, wasNetworkHealthy) => {\n const instanceType = this.options.mode === CLI_MODE.APPIUM ? 'device' : 'browser';\n if (!wasNetworkHealthy && featureFlags.flags.errorMessageOnBadNetwork.isEnabled()) {\n return {\n errorType: NETWORK_ERROR,\n reason: getNetworkErrorMessage(),\n };\n }\n\n const msg = err instanceof Error ? err.message : err;\n if (msg.includes(GET_BROWSER_TIMEOUT_MSG)) {\n return { errorType: SETUP_TIMEOUT, reason: `Test couldn't get ${instanceType}` };\n }\n if (msg.includes(TEST_START_TIMEOUT_MSG)) {\n return { errorType: SETUP_TIMEOUT, reason: \"Test couldn't be started\" };\n }\n if (msg.includes(TEST_COMPLETE_TIMEOUT_MSG)) {\n if (!this.testRunTimeout) {\n return { errorType: SETUP_TIMEOUT, reason: 'Test timeout reached: test is too long' };\n }\n const duration = moment.duration(this.testRunTimeout, 'milliseconds');\n const minutesCount = Math.floor(duration.asMinutes());\n const secondsCount = duration.seconds();\n const minutesTimeoutStr = minutesCount > 0 ? ` ${minutesCount} min` : '';\n const secondsTimoutStr = secondsCount > 0 ? ` ${secondsCount} sec` : '';\n return { errorType: SETUP_TIMEOUT, reason: `Test timeout reached (timeout:${minutesTimeoutStr}${secondsTimoutStr}): test is too long` };\n }\n\n if (err instanceof GetBrowserError && err.type) {\n if (err.type === GRID_ERROR) {\n return { errorType: GRID_ERROR, reason: `Test couldn't get ${instanceType} from grid - ${err.message}` };\n }\n if (err.type === SELENIUM_ERROR) {\n return { errorType: SELENIUM_ERROR, reason: `Failed to create new session - ${err.message}` };\n }\n }\n\n if (err.type === BROWSER_CLOSED) {\n return { errorType: SELENIUM_ERROR, reason: 'Session terminated, it is possible that the cli could not connect to the grid to send keep-alive requests for a prolonged period' };\n }\n if (err.failure && err.failure instanceof SeleniumError) {\n return { errorType: SELENIUM_ERROR, reason: `Test couldn't get ${instanceType} from grid - ${err.failure.message}` };\n }\n if (/SeleniumError: connect ECONNREFUSED/.test(err.message) || /Couldn't connect to selenium server/.test(err.message)) {\n return { errorType: SELENIUM_ERROR, reason: 'Failed to connect to the grid, please check if the grid is accessible from your network' };\n }\n if (/terminated due to FORWARDING_TO_NODE_FAILED/.test(err.message)) {\n return { errorType: SELENIUM_ERROR, reason: 'Session terminated, it is likely that the grid is out of memory or not responding, please try to rerun the test' };\n }\n if (/terminated due to PROXY_REREGISTRATION/.test(err.message)) {\n return { errorType: SELENIUM_ERROR, reason: 'Session terminated, it is likely that the grid is not responding, please try to rerun the test' };\n }\n if (/forwarding the new session cannot find : Capabilities/.test(err.message)) {\n return { errorType: SELENIUM_ERROR, reason: `Session could not be created, please check that the ${instanceType} you requested is supported in your plan` };\n }\n return { errorType: UNKNOWN_ERROR, reason: msg };\n };\n\n /**\n * @param {Error} err\n * @param {import('../testRunHandler')} testRunHandler\n */\n const onRunError = async (err, testRunHandler) => {\n const wasNetworkHealthy = await isNetworkHealthy();\n if (!wasNetworkHealthy && featureFlags.flags.warnOnBadNetwork.isEnabled()) {\n // intentional, we want to log to stderr:\n // eslint-disable-next-line no-console\n console.warn(getNetworkErrorMessage());\n }\n logger.warn('error on run', { err });\n\n const projectId = this.userData?.projectId;\n const { errorType, reason } = buildError(err, wasNetworkHealthy);\n testimServicesApi.updateTestResult(projectId, this.testResultId, this.testId, {\n status: testRunStatus.COMPLETED,\n success: false,\n reason,\n errorType,\n testRetryKey: testRunHandler.retryKey,\n setupStepResult: { status: testRunStatus.COMPLETED, success: false, reason, errorType },\n }, testRunHandler.remoteRunId);\n await onRunComplete(buildFailureResult(this.testId, this.testName, this.testResultId, reason), testRunHandler, err);\n };\n\n /**\n * @param {Error} runError\n * @param {import('../testRunHandler')} testRunHandler\n */\n const recoverTestResults = async (runError, testRunHandler) => {\n const testId = this.testId;\n const resultId = this.testResultId;\n const projectId = this.userData?.projectId;\n const branch = this.branch;\n if (!testId || !resultId || !projectId || !branch) {\n // Not enough data to call the API\n logger.warn('Test failed. Not enough data to recover results via API', { err: runError });\n return onRunError(runError, testRunHandler);\n }\n\n try {\n const testResult = await testimServicesApi.getTestResults(testId, resultId, projectId, branch);\n logger.warn('Test failed. Got results via API', { err: runError, testResult });\n if (testResult && testResult.status === testRunStatus.COMPLETED) {\n return await onRunComplete(testResult, testRunHandler);\n }\n throw runError;\n } catch (err) {\n if (err !== runError) {\n logger.error('Failed to fetch test results from server', {\n testId,\n resultId,\n projectId,\n branch,\n err,\n });\n }\n return onRunError(runError, testRunHandler);\n }\n };\n\n const disableResults = this.options.disableSockets || (this.options.lightweightMode?.disableResults && (this.options.useChromeLauncher || this.options.mode !== 'extension'));\n const disableRemoteStep = this.options.disableSockets || (this.options.lightweightMode?.disableRemoteStep);\n\n /**\n * @param {import('../testRunHandler')} testRunHandler\n * @param {boolean=} shouldRerun\n */\n const runTestAndCalcResult = async (testRunHandler, shouldRerun) => {\n try {\n await Promise.all([\n !disableRemoteStep && remoteStepService.joinToRemoteStep(this.testResultId),\n !disableResults && testResultService.joinToTestResult(this.testResultId, this.testId),\n ]);\n testRunHandler.validateRunConfig();\n const testResult = await this.runTest(testRunHandler, this.customExtensionLocalLocation, shouldRerun);\n const result = await onRunComplete(testResult, testRunHandler);\n perf.log('After onRunComplete');\n return result;\n } catch (runError) {\n return recoverTestResults(runError, testRunHandler);\n } finally {\n if (!disableRemoteStep) {\n remoteStepService.unlistenToRemoteStep(this.testResultId);\n }\n }\n };\n\n const testRunHandler = this.executionQueue.getNext();\n\n if (!testRunHandler) { // no more tests to run\n return this.onQueueCompleted();\n }\n this.testId = testRunHandler.testId;\n this.testName = testRunHandler.testName;\n this.testResultId = testRunHandler.testResultId;\n this.overrideTestConfigId = testRunHandler.overrideTestConfigId;\n this.testRunConfig = testRunHandler.runConfig;\n this.branch = testRunHandler.branch;\n\n return runTestAndCalcResult(testRunHandler);\n }\n}\n\nmodule.exports = BaseWorker;\n","'use strict';\n\nconst utils = require('../utils');\nconst BaseWorker = require('./BaseWorker');\nconst reporter = require('../reports/reporter');\nconst perf = require('../commons/performance-logger');\nconst WindowUtils = require('../player/utils/windowUtils');\nconst SeleniumTestPlayer = require('../player/seleniumTestPlayer');\nconst { getLogger } = require('../commons/logger');\nconst { PageNotAvailableError } = require('../errors');\nconst { preloadTests } = require('../commons/preloadTests');\nconst { timeoutMessages } = require('../commons/constants');\nconst { getSessionPlayer } = require('../commons/getSessionPlayerRequire');\n\nconst logger = getLogger('worker-selenium');\n\n// this navigation timeout is handled from outside the worker, so don't pass a small timeout to navigate\nconst NO_NAVIGATION_TIME_LIMIT = 1e9;\n\nclass WorkerSelenium extends BaseWorker {\n /**\n * @override\n * @param {import('../testRunHandler')} testRunHandler\n */\n initPlayer(testRunHandler) {\n return new SeleniumTestPlayer(\n this.id,\n testRunHandler.runParams,\n this.options.shouldMonitorPerformance,\n testRunHandler.automationMode,\n undefined,\n testRunHandler.retryCount,\n testRunHandler.previousTestResultId,\n );\n }\n\n /**\n * @override\n * @param {import('../testRunHandler')} testRunHandler\n * @param {string=} customExtensionLocalLocation\n * @param {SeleniumTestPlayer} seleniumTestPlayer\n * @param {Awaited<ReturnType<import('../services/gridService')['handleHybridOrVendorIfNeeded']>>} gridInfo\n */\n async getBrowserOnce(testRunHandler, customExtensionLocalLocation, seleniumTestPlayer, gridInfo) {\n perf.log('in WorkerSelenium getBrowserOnce');\n reporter.onGetSession(this.id, this.testName, testRunHandler.runMode);\n const { driver } = seleniumTestPlayer;\n\n this.windowUtils = new WindowUtils(this.id, driver);\n seleniumTestPlayer.clearSessionTabs();\n\n const { browserValue } = this.testRunConfig;\n const baseUrl = testRunHandler.baseUrl;\n\n try {\n const fastInit = this.options.useLocalChromeDriver;\n await driver.init(\n this.options,\n this.testName,\n this.testRunConfig,\n gridInfo,\n customExtensionLocalLocation,\n this.executionId,\n this.testResultId,\n testRunHandler.seleniumPerfStats,\n fastInit,\n this.lambdatestService,\n );\n perf.log('in WorkerSelenium after driver.init');\n await seleniumTestPlayer.addTab(undefined, { skipLoadInfo: fastInit });\n perf.log('in WorkerSelenium after addTab');\n if (!fastInit) {\n await this.windowUtils.navigate(baseUrl, NO_NAVIGATION_TIME_LIMIT);\n }\n await this.windowUtils.validatePageIsAvailable();\n perf.log('in WorkerSelenium after navigate');\n } catch (err) {\n const firefoxPageNotAvailable = err.message && (err.message.startsWith('Malformed URL') || err.message.includes('Reached error page: about:neterror')) &&\n browserValue === 'firefox';\n\n const invalidURL = (err.message && err.message === 'invalid argument');\n\n if (err instanceof PageNotAvailableError || firefoxPageNotAvailable || invalidURL) {\n throw new PageNotAvailableError(`Page '${baseUrl}' is not available`);\n }\n\n logger.error('failed to navigate to page', { err });\n throw err;\n }\n }\n\n /**\n * @override\n * @param {import('../testRunHandler')} testRunHandler\n * @param {import('../player/seleniumTestPlayer')} seleniumTestPlayer\n */\n async runTestOnce(testRunHandler, seleniumTestPlayer) {\n const sessionPlayerInit = getSessionPlayer();\n const { driver, sessionPlayer } = seleniumTestPlayer;\n\n const version = sessionPlayerInit.manifestVersion || 'runner';\n\n reporter.onWaitToTestComplete(this.id, this.isCodeMode);\n\n setupCliPerformanceMonitoring(sessionPlayer);\n\n sessionPlayer.playbackManager.executionId = testRunHandler.executionId;\n sessionPlayer.playbackManager.executionName = testRunHandler.executionName;\n\n sessionPlayer.setLightweightMode(this.options.lightweightMode);\n if (testRunHandler.sfdcCredential) {\n sessionPlayer.setSfdcCredential(testRunHandler.sfdcCredential);\n }\n if (sessionPlayerInit.localAssetService) {\n sessionPlayerInit.localAssetService.initialize({ serverUrl: this.options.localRCASaver });\n }\n\n let preloadedTest = null;\n if (this.options.lightweightMode?.preloadTests) {\n const preloadedTests = await preloadTests(this.options);\n preloadedTest = preloadedTests[this.testId];\n }\n\n const runSeleniumTest = async () => {\n if (testRunHandler.automationMode === 'codeful') {\n // Testim Development Kit test;\n if (!sessionPlayer.callOrderScheduler) { // old session player\n await testRunHandler.waitForExecutionStartedFinished();\n } else {\n sessionPlayer.callOrderScheduler.schedule(\n () => testRunHandler.waitForExecutionStartedFinished(),\n // this key is shared by clickim and this ensures that we do wait for the execution to be created before we do this.\n { key: `test-result:${this.userData.projectId}:${this.testResultId}` },\n );\n }\n perf.log('right before playTestByCode');\n // TODO: Fix promise constructor anti-pattern\n const playTestByCodePromise = new Promise((resolve, reject) => {\n sessionPlayer.playTestByCode(\n this.testId,\n this.executionId,\n this.testResultId,\n this.baseUrl,\n this.userData,\n version,\n resolve,\n false,\n this.overrideTestConfigId,\n this.branch,\n testRunHandler.code,\n testRunHandler.testName,\n ).catch(reject);\n });\n return utils\n .promiseTimeout(\n playTestByCodePromise.then((testResult) => {\n perf.log('right after playTestByCode');\n return testResult;\n }),\n this.testRunTimeout,\n timeoutMessages.TEST_COMPLETE_TIMEOUT_MSG,\n )\n .catch(err => {\n if (err instanceof utils.TimeoutError) {\n sessionPlayer.stopPlayingOnTestTimeout?.();\n }\n throw err;\n })\n .then(testResult => {\n testResult.resultId = this.testResultId;\n return testResult;\n });\n }\n const INCOGNITO = false;\n\n return utils.promiseTimeout(\n // TODO: Fix promise constructor anti-pattern\n new Promise((resolve, reject) => {\n sessionPlayer.playByTestId(\n this.testId,\n this.executionId,\n this.testResultId,\n this.baseUrl,\n this.userData,\n version,\n resolve,\n false,\n this.overrideTestConfigId,\n this.branch,\n INCOGNITO,\n testRunHandler.remoteRunId,\n undefined,\n undefined,\n preloadedTest,\n ).catch(reject);\n }),\n this.testRunTimeout,\n timeoutMessages.TEST_COMPLETE_TIMEOUT_MSG,\n )\n .catch((err) => {\n if (err instanceof utils.TimeoutError) {\n sessionPlayer.stopPlayingOnTestTimeout?.();\n }\n throw err;\n })\n .then(async (testResult) => {\n if (sessionPlayerInit.localAssetService) {\n await sessionPlayerInit.localAssetService.drain();\n }\n testResult.stepsResults = null;\n testResult.resultId = this.testResultId;\n if (!driver.isAlive()) {\n logger.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`);\n testResult.gridIssues = 'could not validate grid is alive';\n }\n const maxKeepAliveGap = driver.maxKeepAliveGap();\n const MAX_KEEP_ALIVE_GAP = 30000;\n if (maxKeepAliveGap >= MAX_KEEP_ALIVE_GAP) {\n logger.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`);\n testResult.keepAliveIssue = maxKeepAliveGap;\n }\n const resultWithStats = { ...testResult, ...testRunHandler.seleniumPerfStats.getStats() };\n if (this.lambdatestService.isLambdatestRun()) {\n await driver.executeJS(`lambda-status=${!resultWithStats.success ? 'failed' : 'passed'}`).catch(() => {});\n }\n return resultWithStats;\n });\n };\n\n driver.start();\n\n perf.log('right before super.runTestOnce in workerSelenium');\n try {\n await super.runTestOnce(testRunHandler, seleniumTestPlayer);\n perf.log('right after super.runTestOnce in workerSelenium');\n await runSeleniumTest();\n perf.log('right after runSeleniumTest');\n } catch (err) {\n logger.error('failed to run test once', { err });\n throw err;\n }\n }\n}\nfunction setupCliPerformanceMonitoring(sessionPlayer) {\n const { playback } = getSessionPlayer().commonConstants;\n function monitorEvent(event) {\n sessionPlayer.playbackManager.on(event, () => {\n perf.log(`Got event ${event}`);\n });\n }\n Object.values(playback).forEach(monitorEvent);\n}\nmodule.exports = WorkerSelenium;\n","'use strict';\n\n/**\n * @typedef {{\n * attachDebugger(): Promise<any>,\n * detachDebugger(): Promise<any>,\n * onDebuggerDetached(): {},\n * tabId: string,\n * domUtils: { getDOM(): Promise<any> },\n * windowUtils: WindowUtils,\n * imageCaptureUtils: ImageCaptureUtils\n * }} TabUtil\n * */\n/**\n * @typedef {{\n * infoId: any;\n * url: any;\n * title: any;\n * favIconUrl: any;\n * order: any;\n * from: any;\n * isMain: any;\n * openerStepId: any;\n * }} TabInfo\n */\n\nclass TabService {\n /** @param {import('../webdriver')} driver */\n constructor(driver) {\n this.driver = driver;\n /** @type {Record<string, TabUtil>} */\n this._utils = {};\n /** @type {Record<string, { tabCount: number; tabInfos: Record<string, TabInfo> }>} */\n this.sessionTabs = {};\n /** @type {Record<string, string>} */\n this.pendingTabs = {};\n /** @type {Record<string, Set<any>>} */\n this.addedTabs = {};\n }\n\n on() {}\n\n tabCount(sessionId) {\n }\n\n getAllOpenTabIds(sessionId) {\n }\n\n /**\n * Get last tab info for pixel validation\n *\n * @returns last tab info\n */\n getActiveTabInfo(sessionId) {\n }\n\n getAllTabIds(sessionId) {\n }\n\n isSessionTab(sessionId, tabId) {\n }\n\n createSesion(sessionId) {\n }\n\n setAddFrameHandlerCallBack(addFrameHandlerCb) {\n }\n\n getAllTabInfoStrings(sessionId) {\n }\n\n getAllTabInfos(sessionId) {\n }\n\n addNewTab(sessionId, tabId, openerStepId, options = {}) {\n }\n\n addOpenerStepId(sessionId, tabId, openerStepId) {\n }\n addOpenerStep(sessionId, tabId, openerStep) {\n }\n\n fixMissingMainTab(sessionId) {\n }\n\n buildTabInfo(sessionId, tabId, order, openerStepId, options = {}) {\n }\n\n addTab(sessionId, id, order, openerStepId, options = {}) {\n }\n\n getTabUtilsByTabIdAndSessionId(sessionId, tabId) {\n }\n\n getTabUtilsByTabId(tabId) {\n }\n\n getTabInfo(sessionId, id) {\n }\n\n getTabUtils(sessionId, tabInfo) {\n }\n\n exactUrlMatch(first, second, allUrls) {\n }\n\n singleExactMatchForParts(first, second, allUrls, combinePartsFunction) {\n }\n\n isSameTab(sessionId, first, second) {\n }\n\n getMainTabInfo(sessionId) {\n }\n\n getMainTabUtils(sessionId) {\n return {};\n }\n\n removeTabInfo(sessionId, tabId) {\n }\n\n getMainTabId(sessionId) {\n }\n\n isMainTabExists(sessionId) {\n }\n\n clearAllTabs(sessionId) {\n }\n\n clearNonMainTabs(sessionId) {\n }\n\n switchTab(tabId, sessionId, { forceSwitch } = { forceSwitch: false }) {\n }\n\n getTabDetails(tabId, sessionId, options = {}) {\n }\n\n getUnregisteredTabId(sessionId) {\n }\n\n waitForTabToOpen(sessionId) {\n }\n\n tryToAddTab(sessionId, openerStepId) {\n\n }\n\n addNewPopup(id, openerStepId) {\n }\n\n waitToPendingTabs(id, openerStepId) {\n }\n\n isMainTabIncognito() {\n }\n\n isInvalidStepVersion(step) {\n }\n\n getTabIdByTabInfo(sessionId, step) {\n }\n}\n\nmodule.exports = TabService;\n","'use strict';\n\nconst logger = require('../../commons/logger').getLogger('mobile-frame-locator-mock');\n\n/** @param {import('../webdriver')} driver*/\nmodule.exports = function frameLocatorFactory(driver) {\n class FrameLocator {\n /** @type {(...args: ConstructorParameters<typeof import('clickim/src/background/frameLocator').FrameLocator>) => this} */\n constructor(frameManager, locateElementPlayer) {\n this.frameManager = frameManager;\n this.locateElementPlayer = locateElementPlayer;\n }\n\n foundFrameCallback(result, frameTree, testimFrameId) {\n logger.info('foundFrameCallback-mock invoked');\n return {};\n }\n\n\n locate(frameLocator, frameDepth, currentFrame, context, frameTree, stepData) {\n logger.info('locate-mock invoked');\n return {};\n }\n\n findFrame(stepData, frameLocators, context, frameTree) {\n logger.info('findFrame-mock invoked');\n return {};\n }\n }\n\n return FrameLocator;\n};\n","'use strict';\n\nconst webdriverio = require('webdriverio');\nconst TabService = require('./services/tabServiceMock');\nconst PortSelector = require('./services/portSelector');\nconst StepActionUtils = require('./utils/stepActionUtils');\nconst frameLocatorFactory = require('./services/mobileFrameLocatorMock');\nconst testResultService = require('../commons/socket/testResultService');\nconst windowCreationListener = require('./services/windowCreationListener');\nconst PlaybackTimeoutCalculator = require('./services/playbackTimeoutCalculator');\nconst { isDebuggerConnected } = require('../commons/detectDebugger');\nconst { getSessionPlayer } = require('../commons/getSessionPlayerRequire');\nconst logger = require('../commons/logger').getLogger('appium-test-player');\n\n\nclass AppiumTestPlayer {\n //eslint-disable-next-line default-param-last\n constructor(id, userParamsData, shouldMonitorPerformance, automationMode = 'code', driver = webdriverio, testRetryCount, previousTestResultId) {\n const { sessionPlayer: Player, commonConstants, stepActionFactory: StepActionFactory, MobileLocateElementPlayer } = getSessionPlayer();\n this.driver = driver;\n this.id = id;\n\n const stepActionUtils = new StepActionUtils(this.driver);\n this.stepActionFactory = new StepActionFactory(stepActionUtils);\n require('./stepActions/stepActionRegistrar')(this.driver, this.stepActionFactory, 'selenium');\n\n this.tabService = new TabService(this.driver);\n this.windowCreationListener = windowCreationListener;\n this.playbackTimeoutCalculator = new PlaybackTimeoutCalculator(isDebuggerConnected());\n\n this.tabService.createSesion(id);\n\n const FrameLocator = frameLocatorFactory(this.driver);\n\n this.sessionPlayer = new Player(\n id,\n this.tabService,\n null,\n null,\n FrameLocator,\n PortSelector,\n MobileLocateElementPlayer,\n null /* Not in use, placeholder for the order of arguments */,\n stepActionUtils,\n this.stepActionFactory,\n this.playbackTimeoutCalculator,\n testResultService.getSocket(),\n automationMode,\n );\n\n if (this.sessionPlayer.setShouldMonitorPerformance) {\n this.sessionPlayer.setShouldMonitorPerformance(shouldMonitorPerformance);\n }\n this.sessionPlayer.playbackManager.isRemoteSession = true;\n this.sessionPlayer.playbackManager.isLocalRun = false;\n this.sessionPlayer.playbackManager.testRetryCount = testRetryCount;\n this.sessionPlayer.playbackManager.previousTestResultId = previousTestResultId;\n\n this.sessionPlayer.playbackManager.userParamsData = userParamsData || {};\n this.onStepCompleted = this.onStepCompleted.bind(this);\n\n this.sessionPlayer.playbackManager.on(commonConstants.playback.RESULT, this.onStepCompleted);\n }\n\n onStepCompleted(result, testId, resultId, step) {\n //do nothing for now ...\n }\n\n\n async onDone() {\n try {\n await this.driver.activeSession.deleteSession();\n } catch (error) {\n logger.error('error while deleting appium session', { error });\n } finally {\n const { commonConstants } = getSessionPlayer();\n this.sessionPlayer.playbackManager.off(commonConstants.playback.RESULT);\n this.sessionPlayer = null;\n this.tabService = null;\n this.stepActionFactory = null;\n this.driver = null;\n }\n }\n\n getSessionId() {\n return this.driver.activeSession.sessionId;\n }\n}\n\nmodule.exports = AppiumTestPlayer;\n","'use strict';\n\nconst jsdom = require('jsdom');\nconst BaseWorker = require('./BaseWorker');\nconst config = require('../commons/config');\nconst reporter = require('../reports/reporter');\nconst AppiumTestPlayer = require('../player/appiumTestPlayer');\nconst testimServicesApi = require('../commons/testimServicesApi');\nconst desiredCapabilitiesBuilder = require('../commons/testimDesiredCapabilitiesBuilder');\nconst { getSessionPlayer } = require('../commons/getSessionPlayerRequire');\nconst { getLogger } = require('../commons/logger');\n\nconst logger = getLogger('worker-appium');\n\nclass WorkerAppium extends BaseWorker {\n /**\n * @override\n * @param {import('../testRunHandler')} testRunHandler\n */\n initPlayer(testRunHandler) {\n return new AppiumTestPlayer(\n this.id,\n testRunHandler.runParams,\n this.options.shouldMonitorPerformance,\n testRunHandler.automationMode,\n undefined,\n testRunHandler.retryCount,\n testRunHandler.previousTestResultId,\n );\n }\n\n async getBrowserOnce(testRunHandler, customExtensionLocalLocation, appiumTestPlayer, gridInfo) {\n reporter.onGetSession(this.id, this.testName, testRunHandler.runMode);\n const { driver } = appiumTestPlayer;\n const projectType = this.options.projectData.type;\n const nativeApp = await testRunHandler.getNativeAppData();\n const androidActivityWait = projectType === 'android' ? testRunHandler.androidActivityWait : null;\n let appPath = testRunHandler.nativeAppLink;\n if (this.options.appId) {\n const { project: projectId, appId } = this.options;\n const mobileApp = await testimServicesApi.getAppDetails({ appId, projectId });\n if (!mobileApp) {\n logger.error('mobile app not found', { appId, projectId });\n throw new Error('mobile app not found');\n }\n appPath = `${config.SERVICES_HOST}/storage${mobileApp.filePath}?access_token=${this.options.authData.token}`;\n }\n try {\n const capabilities = desiredCapabilitiesBuilder.buildAppiumOptions({\n projectType,\n gridInfo,\n testRunConfig: this.testRunConfig,\n nativeApp,\n options: this.options,\n appPath,\n androidActivityWait,\n });\n\n const activeSession = await driver.remote(capabilities);\n driver.activeSession = activeSession;\n await this.updateDeviceInfo(testRunHandler, activeSession);\n logger.info(`init new appium session testName: ${this.testName}`, { sessionId: activeSession.sessionId, testResultId: this.testResultId, nativeApp });\n } catch (err) {\n //TODO: catch app status validation\n logger.error('failed to start application', { err });\n throw err;\n }\n }\n\n getServerAddressFromGrid(testRunHandler) {\n const { host, port, accessToken } = testRunHandler._options.gridData;\n return `https://${host}:${port}/v0/${accessToken}/wd/hub`;\n }\n\n async updateDeviceInfo(testRunHandler, activeSession) {\n const {\n _executionId, _testId, _testResultId,\n _options: { project: projectId },\n } = testRunHandler;\n const { projectData: { type: projectType }, company: { companyId }, gridData: { gridId } } = this.options;\n\n const selectedDeviceArr = await testimServicesApi.getMobileDevicesFromGrid({ projectId, projectType, companyId, gridId, selectors: `device_id:${activeSession.capabilities.udid}` });\n const deviceName = selectedDeviceArr[0]?.name;\n\n const device = {\n name: deviceName,\n model: activeSession.capabilities.deviceModel,\n osVersion: activeSession.capabilities.platformVersion,\n udid: activeSession.capabilities.udid,\n osType: activeSession.capabilities.platformName,\n scaleFactor: activeSession.capabilities.pixelRatio,\n virtual: false,\n };\n await testimServicesApi.updateTestStatus(\n projectId,\n _executionId,\n _testId,\n _testResultId,\n 'RUNNING',\n { device },\n );\n }\n\n getDirectAddressConnection(activeSessionCapabilities) {\n const { directConnectProtocol: protocol, directConnectHost: host, directConnectPort: port, directConnectPath: path } = activeSessionCapabilities;\n if (protocol && host && port && path) {\n return `${protocol}://${host}:${port}${path}`;\n }\n return undefined;\n }\n\n /**\n * @param {import('../testRunHandler')} testRunHandler\n * @param {import('../player/appiumTestPlayer')} appiumTestPlayer\n */\n async runTestOnce(testRunHandler, appiumTestPlayer) {\n const sessionPlayerInit = getSessionPlayer();\n const { driver, sessionPlayer } = appiumTestPlayer;\n const version = sessionPlayerInit.manifestVersion || 'runner';\n\n reporter.onWaitToTestComplete(this.id, this.isCodeMode);\n\n sessionPlayer.playbackManager.executionId = testRunHandler.executionId;\n sessionPlayer.playbackManager.executionName = testRunHandler.executionName;\n\n const serverAddress = this.getDirectAddressConnection(driver.activeSession.capabilities) || this.getServerAddressFromGrid(testRunHandler);\n const DOMParser = new jsdom.JSDOM('').window.DOMParser;\n sessionPlayer.playbackManager.appiumApi = new sessionPlayerInit.AppiumApi(serverAddress, driver.activeSession.sessionId, DOMParser);\n if (sessionPlayerInit.localAssetService) {\n sessionPlayerInit.localAssetService.initialize({ serverUrl: this.options.localRCASaver });\n }\n async function runAppiumTest() {\n try {\n const INCOGNITO = false;\n const testResult = await new Promise((resolve, reject) =>\n // eslint-disable-next-line no-promise-executor-return\n sessionPlayer.playByTestId(\n this.testId,\n this.executionId,\n this.testResultId,\n this.baseUrl,\n this.userData,\n version,\n resolve,\n false,\n this.overrideTestConfigId,\n this.branch,\n INCOGNITO,\n testRunHandler.remoteRunId,\n undefined,\n undefined,\n undefined,\n ).catch(reject),\n );\n if (sessionPlayerInit.localAssetService) {\n await sessionPlayerInit.localAssetService.drain();\n }\n testResult.stepsResults = null;\n testResult.resultId = this.testResultId;\n const resultWithStats = { ...testResult, ...testRunHandler.seleniumPerfStats.getStats() };\n return resultWithStats;\n } catch (err) {\n //TODO: add test timeout and handle Timeout Error TBD\n // if (err instanceof TimeoutError && sessionPlayer.stopPlayingOnTestTimeout) {\n // sessionPlayer.stopPlayingOnTestTimeout();\n // }\n logger.error('error while running appium tests', { err });\n throw err;\n }\n }\n try {\n await super.runTestOnce(testRunHandler, appiumTestPlayer);\n return await runAppiumTest.call(this);\n } catch (err) {\n logger.error('failed to run test once', { err });\n throw err;\n }\n }\n}\nmodule.exports = WorkerAppium;\n","'use strict';\n\nconst utils = require('../utils');\nconst WebDriver = require('./webdriver');\n\nclass ExtensionTestPlayer {\n constructor(id) {\n this.driver = new WebDriver();\n this.id = id;\n }\n\n onDone() {\n const END_DRIVER_TIMEOUT = 1000 * 60 * 2;\n return utils.promiseTimeout(this.driver.end(), END_DRIVER_TIMEOUT)\n .catch((error) => {\n if (error instanceof utils.TimeoutError) {\n return this.driver.forceEnd();\n }\n throw error;\n })\n .catch(() => {})\n .then(() => {\n this.driver = null;\n });\n }\n\n getSessionId() {\n return this.driver.getSessionId();\n }\n}\n\nmodule.exports = ExtensionTestPlayer;\n","const WebSocket = require('ws');\nconst { promiseFromCallback } = require('./utils');\n\nclass CDPTestRunner {\n constructor() {\n this._cdpUrl = null;\n this._cdpCallbacks = new Map();\n }\n\n async initSession(cdpUrl, timeout = 500) {\n await this.stopSession();\n this._cdpUrl = cdpUrl;\n await this.initCDPWebsocket(timeout);\n }\n\n async initCDPWebsocket(timeout = 500) {\n if (this._cdpWs) {\n return this._cdpWs;\n }\n const websocket = new WebSocket(this._cdpUrl, { timeout });\n\n const openPromise = promiseFromCallback((cb) => {\n websocket.once('open', cb);\n });\n\n const errorPromise = promiseFromCallback((cb) => {\n websocket.once('error', cb);\n }).catch(() => {\n websocket.close();\n websocket.removeAllListeners();\n });\n\n websocket.on('message', (message) => this.onCDPMessage(message));\n\n this._cdpWs = Promise.race([openPromise, errorPromise]).then(() => websocket);\n return this._cdpWs;\n }\n\n onCDPMessage(message) {\n const object = JSON.parse(message);\n const callback = this._cdpCallbacks.get(object.id);\n if (!callback) {\n return;\n }\n this._cdpCallbacks.delete(object.id);\n if (object.error) {\n callback.reject(new Error(object.error));\n } else if (object.result.exceptionDetails?.exception) {\n callback.reject(new Error(object.result.exceptionDetails.exception.description));\n } else {\n callback.resolve(object.result);\n }\n }\n\n async stopSession() {\n const websocket = this._cdpWs;\n this._cdpUrl = null;\n this._cdpWs = null;\n this._cdpCallbacks.clear();\n if (websocket) {\n try {\n return await websocket.close();\n } catch (e) {\n return undefined;\n }\n }\n return undefined;\n }\n\n async cdpCommand(method, params, sessionId) {\n const websocket = await this.initCDPWebsocket();\n this._lastWsId = this._lastWsId || 0;\n const id = this._lastWsId++;\n const result = new Promise((resolve, reject) => {\n this._cdpCallbacks.set(id, { resolve, reject });\n });\n const msg = { method, params, id };\n if (sessionId) {\n Object.assign(msg, { sessionId });\n }\n websocket.send(JSON.stringify(msg));\n return result;\n }\n}\n\nmodule.exports = CDPTestRunner;\n","'use strict';\n\nconst launcher = require('chrome-launcher');\nconst desiredCapabilitiesBuilder = require('../commons/testimDesiredCapabilitiesBuilder');\nconst utils = require('../utils');\nconst { registerExitHook } = require('../processHandler');\nconst CDPTestRunner = require('../cdpTestRunner');\n\nclass LauncherDriver {\n constructor(sessionId) {\n this.sessionId = sessionId;\n this.cdpTestRunner = new CDPTestRunner();\n }\n\n async init(browserOptions, testName, testRunConfig, gridInfo, customExtensionLocalLocation, executionId, testResultId) {\n const capabilities = desiredCapabilitiesBuilder.buildSeleniumOptions(browserOptions, testName, testRunConfig, gridInfo, customExtensionLocalLocation, executionId, testResultId);\n const chromeFlags = [\n ...capabilities.desiredCapabilities.chromeOptions.args,\n ...launcher.Launcher.defaultFlags().filter(flag => flag !== '--disable-extensions'),\n ];\n this.chrome = await launcher.launch({ chromeFlags, startingUrl: undefined, ignoreDefaultFlags: true });\n this.chrome.process.once('exit', () => { this._isAlive = false; });\n this.chrome.process.once('close', () => { this._isAlive = false; });\n this._isAlive = true;\n const webSocketDebuggerUrl = await utils.getCdpAddressForHost(`localhost:${this.chrome.port}`);\n await this.cdpTestRunner.initSession(webSocketDebuggerUrl);\n\n registerExitHook(() => this.chrome.kill());\n }\n\n isAlive() {\n return this._isAlive;\n }\n\n start() {\n }\n\n async stop() {\n await this.cdpTestRunner.stopSession();\n if (this.chrome) {\n await this.chrome.kill();\n }\n this._isAlive = false;\n }\n\n getSessionId() {\n return this.sessionId;\n }\n}\n\nclass ChromeLauncherTestPlayer {\n constructor(id) {\n this.sessionId = utils.guid();\n this.driver = new LauncherDriver(this.sessionId);\n this.id = id;\n }\n\n async onDone() {\n return this.driver.stop();\n }\n\n getSessionId() {\n return this.sessionId;\n }\n}\n\nmodule.exports = ChromeLauncherTestPlayer;\n","'use strict';\n\nconst BaseWorker = require('./BaseWorker');\nconst reporter = require('../reports/reporter');\nconst perf = require('../commons/performance-logger');\nconst ExtensionTestPlayer = require('../player/extensionTestPlayer');\nconst ChromeLauncherTestPlayer = require('../player/chromeLauncherTestPlayer');\nconst { TimeoutError } = require('../errors');\nconst { promiseTimeout } = require('../utils');\nconst { getLogger } = require('../commons/logger');\nconst { timeoutMessages, stepResult } = require('../commons/constants');\n\nconst logger = getLogger('worker-ext');\n\nclass WorkerExtension extends BaseWorker {\n /** @override */\n initPlayer() {\n if (this.options.useChromeLauncher) {\n return new ChromeLauncherTestPlayer(this.id);\n }\n return new ExtensionTestPlayer(this.id);\n }\n\n /**\n * @param {import('../testRunHandler')} testRunHandler\n * @param {string=} customExtensionLocalLocation\n * @param {import('../player/extensionTestPlayer')} player\n * @param {Awaited<ReturnType<import('../services/gridService')['getGridSlot']>>} gridInfo\n */\n async _getBrowserOnce(testRunHandler, customExtensionLocalLocation, player, gridInfo) {\n const { driver } = player;\n try {\n return await driver.init(\n this.options,\n this.testName,\n this.testRunConfig,\n gridInfo,\n customExtensionLocalLocation,\n this.executionId,\n this.testResultId,\n testRunHandler.seleniumPerfStats,\n this.options.lightweightMode?.general,\n this.lambdatestService\n );\n } catch (err) {\n logger.error('failed to get browser', {\n err,\n gridInfo,\n testId: testRunHandler.testId,\n resultId: testRunHandler.testResultId,\n });\n throw err;\n }\n }\n\n /** @override */\n async getBrowserOnce(testRunHandler, customExtensionLocalLocation, player, gridInfo) {\n reporter.onGetSession(this.id, this.testName, testRunHandler.runMode);\n return this._getBrowserOnce(testRunHandler, customExtensionLocalLocation, player, gridInfo);\n }\n\n /**\n * @override\n * @param {import('../testRunHandler')} testRunHandler\n * @param {import('../player/extensionTestPlayer') | import('../player/chromeLauncherTestPlayer')} player\n */\n async runTestOnce(testRunHandler, player) {\n const { driver } = player;\n const { testResultId, executionId, testId } = this;\n perf.log('WorkerExtension runTestOnce');\n\n const runViaCdpOrFallbackToAPI = async () => {\n const testTimeout = this.options.timeoutWasGiven ? Math.max(10000, this.options.timeout) : this.options.testStartTimeout;\n try {\n return await promiseTimeout(testRunHandler.runTestUsingCDP(driver.cdpTestRunner), testTimeout, timeoutMessages.TEST_START_TIMEOUT_MSG);\n } catch (err) {\n if (!(err instanceof TimeoutError)) {\n throw err;\n }\n logger.warn('timeout while running test using CDP. Running checkViaRestAPIIfTestStarted', { testResultId });\n return await testRunHandler.checkViaRestAPIIfTestStarted();\n }\n };\n const navigateChromeSessionToRunTestim = async (url, startStatusDetails) => {\n try {\n const res = await driver.url(url);\n startStatusDetails.driverUrlFinished = true;\n return res;\n } catch (err) {\n logger.error('error from driver.url', { err, testResultId, executionId, testId, url, urlLength: url.length });\n throw err;\n }\n };\n const updateRunHandlerThatTestStartedAndChangeStatusDetails = async (startStatusDetails) => {\n const res = await testRunHandler.onStarted(this.options.testStartTimeout);\n startStatusDetails.testRunHandlerOnStartedHadFinished = true;\n return res;\n };\n\n const runExtTest = async () => {\n perf.log('WorkerExtension runExtTest');\n const disableRemoteStep = this.options.lightweightMode?.disableRemoteStep || this.options.disableSockets;\n if (!disableRemoteStep) {\n testRunHandler.listenToRemoteStep(driver);\n }\n if (this.options.useChromeLauncher) {\n reporter.onWaitToTestStart(this.id);\n reporter.onWaitToTestComplete(this.id, this.isCodeMode);\n try {\n const testResult = await runViaCdpOrFallbackToAPI();\n return { ...testResult, ...testRunHandler.seleniumPerfStats.getStats() };\n } catch (err) {\n logger.warn('failed to run test via CDP', { err });\n throw err;\n }\n }\n\n const startStatusDetails = { driverUrlFinished: false, testRunHandlerOnStartedHadFinished: false }; //for logging / debugging purposes\n\n try {\n const url = await testRunHandler.getRunTestUrl();\n reporter.onWaitToTestStart(this.id);\n try {\n await promiseTimeout(Promise.all([\n navigateChromeSessionToRunTestim(url, startStatusDetails),\n updateRunHandlerThatTestStartedAndChangeStatusDetails(startStatusDetails),\n ]), this.options.testStartTimeout, timeoutMessages.TEST_START_TIMEOUT_MSG);\n } catch (err) {\n if (!(err instanceof TimeoutError)) {\n throw err;\n }\n logger.warn('timeout occurred (see log\\'s payload). Running checkViaRestAPIIfTestStarted', { testResultId, executionId, testId, ...startStatusDetails });\n await testRunHandler.checkViaRestAPIIfTestStarted();\n }\n\n reporter.onWaitToTestComplete(this.id, this.isCodeMode);\n const onBrowserClosed = (err) => {\n testRunHandler.onCompletedCleanup();\n logger.warn('on browser closed error detected', { err, testResultId, executionId, testId });\n driver.unregisterToClosedBrowser(onBrowserClosed);\n err.type = stepResult.BROWSER_CLOSED;\n throw err;\n };\n driver.registerToClosedBrowser(onBrowserClosed);\n try {\n const testResult = await promiseTimeout(testRunHandler.onCompleted(), this.testRunTimeout, timeoutMessages.TEST_COMPLETE_TIMEOUT_MSG);\n driver.unregisterToClosedBrowser(onBrowserClosed);\n if (this.lambdatestService.isLambdatestRun()) {\n await driver.executeJS(`lambda-status=${!testResult.success ? 'failed' : 'passed'}`).catch(() => { });\n }\n if (!driver.isAlive()) {\n logger.warn(`possible grid unresponsive for test ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`);\n testResult.gridIssues = 'could not validate grid is alive';\n }\n const maxKeepAliveGap = driver.maxKeepAliveGap();\n const MAX_KEEP_ALIVE_GAP = 30000;\n if (maxKeepAliveGap >= MAX_KEEP_ALIVE_GAP) {\n logger.warn(`possible browser keep alive issue ${this.testId}, result ${this.testResultId} (execution: ${this.executionId})`);\n testResult.keepAliveIssue = maxKeepAliveGap;\n }\n return { ...testResult, ...testRunHandler.seleniumPerfStats.getStats() };\n } catch (err) {\n logger.warn('timeout wait until test completed', { err, testResultId, executionId, testId });\n // complete time out\n throw new Error(err);\n } finally {\n driver.unregisterToClosedBrowser(onBrowserClosed);\n }\n } catch (err) {\n logger.warn('failed to start url', { err });\n throw new Error(err);\n }\n };\n\n driver.start();\n\n try {\n await super.runTestOnce(testRunHandler, player);\n perf.log('WorkerExtension super.runTestOnce');\n return await runExtTest();\n } catch (err) {\n logger.error('failed to run test', {\n err,\n testId: testRunHandler.testId,\n resultId: testRunHandler.testResultId,\n });\n throw err;\n }\n }\n}\n\nmodule.exports = WorkerExtension;\n","'use strict';\n\nconst { delay } = require('../utils');\nconst { releasePlayer } = require('./workerUtils');\nconst WorkerExtension = require('./WorkerExtension');\nconst perf = require('../commons/performance-logger');\nconst reporter = require('../reports/reporter');\nconst logger = require('../commons/logger').getLogger('base-worker');\n\nconst DELAY_BETWEEN_TESTS = 500;\n\nclass WorkerExtensionSingleBrowser extends WorkerExtension {\n async _releasePlayer() {\n if (!this.testPlayer) {\n return;\n }\n await releasePlayer(this.id, this.releaseSlotOnTestFinished, this.userData?.projectId, this.testPlayer);\n this.testPlayer = null;\n }\n\n onQueueCompleted() {\n return this._releasePlayer();\n }\n\n async getBrowserOnce(testRunHandler, customExtensionLocalLocation, player, gridInfo) {\n reporter.onGetSession(this.id, `worker ${this.id}`, testRunHandler.runMode);\n return this._getBrowserOnce(testRunHandler, customExtensionLocalLocation, player, gridInfo);\n }\n\n /**\n * @override\n * @param {import('../testRunHandler')} testRunHandler\n * @param {string=} customExtensionLocalLocation\n */\n async getTestPlayer(testRunHandler, customExtensionLocalLocation) {\n if (this.testPlayer && !this.testPlayer.driver.isAlive()) {\n logger.warn('WorkerExtensionSingleBrowser is releasing a dead player', { workerId: this.id });\n await this._releasePlayer();\n }\n if (!this.testPlayer) {\n this.testPlayer = await super.getTestPlayer(testRunHandler, customExtensionLocalLocation);\n }\n return this.testPlayer;\n }\n\n /**\n * @param {import('../testRunHandler')} testRunHandler\n * @param {string=} customExtensionLocalLocation\n * @param {boolean=} shouldRerun\n */\n async runTest(testRunHandler, customExtensionLocalLocation, shouldRerun) {\n const quarantineResult = this.handleQuarantine(testRunHandler);\n if (quarantineResult) {\n return quarantineResult;\n }\n\n perf.log('before runTest onTestStarted single browser');\n const test = await this.onTestStarted(this.id, testRunHandler.testId, testRunHandler.testResultId, shouldRerun, testRunHandler.retryKey);\n testRunHandler._baseUrl = test.config.baseUrl;\n const testPlayer = await this.getTestPlayer(testRunHandler, customExtensionLocalLocation);\n\n testRunHandler.markClearBrowser();\n return await this.runTestOnce(testRunHandler, testPlayer);\n }\n\n async runTestCleanup() {\n if (!this.executionQueue.hasMoreTests()) {\n await this.onQueueCompleted();\n return;\n }\n if (this.options.lightweightMode?.general) {\n await delay(DELAY_BETWEEN_TESTS);\n }\n }\n}\n\nmodule.exports = WorkerExtensionSingleBrowser;\n","'use strict';\n\nconst utils = require('../utils');\nconst logger = require('../commons/logger').getLogger('parallel-worker-manager');\nconst { CLI_MODE } = require('../commons/constants');\nconst analyticsService = require('../services/analyticsService');\nconst config = require('../commons/config');\nconst ExecutionQueue = require('../executionQueue');\n\nconst testimCustomToken = require('../commons/testimCustomToken');\nconst labFeaturesService = require('../services/labFeaturesService');\nconst perf = require('../commons/performance-logger');\nconst { StopRunOnError } = require('../errors');\n\nrequire('../player/webdriver'); // preload\n\n/**\n * @template {unknown[]} T\n * @typedef {T extends [infer H, ...infer R] ? R : T} RemoveFirst\n */\n\nclass ParallelWorkerManager {\n /** @param {string=} customExtensionLocalLocation */\n constructor(customExtensionLocalLocation) {\n this.customExtensionLocalLocation = customExtensionLocalLocation;\n }\n\n /** @param {typeof CLI_MODE[keyof typeof CLI_MODE]} mode */\n getWorkerType(mode) {\n switch (mode) {\n case CLI_MODE.SELENIUM:\n return require('../workers/WorkerSelenium');\n case CLI_MODE.APPIUM:\n return require('../workers/WorkerAppium');\n default:\n if (labFeaturesService.isFeatureAvailableForProject('useSameBrowserForMultiTests')) {\n return require('../workers/WorkerExtensionSingleBrowser');\n }\n return require('../workers/WorkerExtension');\n }\n }\n\n /**\n * @param {number} count\n * @param {ExecutionQueue} queue\n * @param {typeof CLI_MODE[keyof typeof CLI_MODE]} mode\n * @param {...RemoveFirst<ConstructorParameters<typeof import('../workers/BaseWorker')>>} args\n */\n createWorkers(count, queue, mode, ...args) {\n const Worker = this.getWorkerType(mode);\n const createWorker = () => {\n try {\n perf.log('before new Worker', mode);\n return new Worker(queue, ...args);\n } finally {\n perf.log('after new Worker', mode);\n }\n };\n\n return Array.from(new Array(count), createWorker);\n }\n\n /**\n * @param {import('./TestPlanRunner').ExecutionList} testList\n * @param {import('../testRunStatus')} testStatus\n * @param {string} executionId\n * @param {string} executionName\n * @param {import('../runOptions').RunnerOptions} options\n * @param {string} branchToUse\n * @param {ReturnType<typeof testimCustomToken['getTokenV3UserData']>} authData\n * @param {number} workerCount\n * @param {boolean} stopOnError\n */\n async runTests(testList, testStatus, executionId, executionName, options, branchToUse, authData, workerCount, stopOnError) {\n if (testList && testList.length === 0) {\n return undefined;\n }\n\n let stoppedOnError = false;\n let runningTests = 0;\n const runAndWaitToComplete = token => new Promise((resolve) => {\n const projectId = options.project;\n const executionQueue = new ExecutionQueue(executionId, executionName, testList, options, branchToUse, testStatus);\n\n /** @type {{ [testResultId: string]: any; }} */\n const combinedTestResults = {};\n const testCount = testList.length;\n\n const companyId = options.company?.companyId;\n const companyName = options.company?.name;\n const source = options.source || 'cli';\n const user = options.user;\n const companyPlan = options.company?.planType;\n const isStartUp = options.company?.isStartUp;\n const projectName = options.projectData?.name;\n const projectType = options.projectData?.type;\n const lightweightMode = options.lightweightMode;\n const sessionType = utils.getSessionType(options);\n\n\n /**\n * @param {number} wid\n * @param {string} testId\n * @param {string} resultId\n * @param {boolean | undefined} isRerun\n * @param {`${number}:${number}`} testRetryKey\n */\n const onTestStarted = (wid, testId, resultId, isRerun, testRetryKey) => {\n runningTests++;\n analyticsService.analyticsTestStart({\n authData,\n executionId,\n projectId,\n testId,\n resultId,\n companyId,\n companyName,\n projectName,\n companyPlan,\n sessionType,\n source,\n user,\n lightweightMode,\n isStartUp,\n projectType,\n });\n return testStatus.testStartAndReport(wid, executionId, resultId, isRerun, testRetryKey);\n };\n\n /**\n * @param {number} wid\n * @param {string} testId\n * @param {*} testResult\n * @param {string} sessionId\n * @param {boolean | undefined} isRerun\n */\n const onTestCompleted = async (wid, testId, testResult, sessionId, isRerun) => {\n runningTests--;\n const update = {};\n if (lightweightMode?.onlyTestIdsNoSuite) {\n update.show = true;\n }\n if (testResult.seleniumStats) {\n update.seleniumStats = testResult.seleniumStats;\n }\n if (testResult.seleniumPerfMarks) {\n testStatus.concatSeleniumPerfMarks(testResult.seleniumPerfMarks);\n delete testResult.seleniumPerfMarks;\n }\n if (testResult.gridIssues) {\n update.gridIssues = testResult.gridIssues;\n }\n if (testResult.keepAliveIssue) {\n update.keepAliveIssue = testResult.keepAliveIssue;\n }\n if (options.host) {\n update.gridHost = options.host;\n }\n if (options.grid || options.gridId) {\n update.gridName = options.grid || options.gridData?.name;\n update.gridType = options.gridData?.type;\n update.gridProvider = options.gridData?.provider;\n } else if (options.useLocalChromeDriver) {\n update.gridName = 'local-chrome-driver-from-options';\n update.gridType = 'local-chrome';\n } else if (options.useChromeLauncher) {\n update.gridName = 'chrome-launcher-from-options';\n update.gridType = 'local-chrome';\n } else if (options.browserstack) {\n update.gridName = 'browserstack-from-options';\n } else if (options.saucelabs) {\n update.gridName = 'saucelabs-from-options';\n }\n\n await testStatus.testEndAndReport(wid, testResult, executionId, sessionId, isRerun, update)\n .catch(err => logger.error('testEndAndReport threw an error', { err }));\n\n if (isRerun) {\n return;\n }\n combinedTestResults[testResult.resultId] = testResult;\n analyticsService.analyticsTestEnd({\n authData,\n executionId,\n projectId,\n testId,\n resultId: testResult.resultId,\n result: testResult,\n companyId,\n companyName,\n projectName,\n companyPlan,\n sessionType,\n source,\n user,\n lightweightMode,\n logger,\n isStartUp,\n projectType,\n });\n if (stopOnError && !testResult.success) {\n executionQueue.stop();\n stoppedOnError = true;\n }\n const completedTests = Object.keys(combinedTestResults).length;\n if (completedTests === testCount || (stoppedOnError && runningTests === 0)) {\n resolve(combinedTestResults);\n }\n };\n\n /**\n * @param {number} wid\n * @param {{ name: string; testId: string; resultId: string; runnerStatus: 'SKIPPED'; testStatus: 'quarantine' }} testResult\n */\n const onTestIgnored = (wid, testResult) => {\n combinedTestResults[testResult.resultId] = testResult;\n testStatus.onTestIgnored(wid, testResult.resultId);\n runningTests--;\n const completedTests = Object.keys(combinedTestResults).length;\n if (completedTests === testCount || (stoppedOnError && runningTests === 0)) {\n resolve(combinedTestResults);\n }\n };\n\n const onGridSlot = (resultId, gridInfo) => testStatus.onGridSlot(resultId, gridInfo);\n\n options.userData = {\n loginData: Object.assign({}, testimCustomToken.getTokenV3UserData(), {\n refreshToken: testimCustomToken.getRefreshToken(),\n authData: testimCustomToken.getTokenV3UserData(),\n token,\n }),\n projectId: options.project,\n company: options.company,\n servicesUrl: config.SERVICES_HOST,\n };\n perf.log('in localStrategy before createWorker');\n this.createWorkers(\n workerCount,\n executionQueue,\n options.mode,\n options,\n this.customExtensionLocalLocation,\n executionId,\n onTestStarted,\n onTestCompleted,\n onGridSlot,\n onTestIgnored,\n ).forEach((worker, index) => {\n perf.log('before schedule worker.run after createWorkers');\n schedule(() => {\n perf.log('right before worker.run');\n worker.run();\n }, index);\n });\n });\n\n try {\n const token = await testimCustomToken.getCustomTokenV3();\n const result = await runAndWaitToComplete(token);\n if (stoppedOnError) {\n throw new StopRunOnError();\n }\n return result;\n } catch (err) {\n logger.error('failed running parallel workers', { executionId, err });\n throw err;\n }\n }\n}\n\n/**\n * @param {Function} fn\n * @param {number} index\n */\nfunction schedule(fn, index) {\n if (index === 0) {\n fn();\n } else {\n setTimeout(fn, index * config.START_WORKER_DELAY_MS);\n }\n}\n\nmodule.exports = ParallelWorkerManager;\n","'use strict';\n\nconst BaseSocketService = require('./baseSocketServiceSocketIO');\n\nclass RealDataServiceSocketIO extends BaseSocketService {\n init(projectId) {\n return super.initNewSocket(projectId, 'real-data');\n }\n\n emitJoinRoom(runId, projectId) {\n this._socket.emit('testResult:listen', { query: `projectId=${projectId}&runId=${runId}` });\n }\n\n joinToTestResultsByRunId(runId, projectId) {\n this.joinRoom(runId, projectId);\n this.emitJoinRoom(runId, projectId);\n }\n\n stopListenToTestResultsByRunId(runId) {\n this.leaveRoom(runId);\n this._socket.emit('testResult:listen:stop', {});\n }\n\n listenToTestResultsByRunId(cb) {\n function onDone(data) {\n cb(data.data);\n }\n\n this._socket.on('testResult:changes', onDone.bind(this));\n }\n}\n\nmodule.exports = RealDataServiceSocketIO;\n","'use strict';\n\nconst RealDataServiceSocketIO = require('./realDataServiceSocketIO');\nconst socketService = require('./socketService');\n\nconst { socketEventTypes } = require('../constants');\nconst featureFlags = require('../featureFlags');\n\nconst { TEST_RESULT_CREATED, TEST_RESULT_UPDATED } = socketEventTypes;\n\nclass RealDataService {\n constructor() {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return;\n }\n this.realDataServiceSocketIO = new RealDataServiceSocketIO();\n }\n\n init(projectId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return Promise.resolve();\n }\n return this.realDataServiceSocketIO.init(projectId);\n }\n\n joinToTestResultsByRunId(runId, projectId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n return socketService.addFilter(runId, { runId }, [\n TEST_RESULT_UPDATED,\n TEST_RESULT_CREATED,\n ], true);\n }\n this.realDataServiceSocketIO.joinToTestResultsByRunId(runId, projectId);\n return undefined;\n }\n\n stopListenToTestResultsByRunId(runId) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n socketService.removeFilter(runId, [TEST_RESULT_UPDATED, TEST_RESULT_CREATED]);\n return;\n }\n this.realDataServiceSocketIO.stopListenToTestResultsByRunId(runId);\n }\n\n listenToTestResultsByRunId(runId, cb) {\n if (featureFlags.flags.useNewWSCLI.isEnabled()) {\n socketService.listenTo(\n runId,\n [TEST_RESULT_UPDATED, TEST_RESULT_CREATED],\n data => data.runId === runId,\n data => cb(data)\n );\n return;\n }\n this.realDataServiceSocketIO.listenToTestResultsByRunId(cb);\n }\n}\n\nmodule.exports = RealDataService;\n","'use strict';\n\nconst _ = require('lodash');\nconst path = require('path');\nconst utils = require('../utils');\nconst analytics = require('../commons/testimAnalytics');\nconst { ArgError } = require('../errors');\n\n\n/**\n * @param {import('../runOptions').RunnerOptions} options\n * @param {string} branchToUse\n */\nasync function getSuite(options, branchToUse) {\n if (options.lightweightMode?.onlyTestIdsNoSuite && options.testId) {\n return { tests: [options.testId.map(testId => ({ testId, testConfig: {}, resultId: utils.guid() }))] };\n }\n // local code test\n if (options.files.length > 0) {\n const { buildCodeTests } = require('./buildCodeTests');\n let webpackConfig = {};\n if (options.webpackConfig) {\n const webpackConfigPath = path.join(process.cwd(), options.webpackConfig);\n webpackConfig = require(webpackConfigPath); // eslint-disable-line import/no-dynamic-require\n }\n\n return buildCodeTests(options.files, webpackConfig, { baseUrl: options.baseUrl });\n }\n // regular test\n const servicesApi = require('../commons/testimServicesApi');\n return await servicesApi.getSuiteTestList({\n projectId: options.project,\n labels: options.label,\n testIds: options.testId,\n testNames: options.name,\n testConfigNames: options.testConfigNames,\n suiteNames: options.suites,\n suiteIds: options.suiteIds,\n branch: branchToUse,\n rerunFailedByRunId: options.rerunFailedByRunId,\n testConfigIds: options.testConfigIds,\n intersections: options.intersections,\n });\n}\n\n\nfunction calcTestResultStatus(tests) {\n const total = Object.keys(tests).length;\n const passed = Object.keys(tests).reduce((count, resultId) => count + (tests[resultId].success === true ? 1 : 0), 0);\n return total === passed;\n}\n\n\n/**\n * @param {import('../runOptions').RunnerOptions} options\n * @param {import('./TestPlanRunner').ExecutionList} testList\n */\nasync function validateConfig(options, testList) {\n const supportedBrowsers = options.mode === 'extension' ? [\n 'edge-chromium', 'chrome',\n ] : [\n 'firefox', 'chrome', 'edge-chromium', 'safari', 'safari technology preview', 'browser', 'android', 'ios', 'iphone', 'ipad',\n ];\n const diff = _.difference(utils.getUniqBrowsers(options, testList), supportedBrowsers);\n\n if (diff.length > 0) {\n analytics.trackWithCIUser('invalid-config-run', {\n browser: diff.join(', '),\n mode: 'runner',\n });\n throw new ArgError(`browser type <${diff}> is not supported in ${options.mode} mode.`);\n }\n\n return testList;\n}\n\nmodule.exports = {\n getSuite,\n calcTestResultStatus,\n validateConfig,\n};\n","'use strict';\n\nconst _ = require('lodash');\nconst utils = require('../utils');\nconst Logger = require('../commons/logger');\nconst config = require('../commons/config');\nconst reporter = require('../reports/reporter');\nconst constants = require('../commons/constants');\nconst TestRunStatus = require('../testRunStatus');\nconst perf = require('../commons/performance-logger');\nconst gridService = require('../services/gridService');\nconst branchService = require('../services/branchService');\nconst ParallelWorkerManager = require('./ParallelWorkerManager');\nconst analyticsService = require('../services/analyticsService');\nconst testimServicesApi = require('../commons/testimServicesApi');\nconst testimCustomToken = require('../commons/testimCustomToken');\nconst RealDataService = require('../commons/socket/realDataService');\nconst { StopRunOnError, ArgError } = require('../errors');\nconst { getSuite, calcTestResultStatus, validateConfig } = require('./runnerUtils');\n\nconst guid = utils.guid;\nconst TESTIM_RUN_STATUS = constants.testRunStatus;\nconst logger = Logger.getLogger('test-plan-runner');\nconst TDK_CHILD_RESULTS_TIMEOUT = 1000 * 60 * 5;\n\n/** @typedef {Awaited<ReturnType<typeof getSuite>>['tests'][number]} ExecutionList */\n\nclass TestPlanRunner {\n /** @param {string=} customExtensionLocalLocation */\n constructor(customExtensionLocalLocation) {\n this.workerManager = new ParallelWorkerManager(customExtensionLocalLocation);\n this.startTime = Date.now();\n }\n\n /**\n * @private\n * @param {ExecutionList} beforeTests\n * @param {ExecutionList} tests\n * @param {ExecutionList} afterTests\n * @param {string} branchToUse\n * @param {import('../runOptions').RunnerOptions} tpOptions\n * @param {string} executionId\n * @param {string} executionName\n * @param {TestRunStatus} testStatus\n */\n async runTestAllPhases(beforeTests, tests, afterTests, branchToUse, tpOptions, executionId, executionName, testStatus) {\n /** @type {{ [testResultId: string]: any; }} */\n const executionResults = {};\n const authData = testimCustomToken.getTokenV3UserData();\n\n const runBeforeTests = async () => {\n const workerCount = tpOptions.beforeParallel || 1;\n const stopOnError = true;\n const beforeTestsResults = await this.workerManager.runTests(beforeTests, testStatus, executionId, executionName, tpOptions, branchToUse, authData, workerCount, stopOnError);\n Object.assign(executionResults, beforeTestsResults);\n };\n\n const runTestPlanTests = async () => {\n const workerCount = config.TESTIM_CONCURRENT_WORKER_COUNT || tpOptions.parallel;\n const stopOnError = false;\n perf.log('right before this.workerManager.runTests');\n const testsResults = await this.workerManager.runTests(tests, testStatus, executionId, executionName, tpOptions, branchToUse, authData, workerCount, stopOnError);\n perf.log('right after this.workerManager.runTests');\n Object.assign(executionResults, testsResults);\n };\n\n const runAfterTests = async () => {\n const workerCount = tpOptions.afterParallel || 1;\n const stopOnError = false;\n const afterTestsResults = await this.workerManager.runTests(afterTests, testStatus, executionId, executionName, tpOptions, branchToUse, authData, workerCount, stopOnError);\n Object.assign(executionResults, afterTestsResults);\n };\n\n const sessionType = utils.getSessionType(tpOptions);\n analyticsService.analyticsExecsStart({ authData, executionId, projectId: tpOptions.project, sessionType });\n perf.log('right before runBeforeTests');\n try {\n await runBeforeTests();\n perf.log('right before runTestPlanTests');\n await runTestPlanTests();\n perf.log('right after runTestPlanTests');\n await runAfterTests();\n return executionResults;\n } catch (err) {\n logger.error('error running test plan', { err });\n if (err instanceof StopRunOnError) {\n return testStatus.markAllQueuedTests(executionId, constants.runnerTestStatus.ABORTED, 'aborted', false);\n }\n throw err;\n } finally {\n await handlePixelValidationBatches();\n }\n\n async function handlePixelValidationBatches() {\n if (tpOptions.lightweightMode?.disablePixelValidation) {\n return;\n }\n // When sessionPlayer is available, use it - as it only attempts to close batches that exist.\n if (tpOptions.mode === constants.CLI_MODE.SELENIUM) {\n const { EyeSdkBuilder } = require('../commons/getSessionPlayerRequire').getSessionPlayer();\n await EyeSdkBuilder.closeBatch(executionId);\n return;\n }\n /** @type {Awaited<ReturnType<typeof testimServicesApi['getApplitoolsIntegrationData']>>} */\n let applitoolsIntegrationData;\n try {\n if (!tpOptions.company?.activePlan?.premiumFeatures?.applitools) {\n return;\n }\n applitoolsIntegrationData = await testimServicesApi.getApplitoolsIntegrationData(tpOptions.project);\n if (_.isEmpty(applitoolsIntegrationData) || !executionId) {\n return;\n }\n const { runKey: apiKey, url: serverUrl } = applitoolsIntegrationData;\n const tmpSDK = require('@applitools/eyes-sdk-core').makeSDK({ name: 'Testim.io', version: '4.0.0', spec: {} });\n await tmpSDK.closeBatches({ settings: { batchIds: [executionId], serverUrl, apiKey } });\n } catch (err) {\n // If a batch with this name did not exist, do not log an error.\n if (err.message && (err.message.startsWith('Request failed with status code 404') || err.message.startsWith('no batchIds were set'))) {\n return;\n }\n logger.error('Failed closing batch in extension mode', { err, projectId: tpOptions.project, applitoolsIntegrationData, batchIds: [executionId] });\n }\n }\n }\n\n /**\n * @private\n * @param {string} projectId\n */\n async initRealDataService(projectId) {\n const realDataService = new RealDataService();\n await realDataService.init(projectId);\n return realDataService;\n }\n\n /**\n * @private\n * @param {RealDataService} realDataService\n * @param {string} projectId\n * @param {string} runId\n * @param {TestRunStatus} testStatus\n */\n async listenToTestCreatedInFile(realDataService, projectId, runId, testStatus) {\n const childTestResults = {};\n realDataService.joinToTestResultsByRunId(runId, projectId);\n let isPromisePending = true;\n /** @type {Promise<any[]>} */\n const promise = new Promise(_resolve => {\n const resolve = (val) => {\n isPromisePending = false;\n _resolve(val);\n };\n realDataService.listenToTestResultsByRunId(runId, testResult => {\n const resultId = testResult.id;\n if (!testStatus.getTestResult(resultId)) {\n const prevTestResult = childTestResults[resultId];\n const mergedTestResult = _.merge({}, prevTestResult, testResult, { resultId });\n childTestResults[resultId] = mergedTestResult;\n if (!prevTestResult || prevTestResult.status !== testResult.status) {\n const parentTestResult = testStatus.getTestResult(mergedTestResult.parentResultId) || { workerId: 1 };\n const workerId = parentTestResult.workerId;\n if ([TESTIM_RUN_STATUS.RUNNING].includes(testResult.status)) {\n reporter.onTestStarted(mergedTestResult, workerId);\n }\n if ([TESTIM_RUN_STATUS.COMPLETED].includes(testResult.status)) {\n mergedTestResult.duration = (mergedTestResult.endTime - mergedTestResult.startTime) || 0;\n reporter.onTestFinished(mergedTestResult, workerId);\n }\n }\n }\n\n const allChildTestResultCompleted = !(Object.values(childTestResults)\n .some(result => ['QUEUED', 'RUNNING'].includes(result.runnerStatus)));\n\n const allParentTestResultCompleted = !(Object.values(testStatus.getAllTestResults())\n .some(result => ['QUEUED', 'RUNNING'].includes(result.status)));\n\n if (allChildTestResultCompleted && allParentTestResultCompleted) {\n return resolve(Object.values(childTestResults));\n }\n\n if (allParentTestResultCompleted && !allChildTestResultCompleted) {\n // wait 10 sec to handle race condition when parent test result (file) finished before child test result\n return utils.delay(10000)\n .then(() => {\n if (isPromisePending) {\n // TODO(Benji) we are missing the child test results here.\n // we are resolving here with partial data - we should consider fetching it\n // from the server\n resolve(childTestResults);\n }\n });\n }\n return undefined;\n });\n });\n\n return await promise;\n }\n\n /**\n * @private\n * @param {string} projectId\n * @param {string} executionId\n * @param {TestRunStatus} testStatus\n */\n async initRealDataServiceAndListenToTestsCreatedInFile(projectId, executionId, testStatus) {\n const realDataService = await this.initRealDataService(projectId);\n return this.listenToTestCreatedInFile(realDataService, projectId, executionId, testStatus);\n }\n\n /**\n * @private\n * @param {ExecutionList} beforeTests\n * @param {ExecutionList} tests\n * @param {ExecutionList} afterTests\n * @param {import('../runOptions').RunnerOptions} tpOptions\n * @param {string} testPlanName\n * @param {string | null} testPlanId\n * @param {string} branch\n * @param {boolean=} isAnonymous\n */\n async runTestPlan(beforeTests, tests, afterTests, tpOptions, testPlanName, testPlanId, branch, isAnonymous) {\n const executionId = guid();\n const projectId = tpOptions.project;\n Logger.setExecutionId(executionId);\n beforeTests.forEach(test => { test.isBeforeTestPlan = true; });\n afterTests.forEach(test => { test.isAfterTestPlan = true; });\n const testStatus = new TestRunStatus([].concat(beforeTests, tests, afterTests), tpOptions, testPlanId, branch);\n\n const configs = _.chain([].concat(beforeTests, tests, afterTests))\n .map(test => test.overrideTestConfig?.name || '')\n .uniq()\n .compact()\n .value();\n /** @type {string | null} */\n const configName = configs?.length === 1 ? configs[0] : null;\n\n const isCodeMode = tpOptions.files.length > 0;\n const testNames = tpOptions.lightweightMode?.onlyTestIdsNoSuite ? [] : [].concat(beforeTests, tests, afterTests).map(test => test.name);\n\n const testListInfoPromise = tpOptions.lightweightMode?.onlyTestIdsNoSuite ?\n { beforeTests, tests, afterTests } :\n testStatus.executionStart(executionId, projectId, this.startTime, testPlanName, testNames);\n let childTestResults;\n if (isCodeMode) {\n childTestResults = this.initRealDataServiceAndListenToTestsCreatedInFile(projectId, executionId, testStatus);\n }\n perf.log('before testListInfoPromise');\n const testListInfo = await testListInfoPromise;\n if (!tpOptions.lightweightMode?.onlyTestIdsNoSuite) {\n reporter.onTestPlanStarted(testListInfo.beforeTests, testListInfo.tests, testListInfo.afterTests, testPlanName, executionId, isAnonymous, configName, isCodeMode);\n }\n\n perf.log('before runTestAllPhases');\n const results = await this.runTestAllPhases(testListInfo.beforeTests, testListInfo.tests, testListInfo.afterTests, branch, tpOptions, executionId, testPlanName || 'All Tests', testStatus);\n const childResults = await utils.promiseTimeout(childTestResults, TDK_CHILD_RESULTS_TIMEOUT)\n .catch(async () => {\n logger.warn('timed out waiting for child results on websocket. using REST fallback', { projectId, executionId });\n const testResults = await testimServicesApi.getRealData(projectId, 'testResult', `runId=${executionId}&sort=runOrder`);\n return _.chain((testResults?.data?.docs) || [])\n .groupBy('parentResultId')\n .omit('undefined')\n .values()\n .flatten()\n .value();\n });\n perf.log('before executionEnd');\n await testStatus.executionEnd(executionId);\n perf.log('after executionEnd');\n return { results, executionId, testPlanName, configName, childTestResults: childResults };\n }\n\n /**\n * @private\n * @param {import('../runOptions').RunnerOptions} options\n * @param {string} branchToUse\n */\n async runTestPlans(options, branchToUse) {\n logger.info('start to run test plan', {\n options: Object.assign({}, options, { token: undefined, userParamsData: undefined }),\n branchToUse,\n });\n\n function flattenTestListData(testPlansData) {\n return _.flattenDeep(Object.values(testPlansData)).reduce((all, testRun) => all.concat(testRun.beforeTests, testRun.tests, testRun.afterTests), []);\n }\n\n const testPlansResults = {};\n const testPlansTests = {};\n const projectId = options.project;\n\n const data = await testimServicesApi.getTestPlanTestList(projectId, options.testPlan, options.testPlanIds, branchToUse, options.intersections);\n const testPlans = data.testPlans;\n const testPlansData = data.testPlansData;\n if (!testPlans || testPlans.length === 0) {\n throw new ArgError(`no test plan to run ${options.testPlan}`);\n }\n if (!testPlansData || Object.keys(testPlansData).length === 0) {\n if (options.passZeroTests) {\n return [];\n }\n throw new ArgError(`no test to run in test plan ${options.testPlan}`);\n }\n await validateConfig(options, flattenTestListData(testPlansData));\n return await utils.promiseMap(testPlans, async testPlan => {\n const id = testPlan.testPlanId;\n testPlansResults[id] = {};\n\n const tpOptions = Object.assign({}, options);\n tpOptions.baseUrl = options.baseUrl || testPlan.startUrl;\n tpOptions.host = options.host;\n tpOptions.port = options.port;\n tpOptions.gridId = options.gridId || testPlan.gridId;\n\n //if user pass --grid with test plan we want to use grid option instead of host and port\n if (options.grid) {\n delete tpOptions.gridId;\n }\n\n\n tpOptions.gridData = await gridService.getTestPlanGridData(options, testPlan);\n\n const testPlanName = tpOptions.overrideExecutionName || testPlan.name;\n return await utils.promiseMap(testPlansData[id], async testPlanTests => {\n const res = await this.runTestPlan(testPlanTests.beforeTests, testPlanTests.tests, testPlanTests.afterTests, tpOptions, testPlanName, id, branchToUse);\n const isCodeMode = options.files.length > 0;\n reporter.onTestPlanFinished(res.results, testPlan.name, this.startTime, res.executionId, false, isCodeMode, res.childTestResults);\n testPlansResults[id][res.executionId] = res.results;\n\n const executions = Object.keys(testPlansResults[id]).map(exeId => ({\n executionId: exeId,\n status: calcTestResultStatus(testPlansResults[id][exeId]),\n }));\n const tests = Object.keys(testPlansResults[id]).map(exeId => testPlansResults[id][exeId]).reduce((testResult, test) => Object.assign(testResult, test), {});\n const success = calcTestResultStatus(tests);\n Object.assign(testPlansTests, tests);\n const executionId = success ? executions[0].executionId : executions.find(exec => !exec.success).executionId;\n await testimServicesApi.saveTestPlanResult(projectId, id, { success, executions, executionId });\n return res;\n });\n });\n }\n\n /**\n * @private\n * @param {import('../runOptions').RunnerOptions} options\n * @param {string} branchToUse\n */\n async runAnonymousTestPlan(options, branchToUse) {\n logger.info('start to run anonymous', {\n options: Object.assign({}, options, { token: undefined }),\n branchToUse,\n });\n\n perf.log('before getSuite');\n const suiteResult = await getSuite(options, branchToUse);\n perf.log('after getSuite');\n\n if (!suiteResult?.tests[0]?.length) {\n if (options.rerunFailedByRunId) {\n throw new ArgError('No failed tests found in the provided run');\n }\n if (options.passZeroTests) {\n return [];\n }\n throw new ArgError('No tests to run');\n }\n branchToUse = suiteResult.branch || branchToUse;\n if (options.rerunFailedByRunId && !suiteResult.runName) {\n if (!suiteResult.runExists) {\n throw new ArgError('Invalid run ID - no such run.');\n }\n const isAnonymouslyNamedRun = suiteResult.runName === '';\n if (isAnonymouslyNamedRun) {\n suiteResult.runName = `rerun-${options.rerunFailedByRunId}`;\n }\n }\n const testPlanName = options.overrideExecutionName || suiteResult.runName || [].concat(options.label, options.name, options.suites).join(' ');\n const isAnonymous = true;\n perf.log('Right before validateConfig + runAnonymousTestPlan tests map');\n return await utils.promiseMap(suiteResult.tests, async suiteTests => { // array of results per execution\n //override result id for remote run mode and run only the first test data\n if (options.resultId) {\n const firstTest = suiteTests[0];\n firstTest.resultId = options.resultId;\n suiteTests = [firstTest];\n }\n await validateConfig(options, suiteTests);\n perf.log('right before runTestPlan');\n const res = await this.runTestPlan([], suiteTests, [], options, testPlanName, null, branchToUse, isAnonymous);\n perf.log('right after runTestPlan');\n const isCodeMode = options.files.length > 0;\n await reporter.onTestPlanFinished(res.results, testPlanName, this.startTime, res.executionId, isAnonymous, isCodeMode, res.childTestResults);\n return res;\n });\n }\n\n /**\n * @param {import('../runOptions').RunnerOptions} options\n */\n async run(options) {\n const branchToUse = branchService.getCurrentBranch();\n let results = [];\n if (utils.hasTestPlanFlag(options)) {\n results = await this.runTestPlans(options, branchToUse);\n } else {\n results = await this.runAnonymousTestPlan(options, branchToUse);\n }\n const flattenResults = _.flattenDeep(results);\n perf.log('right before onAllTestPlansFinished');\n await reporter.onAllTestPlansFinished(flattenResults);\n perf.log('right after onAllTestPlansFinished');\n return flattenResults.map(res => res.results).reduce((total, cur) => Object.assign(total, cur), {});\n }\n}\n\nmodule.exports = TestPlanRunner;\n","'use strict';\n\n/* eslint-disable no-console */\nconst _ = require('lodash');\nconst utils = require('./utils');\nconst reporter = require('./reports/reporter');\nconst npmDriver = require('./testimNpmDriver');\nconst tunnel = require('./commons/testimTunnel');\nconst perf = require('./commons/performance-logger');\nconst gridService = require('./services/gridService');\nconst analytics = require('./commons/testimAnalytics');\nconst featureFlags = require('./commons/featureFlags');\nconst branchService = require('./services/branchService');\nconst servicesApi = require('./commons/testimServicesApi');\nconst TestPlanRunner = require('./runners/TestPlanRunner');\nconst socketService = require('./commons/socket/socketService');\nconst testimCustomToken = require('./commons/testimCustomToken');\nconst labFeaturesService = require('./services/labFeaturesService');\nconst featureAvailabilityService = require('./commons/featureAvailabilityService');\nconst { getLogger } = require('./commons/logger');\nconst { EDITOR_URL } = require('./commons/config');\nconst { CLI_MODE } = require('./commons/constants');\nconst { ArgError, QuotaDepletedError } = require('./errors');\nconst { prepareMockNetwork, initializeUserWithAuth } = require('./commons/prepareRunner');\n\nconst FREE_PLAN_MINIMUM_BROWSER_TIMEOUT = 30 * 60 * 1000;\n\n\nconst logger = getLogger('runner');\n\n/** @param {import('./runOptions').RunnerOptions} options */\nfunction validateCLIRunsAreAllowed(options) {\n const hasCliAccess = _.get(options, 'company.activePlan.premiumFeatures.allowCLI');\n\n if (!hasCliAccess) {\n const projectId = options.project;\n analytics.track(options.authData.uid, 'cli-not-supported', { projectId });\n console.warn('Testim CLI is not supported in this plan');\n // TODO: shouldn't this throw an error? 🤔\n }\n}\n\n/** @param {import('./runOptions').RunnerOptions} options */\nasync function validateProjectQuotaNotDepleted(options) {\n const projectId = options.project;\n\n const usage = await servicesApi.getUsageForCurrentBillingPeriod(projectId);\n const isExecutionBlocked = usage?.isExecutionBlocked;\n if (!isExecutionBlocked) {\n return;\n }\n\n console.error('You have reached the limit of runs for the billing month, please upgrade your plan at https://www.testim.io/upgrade-contact-us?source=cli');\n analytics.track(options.authData.uid, 'execution-quota-surpassed', { projectId });\n throw new QuotaDepletedError();\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {Awaited<ReturnType<initializeUserWithAuth>>['companyByProjectId']} company\n */\nfunction validateOptionsForCompany(options, company) {\n const optionsRetention = options.retentionDays;\n if (!optionsRetention) {\n return;\n }\n\n const companyRetention = _.get(company, 'activePlan.premiumFeatures.resultRetention');\n if (optionsRetention > companyRetention) {\n throw new ArgError(`Retention days (${optionsRetention}) cannot be greater than the company's retention days (${companyRetention}). Run aborted`);\n }\n}\n\n/** @param {import('./runOptions').RunnerOptions} options */\nasync function validateCliAccount(options) {\n if (options.lightweightMode?.disableQuotaBlocking) {\n return;\n }\n try {\n await Promise.all([\n validateProjectQuotaNotDepleted(options),\n validateCLIRunsAreAllowed(options),\n ]);\n } catch (err) {\n if ([ArgError, QuotaDepletedError].some(errType => err instanceof errType)) {\n throw err;\n }\n logger.error('could not validate cli account', { err });\n }\n}\n\n/** @param {string} projectId */\nfunction analyticsIdentify(projectId) {\n const authData = testimCustomToken.getTokenV3UserData();\n return analytics.identify({\n userId: authData.uid,\n name: authData.uid,\n traits: {\n projectId,\n company: {\n id: projectId,\n lastCIRun: Math.floor(Date.now() / 1000), // unix timestamp\n },\n },\n });\n}\n\n/** @param {string} projectId */\nfunction initSocketServices(projectId, { disableResults = false, disableRemoteStep = false }) {\n if (featureFlags.flags.useNewWSCLI.isEnabled() && !disableResults && !disableRemoteStep) {\n return socketService.connect(projectId);\n }\n if (!disableRemoteStep) {\n const remoteStepService = require('./commons/socket/remoteStepService');\n remoteStepService.init(projectId);\n }\n if (!disableResults) {\n const testResultService = require('./commons/socket/testResultService');\n testResultService.init(projectId);\n }\n return undefined;\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {Awaited<ReturnType<initializeUserWithAuth>>['branchName']} branchInfoFromServer\n */\nfunction setBranch(options, branchInfoFromServer) {\n const { branch, autoDetect } = options;\n branchService.setCurrentBranch(branchInfoFromServer, autoDetect);\n if (!branchInfoFromServer && !autoDetect) {\n throw new ArgError(`branch ${branch} does not exist, run aborted.`);\n }\n}\n\n/** @param {import('./runOptions').RunnerOptions} options */\nasync function setSfdcCredential(options) {\n const { projectData: { projectId } = {} } = options;\n const branch = branchService.getCurrentBranch();\n if (_.get(options, 'company.activePlan.premiumFeatures.ttaForSalesforce')) {\n options.sfdcCredential = await servicesApi.loadSfdcCredential({ projectId, branch });\n }\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {Awaited<ReturnType<initializeUserWithAuth>>['companyByProjectId']} company\n */\nfunction setCompany(options, company) {\n const { onprem, id, storageBaseUrl, storageType, name, activePlan = {} } = company;\n if (onprem) {\n const { mode, extensionPath, ext, playerPath } = options;\n if ([CLI_MODE.SELENIUM].includes(mode) && !playerPath) {\n throw new ArgError('in selenium on prem mode --player-path must be provided');\n }\n if (mode === 'extension' && !extensionPath && !ext) {\n throw new ArgError('In extension on prem mode --ext or --extension-path must be provided');\n }\n }\n const isPOC = Boolean(activePlan.isPoc);\n const isStartUp = Boolean(activePlan.isStartUp);\n const planType = utils.getPlanType(activePlan);\n if (planType === 'free') {\n options.newBrowserWaitTimeout = options.newBrowserWaitTimeout < FREE_PLAN_MINIMUM_BROWSER_TIMEOUT ? FREE_PLAN_MINIMUM_BROWSER_TIMEOUT : options.newBrowserWaitTimeout;\n }\n featureFlags.setCompanyId(id);\n featureFlags.setIsPOC(isPOC);\n featureFlags.setIsStartUp(isStartUp);\n featureFlags.setPlanType(planType);\n featureAvailabilityService.setPlanType(planType);\n options.company = {\n companyId: id,\n onprem,\n storageBaseUrl,\n storageType,\n name,\n planType,\n isPOC,\n isStartUp,\n activePlan,\n };\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {Awaited<ReturnType<initializeUserWithAuth>>['editorConfig']} editorConfig\n */\nfunction setSystemInfo(options, editorConfig) {\n if (EDITOR_URL) {\n options.editorUrl = EDITOR_URL;\n return;\n }\n options.editorUrl = editorConfig.editorUrl;\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {Awaited<ReturnType<initializeUserWithAuth>>['allGrids']} allGrids\n */\nfunction setAllGrids(options, allGrids) {\n options.allGrids = allGrids;\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {Awaited<ReturnType<initializeUserWithAuth>>['authData']} authData\n */\nfunction setAuthData(options, authData) {\n options.authData = authData;\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {Awaited<ReturnType<initializeUserWithAuth>>['projectById']} project\n */\nfunction setProject(options, project) {\n const { id, name, type, defaults } = project;\n featureFlags.setProjectId(id);\n featureFlags.setProjectType(type);\n options.projectData = {\n projectId: id,\n type,\n name,\n defaults,\n };\n}\n\n/** @param {import('./runOptions').RunnerOptions} options */\nasync function setGrid(options) {\n options.gridData = await gridService.getGridData(options);\n}\n\n/** @param {import('./runOptions').RunnerOptions} options */\nasync function setMockNetworkRules(options) {\n const { project } = options;\n const props = { projectId: project };\n\n if (options.overrideMappingFile) {\n analytics.trackWithCIUser('user-override-file', props);\n options.mockNetworkRules = await prepareMockNetwork(options.overrideMappingFile);\n }\n}\n\n/**\n * @param {import('./runOptions').RunnerOptions} options\n * @param {string=} customExtensionLocalLocation\n */\nasync function runRunner(options, customExtensionLocalLocation) {\n perf.log('in runner.js runRunner');\n\n const { project, remoteRunId, useLocalChromeDriver, useChromeLauncher } = options;\n\n if (!remoteRunId) {\n options.source = (useLocalChromeDriver || useChromeLauncher) ? 'cli-local' : 'cli';\n }\n\n await npmDriver.checkNpmVersion();\n perf.log('in runner.js after checkNpmVersion');\n\n await validateCliAccount(options);\n\n perf.log('in runRunner before tunnel.connect');\n await tunnel.connect(options);\n perf.log('in runRunner after tunnel.connect');\n\n const testPlanRunner = new TestPlanRunner(customExtensionLocalLocation);\n const results = await testPlanRunner.run(options);\n\n perf.log('before tunnel.disconnect');\n await tunnel.disconnect(options);\n await gridService.keepAlive.end(project);\n perf.log('after tunnel.disconnect and gridService.keepAlive.end');\n\n return results;\n}\n\n/** @param {import('./runOptions').RunnerOptions} options */\nfunction showFreeGridRunWarningIfNeeded(options) {\n if (featureAvailabilityService.shouldShowFreeGridRunWarning(options.gridData?.type)) {\n const CYAN = '\\x1b[36m';\n const UNDERSCORE = '\\x1b[4m';\n const RESET = '\\x1b[0m';\n const MESSAGE = 'Our Free grid offers basic service performance.\\nIf you need faster results, contact us to upgrade your plan and dramatically improve your tests’ run times.';\n console.log(`\\n${UNDERSCORE}${CYAN}${MESSAGE}${RESET}\\n`);\n }\n}\n\n/**\n * This method initializes the Testim CLI with all the information it needs to start executing, it takes care of:\n *\n * - Reporting the user to analytics\n * - Authenticating the user and exchanging their token for a jwt\n * - Sets the grids for the company and validates the user has permission to run the CLI\n * @param {import('./runOptions').RunnerOptions | import('./runOptions').TunnelOptions} options - the run options passed to the CLI, namely the project and token\n */\nasync function init(options) {\n perf.log('start runner init');\n const { project, lightweightMode, useChromeLauncher, mode, disableSockets } = options;\n const featureFlagsReady = featureFlags.fetch();\n const socketConnected = initSocketServices(project, {\n disableResults: disableSockets || Boolean(lightweightMode?.disableResults && (useChromeLauncher || mode !== 'extension')),\n disableRemoteStep: disableSockets || Boolean(lightweightMode?.disableRemoteStep),\n });\n\n featureFlagsReady.catch(() => {}); // suppress unhandled rejection\n Promise.resolve(socketConnected).catch(() => {}); // only sometimes a promise\n\n const { authData, editorConfig, companyByProjectId, projectById, branchName, allGrids } = await initializeUserWithAuth(options);\n\n validateOptionsForCompany(options, companyByProjectId);\n await Promise.all([featureFlagsReady, socketConnected]);\n\n if (options.browser && featureFlags.flags.dec2022eolBrowsers.isEnabled()) {\n const browser = utils.getBrowserInfo(options.browser);\n if (browser.eol) {\n throw new ArgError(`Unsupported browser: ${browser.browserName}`);\n }\n }\n\n perf.log('after featureFlagsReady and socketConnected');\n setSystemInfo(options, editorConfig);\n setCompany(options, companyByProjectId);\n setProject(options, projectById);\n setBranch(options, branchName);\n setAllGrids(options, allGrids);\n setAuthData(options, authData);\n await setSfdcCredential(options);\n\n if (!options.lightweightMode?.disableLabs) {\n await labFeaturesService.loadLabFeatures(projectById.id, companyByProjectId.activePlan);\n }\n\n if (options.lightweightMode && options.lightweightMode.type === 'turboMode' && (featureFlags.flags.highSpeedMode.getValue() === 'disabled' || options.company.planType === 'free')) {\n delete options.lightweightMode;\n }\n\n if (options.lightweightMode && options.lightweightMode.type === 'turboMode') {\n // eslint-disable-next-line max-len\n console.log('\\nTurbo mode will ignore step delays. Test artifacts like screenshots and logs will only be saved for failed runs. For more information see our docs: https://help.testim.io/docs/turbo-mode');\n }\n\n gridService.keepAlive.start(project);\n analyticsIdentify(project);\n await setMockNetworkRules(options);\n await setGrid(options);\n showFreeGridRunWarningIfNeeded(options);\n\n const branchToUse = branchService.getCurrentBranch();\n reporter.setOptions(options, branchToUse);\n}\n\nmodule.exports = {\n run: runRunner,\n init,\n};\n","'use strict';\n\nconst { getPackageVersion } = require('../../../testimNpmDriver');\nconst { doLogin } = require('../../../credentialsManager');\nconst { getStartedWithStart } = require('../../../cliAgentMode');\n\nmodule.exports = (app) => {\n /**\n * root endpoint\n */\n app.get('/', (req, res) => {\n const isStartMode = getStartedWithStart();\n\n return res.status(200).json({ success: true, isTestimAgent: true, startMode: isStartMode });\n });\n\n /**\n * Get version route\n */\n app.get('/version', (req, res) => {\n res.status(200).json({\n node: process.version,\n app: getPackageVersion(),\n });\n });\n\n app.get('/loginInfo', (req, res) => {\n try {\n const projects = JSON.parse(Buffer.from(req.query.info, 'base64').toString());\n doLogin({ overwriteExisting: false, projects });\n res.status(200).end();\n } catch (err) {\n res.status(400).end();\n }\n });\n};\n","'use strict';\n\nconst express = require('express');\n\nconst router = express.Router();\nconst logger = require('../../../commons/logger').getLogger('codim-router');\n\nconst {\n findTests,\n getLocalLocators,\n getLocalLocatorContents,\n saveTest,\n saveLocators,\n compileFunctionsLibrary,\n} = require('./service');\n\n\nrouter.get('/tests', async (req, res) => {\n const tests = await findTests();\n res.json({ tests, success: true });\n});\nrouter.get('/locators', async (req, res) => {\n const locators = await getLocalLocators();\n const contents = await getLocalLocatorContents(locators, req.query.full);\n res.json({ locators, contents, success: true });\n});\nrouter.post('/locators', async (req, res) => {\n if (!req.body) {\n res.status(400).send({ success: false, reason: 'missing body' });\n return;\n }\n if (!req.body.locators) {\n res.status(400).send({ success: false, reason: 'missing locators' });\n return;\n }\n\n const { locators, mergeIntoExisting } = req.body;\n\n await saveLocators(locators, { mergeIntoExisting: mergeIntoExisting || false });\n res.status(200).send({ success: true });\n});\n\nrouter.get('/compile', async (req, res) => {\n try {\n const code = await compileFunctionsLibrary(req.body.name);\n res.send({ success: true, code });\n } catch (e) {\n logger.error(e);\n res.json({ success: false, reason: e.message });\n }\n});\n\nrouter.post('/saveTest', async (req, res) => {\n if (!req.body) {\n res.status(400).send({ success: false, reason: 'missing body' });\n return;\n }\n try {\n await saveTest(req.body);\n res.send({ success: true });\n } catch (e) {\n res.json({ success: false, reason: e.message });\n logger.error(e);\n }\n});\n\n\n\nmodule.exports.router = router;\n","'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst os = require('os');\nconst { fork } = require('child_process');\nconst { ClientError, PlaygroundCodeError } = require('../../../errors');\n\nconst CODE_TYPES = ['playwright', 'selenium', 'puppeteer'];\n\nconst runForks = {};\n\nasync function createTempFile(fileName, data, encoding = 'utf8') {\n const fullPath = path.join(os.tmpdir(), fileName);\n await fs.promises.writeFile(fullPath, data, encoding);\n return fullPath;\n}\n\nconst forkAsync = (fileFullPath) => {\n let gotResolved;\n const promise = new Promise(resolve => { gotResolved = resolve; });\n\n const child = fork(fileFullPath, { stdio: ['inherit', 'inherit', 'inherit', 'ipc'] });\n promise.child = child;\n child.on('message', (message) => {\n if (!message) {\n return;\n }\n const { type, error } = message;\n if (error && ['uncaughtException', 'unhandledRejection'].includes(type)) {\n gotResolved({ error: Object.assign(new PlaygroundCodeError(), { innerStack: message.error.stack }) });\n }\n });\n child.on('error', (error) => {\n gotResolved({ error });\n });\n child.on('exit', (exitCode) => {\n gotResolved({ exitCode });\n });\n\n return promise;\n};\n\nasync function runCodeLocally({ code }) {\n const forkId = Date.now();\n try {\n const codeWithExtra = `\n module.paths = ${JSON.stringify(module.paths)};\n process.on('unhandledRejection', (error) => {\n process.send({type: 'unhandledRejection', error: {message: error.message, stack: error.stack}});\n process.exit(1);\n });\n process.on('uncaughtException', (error) => {\n process.send({type: 'uncaughtException', error: {message: error.message, stack: error.stack}});\n process.exit(1);\n });\n ${code};\n `;\n const fileFullPath = await createTempFile(`tst-playground-${Date.now()}.js`, codeWithExtra);\n const promiseExec = forkAsync(fileFullPath);\n runForks[forkId] = promiseExec.child;\n const { error, exitCode } = await promiseExec;\n if (error) {\n throw error;\n }\n if (exitCode !== 0) {\n throw new Error(`Process exited with exit code: ${exitCode}`);\n }\n return undefined;\n } finally {\n if (runForks[forkId]) {\n runForks[forkId].kill();\n delete runForks[forkId];\n }\n }\n}\n\nasync function runPlaygroundTest({ code, type }) {\n if (['playwright', 'puppeteer', 'selenium'].includes(type)) {\n return runCodeLocally({ code });\n }\n throw new ClientError();\n}\n\nasync function stopPlaygroundTest() {\n Object.keys(runForks).forEach((forkId) => {\n runForks[forkId].kill();\n delete runForks[forkId];\n });\n}\n\nmodule.exports = {\n CODE_TYPES,\n runPlaygroundTest,\n stopPlaygroundTest,\n};\n","'use strict';\n\nconst express = require('express');\n\nconst router = express.Router();\nconst logger = require('../../../commons/logger').getLogger('playground-router');\nconst { ClientError, PlaygroundCodeError } = require('../../../errors');\nconst { runPlaygroundTest, stopPlaygroundTest, CODE_TYPES } = require('./service');\nconst { DISABLE_AGENT_ORIGIN_CHECK } = require('../../../commons/config');\n\nconst VALID_HOSTS = ['localhost', 'app.testim.io', 'playground.testim.io', 'staging.testim.io', 'app.staging.testim.cc', 'tta-crm.tricentis.com'];\n\nconst parseUrl = (url) => {\n if (!url) {\n return {};\n }\n try {\n return new URL(url);\n } catch (e) {\n return {};\n }\n};\n\nconst checkReferer = (req, res, next) => {\n if (DISABLE_AGENT_ORIGIN_CHECK) {\n return next();\n }\n const referer = req.headers.referer;\n const origin = req.headers.origin;\n if (!referer && !origin) {\n return res.status(400).send();\n }\n const refererUrl = parseUrl(referer);\n const originUrl = parseUrl(origin);\n if (!VALID_HOSTS.includes(refererUrl.hostname) && !VALID_HOSTS.includes(originUrl.hostname)) {\n return res.status(400).send();\n }\n return next();\n};\n\nrouter.post('/run', [checkReferer], async (req, res) => {\n const body = req.body || {};\n const { code, type } = body;\n\n if (!code || !CODE_TYPES.includes(type)) {\n res.status(400).send({ success: false, reason: 'missing arguments' });\n return;\n }\n\n try {\n await runPlaygroundTest(body);\n res.send({ success: true });\n } catch (e) {\n if (e instanceof ClientError) {\n res.status(404).send({ success: false });\n return undefined;\n }\n if (e instanceof PlaygroundCodeError) {\n res.json({ success: false, type: 'playground-error', stack: e.innerStack });\n return undefined;\n }\n res.json({ success: false, reason: e.message });\n logger.error(e);\n }\n});\n\nrouter.post('/stop', (req, res) => {\n try {\n stopPlaygroundTest();\n res.send({ success: true });\n } catch (e) {\n res.json({ success: false, reason: e.message });\n logger.error(e);\n }\n});\n\nmodule.exports.router = router;\n","/* eslint-disable no-console */\n\n'use strict';\n\nconst express = require('express');\nconst service = require('./service');\nconst { NpmPackageError, TimeoutError } = require('../../../errors');\nconst logger = require('../../../commons/logger').getLogger('cli-router');\nconst chalk = require('chalk');\n\nconst router = express.Router();\n\nrouter.post('/run', async (req, res) => {\n const { code, stepId, incomingParams, context, testResultId, retryIndex, stepResultId, timeout, fileDataUrl } = req.body;\n\n if (typeof code !== 'string' || !stepId || !incomingParams || !context || !testResultId || typeof retryIndex !== 'number' || !stepResultId || typeof timeout !== 'number') {\n res.status(400).json({ success: false, code: 'invalid-params' });\n return;\n }\n\n try {\n const data = await service.runCodeWithPackages(code, stepId, incomingParams, context, testResultId, retryIndex, stepResultId, timeout, fileDataUrl);\n if (!data.success) {\n console.log(chalk.red(data.result.resultValue));\n logger.error('CLI Action Failure', { message: data.result.resultValue });\n }\n res.status(200).json({ success: true, data });\n } catch (err) {\n logger.error('failed to run cli code', { err });\n console.log(chalk.red('failed to run cli code', err));\n res.status(500).json({ success: false, code: 'internal-error' });\n }\n});\n\nrouter.post('/install', async (req, res) => {\n const { stepId, testResultId, retryIndex, packageData, stepResultId, timeout } = req.body;\n\n if (!stepId || typeof packageData !== 'object' || !testResultId || typeof retryIndex !== 'number' || !stepResultId || typeof timeout !== 'number') {\n res.status(400).json({ success: false, code: 'invalid-params' });\n return;\n }\n\n try {\n const data = await service.installPackage(stepId, testResultId, retryIndex, packageData, stepResultId, timeout);\n logger.info('installed packages successfully');\n res.status(200).json({ success: true, data });\n } catch (err) {\n if (err instanceof NpmPackageError) {\n logger.error('failed to install node packages', { err });\n res.status(200).json({ success: false, code: 'invalid-node-package', message: err.message });\n return;\n }\n if (err instanceof TimeoutError) {\n logger.error('timeout installing node package');\n res.status(200).json({ success: false, code: 'timeout' });\n return;\n }\n logger.error('failed to install node packages', { err });\n res.status(500).json({ success: false, code: 'internal-error' });\n }\n});\n\nmodule.exports = router;\n","'use strict';\n\nconst router = require('./router');\nconst service = require('./service');\nconst logger = require('../../../commons/logger').getLogger('cli-service');\n\n// clean local\nservice.cleanLocalPackageInstallFolder()\n .catch(err => logger.warn('failed to clean local package folder', { err }));\n\nmodule.exports = {\n router,\n};\n","// @ts-check\n\n'use strict';\n\nconst express = require('express');\n\nmodule.exports = {\n standaloneBrowserRoutes,\n};\n\n/**\n * @param {{\n webdriverApi: import(\"../../../player/WebdriverioWebDriverApi\")\n}} [testimStandaloneBrowser]\n */\nfunction standaloneBrowserRoutes(testimStandaloneBrowser) {\n const router = express.Router();\n\n router.get('/cdp-url', (req, res) => {\n if (!testimStandaloneBrowser) {\n res.status(503).send({\n error: 'Testim standalone browser is not running',\n });\n\n return;\n }\n\n res.status(200).send({\n url: testimStandaloneBrowser.webdriverApi.cdpUrl,\n });\n });\n\n router.get('/status', (req, res) => {\n if (!testimStandaloneBrowser) {\n res.status(503).send({\n ok: false,\n });\n return;\n }\n\n res.status(200).send({\n ok: true,\n });\n });\n\n return router;\n}\n","'use strict';\n\nconst service = require('../../../stepPlayers/hybridStepPlayback');\nconst express = require('express');\nconst lazyRequire = require('../../../commons/lazyRequire');\nconst logger = require('../../../commons/logger').getLogger('hybrid-router');\n\n/**\n * @param {{\n webdriverApi: import(\"../../../player/WebdriverioWebDriverApi\")\n}} [testimStandaloneBrowser]\n */\nmodule.exports.hybridRoutes = function hybridRoutes(testimStandaloneBrowser) {\n const router = express.Router();\n\n router.post('/run', (req, res) => {\n if (!req.body || !req.body.step) {\n res.status(400).send({\n error: 'Missing step',\n });\n return;\n }\n\n const {\n step,\n context,\n loginData, // is this safe to pass here?\n } = req.body;\n if (!testimStandaloneBrowser.webdriverApi) {\n res.status(503).send({ success: false, reason: 'Testim Agent was not started with Testim Start.' });\n }\n\n // The step run might take very long time, and it will still be valid\n // so we set here unlimited timeout\n req.setTimeout(0);\n\n service.execute(\n step,\n context,\n testimStandaloneBrowser.webdriverApi,\n loginData,\n undefined, // don't pass frameManager,\n 'agent'\n ).then((result) => {\n res.status(200).send(result);\n }).catch(e => {\n logger.error('failed to run hybrid code', { e });\n res.status(500).send(Object.assign({ success: false, error: e }));\n });\n });\n\n router.post('/abort', (req, res) => {\n if (!req.body || !req.body.stepResultId) {\n res.status(400).send({\n error: 'missing stepResultId',\n });\n\n return;\n }\n\n try {\n service.abort(req.body.stepResultId);\n res.status(204).end();\n } catch (e) {\n if (e && e.message === 'No such stepResultId') {\n res.status(400).send({\n error: 'No such stepResultId',\n });\n return;\n }\n\n logger.error('hybrid code abort unexpected error', { e });\n res.status(500).send({\n error: 'unexpected error',\n info: `${e ? e.message : 'N/A'}`,\n });\n }\n });\n\n return router;\n};\n","'use strict';\n\nconst compression = require('compression');\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst cors = require('cors');\nconst { IS_ON_PREM, DISABLE_AGENT_ORIGIN_CHECK } = require('../../commons/config');\n\n\nmodule.exports = function (beforeMiddleware, standaloneBrowserInfo) {\n const app = express();\n beforeMiddleware(app);\n\n // view engine setup\n app.use(bodyParser.urlencoded({ extended: false, limit: '50mb' }));\n app.use(compression());\n app.use(bodyParser.json({ limit: '50mb' }));\n\n /**\n * set cors options\n */\n\n const whitelist = ['http://localhost:3000', 'https://app.testim.io', 'https://staging.testim.io', 'https://playground.testim.io',\n 'https://app.staging.testim.cc', 'chrome-extension://pebeiooilphfmbohdbhbomomkkoghoia', 'https://tta-crm.tricentis.com'];\n const corsOptions = {\n methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'],\n allowedHeaders: ['Content-Type', 'Authorization'],\n credentials: true,\n maxAge: 86400,\n origin: (IS_ON_PREM || DISABLE_AGENT_ORIGIN_CHECK) ? '*' : whitelist,\n };\n app.use('*', cors(corsOptions));\n\n // Routes\n require('./general')(app);\n\n app.use('/files', require('./codim/router').router);\n\n app.use('/playground', require('./playground/router').router);\n\n const cliJsCode = require('./cliJsCode');\n app.use('/cliJs', cliJsCode.router);\n\n app.use('/standalone-browser',\n require('./standalone-browser/registerRoutes').standaloneBrowserRoutes(standaloneBrowserInfo)\n );\n\n app.use('/hybrid', require('./hybrid/registerRoutes').hybridRoutes(standaloneBrowserInfo));\n\n // catch 404\n app.use((req, res) => {\n res.status(404).send('Endpoint Not Found');\n });\n\n return app;\n};\n","'use strict';\n\nconst { ArgError } = require('../errors');\nconst testimCustomToken = require('../commons/testimCustomToken');\nconst lazyRequire = require('../commons/lazyRequire');\nconst { prepareChromeDriver } = require('../commons/prepareRunnerAndTestimStartUtils');\n\nmodule.exports = {\n init,\n};\n\n/**\n *\n * @param {*} param0\n * @param {{\n webdriverApi: import(\"../player/WebdriverioWebDriverApi\")\n}} [testimStandaloneBrowser]\n*/\nasync function init({\n agentPort,\n agentBind,\n project,\n token,\n installPlaygroundPlaywrightDeps,\n installPlaygroundPuppeteerDeps,\n installPlaygroundSeleniumDeps,\n}, testimStandaloneBrowser) {\n await installExternalPackages({\n installPlaygroundPlaywrightDeps,\n installPlaygroundPuppeteerDeps,\n installPlaygroundSeleniumDeps,\n project,\n });\n await initServer({\n agentPort,\n agentBind,\n project,\n token,\n }, testimStandaloneBrowser);\n}\n\n/**\n *\n * @param {*} param0\n * @param {{\n webdriverApi: import(\"../player/WebdriverioWebDriverApi\")\n }} [testimStandaloneBrowser]\n */\nfunction initServer({\n agentPort, agentBind, project, token,\n}, testimStandaloneBrowser) {\n return new Promise((resolve, reject) => {\n /**\n * Init testim auth for making services request.\n */\n let initFn = () => { };\n if (project) {\n testimCustomToken.init(project, token);\n initFn = (app) => {\n app.use((req, res, next) => {\n req.project = project;\n next();\n });\n };\n }\n\n const app = require('./routers')(initFn, testimStandaloneBrowser);\n const http = require('http');\n\n /**\n * Create HTTP server.\n */\n\n const server = http.createServer(app);\n\n /**\n * Listen on provided port, on all network interfaces.\n */\n server.listen(agentPort, agentBind);\n\n // logger.info('Node Version', process.version);\n\n server.on('error', onError);\n server.on('listening', onListening);\n\n /**\n * Event listener for HTTP server \"error\" event.\n */\n\n function onError(error) {\n if (error.syscall !== 'listen') {\n return reject(error);\n }\n\n // handle specific listen errors with friendly messages\n switch (error.code) {\n case 'EACCES':\n case 'EPERM':\n return reject(new ArgError(`Port ${agentPort} requires elevated privileges`));\n case 'EADDRINUSE':\n return reject(new ArgError(`Port ${agentPort} is already in use, is another Testim instance running?`));\n default:\n return reject(error);\n }\n }\n\n /**\n * Event listener for HTTP server \"listening\" event.\n */\n\n function onListening() {\n const { port } = server.address();\n // eslint-disable-next-line no-console\n console.log(`Running on port: ${port}`);\n showStartStopOptions();\n }\n });\n}\n\nfunction installExternalPackages({ installPlaygroundPlaywrightDeps, installPlaygroundPuppeteerDeps, installPlaygroundSeleniumDeps, project }) {\n const all = [];\n if (installPlaygroundPlaywrightDeps) {\n all.push(lazyRequire('playwright'));\n }\n\n if (installPlaygroundPuppeteerDeps) {\n all.push(lazyRequire('puppeteer'));\n }\n\n if (installPlaygroundSeleniumDeps) {\n all.push(lazyRequire('selenium-webdriver'), prepareChromeDriver({ projectId: project }));\n }\n\n return Promise.all(all);\n}\n\n\nasync function showStartStopOptions() {\n const prompts = require('prompts');\n const isMac = process.platform === 'darwin';\n const sigint = 'Ctrl + C';\n await prompts({\n type: 'text',\n message: `Type the word \"stop\" or Press ${sigint}.`,\n validate: x => x.toUpperCase().trim() === 'STOP',\n });\n // eslint-disable-next-line no-console\n console.log('Exiting Testim CLI');\n process.exit(0);\n}\n","/* eslint-disable camelcase */\n// @ts-check\n\n'use strict';\n\nconst path = require('path');\nconst fs = require('fs-extra');\nconst ms = require('ms');\nconst WebSocket = require('ws');\nconst ChromeLauncher = require('chrome-launcher');\nconst config = require('./commons/config');\nconst { ArgError } = require('./errors');\nconst lazyRequire = require('./commons/lazyRequire');\nconst prepareUtils = require('./commons/prepareRunnerAndTestimStartUtils');\nconst { downloadAndSave, unzipFile, getCdpAddressForHost, TESTIM_BROWSER_DIR, promiseFromCallback } = require('./utils');\nconst ora = require('ora');\nconst { downloadAndInstallChromium, CHROMIUM_VERSION } = require('./chromiumInstaller');\n\n\nconst LOG_LEVEL = config.WEBDRIVER_DEBUG ? 'verbose' : 'silent';\nconst EXTENSION_CACHE_TIME = ms('1h');\nconst USER_DATA_DIR = path.join(TESTIM_BROWSER_DIR, 'profile');\n\n// https://github.com/bayandin/chromedriver/blob/5013f2124888c50fff15dc2ff8287288f780b046/chrome_launcher.cc#L105\nconst CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILENAME = 'DevToolsActivePort';\nconst CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILE_PATH = path.join(USER_DATA_DIR, CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILENAME);\n\nmodule.exports = {\n runAgentMode,\n getStartedWithStart,\n};\n\n/** @param {import('./runOptions').AgentModeOptions} options */\nasync function runAgentMode(options) {\n let testimStandaloneBrowser;\n\n await prepareUtils.preparePlayer(options.playerLocation, options.canary);\n\n if (options.startTestimBrowser) {\n await getRidOfPossiblyRunningChromeWithOurDataDir();\n try {\n // Consider moving that into the agent server and add endpoint to start browser?\n testimStandaloneBrowser = await startTestimStandaloneBrowser(options);\n } catch (e) {\n if (e?.message?.includes('user data directory is already in use')) {\n throw new ArgError('Please close all chrome browsers that were opened with \"testim start\" and try again');\n }\n throw e;\n }\n }\n\n const agentServer = require('./agent/server');\n\n if (testimStandaloneBrowser?.webdriverApi) {\n // if we're starting the agent here, pre-load the sessionPlayer so it loads faster\n // on first play\n const LOAD_PLAYER_DELAY = 6000;\n setTimeout(async () => {\n setTimeout(() => require('./player/seleniumTestPlayer'));\n\n const packages = [\n 'webpack',\n // We may build/static analyze functions file to do it here\n // silent full-blown build will require additional work,\n // But actually can be valuable as general speedup if we cache the webpack instance\n // \"puppeteer\",\n // \"selenium-webdriver\"\n // \"playwright\"\n ];\n\n for (const packageToInstall of packages) {\n await lazyRequire(packageToInstall, { silent: true }).catch(() => { });\n }\n }, LOAD_PLAYER_DELAY);\n }\n\n return agentServer.init(\n options,\n // @ts-ignore\n testimStandaloneBrowser\n );\n}\n\nlet startedWithStart = false;\n\nfunction getStartedWithStart() {\n return startedWithStart;\n}\n\nfunction isPidRunning(pid) {\n try {\n return process.kill(pid, 0);\n } catch {\n return false;\n }\n}\n\nasync function startFixedVersionChromium(options, extensionBase64, downloadedExtensionPathUnzipped) {\n const CHROMIUM_PROCESS_INFO_FILE = path.join(TESTIM_BROWSER_DIR, `chrome-${CHROMIUM_VERSION}-process`);\n const CHECK_CHROMIUM_RUNNING_INTERVAL = 3000;\n\n const onBrowserClosed = () => {\n fs.removeSync(CHROMIUM_PROCESS_INFO_FILE);\n // eslint-disable-next-line no-console\n console.log('\\n\\nBrowser session ended');\n process.exit(0);\n };\n\n\n if (fs.existsSync(CHROMIUM_PROCESS_INFO_FILE)) {\n const processInfo = fs.readJSONSync(CHROMIUM_PROCESS_INFO_FILE);\n if (isPidRunning(processInfo.pid)) { // if a previous instance of our browser is still running, use it and exit if it does\n const monitorPidForExit = () => (isPidRunning(processInfo.pid) ? setTimeout(monitorPidForExit, CHECK_CHROMIUM_RUNNING_INTERVAL) : onBrowserClosed());\n monitorPidForExit();\n return {\n webdriverApi: processInfo,\n };\n }\n }\n const chromeBinary = await downloadAndInstallChromium();\n\n if (!(await fs.pathExists(USER_DATA_DIR))) {\n await fs.mkdirp(USER_DATA_DIR);\n }\n const capabilities = buildSeleniumOptions(USER_DATA_DIR, extensionBase64, downloadedExtensionPathUnzipped, chromeBinary);\n const chromeFlags = [\n ...capabilities.desiredCapabilities.chromeOptions.args,\n ...ChromeLauncher.Launcher.defaultFlags().filter(flag => ![\n '--disable-extensions',\n '--disable-component-extensions-with-background-pages', // causes google connect to disallow some accounts (eg gmail accounts get a \"This browser or app may not be secure\" error)\n ].includes(flag)),\n ];\n // Chromium needs API keys to communicate with google APIs (https://www.chromium.org/developers/how-tos/api-keys/)\n // These are keys are keys that were included in some chrome builds\n const envVars = {\n GOOGLE_API_KEY: 'AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k',\n GOOGLE_DEFAULT_CLIENT_ID: '811574891467.apps.googleusercontent.com',\n GOOGLE_DEFAULT_CLIENT_SECRET: 'kdloedMFGdGla2P1zacGjAQh',\n };\n const appUrl = `${options.extensionPath ? 'http://localhost:3000/app/' : 'https://app.testim.io'}?startMode=true`;\n const chrome = await ChromeLauncher.launch({ chromeFlags, startingUrl: appUrl, ignoreDefaultFlags: true, userDataDir: USER_DATA_DIR, chromePath: chromeBinary, envVars });\n const processInfo = { port: chrome.port, pid: chrome.pid, cdpUrl: await getCdpAddressForHost(`localhost:${chrome.port}`) };\n fs.writeJSONSync(CHROMIUM_PROCESS_INFO_FILE, processInfo);\n chrome.process.once('exit', onBrowserClosed);\n chrome.process.once('close', onBrowserClosed);\n return {\n webdriverApi: processInfo,\n };\n}\n\n/** @param {import('./runOptions').AgentModeOptions} options */\nasync function startTestimStandaloneBrowser(options) {\n // After next clickim release we will have also testim-full.zip\n // const fullExtensionUrl = \"https://testimstatic.blob.core.windows.net/extension/testim-full-master.zip\";\n // CDN url\n const fullExtensionUrl = `${config.EDGE_URL}/extension/testim-full-master.zip`;\n const extensionFilename = path.basename(fullExtensionUrl);\n\n const downloadedExtensionPath = path.join(TESTIM_BROWSER_DIR, extensionFilename);\n const downloadedExtensionPathUnzipped = path.join(TESTIM_BROWSER_DIR, `${extensionFilename}__unzipped__`);\n\n let shouldDownloadExtension = !(options.ext || options.extensionPath);\n\n if (shouldDownloadExtension && await fs.pathExists(downloadedExtensionPath)) {\n const stat = await fs.stat(downloadedExtensionPath);\n shouldDownloadExtension = (Date.now() - EXTENSION_CACHE_TIME > stat.mtimeMs);\n }\n await fs.mkdirp(TESTIM_BROWSER_DIR);\n\n if (shouldDownloadExtension) {\n const spinner = ora('Downloading Testim Editor').start();\n await downloadAndSave(fullExtensionUrl, downloadedExtensionPath);\n\n try {\n // Ensure the zip is ok\n await unzipFile(downloadedExtensionPath, downloadedExtensionPathUnzipped);\n } catch (e) {\n // The downloaded zip is corrupted, try re download once\n await fs.remove(downloadedExtensionPath);\n await downloadAndSave(fullExtensionUrl, downloadedExtensionPath);\n try {\n await unzipFile(downloadedExtensionPath, downloadedExtensionPathUnzipped);\n } catch (err) {\n // zip is bad again.\n await fs.remove(downloadedExtensionPath);\n spinner.fail('Failed to download Testim Editor');\n throw new Error('Failed to download Testim Editor');\n }\n } finally {\n if (!options.downloadBrowser) {\n await fs.remove(downloadedExtensionPathUnzipped);\n }\n }\n\n spinner.succeed();\n }\n\n const extensionBase64 = options.extensionPath ? null : (await fs.readFile(options.ext || downloadedExtensionPath)).toString('base64');\n if (options.downloadBrowser) {\n return await startFixedVersionChromium(options, extensionBase64, downloadedExtensionPathUnzipped);\n }\n await prepareUtils.prepareChromeDriver(\n { projectId: options.project },\n // @ts-expect-error not clear where chromeBinaryLocations comes from\n { chromeBinaryLocation: options.chromeBinaryLocations },\n );\n\n // @ts-expect-error not clear where chromeBinaryLocations comes from\n const seleniumOptions = buildSeleniumOptions(USER_DATA_DIR, extensionBase64, options.extensionPath, options.chromeBinaryLocations);\n\n const WebDriver = require('./player/webdriver');\n const { SeleniumPerfStats } = require('./commons/SeleniumPerfStats');\n\n const webdriverApi = new WebDriver();\n webdriverApi.seleniumPerfStats = new SeleniumPerfStats();\n\n // starts chrome via selenium, note this is intentionally initClient and not init to bypass desired capabilities parsing\n const webdriverInitResponse = await webdriverApi.initClient(seleniumOptions);\n\n // example values from webdriverIntRespons\n // webdriverInitResponse.sessionId\n // webdriverInitResponse.value[\"goog:chromeOptions\"].debuggerAddress\n // webdriverInitResponse.chrome.userDataDir;\n\n // require user token, so we can't use it for now\n // const { getEditorUrl } = require('./commons/testimServicesApi');\n\n startedWithStart = true;\n const appUrl = `${options.extensionPath ? 'http://localhost:3000/app/' : 'https://app.testim.io'}?startMode=true`;\n\n await webdriverApi.url(appUrl);\n // save the initial URL we navigated to so we don't consider it the AuT\n webdriverApi.initialUrl = appUrl;\n try {\n //TODO(Benji) do we want this to be exactly getCdpAddressForHost or should this fail less gracefully indicating the agent did not start correctly?\n webdriverApi.cdpUrl = await getCdpAddressForHost(webdriverInitResponse.value['goog:chromeOptions'].debuggerAddress);\n } catch (e) {\n // ignore error\n }\n\n return {\n webdriverApi,\n };\n}\n\n/**\n * @param {string} userDataDir\n * @param {string | null} fullExtensionPath\n */\nfunction buildSeleniumOptions(userDataDir, fullExtensionPath, unpackedExtensionPath, chromeBinaryPath) {\n const extensions = fullExtensionPath ? [fullExtensionPath] : [];\n const args = [\n `--user-data-dir=${userDataDir}`, // crashes chromium, re-enable if using chrome\n '--log-level=OFF',\n '--silent-debugger-extension-api',\n '--no-first-run',\n ];\n if (unpackedExtensionPath) {\n args.push(`--load-extension=${unpackedExtensionPath}`);\n }\n\n return {\n logLevel: LOG_LEVEL,\n desiredCapabilities: {\n chromeOptions: {\n args,\n extensions,\n binary: chromeBinaryPath,\n },\n browserName: 'chrome',\n },\n host: 'localhost',\n port: 9515, // chromedriver port\n };\n}\n\n/**\n * Overview of what we do here:\n * we check if CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILE_PATH is exists\n * If we can read the port & CDP url info from that file.\n * If we can read, but we can't send http request to the devtools server we assume it's closed and just delete the file\n * If we can read and send HTTP request, send CDP command of Browser.close to CDP, and delete the file.\n * If any of these fails we assume we couldn't kill the browser, and the user will get the \"close the running chromes errors down the line\"\n */\nasync function getRidOfPossiblyRunningChromeWithOurDataDir() {\n if (!await fs.pathExists(CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILE_PATH)) {\n return;\n }\n\n try {\n const { webSocketDebuggerUrl } = await readAndValidateChromedriverDevToolsActivePortFile();\n await tryToCloseBrowserWithCDPUrl(webSocketDebuggerUrl);\n await fs.unlink(CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILE_PATH);\n } catch (e) {\n // chrome is probably not really running, we are cool\n if (e && e.message === 'unable to connect to devtools http server') {\n await fs.unlink(CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILE_PATH);\n }\n }\n}\n\nasync function readAndValidateChromedriverDevToolsActivePortFile() {\n /**\n * file content example:\n\n 58938\n /devtools/browser/d4290379-ec08-4d03-a41a-ab9d9d4c36ac\n\n */\n\n const fileContent = await fs.readFile(CHOMEDRIVER_DEVTOOLS_ACTIVE_PORT_FILE_PATH, { encoding: 'utf8' });\n\n const [portLine, browserCDPURLLine] = fileContent.split('\\n').map(line => line.trim());\n\n const port = Number.parseInt(portLine, 10);\n\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error('invalid port number');\n }\n\n if (!browserCDPURLLine.startsWith('/devtools/browser/')) {\n throw new Error('invalid devtools browser url');\n }\n\n const webSocketDebuggerUrl = await getCdpAddressForHost(`localhost:${port}`, 500);\n // invariant check\n if (!webSocketDebuggerUrl.endsWith(browserCDPURLLine)) {\n throw new Error('invariant webSocketDebuggerUrl miss match');\n }\n\n return {\n port,\n webSocketDebuggerUrl,\n };\n}\n\n\n/**\n * @param {string | import(\"url\").URL} webSocketDebuggerUrl\n * @param {number=} timeout\n */\nasync function tryToCloseBrowserWithCDPUrl(webSocketDebuggerUrl, timeout = 100) {\n const websocketConnection = await wsConnectAndOpen(webSocketDebuggerUrl, timeout);\n\n return promiseFromCallback(cb => {\n websocketConnection.send(JSON.stringify({\n id: 0,\n method: 'Browser.close',\n }), cb);\n });\n}\n\n/**\n * @param {string | import(\"url\").URL} webSocketDebuggerUrl\n * @param {number=} timeout\n */\nasync function wsConnectAndOpen(webSocketDebuggerUrl, timeout = 100) {\n const websocket = new WebSocket(webSocketDebuggerUrl, { timeout });\n\n const openPromise = promiseFromCallback((cb) => {\n websocket.once('open', cb);\n }).then(() => {\n websocket.removeAllListeners();\n });\n\n const errorPromise = promiseFromCallback((cb) => {\n websocket.once('error', cb);\n }).catch(() => {\n websocket.close();\n websocket.removeAllListeners();\n });\n\n return Promise.race([openPromise, errorPromise]).then(() => websocket);\n}\n\n","#! /usr/bin/env node\n/* eslint-disable no-console */\n\nimport 'source-map-support/register';\nimport './polyfills';\nimport * as semver from 'semver';\nimport * as perf from './commons/performance-logger';\nimport * as prepareRunner from './commons/prepareRunner';\nimport * as runnerFileCache from './commons/runnerFileCache';\nimport * as prepareRunnerAndTestimStartUtils from './commons/prepareRunnerAndTestimStartUtils';\nimport { EventEmitter } from 'events';\nimport { CLI_MODE } from './commons/constants';\nimport { registerProcessForCleanup } from './processHandler';\nimport { NoArgsError, SeleniumError, ArgError } from './errors';\nimport { onExit, ignoreFailingTestsInExitCode } from './cli/onExit';\nimport { updateRemoteRunFailure } from './commons/testimServicesApi';\nimport { getLogger, setProxyUri, setProjectId } from './commons/logger';\nimport type { RunnerOptions } from './runOptions';\n\nconst logger = getLogger('cli-entry');\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace NodeJS {\n interface Global {\n /** Meta parameters defined globally in build-time */\n readonly meta?: {\n readonly IS_LOCAL: false;\n readonly IS_RELEASE: boolean;\n readonly CIRCLE_BRANCH: string;\n };\n }\n }\n}\n\nfunction checkNodeVersion(engineVersion: string) {\n if (!semver.satisfies(process.version, engineVersion)) {\n throw new ArgError(`Required node version ${engineVersion} not satisfied with current version ${process.version}`);\n }\n\n const currentMinimalNodeVersion = 14;\n const nextMinimalNodeVersion = 16;\n const majorVersion = Number(process.versions.node.split('.')[0]);\n const dateHasPassed = new Date('2023-04-30T00:00:00.000Z') <= new Date();\n\n if (majorVersion < currentMinimalNodeVersion) {\n throw new ArgError(`Testim.io CLI supports Node.js ${currentMinimalNodeVersion} and above, please upgrade to a newer Node.js version`);\n }\n\n if (majorVersion < nextMinimalNodeVersion && dateHasPassed) {\n throw new ArgError(`Testim.io CLI supports Node.js ${nextMinimalNodeVersion} and above, please upgrade to a newer Node.js version`);\n }\n\n if (majorVersion < nextMinimalNodeVersion) {\n console.log('\\x1b[33m%s\\x1b[0m', `Testim.io CLI will stop supporting Node.js < ${nextMinimalNodeVersion} on April 30 2023, please upgrade to a newer Node.js version`);\n }\n}\n\nasync function main() {\n console.log('Starting Testim.io CLI');\n // Lazy load some dependencies which are slow to load, so the UX is not of a slow starting CLI tool\n const [{ default: utils }, { default: options }] = await Promise.all([\n import('./utils'),\n import('./runOptions'),\n import('./fixLocalBuild').catch(() => { /* :( */ }),\n ]);\n perf.log('Starting Testim.io CLI');\n registerProcessForCleanup(onExit);\n\n try {\n checkNodeVersion(utils.getEnginesVersion());\n } catch (err) {\n console.log('Argument Error:', err.message);\n process.exit(1);\n }\n\n try {\n const processedOptions = await options.process();\n perf.log('in main, after options.process');\n setProxyUri((global as any).proxyUri);\n if ('parallel' in processedOptions && processedOptions.parallel > 5) {\n EventEmitter.defaultMaxListeners = processedOptions.parallel * 2;\n }\n setProjectId((processedOptions as RunnerOptions).project);\n runnerFileCache.setEncryptKey!('token' in processedOptions && typeof processedOptions.token === 'string' ? processedOptions.token : 'anonymous_encrypt_key');\n\n if (utils.isInstallLazyDepsMode(processedOptions)) {\n console.log('Lazy dependency installation started');\n const { default: { installAllLazyDependencies } } = await import('./commons/lazyRequire');\n return await installAllLazyDependencies();\n }\n if (utils.isInitCodimMode(processedOptions)) {\n const { init } = await import('./codim/codim-cli');\n return init(processedOptions.initTestProject);\n }\n if (utils.isLoginMode(processedOptions)) {\n return undefined;\n }\n if (utils.isCreatePrefetchedDataMode(processedOptions)) {\n await runnerFileCache.clear();\n await prepareRunner.initializeUserWithAuth(processedOptions);\n const { default: { preloadTests } } = await import('./commons/preloadTests');\n await preloadTests(processedOptions);\n if (!processedOptions.playerRequirePath && processedOptions.mode !== CLI_MODE.EXTENSION) {\n await prepareRunnerAndTestimStartUtils.preparePlayer(processedOptions.playerLocation, processedOptions.canary);\n }\n const res = await runnerFileCache.waitForSave();\n if (res.success) {\n console.log(`created prefetched data at ${runnerFileCache.getCacheFileLocation()}`);\n } else {\n console.error('failed to create prefetch data', res.error);\n }\n return undefined;\n }\n\n const { default: testRunner } = await import('./runner');\n if (utils.isTunnelOnlyMode(processedOptions)) {\n await testRunner.init(processedOptions);\n const { default: { serveTunneling } } = await import('./commons/testimTunnel');\n await serveTunneling(processedOptions);\n return undefined;\n }\n\n if (utils.isAgentMode(processedOptions)) {\n const { default: { runAgentMode } } = await import('./cliAgentMode');\n return runAgentMode(processedOptions);\n }\n\n if (processedOptions.saveRCALocally) {\n const { default: { initServer } } = await import('./services/localRCASaver');\n const { port } = await initServer(processedOptions);\n processedOptions.localRCASaver = `http://localhost:${port}`;\n }\n\n if (processedOptions.exitCodeIgnoreFailingTests) {\n ignoreFailingTestsInExitCode();\n }\n\n perf.log('right before testRunner.init/prepareRunner.prepare');\n const [customExtensionLocalLocation] = await Promise.all([\n prepareRunner.prepare(processedOptions),\n testRunner.init(processedOptions),\n ]);\n perf.log('right after testRunner.init/prepareRunner.prepare');\n return await testRunner.run(processedOptions, customExtensionLocalLocation);\n } catch (err) {\n if (err instanceof NoArgsError) {\n // display help by default\n return undefined;\n }\n const argsForRemoteRunFailure = utils.getArgsOnRemoteRunFailure();\n if (argsForRemoteRunFailure) {\n await updateRemoteRunFailure({ ...argsForRemoteRunFailure, error: err.message }).catch(() => { /* */ });\n }\n if (err instanceof ArgError) {\n console.log('Argument Error:', err.message);\n return err;\n }\n if (err instanceof SeleniumError) {\n console.log('Selenium Error:', err.message);\n return err;\n }\n console.log('Error:', err.message);\n logger.error('runner ended with unexpected error', { err });\n return err;\n }\n}\n\nmain().then(result => {\n if (Array.isArray(result) && result.length === 0) {\n console.log('No tests ran');\n }\n onExit(result);\n});\n\n","require('./Array.prototype.at');\nconst xhr2 = require('../commons/xhr2');\nconst { performance } = require('perf_hooks');\n\nglobal.xhr2 = xhr2;\nglobal.XMLHttpRequest = xhr2;\n\n// TODO [engine:node@>=16.6.0]: can be removed once we support 16+\nglobal.performance = performance;\n\nif (typeof Blob === 'undefined') {\n global.Blob = require('buffer').Blob;\n}\n"],"mappings":"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","names":["exports","module","XMLHttpRequest","os","XMLHttpRequestEventTarget","options","url","buffer","SecurityError","InvalidStateError","NetworkError","SyntaxError","ProgressEvent","XMLHttpRequestUpload","exports","module","log","performance","exports","module","exports","module","projectId","path","exports","module","exports","module","exports","module","options","level","log","config","transports","waitForFlush","config","hostname","exports","module","AbortError","NoArgsError","ArgError","SeleniumError","TimeoutError","path","resolve","exports","module","_","config","promiseMap","logger","exports","module","logger","promiseFromCallback","options","exports","module","path","fsPromises","resolve","location","getRunnerVersion","copyDir","exports","module","options","exports","module","require_constants","exports","module","exports","module","os","_","path","exports","module","os","exports","module","fs","path","getLogger","logger","resolve","getCacheFileLocation","buffer","clear","waitForSave","location","exports","module","path","exports","module","exec","path","logger","fs","resolve","exports","module","exports","module","path","fs","config","ArgError","promiseMap","logger","preparePlayer","location","destFile","ora","exports","module","exports","module","config","ArgError","logger","init","projectId","exports","module","exports","module","_","config","ArgError","getLogger","runnerVersion","logger","options","projectId","executionId","initializeUserWithAuth","path","buffer","updateRemoteRunFailure","perf","path","exports","module","perf","CLI_MODE","initializeUserWithAuth","options","exports","module","path","os","fs","ArgError","ora","exports","module","CLI_MODE","os","prepareRunnerAndTestimStartUtils","initializeUserWithAuth","logger","prepare","options","location","exports","module","getLogger","promiseTimeout","promiseMap","logger","onExit","exports","module","os","path","chalk","exports","module","logger","onExit","exports","module","config","exports","module","config","exports","module","ArgError","_","exports","module","exec","exports","module","path","os","resolve","prompts","ora","exports","module","fs","_","path","chalk","CLI_MODE","NoArgsError","ArgError","projectId","location","options","prompts","path","existsSync","location","exports","module","ora","getLogger","logger","options","response","prompts","validateNpmPackageName","chalk","ora","exec","path","import_errors","exports","module","_","promiseMap","options","exports","module","logger","options","executionId","exports","module","exports","module","options","exports","module","chalk","_","CLI_MODE","options","executionId","projectId","exports","module","fsPromises","options","projectId","testResultObject","exports","module","logger","options","exports","module","options","executionId","exports","module","options","exports","module","logger","options","executionId","exports","module","chalk","semver","config","getLogger","logger","exports","module","ArgError","logger","options","hostname","exports","module","os","childProcess","options","promises","resolve","exports","module","getLogger","promiseTimeout","IS_ON_PREM","logger","projectId","exports","module","os","childProcess","CLI_MODE","ArgError","logger","resolve","executionId","exports","module","ora","getLogger","logger","options","exports","module","_","ArgError","promiseMap","logger","path","projectId","executionId","options","exports","module","exports","module","_","logger","projectId","exports","module","exports","module","fs","fsPromises","path","ora","ArgError","promiseMap","logger","options","projectId","exports","module","_","exports","module","ArgError","fs","os","path","logger","format","resolve","exports","module","_","ArgError","getLogger","logger","runnerVersion","options","projectId","executionId","config","exports","module","executionId","projectId","logger","exports","module","fs","os","path","config","TimeoutError","getLogger","logger","resolve","exports","module","TimeoutError","exports","module","_","fs","path","CLI_MODE","config","logger","executionId","capabilities","_a","_b","options","exports","module","element","exports","module","logger","exports","module","config","logger","perf","path","exports","module","exports","module","dispatchFocus","oldActiveElement","exports","module","_","logger","SeleniumError","dispatchFocus","perf","executionId","locatedElement","element","size","moveActions","exports","module","logger","exports","module","delay","logger","x","y","location","exports","module","options","exports","module","_","logger","resolve","format","fullPageSize","viewPortSize","exports","module","semver","getLogger","getSessionPlayer","logger","options","infos","resolve","tabId","exports","module","exports","module","getSessionPlayer","exports","module","getLogger","getSessionPlayer","logger","location","frameIndex","exports","module","config","logger","projectId","resolve","exports","module","projectId","exports","module","_","logger","EventEmitter","projectId","resolve","options","exports","module","EventEmitter","projectId","exports","module","exports","module","_","totalStepTime","buffer","exports","module","exports","module","getSessionPlayer","exports","module","getLogger","getSessionPlayer","logger","window","driver","exports","module","expectedPosition","isScrollToElement","expectedX","expectedY","shouldScrollLeft","shouldScrollTop","exports","module","elementScrollTo","exports","module","resolve","context","element","exports","module","resolve","element","context","done","delay","exports","module","exports","module","resolve","context","eventData","event","delay","exports","module","_","dispatchFocus","eventMessage","html5DNDCode","exports","module","exports","module","_","getLogger","logger","exports","module","resolve","eventData","context","element","exports","module","dispatchFocus","delay","exports","module","isNativeFunction","eventData","exports","module","_","getLogger","logger","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","element","eventData","exports","module","exports","module","exports","module","getLogger","logger","exports","module","fsPromises","os","promiseMap","getLogger","logger","exports","module","getLogger","logger","options","exports","module","location","exports","module","delay","exports","module","exports","module","resolve","exports","module","exports","module","exports","_","getSessionPlayer","exports","module","_","getLogger","logger","config","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","level","exports","module","level","exports","module","exports","module","getSessionPlayer","options","exports","module","AbortError","exports","_","path","AbortError","buildCodeTests","options","ArgError","require_service","folder","locators","locatorsFilePath","body","name","exports","module","exports","module","onAbort","exports","module","AbortError","onAbort","page","exports","module","AbortError","onAbort","exports","module","_","AbortError","getSessionPlayer","executionId","sessionPlayerInit","resolve","onAbort","exports","module","getLogger","logger","compileFunctionsLibrary","exports","module","exports","module","getLogger","logger","projectId","options","exports","module","projectId","exports","module","projectId","exports","module","_","config","perf","URL","getLogger","CLI_MODE","logger","executionId","options","result","resolve","projectId","exports","module","executionId","options","exports","module","_","logger","projectId","exports","module","logger","projectId","exports","module","CLI_MODE","logger","perf","SeleniumError","options","executionId","projectId","testRunHandler","_a","exports","module","perf","getLogger","getSessionPlayer","logger","sessionPlayerInit","resolve","_a","exports","module","options","exports","module","logger","exports","module","getSessionPlayer","logger","exports","module","config","getSessionPlayer","getLogger","logger","projectId","path","sessionPlayerInit","resolve","exports","module","exports","module","promiseFromCallback","resolve","exports","module","executionId","exports","module","perf","TimeoutError","promiseTimeout","getLogger","logger","executionId","exports","module","delay","perf","logger","exports","module","logger","CLI_MODE","config","perf","executionId","options","resolve","projectId","_a","_b","_c","exports","module","projectId","exports","module","projectId","exports","module","_","path","ArgError","options","buildCodeTests","exports","module","_","Logger","config","perf","ArgError","logger","executionId","projectId","resolve","_a","options","testPlansData","exec","exports","module","_","perf","getLogger","CLI_MODE","ArgError","initializeUserWithAuth","logger","options","projectId","init","exports","module","exports","module","logger","findTests","getLocalLocators","getLocalLocatorContents","saveTest","saveLocators","compileFunctionsLibrary","locators","require_service","exports","module","fs","path","os","resolve","require_router","exports","module","logger","require_router","exports","module","TimeoutError","logger","chalk","exports","module","logger","exports","module","require_registerRoutes","exports","module","logger","exports","module","IS_ON_PREM","exports","module","ArgError","init","resolve","app","prompts","exports","module","path","fs","config","ArgError","promiseFromCallback","ora","options","processInfo","import_errors","options","init"]}