@mablhq/playwright-tools 2.49.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/Globals.js +69 -0
  2. package/LICENSE.txt +29 -0
  3. package/README.md +219 -0
  4. package/api/ApiError.js +11 -0
  5. package/api/atlassian/bitBucketApiClient.js +81 -0
  6. package/api/atlassian/entities/CodeAnnotation.js +9 -0
  7. package/api/atlassian/entities/CodeReport.js +15 -0
  8. package/api/atlassian/entities/PullRequest.js +2 -0
  9. package/api/basicApiClient.js +293 -0
  10. package/api/entities/Browser.js +11 -0
  11. package/api/entities/Email.js +14 -0
  12. package/api/entities/FindStrategy.js +10 -0
  13. package/api/entities/Label.js +2 -0
  14. package/api/entities/VersionedObject.js +2 -0
  15. package/api/entities/Workspace.js +2 -0
  16. package/api/featureSet.js +44 -0
  17. package/api/mablApiClient.js +1070 -0
  18. package/api/mablApiClientFactory.js +79 -0
  19. package/api/types.js +10 -0
  20. package/auth/AuthClient.js +38 -0
  21. package/auth/OktaClient.js +97 -0
  22. package/browserEngines/browserEngine.js +41 -0
  23. package/browserEngines/browserEngines.js +14 -0
  24. package/browserEngines/chromiumBrowserEngine.js +177 -0
  25. package/browserEngines/firefoxBrowserEngine.js +134 -0
  26. package/browserEngines/unsupportedBrowserEngine.js +29 -0
  27. package/browserEngines/webkitBrowerEngine.js +50 -0
  28. package/browserLauncher/browser.js +2 -0
  29. package/browserLauncher/browserEvent.js +11 -0
  30. package/browserLauncher/browserLauncher.js +17 -0
  31. package/browserLauncher/browserLauncherEventEmitter.js +2 -0
  32. package/browserLauncher/browserLauncherFactory.js +30 -0
  33. package/browserLauncher/elementHandle.js +30 -0
  34. package/browserLauncher/errors.js +26 -0
  35. package/browserLauncher/frame.js +17 -0
  36. package/browserLauncher/frameBase.js +10 -0
  37. package/browserLauncher/httpRequest.js +2 -0
  38. package/browserLauncher/httpResponse.js +2 -0
  39. package/browserLauncher/jsHandle.js +2 -0
  40. package/browserLauncher/page.js +2 -0
  41. package/browserLauncher/pageEvent.js +17 -0
  42. package/browserLauncher/playwrightBrowserLauncher/browserDelegate.js +2 -0
  43. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumBrowserDelegate.js +61 -0
  44. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumElementHandleDelegate.js +129 -0
  45. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumFrameDelegate.js +24 -0
  46. package/browserLauncher/playwrightBrowserLauncher/chromium/chromiumPageDelegate.js +145 -0
  47. package/browserLauncher/playwrightBrowserLauncher/elementHandleDelegate.js +2 -0
  48. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxBrowserDelegate.js +50 -0
  49. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxElementHandleDelegate.js +11 -0
  50. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxFrameDelegate.js +36 -0
  51. package/browserLauncher/playwrightBrowserLauncher/firefox/firefoxPageDelegate.js +15 -0
  52. package/browserLauncher/playwrightBrowserLauncher/frameDelegate.js +2 -0
  53. package/browserLauncher/playwrightBrowserLauncher/internals.js +2 -0
  54. package/browserLauncher/playwrightBrowserLauncher/nonChromium/nonChromiumAbstractBrowserDelegate.js +15 -0
  55. package/browserLauncher/playwrightBrowserLauncher/nonChromium/nonChromiumAbstractElementHandleDelegate.js +73 -0
  56. package/browserLauncher/playwrightBrowserLauncher/nonChromium/nonChromiumAbstractFrameDelegate.js +13 -0
  57. package/browserLauncher/playwrightBrowserLauncher/nonChromium/nonChromiumAbstractPageDelegate.js +81 -0
  58. package/browserLauncher/playwrightBrowserLauncher/pageDelegate.js +2 -0
  59. package/browserLauncher/playwrightBrowserLauncher/playwrightApiResponse.js +18 -0
  60. package/browserLauncher/playwrightBrowserLauncher/playwrightBrowser.js +259 -0
  61. package/browserLauncher/playwrightBrowserLauncher/playwrightBrowserLauncher.js +97 -0
  62. package/browserLauncher/playwrightBrowserLauncher/playwrightDom.js +319 -0
  63. package/browserLauncher/playwrightBrowserLauncher/playwrightFrame.js +265 -0
  64. package/browserLauncher/playwrightBrowserLauncher/playwrightHttpRequest.js +76 -0
  65. package/browserLauncher/playwrightBrowserLauncher/playwrightHttpResponse.js +26 -0
  66. package/browserLauncher/playwrightBrowserLauncher/playwrightPage.js +377 -0
  67. package/browserLauncher/playwrightBrowserLauncher/simplePlaywrightLogger.js +36 -0
  68. package/browserLauncher/playwrightBrowserLauncher/webkit/webkitBrowserDelegate.js +50 -0
  69. package/browserLauncher/playwrightBrowserLauncher/webkit/webkitElementHandleDelegate.js +16 -0
  70. package/browserLauncher/playwrightBrowserLauncher/webkit/webkitFrameDelegate.js +19 -0
  71. package/browserLauncher/playwrightBrowserLauncher/webkit/webkitPageDelegate.js +15 -0
  72. package/browserLauncher/playwrightBrowserLauncher/wrappers.js +25 -0
  73. package/browserLauncher/types.js +28 -0
  74. package/browserLauncher/utils.js +9 -0
  75. package/cli.js +66 -0
  76. package/commands/applications/applications.js +5 -0
  77. package/commands/applications/applications_cmds/describe.js +21 -0
  78. package/commands/applications/applications_cmds/list.js +56 -0
  79. package/commands/auth/auth.js +5 -0
  80. package/commands/auth/auth_cmds/activate-key.js +38 -0
  81. package/commands/auth/auth_cmds/clear.js +10 -0
  82. package/commands/auth/auth_cmds/info.js +10 -0
  83. package/commands/auth/auth_cmds/login.js +10 -0
  84. package/commands/branches/branches.js +5 -0
  85. package/commands/branches/branches_cmds/create.js +56 -0
  86. package/commands/branches/branches_cmds/describe.js +50 -0
  87. package/commands/branches/branches_cmds/list.js +84 -0
  88. package/commands/branches/branches_cmds/merge.js +56 -0
  89. package/commands/browserTypes.js +20 -0
  90. package/commands/commandUtil/awaitCompletion.js +67 -0
  91. package/commands/commandUtil/branches.js +44 -0
  92. package/commands/commandUtil/codeInsights.js +181 -0
  93. package/commands/commandUtil/describe.js +32 -0
  94. package/commands/commandUtil/fileUtil.js +50 -0
  95. package/commands/commandUtil/interfaces.js +4 -0
  96. package/commands/commandUtil/list.js +70 -0
  97. package/commands/commandUtil/util.js +127 -0
  98. package/commands/commandUtil/versionUtil.js +33 -0
  99. package/commands/config/config.js +5 -0
  100. package/commands/config/config_cmds/configKeys.js +28 -0
  101. package/commands/config/config_cmds/delete.js +29 -0
  102. package/commands/config/config_cmds/get.js +52 -0
  103. package/commands/config/config_cmds/install.js +119 -0
  104. package/commands/config/config_cmds/list.js +39 -0
  105. package/commands/config/config_cmds/set.js +80 -0
  106. package/commands/constants.js +160 -0
  107. package/commands/credentials/credentials.js +5 -0
  108. package/commands/credentials/credentials_cmds/list.js +66 -0
  109. package/commands/datatables/datatables.js +5 -0
  110. package/commands/datatables/datatables_cmds/create.js +61 -0
  111. package/commands/datatables/datatables_cmds/describe.js +17 -0
  112. package/commands/datatables/datatables_cmds/export.js +86 -0
  113. package/commands/datatables/datatables_cmds/list.js +18 -0
  114. package/commands/datatables/datatables_cmds/scenarios.js +35 -0
  115. package/commands/datatables/datatables_cmds/update.js +120 -0
  116. package/commands/datatables/utils.js +145 -0
  117. package/commands/deploy/deploy.js +5 -0
  118. package/commands/deploy/deploy_cmds/awaitDeploymentCompletion.js +100 -0
  119. package/commands/deploy/deploy_cmds/create.js +342 -0
  120. package/commands/deploy/deploy_cmds/describe.js +54 -0
  121. package/commands/deploy/deploy_cmds/executionResultPresenter.js +117 -0
  122. package/commands/deploy/deploy_cmds/list.js +74 -0
  123. package/commands/deploy/deploy_cmds/watch.js +44 -0
  124. package/commands/environments/environments.js +5 -0
  125. package/commands/environments/environments_cmds/build-files.js +5 -0
  126. package/commands/environments/environments_cmds/build-files_cmds/add.js +73 -0
  127. package/commands/environments/environments_cmds/build-files_cmds/list.js +54 -0
  128. package/commands/environments/environments_cmds/build-files_cmds/update.js +71 -0
  129. package/commands/environments/environments_cmds/create.js +153 -0
  130. package/commands/environments/environments_cmds/delete.js +32 -0
  131. package/commands/environments/environments_cmds/describe.js +28 -0
  132. package/commands/environments/environments_cmds/list.js +56 -0
  133. package/commands/environments/environments_cmds/update.js +46 -0
  134. package/commands/environments/environments_cmds/urls.js +5 -0
  135. package/commands/environments/environments_cmds/urls_cmds/add.js +91 -0
  136. package/commands/environments/environments_cmds/urls_cmds/list.js +49 -0
  137. package/commands/flows/flows.js +5 -0
  138. package/commands/flows/flows_cmds/export.js +78 -0
  139. package/commands/flows/flows_cmds/list.js +64 -0
  140. package/commands/internal/internal.js +6 -0
  141. package/commands/link-agents/link-agents.js +5 -0
  142. package/commands/link-agents/link-agents_cmds/delete.js +38 -0
  143. package/commands/link-agents/link-agents_cmds/list.js +131 -0
  144. package/commands/link-agents/link-agents_cmds/terminate.js +31 -0
  145. package/commands/mobile-build-files/mobile-build-files.js +5 -0
  146. package/commands/mobile-build-files/mobile-build-files_cmds/delete.js +31 -0
  147. package/commands/mobile-build-files/mobile-build-files_cmds/download.js +50 -0
  148. package/commands/mobile-build-files/mobile-build-files_cmds/list.js +72 -0
  149. package/commands/mobile-build-files/mobile-build-files_cmds/upload.js +101 -0
  150. package/commands/plans/plans.js +5 -0
  151. package/commands/plans/plans_cmds/describe.js +23 -0
  152. package/commands/plans/plans_cmds/list.js +63 -0
  153. package/commands/test-runs/test-runs.js +5 -0
  154. package/commands/test-runs/test-runs_cmds/export.js +62 -0
  155. package/commands/tests/mobileEmulationUtil.js +46 -0
  156. package/commands/tests/tests.js +5 -0
  157. package/commands/tests/testsUtil.js +538 -0
  158. package/commands/tests/tests_cmds/create.js +130 -0
  159. package/commands/tests/tests_cmds/edit.js +111 -0
  160. package/commands/tests/tests_cmds/export.js +145 -0
  161. package/commands/tests/tests_cmds/import.js +5 -0
  162. package/commands/tests/tests_cmds/import_cmds/import_playwright.js +439 -0
  163. package/commands/tests/tests_cmds/import_cmds/import_selenium.js +295 -0
  164. package/commands/tests/tests_cmds/list.js +94 -0
  165. package/commands/tests/tests_cmds/run-cloud.js +314 -0
  166. package/commands/tests/tests_cmds/run-mobile.js +260 -0
  167. package/commands/tests/tests_cmds/run.js +314 -0
  168. package/commands/tests/tests_cmds/runUtils.js +60 -0
  169. package/commands/tests/tests_cmds/trainerUtil.js +12 -0
  170. package/commands/users/users.js +5 -0
  171. package/commands/users/users_cmds/list.js +58 -0
  172. package/commands/workspaces/workspace_cmds/copy.js +108 -0
  173. package/commands/workspaces/workspace_cmds/describe.js +21 -0
  174. package/commands/workspaces/workspace_cmds/list.js +67 -0
  175. package/commands/workspaces/workspaces.js +5 -0
  176. package/core/entityValidation/environmentsValidation.js +7 -0
  177. package/core/entityValidation/stepValidation.js +15 -0
  178. package/core/execution/ApiTestUtils.js +1060 -0
  179. package/core/execution/MailboxConstants.js +4 -0
  180. package/core/execution/PostmanUtils.js +53 -0
  181. package/core/execution/RunConfig.js +2 -0
  182. package/core/execution/TestResult.js +15 -0
  183. package/core/execution/VariableUtils.js +154 -0
  184. package/core/execution/VariablesSummary.js +2 -0
  185. package/core/execution/basic-types.js +2 -0
  186. package/core/execution/newman-types.js +42 -0
  187. package/core/messaging/actions/MobileTrainingActions.js +17 -0
  188. package/core/messaging/actions/pdfActions.js +27 -0
  189. package/core/messaging/actions/runnerActions.js +18 -0
  190. package/core/messaging/actions/trainingSessionActions.js +38 -0
  191. package/core/messaging/logLineMessaging.js +50 -0
  192. package/core/messaging/messaging.js +130 -0
  193. package/core/messaging/pageMessaging.js +9 -0
  194. package/core/trainer/openUtils.js +47 -0
  195. package/core/trainer/trainingSessions-types.js +35 -0
  196. package/core/trainer/trainingSessions.js +151 -0
  197. package/core/util.js +52 -0
  198. package/coreWebVitals/index.js +77 -0
  199. package/domUtil/index.js +1 -0
  200. package/env/defaultEnv.js +17 -0
  201. package/env/dev.js +17 -0
  202. package/env/env.js +76 -0
  203. package/env/local.js +17 -0
  204. package/env/prod.js +17 -0
  205. package/execution/index.js +8 -0
  206. package/execution/index.js.LICENSE.txt +254 -0
  207. package/execution/runAppiumServer.js +145 -0
  208. package/functions/apiTest/utils.js +47 -0
  209. package/functions/types.js +2 -0
  210. package/functions/utils.js +12 -0
  211. package/http/MablHttpAgent.js +73 -0
  212. package/http/RequestFilteringHttpAgent.js +119 -0
  213. package/http/RequestSecurityError.js +13 -0
  214. package/http/axiosProxyConfig.js +101 -0
  215. package/http/httpUtil.js +73 -0
  216. package/http/requestInterceptor.js +206 -0
  217. package/index.d.ts +241 -0
  218. package/index.js +14 -0
  219. package/mablApi/index.js +1 -0
  220. package/mablscript/MablAction.js +102 -0
  221. package/mablscript/MablStep.js +191 -0
  222. package/mablscript/MablStepV2.js +73 -0
  223. package/mablscript/MablSymbol.js +35 -0
  224. package/mablscript/actions/AwaitDownloadAction.js +14 -0
  225. package/mablscript/actions/AwaitPDFDownloadAction.js +19 -0
  226. package/mablscript/actions/ConditionAction.js +123 -0
  227. package/mablscript/actions/CountAction.js +16 -0
  228. package/mablscript/actions/ExtractAction.js +71 -0
  229. package/mablscript/actions/FindAction.js +301 -0
  230. package/mablscript/actions/GenerateEmailAddressAction.js +14 -0
  231. package/mablscript/actions/GenerateRandomStringAction.js +20 -0
  232. package/mablscript/actions/GetUrlAction.js +22 -0
  233. package/mablscript/actions/GetVariableValue.js +31 -0
  234. package/mablscript/actions/GetViewportAction.js +17 -0
  235. package/mablscript/actions/JavaScriptAction.js +219 -0
  236. package/mablscript/diffing/diffingUtil.js +229 -0
  237. package/mablscript/importer.js +576 -0
  238. package/mablscript/mobile/steps/CreateVariableMobileStep.js +53 -0
  239. package/mablscript/mobile/steps/EnterTextStep.js +45 -0
  240. package/mablscript/mobile/steps/HideKeyboardStep.js +20 -0
  241. package/mablscript/mobile/steps/InstallAppStep.js +22 -0
  242. package/mablscript/mobile/steps/NavigateBackStep.js +20 -0
  243. package/mablscript/mobile/steps/NavigateHomeStep.js +21 -0
  244. package/mablscript/mobile/steps/OpenAppStep.js +22 -0
  245. package/mablscript/mobile/steps/OpenLinkStep.js +19 -0
  246. package/mablscript/mobile/steps/PrepareSessionStep.js +19 -0
  247. package/mablscript/mobile/steps/PushFileStep.js +27 -0
  248. package/mablscript/mobile/steps/ScrollStep.js +87 -0
  249. package/mablscript/mobile/steps/SetOrientationStep.js +20 -0
  250. package/mablscript/mobile/steps/TapStep.js +37 -0
  251. package/mablscript/mobile/steps/UninstallAppStep.js +22 -0
  252. package/mablscript/mobile/steps/actions/MobileFindAction.js +23 -0
  253. package/mablscript/mobile/steps/stepUtil.js +113 -0
  254. package/mablscript/mobile/tests/StepTestsUtil.js +20 -0
  255. package/mablscript/mobile/tests/TestMobileFindDescriptors.js +282 -0
  256. package/mablscript/mobile/tests/steps/CreateVariableMobileStep.mobiletest.js +298 -0
  257. package/mablscript/mobile/tests/steps/EnterTextStep.mobiletest.js +79 -0
  258. package/mablscript/mobile/tests/steps/GeneralHumanization.mobiletest.js +304 -0
  259. package/mablscript/mobile/tests/steps/HideKeyboardStep.mobiletest.js +27 -0
  260. package/mablscript/mobile/tests/steps/InstallAppStep.mobiletest.js +20 -0
  261. package/mablscript/mobile/tests/steps/NavigateBackStep.mobiletest.js +27 -0
  262. package/mablscript/mobile/tests/steps/NavigateHomeStep.mobiletest.js +27 -0
  263. package/mablscript/mobile/tests/steps/OpenLinkStep.mobiletest.js +20 -0
  264. package/mablscript/mobile/tests/steps/PushFileStep.mobiletest.js +55 -0
  265. package/mablscript/mobile/tests/steps/ScrollStep.mobiletest.js +386 -0
  266. package/mablscript/mobile/tests/steps/SetOrientationStep.mobiletest.js +32 -0
  267. package/mablscript/mobile/tests/steps/TapStep.mobiletest.js +57 -0
  268. package/mablscript/mobile/tests/steps/UninstallAppStep.mobiletest.js +20 -0
  269. package/mablscript/steps/AbstractAssertionsAndVariablesStep.js +52 -0
  270. package/mablscript/steps/AccessibilityCheck.js +108 -0
  271. package/mablscript/steps/ActionsUtils.js +18 -0
  272. package/mablscript/steps/AssertStep.js +318 -0
  273. package/mablscript/steps/AssertStepOld.js +159 -0
  274. package/mablscript/steps/AwaitTabStep.js +69 -0
  275. package/mablscript/steps/AwaitUploadsStep.js +26 -0
  276. package/mablscript/steps/ClearCookiesStep.js +26 -0
  277. package/mablscript/steps/ClickAndHoldStep.js +76 -0
  278. package/mablscript/steps/ClickStep.js +58 -0
  279. package/mablscript/steps/CookieUtils.js +54 -0
  280. package/mablscript/steps/CreateVariableStep.js +236 -0
  281. package/mablscript/steps/DatabaseQueryStep.js +28 -0
  282. package/mablscript/steps/DoubleClickStep.js +64 -0
  283. package/mablscript/steps/DownloadStep.js +96 -0
  284. package/mablscript/steps/EchoStep.js +34 -0
  285. package/mablscript/steps/ElseIfConditionStep.js +32 -0
  286. package/mablscript/steps/ElseStep.js +27 -0
  287. package/mablscript/steps/EndStep.js +27 -0
  288. package/mablscript/steps/EnterAuthCodeStep.js +59 -0
  289. package/mablscript/steps/EnterTextStep.js +96 -0
  290. package/mablscript/steps/EvaluateFlowStep.js +51 -0
  291. package/mablscript/steps/EvaluateJavaScriptStep.js +50 -0
  292. package/mablscript/steps/HoverStep.js +63 -0
  293. package/mablscript/steps/IfConditionStep.js +191 -0
  294. package/mablscript/steps/NavigateStep.js +30 -0
  295. package/mablscript/steps/OpenEmailStep.js +46 -0
  296. package/mablscript/steps/ReleaseStep.js +76 -0
  297. package/mablscript/steps/RemoveCookieStep.js +36 -0
  298. package/mablscript/steps/RightClickStep.js +58 -0
  299. package/mablscript/steps/SelectStep.js +82 -0
  300. package/mablscript/steps/SendHttpRequestStep.js +48 -0
  301. package/mablscript/steps/SendKeyStep.js +84 -0
  302. package/mablscript/steps/SetCookieStep.js +70 -0
  303. package/mablscript/steps/SetFilesStep.js +71 -0
  304. package/mablscript/steps/SetViewportStep.js +38 -0
  305. package/mablscript/steps/SwitchContextStep.js +122 -0
  306. package/mablscript/steps/SyntheticStep.js +20 -0
  307. package/mablscript/steps/VisitUrlStep.js +68 -0
  308. package/mablscript/steps/WaitStep.js +37 -0
  309. package/mablscript/steps/WaitUntilStep.js +46 -0
  310. package/mablscript/types/AccessibilityCheckStepDescriptor.js +2 -0
  311. package/mablscript/types/AccessibilityCheckTypes.js +9 -0
  312. package/mablscript/types/AssertionsAndVariablesStepDescriptor.js +2 -0
  313. package/mablscript/types/AwaitTabDescriptor.js +2 -0
  314. package/mablscript/types/AwaitUploadStepDescriptor.js +2 -0
  315. package/mablscript/types/ClearCookiesStepDescriptor.js +2 -0
  316. package/mablscript/types/ClickAndHoldStepDescriptor.js +2 -0
  317. package/mablscript/types/ClickStepDescriptor.js +2 -0
  318. package/mablscript/types/ConditionDescriptor.js +133 -0
  319. package/mablscript/types/CountDescriptor.js +2 -0
  320. package/mablscript/types/CreateVariableStepDescriptor.js +12 -0
  321. package/mablscript/types/DownloadStepDescriptor.js +2 -0
  322. package/mablscript/types/EchoStepDescriptor.js +2 -0
  323. package/mablscript/types/EnterTextStepDescriptor.js +2 -0
  324. package/mablscript/types/EvaluateFlowStepDescriptor.js +2 -0
  325. package/mablscript/types/EvaluateJavaScriptStepDescriptor.js +2 -0
  326. package/mablscript/types/ExtractDescriptor.js +21 -0
  327. package/mablscript/types/GetCurrentLocationDescriptor.js +12 -0
  328. package/mablscript/types/GetVariableDescriptor.js +16 -0
  329. package/mablscript/types/GetViewportDescriptor.js +12 -0
  330. package/mablscript/types/HoverStepDescriptor.js +2 -0
  331. package/mablscript/types/NavigateStepDescriptor.js +7 -0
  332. package/mablscript/types/OpenEmailStepDescriptor.js +2 -0
  333. package/mablscript/types/OperatingSystemDescriptor.js +45 -0
  334. package/mablscript/types/ReleaseStepDescriptor.js +7 -0
  335. package/mablscript/types/RemoveCookieStepDescriptor.js +2 -0
  336. package/mablscript/types/SelectStepDescriptor.js +2 -0
  337. package/mablscript/types/SendHttpRequestTypes.js +2 -0
  338. package/mablscript/types/SendKeyStepDescriptor.js +30 -0
  339. package/mablscript/types/SetCookieStepDescriptor.js +2 -0
  340. package/mablscript/types/SetFilesStepDescriptor.js +2 -0
  341. package/mablscript/types/SetViewportStepDescriptor.js +2 -0
  342. package/mablscript/types/SnippetsDescriptor.js +36 -0
  343. package/mablscript/types/StepDescriptor.js +2 -0
  344. package/mablscript/types/SwitchContextStepDescriptor.js +15 -0
  345. package/mablscript/types/VariableNamespace.js +17 -0
  346. package/mablscript/types/VisitUrlStepDescriptor.js +2 -0
  347. package/mablscript/types/WaitStepDescriptor.js +2 -0
  348. package/mablscript/types/WaitUntilStepDescriptor.js +2 -0
  349. package/mablscript/types/mobile/CreateVariableMobileStepDescriptor.js +9 -0
  350. package/mablscript/types/mobile/EnterTextStepDescriptor.js +2 -0
  351. package/mablscript/types/mobile/HideKeyboardStepDescriptor.js +2 -0
  352. package/mablscript/types/mobile/InstallAppStepDescriptor.js +2 -0
  353. package/mablscript/types/mobile/NavigateBackStepDescriptor.js +2 -0
  354. package/mablscript/types/mobile/NavigateHomeStepDescriptor.js +2 -0
  355. package/mablscript/types/mobile/OpenAppStepDescriptor.js +2 -0
  356. package/mablscript/types/mobile/OpenLinkStepDescriptor.js +2 -0
  357. package/mablscript/types/mobile/PrepareSessionStepDescriptor.js +2 -0
  358. package/mablscript/types/mobile/PushFileDescriptor.js +2 -0
  359. package/mablscript/types/mobile/ScrollStepDescriptor.js +32 -0
  360. package/mablscript/types/mobile/SetOrientationStepDescriptor.js +8 -0
  361. package/mablscript/types/mobile/StepWithMobileFindDescriptor.js +8 -0
  362. package/mablscript/types/mobile/TapStepDescriptor.js +8 -0
  363. package/mablscript/types/mobile/UninstallAppStepDescriptor.js +2 -0
  364. package/mablscriptFind/index.js +2 -0
  365. package/mablscriptFind/index.js.LICENSE.txt +25 -0
  366. package/middleware.js +42 -0
  367. package/mobile/index.js +2 -0
  368. package/mobile/types.js +8 -0
  369. package/observers/ObserverBase.js +11 -0
  370. package/observers/mockObserver.js +47 -0
  371. package/package.json +107 -0
  372. package/popupDismissal/candidate.js +2 -0
  373. package/popupDismissal/index.js +255 -0
  374. package/providers/authenticationProvider.js +254 -0
  375. package/providers/cliConfigProvider.js +271 -0
  376. package/providers/exportRequestProvider.js +196 -0
  377. package/providers/logging/loggingProvider.js +90 -0
  378. package/providers/scmContextInterfaces.js +14 -0
  379. package/providers/scmContextProvider.js +335 -0
  380. package/providers/scmContextProviderV2.js +122 -0
  381. package/providers/types.js +9 -0
  382. package/proxy/index.js +2 -0
  383. package/proxy/index.js.LICENSE.txt +12 -0
  384. package/proxy/lib/xpath.js +1 -0
  385. package/reporters/__tests__/resources/sampleData.js +162 -0
  386. package/reporters/mochAwesome/interfaces.js +2 -0
  387. package/reporters/mochAwesome/mochAwesomeReporter.js +227 -0
  388. package/reporters/reporter.js +46 -0
  389. package/resources/actionabilityCheck.js +160 -0
  390. package/resources/coreWebVitals.js +1 -0
  391. package/resources/mablFind.js +2 -0
  392. package/resources/media/mabl_test_audio.wav +0 -0
  393. package/resources/media/mabl_test_pattern.y4m +3 -0
  394. package/resources/pdf-viewer/EmbeddedPdfHandler.js +1 -0
  395. package/resources/pdf-viewer/embeddedPdfDetection.js +225 -0
  396. package/resources/pdf-viewer/index.html +1 -0
  397. package/resources/pdf-viewer/index.js +2 -0
  398. package/resources/pdf-viewer/libEmbeddedPdfHandler.js +279 -0
  399. package/resources/pdf-viewer/libmablPdfViewer.js +21909 -0
  400. package/resources/pdf-viewer/mabl_attention_move.gif +0 -0
  401. package/resources/pdf-viewer/mabl_error_artwork_Unplugged.gif +0 -0
  402. package/resources/pdf-viewer/pdf.worker.9251738a897f697389be.js +2 -0
  403. package/resources/pdf-viewer/pdf.worker.9e2021092643447a5b9f.js +81 -0
  404. package/resources/popupDismissal.js +1 -0
  405. package/resources/webdriver.js +19 -0
  406. package/socketTunnel/index.js +2 -0
  407. package/socketTunnel/index.js.LICENSE.txt +68 -0
  408. package/upload/index.js +2 -0
  409. package/upload/index.js.LICENSE.txt +27 -0
  410. package/util/CloudStorageWriter.js +45 -0
  411. package/util/FileCache.js +180 -0
  412. package/util/IdentifierUtil.js +57 -0
  413. package/util/InternalMetricsTrackingSingleton.js +36 -0
  414. package/util/Lazy.js +90 -0
  415. package/util/MobileAppFileCache.js +103 -0
  416. package/util/RichPromise.js +53 -0
  417. package/util/TestOutputWriter.js +104 -0
  418. package/util/actionabilityUtil.js +165 -0
  419. package/util/analytics-events.js +14 -0
  420. package/util/analytics.js +176 -0
  421. package/util/asyncUtil.js +61 -0
  422. package/util/browserTestUtils.js +17 -0
  423. package/util/clickUtil.js +68 -0
  424. package/util/downloadUtil.js +87 -0
  425. package/util/encodingUtil.js +50 -0
  426. package/util/fileUploadUtil.js +146 -0
  427. package/util/javaScriptStepMigration.js +115 -0
  428. package/util/jestUtil.js +21 -0
  429. package/util/logUtils.js +131 -0
  430. package/util/markdownUtil.js +125 -0
  431. package/util/postInstallMessage.js +14 -0
  432. package/util/pureUtil.js +175 -0
  433. package/util/resourceUtil.js +90 -0
  434. package/util/timeUtil.js +31 -0
  435. package/utilities.js +7 -0
  436. package/webdriver/index.js +44 -0
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isOidcError = exports.AuthenticationProvider = void 0;
7
+ const open_1 = __importDefault(require("open"));
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const env_1 = require("../env/env");
10
+ const cliConfigProvider_1 = require("./cliConfigProvider");
11
+ const types_1 = require("../api/types");
12
+ const mablApiClientFactory_1 = require("../api/mablApiClientFactory");
13
+ const loggingProvider_1 = require("./logging/loggingProvider");
14
+ const pureUtil_1 = require("../util/pureUtil");
15
+ const OktaClient_1 = require("../auth/OktaClient");
16
+ const axiosProxyConfig_1 = require("../http/axiosProxyConfig");
17
+ const types_2 = require("./types");
18
+ const humanizeDuration = require('humanize-duration');
19
+ const inquirer = require('inquirer');
20
+ const chalk = require('chalk');
21
+ class AuthenticationProvider {
22
+ constructor() {
23
+ this.verbose = false;
24
+ }
25
+ async getOktaClient() {
26
+ if (!this.oktaClient) {
27
+ const client = axios_1.default.create(await (0, axiosProxyConfig_1.currentProxyConfig)());
28
+ this.oktaClient = new OktaClient_1.OktaClient(client);
29
+ }
30
+ return this.oktaClient;
31
+ }
32
+ async getAuthConfigWithAutoRenew() {
33
+ const authConfig = (await cliConfigProvider_1.CliConfigProvider.getCliConfig()).authentication;
34
+ if (authConfig.accessToken) {
35
+ if (this.verbose) {
36
+ loggingProvider_1.logger.info('Found existing access token');
37
+ }
38
+ return this.maybeRenewAuthentication(authConfig);
39
+ }
40
+ return authConfig;
41
+ }
42
+ async maybeRenewAuthentication(authConfig) {
43
+ if (!authConfig.refreshToken || authConfig.authType === types_1.AuthType.ApiKey) {
44
+ if (this.verbose) {
45
+ loggingProvider_1.logger.info(`Authentication refresh token ${chalk.red.bold('Not Found')}`);
46
+ }
47
+ return authConfig;
48
+ }
49
+ if (authConfig.authProvider === types_2.AuthProviderType.Auth0) {
50
+ if (this.verbose) {
51
+ loggingProvider_1.logger.info(`Authentication refresh token ${chalk.yellow.bold('not valid')}`);
52
+ }
53
+ return authConfig;
54
+ }
55
+ const nowMilliseconds = Date.now();
56
+ const refreshTokenValidMilliseconds = authConfig.refreshTokenExpirationTimeMilliseconds
57
+ ? authConfig.refreshTokenExpirationTimeMilliseconds - nowMilliseconds
58
+ : undefined;
59
+ if (refreshTokenValidMilliseconds !== undefined &&
60
+ refreshTokenValidMilliseconds <= 0) {
61
+ loggingProvider_1.logger.info(`Login has ${chalk.yellow.bold('expired')}. Please run ${chalk.magenta('mabl auth login')} to log in with your mabl account`);
62
+ process.exit(1);
63
+ }
64
+ if (this.verbose) {
65
+ loggingProvider_1.logger.info('Found valid refresh token');
66
+ }
67
+ const RefreshAccessTokenWindowMilliseconds = 10 * 60 * 1000;
68
+ const accessTokenValidMilliseconds = authConfig.accessTokenExpirationTimeMilliseconds - nowMilliseconds;
69
+ if (this.verbose) {
70
+ if (accessTokenValidMilliseconds > 0) {
71
+ loggingProvider_1.logger.info(`Existing access token expires in [${chalk.magenta.bold(humanizeExpirationTime(accessTokenValidMilliseconds))}]`);
72
+ }
73
+ else {
74
+ loggingProvider_1.logger.info(`Access token has ${chalk.yellow.bold('expired')}`);
75
+ }
76
+ }
77
+ if (accessTokenValidMilliseconds < RefreshAccessTokenWindowMilliseconds) {
78
+ if (this.verbose) {
79
+ loggingProvider_1.logger.info(`Renewing authorization...`);
80
+ }
81
+ const oktaClient = await this.getOktaClient();
82
+ let newAuthInfo;
83
+ try {
84
+ newAuthInfo = await oktaClient.exchangeRefreshTokenForAccessToken(authConfig.refreshToken);
85
+ }
86
+ catch (error) {
87
+ processAuthorizationError(error, true);
88
+ process.exit(1);
89
+ }
90
+ if (newAuthInfo.error) {
91
+ loggingProvider_1.logger.error(chalk.red.bold(`Could not refresh authentication due to error: ${newAuthInfo.error_description}`));
92
+ process.exit(1);
93
+ }
94
+ if (!newAuthInfo.refresh_token_expires_at &&
95
+ authConfig.refreshTokenExpirationTimeMilliseconds) {
96
+ newAuthInfo.refresh_token_expires_at =
97
+ authConfig.refreshTokenExpirationTimeMilliseconds / 1000;
98
+ }
99
+ await cliConfigProvider_1.CliConfigProvider.setCliAuthInfo(newAuthInfo, nowMilliseconds);
100
+ return (await cliConfigProvider_1.CliConfigProvider.getCliConfig()).authentication;
101
+ }
102
+ return authConfig;
103
+ }
104
+ static async getAuthType() {
105
+ const config = await cliConfigProvider_1.CliConfigProvider.getCliConfig();
106
+ return config.authentication.authType;
107
+ }
108
+ async displayInfo() {
109
+ var _a;
110
+ try {
111
+ const config = await cliConfigProvider_1.CliConfigProvider.getCliConfig();
112
+ if (config.authentication.authType === types_1.AuthType.ApiKey) {
113
+ loggingProvider_1.logger.info(`You are authenticated by ${chalk.magenta.bold('API key')}`);
114
+ return;
115
+ }
116
+ if (!config.email || config.authentication.authType === undefined) {
117
+ loggingProvider_1.logger.info('You are not logged in');
118
+ return;
119
+ }
120
+ loggingProvider_1.logger.info(`Logged in as user [${chalk.magenta.bold(config.email)}]`);
121
+ const expirationMilliseconds = ((_a = config.authentication.refreshTokenExpirationTimeMilliseconds) !== null && _a !== void 0 ? _a : config.authentication.accessTokenExpirationTimeMilliseconds) -
122
+ Date.now();
123
+ if (expirationMilliseconds > 0) {
124
+ loggingProvider_1.logger.info(`Login expires in [${chalk.magenta.bold(humanizeExpirationTime(expirationMilliseconds))}]`);
125
+ }
126
+ else {
127
+ loggingProvider_1.logger.info(`Login has ${chalk.yellow.bold('expired')}`);
128
+ }
129
+ }
130
+ catch (error) {
131
+ loggingProvider_1.logger.error(chalk.red.bold(error));
132
+ process.exit(1);
133
+ }
134
+ }
135
+ async clearAuthentication() {
136
+ try {
137
+ const config = await cliConfigProvider_1.CliConfigProvider.getCliConfig();
138
+ if (!config.email && config.authentication.authType !== types_1.AuthType.ApiKey) {
139
+ loggingProvider_1.logger.info('You are not logged in');
140
+ return;
141
+ }
142
+ await cliConfigProvider_1.CliConfigProvider.clearAuthConfig();
143
+ if (config.email) {
144
+ loggingProvider_1.logger.info(`Logged out user [${chalk.magenta.bold(config.email)}]`);
145
+ }
146
+ else {
147
+ loggingProvider_1.logger.info(`Removed ${chalk.magenta.bold('API key')}`);
148
+ }
149
+ }
150
+ catch (error) {
151
+ loggingProvider_1.logger.error(chalk.red.bold(error));
152
+ process.exit(1);
153
+ }
154
+ }
155
+ async activateApiKey(apiKey) {
156
+ const authInfo = {
157
+ auth_provider: types_2.AuthProviderType.Mabl,
158
+ auth_type: types_1.AuthType.ApiKey,
159
+ api_key: apiKey,
160
+ };
161
+ const requestTimeMilliseconds = Date.now();
162
+ await cliConfigProvider_1.CliConfigProvider.setCliAuthInfo(authInfo, requestTimeMilliseconds);
163
+ }
164
+ async authenticate() {
165
+ const oktaClient = await this.getOktaClient();
166
+ try {
167
+ const { codeChallenge, codeVerifier } = oktaClient.generateCodeChallenge();
168
+ const redirectUri = `${env_1.BASE_APP_URL}/app-code`;
169
+ const authUrl = oktaClient.buildAuthorizationUrl(codeChallenge, redirectUri);
170
+ loggingProvider_1.logger.info(`Your browser has been opened to the following URL for obtaining an authorization code:
171
+
172
+ ${authUrl}
173
+ `);
174
+ await this.openUrl(authUrl);
175
+ const response = await inquirer.prompt([
176
+ {
177
+ type: 'password',
178
+ name: 'authCode',
179
+ message: 'Authorization code:',
180
+ mask: true,
181
+ },
182
+ ]);
183
+ const requestTimeMilliseconds = Date.now();
184
+ let authInfo;
185
+ try {
186
+ authInfo = await oktaClient.validateAuthCode(response.authCode, codeVerifier, redirectUri);
187
+ }
188
+ catch (error) {
189
+ processAuthorizationError(error, false);
190
+ process.exit(1);
191
+ }
192
+ if (authInfo.error) {
193
+ loggingProvider_1.logger.error(chalk.red.bold(`Could not login due to error: ${authInfo.error_description}`));
194
+ process.exit(1);
195
+ }
196
+ await cliConfigProvider_1.CliConfigProvider.setCliAuthInfo(authInfo, requestTimeMilliseconds);
197
+ const userData = await AuthenticationProvider.requestUserInfo(authInfo.access_token);
198
+ const config = await cliConfigProvider_1.CliConfigProvider.getCliConfig();
199
+ config.userId = userData.id;
200
+ config.email = userData.email;
201
+ config.userFullName = userData.name;
202
+ await cliConfigProvider_1.CliConfigProvider.setCliConfig(config);
203
+ loggingProvider_1.logger.info(chalk.green.bold(`Login successful for: ${userData.email}`));
204
+ }
205
+ catch (error) {
206
+ loggingProvider_1.logger.info(chalk.red.bold('Login failed.'));
207
+ loggingProvider_1.logger.error(chalk.red.bold(error));
208
+ process.exit(1);
209
+ }
210
+ }
211
+ openUrl(path) {
212
+ return (0, open_1.default)(path);
213
+ }
214
+ static async requestUserInfo(accessToken) {
215
+ const apiClient = await mablApiClientFactory_1.MablApiClientFactory.createApiClientForAccessToken(accessToken);
216
+ return apiClient.getSelf();
217
+ }
218
+ }
219
+ exports.AuthenticationProvider = AuthenticationProvider;
220
+ function processAuthorizationError(error, isTokenRefresh) {
221
+ var _a;
222
+ const mainErrorMessage = isTokenRefresh ? 'Token refresh' : 'Authorization';
223
+ loggingProvider_1.logger.error(chalk.red.bold(`${mainErrorMessage} failed.`));
224
+ loggingProvider_1.logger.error(chalk.red.bold(error.toString()));
225
+ let hasResponseData = false;
226
+ if (axios_1.default.isAxiosError(error)) {
227
+ const data = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data;
228
+ if (isOidcError(data)) {
229
+ loggingProvider_1.logger.error(chalk.red.bold(`${mainErrorMessage} failed: ${data.error_description} [${data.error}]`));
230
+ hasResponseData = true;
231
+ }
232
+ else if (data) {
233
+ loggingProvider_1.logger.error(chalk.red.bold(`Response data: ${JSON.stringify(data)}`));
234
+ hasResponseData = true;
235
+ }
236
+ }
237
+ if (!hasResponseData) {
238
+ loggingProvider_1.logger.error(chalk.red.bold('No response data'));
239
+ }
240
+ if (isTokenRefresh) {
241
+ loggingProvider_1.logger.error(`Please try again. If the issue persists authenticate again with ${chalk.magenta('mabl auth login')}.`);
242
+ }
243
+ }
244
+ function humanizeExpirationTime(milliseconds) {
245
+ return humanizeDuration(milliseconds, {
246
+ maxDecimalPoints: 0,
247
+ units: ['h', 'm'],
248
+ });
249
+ }
250
+ function isOidcError(err) {
251
+ return ((0, pureUtil_1.isString)(err === null || err === void 0 ? void 0 : err.error) &&
252
+ (0, pureUtil_1.isString)(err === null || err === void 0 ? void 0 : err.error_description));
253
+ }
254
+ exports.isOidcError = isOidcError;
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.__resetIsKeytarAvailable = exports.CliConfigProvider = exports.getAuthConfigFile = exports.getEncryptionKey = exports.AUTH_KEY_NAMES = exports.IS_CONFIG_ENCRYPTED_KEY_NAME = void 0;
30
+ const env_1 = require("../env/env");
31
+ const conf_1 = __importDefault(require("conf"));
32
+ const types_1 = require("./types");
33
+ const types_2 = require("../api/types");
34
+ const configKeys_1 = require("../commands/config/config_cmds/configKeys");
35
+ const httpUtil_1 = require("../http/httpUtil");
36
+ const crypto = __importStar(require("crypto"));
37
+ const loggingProvider_1 = require("./logging/loggingProvider");
38
+ const utilities_1 = require("../utilities");
39
+ const USER_ID_NAME = 'userId';
40
+ const USER_FULL_NAME_NAME = 'userFullName';
41
+ const EMAIL_NAME = 'email';
42
+ const WORKSPACE = 'workspace';
43
+ const AUTH_PROVIDER = 'authProvider';
44
+ const AUTH_TYPE = 'authType';
45
+ const ACCESS_TOKEN_NAME = 'accessToken';
46
+ const REFRESH_TOKEN_NAME = 'refreshToken';
47
+ const ACCESS_TOKEN_EXPIRATION_MILLISECONDS_NAME = 'accessTokenExpirationTimeMilliseconds';
48
+ const REFRESH_TOKEN_EXPIRATION_MILLISECONDS_NAME = `${REFRESH_TOKEN_NAME}ExpirationTimeMilliseconds`;
49
+ exports.IS_CONFIG_ENCRYPTED_KEY_NAME = '_isConfigEncrypted';
50
+ exports.AUTH_KEY_NAMES = [
51
+ AUTH_PROVIDER,
52
+ AUTH_TYPE,
53
+ ACCESS_TOKEN_NAME,
54
+ ACCESS_TOKEN_EXPIRATION_MILLISECONDS_NAME,
55
+ REFRESH_TOKEN_NAME,
56
+ REFRESH_TOKEN_EXPIRATION_MILLISECONDS_NAME,
57
+ USER_FULL_NAME_NAME,
58
+ USER_ID_NAME,
59
+ EMAIL_NAME,
60
+ ];
61
+ let isKeytarAvailable = true;
62
+ async function getEncryptionKey() {
63
+ var _a;
64
+ if ((0, utilities_1.areWeTestingInJest)()) {
65
+ return;
66
+ }
67
+ let maybeEncryptionKey;
68
+ if (isKeytarAvailable) {
69
+ try {
70
+ const keytar = require('keytar');
71
+ maybeEncryptionKey =
72
+ (_a = (await keytar.getPassword(env_1.CONF_FILE_PROJECT_NAME, env_1.ENV))) !== null && _a !== void 0 ? _a : undefined;
73
+ if (!maybeEncryptionKey) {
74
+ maybeEncryptionKey = crypto
75
+ .randomFillSync(Buffer.alloc(48))
76
+ .toString('base64');
77
+ await keytar.setPassword(env_1.CONF_FILE_PROJECT_NAME, env_1.ENV, maybeEncryptionKey);
78
+ }
79
+ }
80
+ catch (error) {
81
+ loggingProvider_1.logger.warn(`Creating finite login session because login auto-renewal is unsupported on this system.`);
82
+ isKeytarAvailable = false;
83
+ }
84
+ }
85
+ return maybeEncryptionKey;
86
+ }
87
+ exports.getEncryptionKey = getEncryptionKey;
88
+ async function getAuthConfigFile() {
89
+ return getNonEncryptedConfig();
90
+ const maybeEncryptionKey = await getEncryptionKey();
91
+ if (!isKeytarAvailable || (0, utilities_1.areWeTestingInJest)()) {
92
+ return getNonEncryptedConfig();
93
+ }
94
+ const conf = new conf_1.default({
95
+ configName: 'access-enc',
96
+ projectName: env_1.CONF_FILE_PROJECT_NAME,
97
+ projectVersion: env_1.CONF_FILE_VERSION,
98
+ accessPropertiesByDotNotation: false,
99
+ encryptionKey: maybeEncryptionKey,
100
+ });
101
+ if (conf.has(exports.IS_CONFIG_ENCRYPTED_KEY_NAME)) {
102
+ return conf;
103
+ }
104
+ const oldConf = getNonEncryptedConfig();
105
+ copyConf(oldConf, conf);
106
+ conf.set(exports.IS_CONFIG_ENCRYPTED_KEY_NAME, true);
107
+ return conf;
108
+ }
109
+ exports.getAuthConfigFile = getAuthConfigFile;
110
+ function shouldStoreRefreshTokens() {
111
+ return isKeytarAvailable || (0, utilities_1.areWeTestingInJest)();
112
+ }
113
+ function getNonEncryptedConfig() {
114
+ return new conf_1.default({
115
+ configName: 'access',
116
+ projectName: env_1.CONF_FILE_PROJECT_NAME,
117
+ projectVersion: env_1.CONF_FILE_VERSION,
118
+ accessPropertiesByDotNotation: false,
119
+ });
120
+ }
121
+ function copyConf(confFrom, confTo) {
122
+ for (const key of [...exports.AUTH_KEY_NAMES, ...configKeys_1.validConfigKeyChoices]) {
123
+ const value = confFrom.get(key);
124
+ if (value !== undefined) {
125
+ confTo.set(key, value);
126
+ }
127
+ }
128
+ }
129
+ class CliConfigProvider {
130
+ static setWorkspace(workspaceId) {
131
+ return setValue(WORKSPACE, workspaceId);
132
+ }
133
+ static clearWorkspace() {
134
+ return clearValue(WORKSPACE);
135
+ }
136
+ static async getWorkspace() {
137
+ return (await getAuthConfigFile()).get(WORKSPACE);
138
+ }
139
+ static async getProxyMode() {
140
+ const proxyMode = await this.getConfigProperty(configKeys_1.configKeys.proxyMode);
141
+ return (0, configKeys_1.isValidProxyMode)(proxyMode) ? proxyMode : 'mabl';
142
+ }
143
+ static async getProxyType() {
144
+ const proxyType = await this.getConfigProperty(configKeys_1.configKeys.proxyType);
145
+ return (0, configKeys_1.isValidProxyType)(proxyType) ? proxyType : 'legacy';
146
+ }
147
+ static getConfigProperty(key) {
148
+ return getValue(propertyKeyToStoredKey(key));
149
+ }
150
+ static clearConfigProperty(key) {
151
+ return clearValue(propertyKeyToStoredKey(key));
152
+ }
153
+ static setConfigProperty(key, value) {
154
+ return setValue(propertyKeyToStoredKey(key), value);
155
+ }
156
+ static async getCliConfig() {
157
+ const config = await getAuthConfigFile();
158
+ const authType = config.get(AUTH_TYPE);
159
+ let authProvider = config.get(AUTH_PROVIDER);
160
+ if (!authProvider && authType !== undefined) {
161
+ authProvider =
162
+ authType === types_2.AuthType.ApiKey
163
+ ? types_1.AuthProviderType.Mabl
164
+ : types_1.AuthProviderType.Auth0;
165
+ }
166
+ const authentication = {
167
+ authProvider,
168
+ authType,
169
+ accessToken: config.get(ACCESS_TOKEN_NAME),
170
+ refreshToken: config.get(REFRESH_TOKEN_NAME),
171
+ accessTokenExpirationTimeMilliseconds: config.get(ACCESS_TOKEN_EXPIRATION_MILLISECONDS_NAME),
172
+ refreshTokenExpirationTimeMilliseconds: config.get(REFRESH_TOKEN_EXPIRATION_MILLISECONDS_NAME),
173
+ };
174
+ const proxyType = await this.getProxyType();
175
+ const httpConfig = {
176
+ sslVerify: httpUtil_1.EXECUTION_ENGINE_SSL_VERIFY,
177
+ proxyType,
178
+ };
179
+ const sslVerifyValue = await this.getConfigProperty(configKeys_1.configKeys.sslVerify);
180
+ if (sslVerifyValue !== undefined) {
181
+ if (typeof sslVerifyValue !== 'boolean') {
182
+ throw new Error(`Invalid proxy sslVerify value`);
183
+ }
184
+ httpConfig.sslVerify = sslVerifyValue;
185
+ }
186
+ const mablHttpConfig = { ...httpConfig };
187
+ const testHttpConfig = { ...httpConfig };
188
+ const proxyHostValue = await this.getConfigProperty(configKeys_1.configKeys.proxy);
189
+ const proxyMode = await this.getProxyMode();
190
+ if (proxyHostValue) {
191
+ if (typeof proxyHostValue !== 'string') {
192
+ throw new Error('Invalid proxy host value');
193
+ }
194
+ if (proxyMode === 'mabl' || proxyMode === 'all') {
195
+ mablHttpConfig.proxyHost = new URL(proxyHostValue);
196
+ }
197
+ if (proxyMode === 'test' || proxyMode === 'all') {
198
+ testHttpConfig.proxyHost = new URL(proxyHostValue);
199
+ }
200
+ }
201
+ return {
202
+ authentication,
203
+ userId: config.get(USER_ID_NAME),
204
+ email: config.get(EMAIL_NAME),
205
+ userFullName: config.get(USER_FULL_NAME_NAME),
206
+ workspace: config.get(WORKSPACE),
207
+ http: { mabl: mablHttpConfig, test: testHttpConfig },
208
+ };
209
+ }
210
+ static clearAuthConfig() {
211
+ exports.AUTH_KEY_NAMES.forEach((keyName) => clearValue(keyName));
212
+ return this.getCliConfig();
213
+ }
214
+ static async setCliConfig(config) {
215
+ var _a, _b, _c, _d, _e, _f;
216
+ await setValue(AUTH_PROVIDER, (_a = config === null || config === void 0 ? void 0 : config.authentication) === null || _a === void 0 ? void 0 : _a.authProvider);
217
+ await setValue(AUTH_TYPE, (_b = config === null || config === void 0 ? void 0 : config.authentication) === null || _b === void 0 ? void 0 : _b.authType);
218
+ await setValue(ACCESS_TOKEN_NAME, (_c = config === null || config === void 0 ? void 0 : config.authentication) === null || _c === void 0 ? void 0 : _c.accessToken);
219
+ await setValue(REFRESH_TOKEN_NAME, (_d = config === null || config === void 0 ? void 0 : config.authentication) === null || _d === void 0 ? void 0 : _d.refreshToken);
220
+ await setValue(ACCESS_TOKEN_EXPIRATION_MILLISECONDS_NAME, (_e = config === null || config === void 0 ? void 0 : config.authentication) === null || _e === void 0 ? void 0 : _e.accessTokenExpirationTimeMilliseconds);
221
+ await setValue(REFRESH_TOKEN_EXPIRATION_MILLISECONDS_NAME, (_f = config === null || config === void 0 ? void 0 : config.authentication) === null || _f === void 0 ? void 0 : _f.refreshTokenExpirationTimeMilliseconds);
222
+ await setValue(USER_ID_NAME, config.userId);
223
+ await setValue(EMAIL_NAME, config.email);
224
+ await setValue(USER_FULL_NAME_NAME, config.userFullName);
225
+ return config;
226
+ }
227
+ static async setCliAuthInfo(authInfo, updateMilliseconds) {
228
+ await setValue(AUTH_TYPE, authInfo === null || authInfo === void 0 ? void 0 : authInfo.auth_type);
229
+ switch (authInfo.auth_type) {
230
+ case types_2.AuthType.Bearer:
231
+ const bearerAuthInfo = authInfo;
232
+ const expirationTimeMilliseconds = updateMilliseconds + bearerAuthInfo.expires_in * 1000;
233
+ await setValue(AUTH_PROVIDER, bearerAuthInfo.auth_provider);
234
+ await setValue(ACCESS_TOKEN_NAME, bearerAuthInfo === null || bearerAuthInfo === void 0 ? void 0 : bearerAuthInfo.access_token);
235
+ await setValue(REFRESH_TOKEN_NAME, bearerAuthInfo === null || bearerAuthInfo === void 0 ? void 0 : bearerAuthInfo.refresh_token);
236
+ await setValue(ACCESS_TOKEN_EXPIRATION_MILLISECONDS_NAME, expirationTimeMilliseconds);
237
+ if (bearerAuthInfo.refresh_token_expires_at) {
238
+ await setValue(REFRESH_TOKEN_EXPIRATION_MILLISECONDS_NAME, bearerAuthInfo.refresh_token_expires_at * 1000);
239
+ }
240
+ return;
241
+ case types_2.AuthType.ApiKey:
242
+ const apiKeyAuthInfo = authInfo;
243
+ await setValue(AUTH_PROVIDER, apiKeyAuthInfo.auth_provider);
244
+ await setValue(ACCESS_TOKEN_NAME, apiKeyAuthInfo.api_key);
245
+ return;
246
+ }
247
+ }
248
+ }
249
+ exports.CliConfigProvider = CliConfigProvider;
250
+ function propertyKeyToStoredKey(key) {
251
+ return `properties.${key}`;
252
+ }
253
+ async function setValue(key, value) {
254
+ if (value === undefined) {
255
+ return clearValue(key);
256
+ }
257
+ if (!shouldStoreRefreshTokens() && key.includes(REFRESH_TOKEN_NAME)) {
258
+ return;
259
+ }
260
+ (await getAuthConfigFile()).set(key, value);
261
+ }
262
+ async function getValue(key) {
263
+ return (await getAuthConfigFile()).get(key);
264
+ }
265
+ async function clearValue(key) {
266
+ (await getAuthConfigFile()).delete(key);
267
+ }
268
+ function __resetIsKeytarAvailable() {
269
+ isKeytarAvailable = true;
270
+ }
271
+ exports.__resetIsKeytarAvailable = __resetIsKeytarAvailable;