ff-automationv2 2.2.30 → 2.2.32-beta.0

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 (265) hide show
  1. package/dist/ai/llmprompts/llmPromptTypes/systemPromptTypes.d.ts +3 -0
  2. package/dist/ai/llmprompts/promptRegistry.js +10 -2
  3. package/dist/ai/llmprompts/systemPrompts/actionExtractorPrompt.js +83 -27
  4. package/dist/ai/llmprompts/systemPrompts/fileVerifyActionExtractorPrompt.d.ts +2 -0
  5. package/dist/ai/llmprompts/systemPrompts/fileVerifyActionExtractorPrompt.js +35 -0
  6. package/dist/ai/llmprompts/systemPrompts/fireflinkElementIndexExtactors.js +35 -0
  7. package/dist/ai/llmprompts/systemPrompts/fireflinkElementIndexExtractor_Mob.js +5 -2
  8. package/dist/ai/llmprompts/systemPrompts/getActionExtractorPrompt.js +4 -2
  9. package/dist/ai/llmprompts/systemPrompts/getActionExtractorPromptMob.js +3 -1
  10. package/dist/ai/llmprompts/systemPrompts/inputContextPrompt.d.ts +2 -0
  11. package/dist/ai/llmprompts/systemPrompts/inputContextPrompt.js +54 -0
  12. package/dist/ai/llmprompts/systemPrompts/mobileKeywordExtractor.js +53 -8
  13. package/dist/ai/llmprompts/systemPrompts/verifyActionExtractorPrompt.js +5 -4
  14. package/dist/ai/llmprompts/systemPrompts/verifyActionExtractorPromptMob.js +1 -1
  15. package/dist/ai/llmprompts/userPrompts/userPrompt.js +2 -0
  16. package/dist/automation/actions/executor.d.ts +14 -6
  17. package/dist/automation/actions/executor.js +968 -251
  18. package/dist/automation/actions/interaction/alert/enterDataToAlert.js +3 -1
  19. package/dist/automation/actions/interaction/alert/getTextPresentOnAlertPopup.js +4 -0
  20. package/dist/automation/actions/interaction/alert/verifyAlertPopUpMessageContainsString.js +1 -1
  21. package/dist/automation/actions/interaction/alert/verifyAlertPopupIsDisplayed.js +1 -1
  22. package/dist/automation/actions/interaction/alert/verifyTextPresentOnAlertPopup.js +1 -1
  23. package/dist/automation/actions/interaction/clear/clearAndEnter.js +6 -3
  24. package/dist/automation/actions/interaction/elementlessActions/getOtp.js +25 -24
  25. package/dist/automation/actions/interaction/enterActions/EnterInputIntoElementFromClipBoardInterface_mob.js +3 -1
  26. package/dist/automation/actions/interaction/enterActions/enterInput.js +5 -2
  27. package/dist/automation/actions/interaction/enterActions/enterInputAndPress.js +5 -2
  28. package/dist/automation/actions/interaction/enterActions/enterUrl.js +5 -2
  29. package/dist/automation/actions/interaction/enterActions/enterusingJs.js +3 -1
  30. package/dist/automation/actions/interaction/enterActions/waitAndEnter.js +5 -2
  31. package/dist/automation/actions/interaction/files/VerifyPDF.d.ts +2 -0
  32. package/dist/automation/actions/interaction/files/VerifyPDF.js +171 -0
  33. package/dist/automation/actions/interaction/get/MOB_GetADBLogsForGivenAppPackage.js +4 -1
  34. package/dist/automation/actions/interaction/get/MOB_GetAllContexts.js +5 -1
  35. package/dist/automation/actions/interaction/get/MOB_GetAllWindowHandles.d.ts +1 -1
  36. package/dist/automation/actions/interaction/get/MOB_GetAllWindowHandles.js +10 -6
  37. package/dist/automation/actions/interaction/get/MOB_GetAltitude.js +5 -1
  38. package/dist/automation/actions/interaction/get/MOB_GetBatteryPercentage.js +5 -1
  39. package/dist/automation/actions/interaction/get/MOB_GetBatteryStatus.d.ts +1 -1
  40. package/dist/automation/actions/interaction/get/MOB_GetBatteryStatus.js +7 -3
  41. package/dist/automation/actions/interaction/get/MOB_GetClipBoardText.js +5 -1
  42. package/dist/automation/actions/interaction/get/MOB_GetCurrentActivity.js +5 -1
  43. package/dist/automation/actions/interaction/get/MOB_GetCurrentAppPackage.js +5 -1
  44. package/dist/automation/actions/interaction/get/MOB_GetCurrentContext.js +5 -1
  45. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceDate.js +5 -1
  46. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSettings.js +5 -1
  47. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceStatus.js +5 -1
  48. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceSystemBars.js +5 -2
  49. package/dist/automation/actions/interaction/get/MOB_GetCurrentDeviceTime.js +5 -1
  50. package/dist/automation/actions/interaction/get/MOB_GetCurrentOrientation.js +5 -1
  51. package/dist/automation/actions/interaction/get/MOB_GetCurrentSessionId.js +5 -1
  52. package/dist/automation/actions/interaction/get/MOB_GetDeviceLocation.js +5 -1
  53. package/dist/automation/actions/interaction/get/MOB_GetDeviceName.js +5 -1
  54. package/dist/automation/actions/interaction/get/MOB_GetDeviceOsVersion.js +5 -1
  55. package/dist/automation/actions/interaction/get/MOB_GetDeviceUdid.js +5 -1
  56. package/dist/automation/actions/interaction/get/MOB_GetHeightOfElement.js +5 -1
  57. package/dist/automation/actions/interaction/get/MOB_GetHeightOfScreen.js +4 -0
  58. package/dist/automation/actions/interaction/get/MOB_GetHourFromCurrentDeviceTime.js +5 -1
  59. package/dist/automation/actions/interaction/get/MOB_GetLatitude.js +5 -1
  60. package/dist/automation/actions/interaction/get/MOB_GetLongitude.js +5 -1
  61. package/dist/automation/actions/interaction/get/MOB_GetMinuteFromCurrentDeviceTime.js +5 -1
  62. package/dist/automation/actions/interaction/get/MOB_GetSecondFromCurrentDeviceTime.js +5 -1
  63. package/dist/automation/actions/interaction/get/MOB_GetSizeOfScreen.js +5 -1
  64. package/dist/automation/actions/interaction/get/MOB_GetSupportedPerformanceDataTypes.js +5 -1
  65. package/dist/automation/actions/interaction/get/MOB_GetTextFromElementAndSetToClipBoard.js +5 -1
  66. package/dist/automation/actions/interaction/get/MOB_GetWidthOfElement.js +5 -1
  67. package/dist/automation/actions/interaction/get/MOB_GetWidthOfScreen.js +5 -1
  68. package/dist/automation/actions/interaction/get/browserWindowGetPosition.js +5 -0
  69. package/dist/automation/actions/interaction/get/getAllBrokenImages.js +9 -0
  70. package/dist/automation/actions/interaction/get/getAllBrokenLinkCount.js +9 -0
  71. package/dist/automation/actions/interaction/get/getAllBrokenLinks.js +10 -1
  72. package/dist/automation/actions/interaction/get/getAllConsoleErrors.js +11 -0
  73. package/dist/automation/actions/interaction/get/getAllConsoleInformation.js +12 -1
  74. package/dist/automation/actions/interaction/get/getAllConsoleLogs.js +11 -1
  75. package/dist/automation/actions/interaction/get/getAllConsoleWarnings.js +12 -1
  76. package/dist/automation/actions/interaction/get/getAllCookieNames.js +6 -1
  77. package/dist/automation/actions/interaction/get/getAllCookieValues.js +6 -1
  78. package/dist/automation/actions/interaction/get/getAllSelectedOptions.js +8 -1
  79. package/dist/automation/actions/interaction/get/getAllTheOptionsFromListBoxAsText.js +4 -1
  80. package/dist/automation/actions/interaction/get/getAllTheOptionsFromListBoxAsTextInSortedOrder.js +4 -1
  81. package/dist/automation/actions/interaction/get/getAllTheSelectedOptionsFromListBoxAsText.js +4 -1
  82. package/dist/automation/actions/interaction/get/getAllWindowHandles.js +5 -1
  83. package/dist/automation/actions/interaction/get/getAttribute.js +19 -14
  84. package/dist/automation/actions/interaction/get/getAudioCurrentPlaybackRate.js +4 -1
  85. package/dist/automation/actions/interaction/get/getAudioCurrentSeekTime.js +4 -1
  86. package/dist/automation/actions/interaction/get/getAudioCurrentVolume.js +4 -1
  87. package/dist/automation/actions/interaction/get/getAudioDecodedByte.js +4 -1
  88. package/dist/automation/actions/interaction/get/getAudioDefaultPlaybackRate.js +4 -1
  89. package/dist/automation/actions/interaction/get/getAudioMediaLength.js +4 -1
  90. package/dist/automation/actions/interaction/get/getAudioMediaSource.js +4 -1
  91. package/dist/automation/actions/interaction/get/getBestPracticesScore.js +11 -3
  92. package/dist/automation/actions/interaction/get/getBrowserCount.js +5 -0
  93. package/dist/automation/actions/interaction/get/getBrowserVersion.js +5 -0
  94. package/dist/automation/actions/interaction/get/getCapabilityNames.js +5 -0
  95. package/dist/automation/actions/interaction/get/getClipBoardText.js +13 -0
  96. package/dist/automation/actions/interaction/get/getCollectiveApiResponseTime.js +4 -1
  97. package/dist/automation/actions/interaction/get/getCollectiveApiStatusCode.js +4 -1
  98. package/dist/automation/actions/interaction/get/getCssValue.js +5 -1
  99. package/dist/automation/actions/interaction/get/getCurrentDayOfTheWeek.js +4 -0
  100. package/dist/automation/actions/interaction/get/getCurrentSecondsFromCurrentSystemTime.js +5 -1
  101. package/dist/automation/actions/interaction/get/getCurrentSystemDate.js +4 -0
  102. package/dist/automation/actions/interaction/get/getCurrentSystemDay.js +5 -1
  103. package/dist/automation/actions/interaction/get/getCurrentSystemMonth.js +5 -1
  104. package/dist/automation/actions/interaction/get/getCurrentSystemTime.js +5 -1
  105. package/dist/automation/actions/interaction/get/getCurrentSystemYear.js +5 -1
  106. package/dist/automation/actions/interaction/get/getCurrentWindowHandle.js +13 -26
  107. package/dist/automation/actions/interaction/get/getDataFromApiRequestHeaderForJsonPath.js +5 -4
  108. package/dist/automation/actions/interaction/get/getDataFromApiResponseForJsonPath.js +5 -4
  109. package/dist/automation/actions/interaction/get/getDateWithGivenFormat.js +13 -16
  110. package/dist/automation/actions/interaction/get/getDriverInstance.js +13 -28
  111. package/dist/automation/actions/interaction/get/getFirstContentfulPaint.js +8 -1
  112. package/dist/automation/actions/interaction/get/getFirstSelectedOption.js +5 -1
  113. package/dist/automation/actions/interaction/get/getFullPaintTime.js +8 -1
  114. package/dist/automation/actions/interaction/get/getHTMLCodeOfPage.js +4 -0
  115. package/dist/automation/actions/interaction/get/getHeightOfBrowserWindow.js +5 -0
  116. package/dist/automation/actions/interaction/get/getHeightOfWebElement.js +4 -1
  117. package/dist/automation/actions/interaction/get/getHourFromCurrentSystemTime.js +4 -0
  118. package/dist/automation/actions/interaction/get/getImplicitTimeOut.js +15 -28
  119. package/dist/automation/actions/interaction/get/getLargestContentfulPaint.js +7 -0
  120. package/dist/automation/actions/interaction/get/getListBoxSize.d.ts +1 -1
  121. package/dist/automation/actions/interaction/get/getListBoxSize.js +4 -2
  122. package/dist/automation/actions/interaction/get/getListOfElementsFromLocatorTypeLocatorValue.js +7 -2
  123. package/dist/automation/actions/interaction/get/getLocation.js +14 -8
  124. package/dist/automation/actions/interaction/get/getMinuteFromCurrentSystemTime.js +4 -0
  125. package/dist/automation/actions/interaction/get/getNetworkRouteTime.js +7 -0
  126. package/dist/automation/actions/interaction/get/getNumberOfBrokenImages.js +7 -0
  127. package/dist/automation/actions/interaction/get/getNumberOfLinksPresentInCurrentPage.js +5 -0
  128. package/dist/automation/actions/interaction/get/getNumberOfWorkingLinksFromCurrentPage.js +9 -0
  129. package/dist/automation/actions/interaction/get/getOptions.js +4 -1
  130. package/dist/automation/actions/interaction/get/getPageTitle.js +5 -1
  131. package/dist/automation/actions/interaction/get/getPerformanceMetrics.js +12 -1
  132. package/dist/automation/actions/interaction/get/getPwaScore.js +11 -3
  133. package/dist/automation/actions/interaction/get/getRect.js +9 -2
  134. package/dist/automation/actions/interaction/get/getScreenshot.js +13 -28
  135. package/dist/automation/actions/interaction/get/getScreenshotAs.js +14 -44
  136. package/dist/automation/actions/interaction/get/getSeoScore.js +15 -3
  137. package/dist/automation/actions/interaction/get/getSingleApiRequestPayload.js +5 -3
  138. package/dist/automation/actions/interaction/get/getSingleApiResponse.js +9 -8
  139. package/dist/automation/actions/interaction/get/getSingleApiResponseTime.js +9 -9
  140. package/dist/automation/actions/interaction/get/getSingleApiStatusCode.d.ts +1 -1
  141. package/dist/automation/actions/interaction/get/getSingleApiStatusCode.js +10 -17
  142. package/dist/automation/actions/interaction/get/getSize.js +7 -2
  143. package/dist/automation/actions/interaction/get/getSizeOfBrowserWindow.js +5 -4
  144. package/dist/automation/actions/interaction/get/getStringDataFromLocalFile.js +10 -7
  145. package/dist/automation/actions/interaction/get/getSystemProperty.js +6 -4
  146. package/dist/automation/actions/interaction/get/getTagName.js +9 -2
  147. package/dist/automation/actions/interaction/get/getText.js +7 -2
  148. package/dist/automation/actions/interaction/get/getTheFirstSelectedOptionFromListBoxAsText.js +5 -1
  149. package/dist/automation/actions/interaction/get/getTotalNumberOfCookies.js +6 -1
  150. package/dist/automation/actions/interaction/get/getTunnelIdentifier.js +5 -8
  151. package/dist/automation/actions/interaction/get/getURLPresentInAddressBar.js +5 -1
  152. package/dist/automation/actions/interaction/get/getUserHomeDirectory.js +9 -1
  153. package/dist/automation/actions/interaction/get/getValueByCookieName.js +7 -4
  154. package/dist/automation/actions/interaction/get/getValueFromLocalStorage.js +6 -4
  155. package/dist/automation/actions/interaction/get/getValueOfSystemVariable.js +6 -4
  156. package/dist/automation/actions/interaction/get/getVideoCurrentPlaybackRate.js +4 -1
  157. package/dist/automation/actions/interaction/get/getVideoCurrentSeekTime.js +4 -1
  158. package/dist/automation/actions/interaction/get/getVideoCurrentVolume.js +4 -1
  159. package/dist/automation/actions/interaction/get/getVideoDecodedByte.js +4 -1
  160. package/dist/automation/actions/interaction/get/getVideoDefaultPlaybackRate.js +4 -1
  161. package/dist/automation/actions/interaction/get/getVideoMediaLength.js +4 -1
  162. package/dist/automation/actions/interaction/get/getVideoMediaSource.js +5 -1
  163. package/dist/automation/actions/interaction/get/getWidthOfBrowser.js +6 -1
  164. package/dist/automation/actions/interaction/get/getWidthOfWebElement.js +4 -1
  165. package/dist/automation/actions/interaction/get/getWorkingLinksFromCurrentPage.js +10 -1
  166. package/dist/automation/actions/interaction/get/getWrappedElement.js +5 -1
  167. package/dist/automation/actions/interaction/get/getWrappedOptionFromListBoxAsText.d.ts +1 -1
  168. package/dist/automation/actions/interaction/get/getWrappedOptionFromListBoxAsText.js +4 -2
  169. package/dist/automation/actions/interaction/get/getXLocationOfBrowserWindow.js +4 -3
  170. package/dist/automation/actions/interaction/get/getXLocationOfWebElement.js +7 -2
  171. package/dist/automation/actions/interaction/get/getYLocationOfBrowserWindow.js +6 -1
  172. package/dist/automation/actions/interaction/get/getYLocationOfWebElement.js +7 -2
  173. package/dist/automation/actions/interaction/shadowDom/shadowDomEnter.js +2 -0
  174. package/dist/automation/actions/interaction/shadowDom/shadowDomGetText.js +5 -2
  175. package/dist/automation/actions/interaction/verify/MOB_VerifyBatteryLevel.js +1 -1
  176. package/dist/automation/actions/interaction/verify/VerifyAttributeValue.js +2 -2
  177. package/dist/automation/actions/interaction/verify/VerifyBrowserHtmlCodeContainsString.js +1 -1
  178. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowHeight.js +1 -1
  179. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowTitleContainsString.js +1 -1
  180. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowTitleIsString.js +1 -1
  181. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowUrlContainsExpectedUrl.js +1 -1
  182. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowUrlIsString.js +1 -1
  183. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowWidth.js +1 -1
  184. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowXLocation.js +1 -1
  185. package/dist/automation/actions/interaction/verify/VerifyBrowserWindowYLocation.js +1 -1
  186. package/dist/automation/actions/interaction/verify/VerifyCssAttributeValue.js +1 -1
  187. package/dist/automation/actions/interaction/verify/VerifyElementNotContainsText.js +2 -2
  188. package/dist/automation/actions/interaction/verify/VerifyHeightOfWebElement.js +2 -2
  189. package/dist/automation/actions/interaction/verify/VerifyHexCodeForGivenXYCoordinates.js +1 -1
  190. package/dist/automation/actions/interaction/verify/VerifyIfAllCookiesAreDeleted.js +1 -1
  191. package/dist/automation/actions/interaction/verify/VerifyIfCookieNameIsAdded.js +1 -1
  192. package/dist/automation/actions/interaction/verify/VerifyIfCookieNameIsDeleted.js +1 -1
  193. package/dist/automation/actions/interaction/verify/VerifyIfCookieObjectIsPresent.js +1 -1
  194. package/dist/automation/actions/interaction/verify/VerifyIfGivenOptionIsDuplicate.js +1 -1
  195. package/dist/automation/actions/interaction/verify/VerifyIfImageIsBroken.js +1 -1
  196. package/dist/automation/actions/interaction/verify/VerifyIfLinkIsBroken.js +1 -1
  197. package/dist/automation/actions/interaction/verify/VerifyIfLinkIsWorking.js +1 -1
  198. package/dist/automation/actions/interaction/verify/VerifyIfLinksAreBroken.js +1 -1
  199. package/dist/automation/actions/interaction/verify/VerifyIfLinksAreWorking.js +1 -1
  200. package/dist/automation/actions/interaction/verify/VerifyIfOptionWithTextIsDeselected.js +1 -1
  201. package/dist/automation/actions/interaction/verify/VerifyIfOptionWithValueIsDeselected.js +1 -1
  202. package/dist/automation/actions/interaction/verify/VerifyIfOptionWithValueIsSelected.js +1 -1
  203. package/dist/automation/actions/interaction/verify/VerifyIfOptionWithVisibleTextIsSelected.js +1 -1
  204. package/dist/automation/actions/interaction/verify/VerifyIfSpecifiedOptionIsSelected.js +1 -1
  205. package/dist/automation/actions/interaction/verify/VerifyNavigateURL.js +1 -1
  206. package/dist/automation/actions/interaction/verify/VerifyPartialAttributeValue.js +2 -2
  207. package/dist/automation/actions/interaction/verify/VerifyPartialTitleOfCurrentPage.js +1 -1
  208. package/dist/automation/actions/interaction/verify/VerifyTagName.js +1 -1
  209. package/dist/automation/actions/interaction/verify/VerifyThatSpecifiedOptionIsNotSelected.js +1 -1
  210. package/dist/automation/actions/interaction/verify/VerifyTitleInAllPage.js +1 -1
  211. package/dist/automation/actions/interaction/verify/VerifyTitleOfCurrentPage.js +1 -1
  212. package/dist/automation/actions/interaction/verify/VerifyValueOfElementContainsString.js +1 -1
  213. package/dist/automation/actions/interaction/verify/VerifyValueOfElementIsString.js +1 -1
  214. package/dist/automation/actions/interaction/verify/VerifyWidthOfElement.js +2 -2
  215. package/dist/automation/actions/interaction/verify/VerifyXLocationOfElement.js +2 -2
  216. package/dist/automation/actions/interaction/verify/VerifyYLocationOfElement.js +2 -2
  217. package/dist/automation/actions/interaction/verify/checkIfElementIsDisplayed.js +2 -2
  218. package/dist/automation/actions/interaction/verify/verifypartialtext.js +2 -2
  219. package/dist/automation/actions/interaction/verify/verifytext.js +2 -2
  220. package/dist/automation/actions/interface/FireFlinkResponseSchema.d.ts +22 -1
  221. package/dist/automation/actions/interface/FireFlinkResponseSchema.js +18 -4
  222. package/dist/automation/actions/interface/alertActionInterface.d.ts +11 -0
  223. package/dist/automation/actions/interface/clearActionInterface.d.ts +4 -0
  224. package/dist/automation/actions/interface/getActionInterface.d.ts +150 -141
  225. package/dist/automation/actions/interface/getOtpInterface.d.ts +5 -0
  226. package/dist/automation/actions/interface/interactionActionInterface.d.ts +14 -7
  227. package/dist/automation/actions/interface/shadowDomInterface.d.ts +10 -0
  228. package/dist/automation/actions/interface/verifyActionInterface.d.ts +100 -0
  229. package/dist/core/Errors/InvalidFileTypeError.d.ts +5 -0
  230. package/dist/core/Errors/InvalidFileTypeError.js +14 -0
  231. package/dist/core/constants/supportedActions.js +4 -0
  232. package/dist/core/helpers/elementSelectorResolver.d.ts +11 -0
  233. package/dist/core/helpers/elementSelectorResolver.js +102 -0
  234. package/dist/core/helpers/runnerDomPipeline.d.ts +9 -0
  235. package/dist/core/helpers/runnerDomPipeline.js +97 -0
  236. package/dist/core/helpers/runnerKafkaReporter.d.ts +17 -0
  237. package/dist/core/helpers/runnerKafkaReporter.js +71 -0
  238. package/dist/core/helpers/runnerPostActionHelper.d.ts +2 -0
  239. package/dist/core/helpers/runnerPostActionHelper.js +30 -0
  240. package/dist/core/helpers/stepActionInspector.d.ts +5 -0
  241. package/dist/core/helpers/stepActionInspector.js +113 -0
  242. package/dist/core/helpers/visionFallbackHandler.d.ts +3 -0
  243. package/dist/core/helpers/visionFallbackHandler.js +138 -0
  244. package/dist/core/interfaces/actionInterface.d.ts +7 -5
  245. package/dist/core/interfaces/automationRunnerInterface.d.ts +56 -1
  246. package/dist/core/interfaces/fireflinkScriptPayloadInterface.d.ts +2 -0
  247. package/dist/core/interfaces/llmResponseInterface.d.ts +5 -0
  248. package/dist/core/interfaces/promptInterface.d.ts +9 -2
  249. package/dist/core/interfaces/scriptGenrationDataInterface.d.ts +4 -0
  250. package/dist/core/main/actionHandlerFactory.js +37 -7
  251. package/dist/core/main/executionContext.d.ts +2 -1
  252. package/dist/core/main/executionContext.js +7 -5
  253. package/dist/core/main/runAutomationScript.d.ts +1 -0
  254. package/dist/core/main/runAutomationScript.js +390 -1008
  255. package/dist/core/types/llmResponseType.d.ts +2 -2
  256. package/dist/core/types/promptType.d.ts +3 -1
  257. package/dist/core/types/promptType.js +2 -0
  258. package/dist/fireflinkData/fireflinkScript/appendScriptData.js +3 -0
  259. package/dist/utils/browserCap/capability.js +17 -0
  260. package/dist/utils/helpers/getHelper.d.ts +8 -0
  261. package/dist/utils/helpers/getHelper.js +115 -0
  262. package/dist/utils/helpers/platformSyntax.d.ts +1 -1
  263. package/package.json +2 -1
  264. package/dist/ai/llmprompts/systemPrompts/combinedActionExtractorPrompt.d.ts +0 -2
  265. package/dist/ai/llmprompts/systemPrompts/combinedActionExtractorPrompt.js +0 -36
@@ -2,14 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.enterDataToAlert = enterDataToAlert;
4
4
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
5
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
5
6
  async function enterDataToAlert(args) {
6
7
  try {
7
8
  await args.driver.sendAlertText(args.value);
8
9
  (0, appendScriptData_js_1.appendScriptData)({
9
10
  scriptDataAppender: args.scriptDataAppender,
10
11
  nlpName: "EnterDataToAlert",
11
- stepInputs: [args.value],
12
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
12
13
  });
14
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
13
15
  }
14
16
  catch (error) {
15
17
  args.scriptDataAppender.setErrorNLP("EnterDataToAlert");
@@ -2,12 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTextPresentOnAlertPopup = getTextPresentOnAlertPopup;
4
4
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
5
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
5
6
  async function getTextPresentOnAlertPopup(args) {
6
7
  try {
8
+ const text = await args.driver.getAlertText();
7
9
  (0, appendScriptData_js_1.appendScriptData)({
8
10
  scriptDataAppender: args.scriptDataAppender,
9
11
  nlpName: "GetTextPresentOnAlertPopup",
12
+ returnTypeVariableName: args.returnTypeVariableName
10
13
  });
14
+ (0, getHelper_js_1.saveStepInputData)(args, text);
11
15
  }
12
16
  catch (error) {
13
17
  args.scriptDataAppender.setErrorNLP("GetTextPresentOnAlertPopup");
@@ -9,7 +9,7 @@ async function verifyAlertPopUpMessageContainsString(args) {
9
9
  (0, appendScriptData_js_1.appendScriptData)({
10
10
  scriptDataAppender: args.scriptDataAppender,
11
11
  nlpName: "VerifyAlertPopUpMessageContainsString",
12
- stepInputs: [args.value],
12
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value]
13
13
  });
14
14
  }
15
15
  else {
@@ -12,7 +12,7 @@ async function verifyAlertPopupIsDisplayed(args) {
12
12
  (0, appendScriptData_js_1.appendScriptData)({
13
13
  scriptDataAppender: args.scriptDataAppender,
14
14
  nlpName: "VerifyAlertPopupIsDisplayed",
15
- stepInputs: [value],
15
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : value]
16
16
  });
17
17
  }
18
18
  catch (error) {
@@ -9,7 +9,7 @@ async function verifyTextPresentOnAlertPopup(args) {
9
9
  (0, appendScriptData_js_1.appendScriptData)({
10
10
  scriptDataAppender: args.scriptDataAppender,
11
11
  nlpName: "VerifyTextPresentOnAlertPopup",
12
- stepInputs: [args.value],
12
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value]
13
13
  });
14
14
  }
15
15
  else {
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.clearAndEnter = clearAndEnter;
4
4
  const enterActionHelper_js_1 = require("../../../../utils/helpers/enterActionHelper.js");
5
5
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
6
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
6
7
  async function clearAndEnter(args) {
7
8
  const nlpName = args.platform === "ios" ? "IOS_ClearThenEnterInput" : "MOB_ClearThenEnterInput";
8
9
  switch (args.platform) {
@@ -17,7 +18,7 @@ async function clearAndEnter(args) {
17
18
  (0, appendScriptData_js_1.appendScriptData)({
18
19
  scriptDataAppender: args.scriptDataAppender,
19
20
  nlpName: nlpName,
20
- stepInputs: [],
21
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
21
22
  pageDOM: args.pageDOM,
22
23
  elementGetter: args.elementGetter,
23
24
  ffNumber: ffElementNumber,
@@ -26,6 +27,7 @@ async function clearAndEnter(args) {
26
27
  selector: args.selector,
27
28
  platform: args.platform
28
29
  });
30
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
29
31
  }
30
32
  catch (error) {
31
33
  args.scriptDataAppender.setErrorNLP(nlpName);
@@ -42,8 +44,8 @@ async function clearAndEnter(args) {
42
44
  const ffElementNumber = `Fire-Flink-${ffNumber}`;
43
45
  (0, appendScriptData_js_1.appendScriptData)({
44
46
  scriptDataAppender: args.scriptDataAppender,
45
- nlpName: nlpName,
46
- stepInputs: [],
47
+ nlpName: "ClearThenEnterInput",
48
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
47
49
  pageDOM: args.pageDOM,
48
50
  elementGetter: args.elementGetter,
49
51
  ffNumber: ffElementNumber,
@@ -52,6 +54,7 @@ async function clearAndEnter(args) {
52
54
  selector: xpathPath,
53
55
  platform: args.platform
54
56
  });
57
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
55
58
  }
56
59
  catch (error) {
57
60
  args.scriptDataAppender.setErrorNLP("ClearThenEnterInput");
@@ -4,17 +4,18 @@ exports.GetOtpAction = GetOtpAction;
4
4
  const logData_js_1 = require("../../../../utils/logger/logData.js");
5
5
  const child_process_1 = require("child_process");
6
6
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
7
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
7
8
  async function GetOtpAction(args) {
8
9
  try {
9
- const udid = args.driver.capabilities["appium:udid"] || args.driver.capabilities.udid;
10
- const cmdPrefix = udid
11
- ? `${args.adbPath} -s ${udid} shell`
12
- : `${args.adbPath} shell`;
10
+ // const udid = (args.driver.capabilities as any)["appium:udid"] || (args.driver.capabilities as any).udid;
11
+ const cmdPrefix = `${args.adbPath} shell`;
12
+ const timeFrom = Number(args.timeFrom) || 60;
13
+ const waitTime = Number(args.waitTime) || 60;
13
14
  const packageName = (0, child_process_1.execSync)(`${cmdPrefix} cmd role get-role-holders android.app.role.SMS`.trim(), { encoding: "utf8" });
14
15
  logData_js_1.logger.info("the default app is ", packageName);
15
16
  const expectedHeader = args.selector.trim().toLowerCase();
16
17
  const getLatestMatchingSms = () => {
17
- const inboxSms = (0, child_process_1.execSync)(`${cmdPrefix} "content query --uri content://sms/inbox --projection _id:date:address:body --sort 'date DESC'"`, { encoding: "utf8" }).trim();
18
+ const inboxSms = (0, child_process_1.execSync)(`${cmdPrefix} "content query --uri content://sms/inbox --projection _id:date:address:body --sort 'date DESC' | head -n 100"`, { encoding: "utf8" }).trim();
18
19
  const messages = [...inboxSms.matchAll(/(?:^|\r?\n)Row:\s*\d+\s+_id=(\d+),\s*date=(\d+),\s*address=(.*?),\s*body=(.*?)(?=\r?\nRow:|$)/gs)]
19
20
  .map((match) => ({
20
21
  id: match[1],
@@ -26,14 +27,16 @@ async function GetOtpAction(args) {
26
27
  };
27
28
  const existingSms = getLatestMatchingSms();
28
29
  const now = Date.now();
29
- if (existingSms && now - existingSms.date <= (Number(args.timeFrom) * 1000)) {
30
+ if (existingSms && now - existingSms.date <= (timeFrom * 1000)) {
30
31
  const smsBody = existingSms.body;
31
32
  logData_js_1.logger.info("SMS body:", smsBody);
32
33
  let regex;
34
+ let otpValue;
33
35
  if (args.otpExtractor) {
34
36
  const otpResult = await args.otpExtractor(smsBody);
35
37
  if (otpResult?.otp && otpResult.regex) {
36
38
  regex = otpResult.regex;
39
+ otpValue = otpResult.otp;
37
40
  logData_js_1.logger.info("Extracted OTP:", otpResult.otp, "Generated Regex:", otpResult.regex);
38
41
  }
39
42
  else {
@@ -43,21 +46,21 @@ async function GetOtpAction(args) {
43
46
  (0, appendScriptData_js_1.appendScriptData)({
44
47
  scriptDataAppender: args.scriptDataAppender,
45
48
  nlpName: "MOB_FetchOtpFromMessages",
46
- stepInputs: [existingSms.address, args.timeFrom, args.waitTime],
47
- platform: args.platform
48
- });
49
- (0, appendScriptData_js_1.appendScriptData)({
50
- scriptDataAppender: args.scriptDataAppender,
51
- nlpName: "StringSubStringUsingRegex",
52
- stepInputs: [smsBody, regex],
53
- platform: args.platform
49
+ stepInputs: [existingSms.address, timeFrom + "s", waitTime],
50
+ platform: "android",
51
+ returnTypeVariableName: args.returnTypeVariableName
54
52
  });
53
+ (0, getHelper_js_1.saveStepInputData)(args, otpValue || smsBody);
55
54
  return;
56
55
  }
57
56
  const baselineId = existingSms?.id;
58
57
  const pollingStartedAt = now;
59
- const pollingDeadline = pollingStartedAt + (Number(args.waitTime) * 1000);
58
+ const pollingDeadline = pollingStartedAt + (waitTime * 1000);
60
59
  while (Date.now() < pollingDeadline) {
60
+ if (args.isTerminated?.()) {
61
+ logData_js_1.logger.info("OTP polling aborted because session was terminated.");
62
+ return;
63
+ }
61
64
  const latestSms = getLatestMatchingSms();
62
65
  if (latestSms &&
63
66
  latestSms.id !== baselineId &&
@@ -65,11 +68,13 @@ async function GetOtpAction(args) {
65
68
  const smsBody = latestSms.body;
66
69
  logData_js_1.logger.info("SMS body:", smsBody);
67
70
  let regex;
71
+ let otpValue;
68
72
  if (args.otpExtractor) {
69
73
  const otpResult = await args.otpExtractor(smsBody);
70
74
  if (otpResult?.otp && otpResult.regex) {
71
75
  regex = otpResult.regex;
72
76
  regex = regex.replace(/\\+/g, "\\");
77
+ otpValue = otpResult.otp;
73
78
  logData_js_1.logger.info("Extracted OTP:", otpResult.otp, "Generated Regex:", otpResult.regex);
74
79
  }
75
80
  else {
@@ -79,20 +84,16 @@ async function GetOtpAction(args) {
79
84
  (0, appendScriptData_js_1.appendScriptData)({
80
85
  scriptDataAppender: args.scriptDataAppender,
81
86
  nlpName: "MOB_FetchOtpFromMessages",
82
- stepInputs: [latestSms.address, args.timeFrom, args.waitTime],
83
- platform: args.platform
84
- });
85
- (0, appendScriptData_js_1.appendScriptData)({
86
- scriptDataAppender: args.scriptDataAppender,
87
- nlpName: "StringSubStringUsingRegex",
88
- stepInputs: [smsBody, regex],
89
- platform: args.platform
87
+ stepInputs: [latestSms.address, timeFrom + "s", waitTime],
88
+ platform: "android",
89
+ returnTypeVariableName: args.returnTypeVariableName
90
90
  });
91
+ (0, getHelper_js_1.saveStepInputData)(args, otpValue || smsBody);
91
92
  return;
92
93
  }
93
94
  await new Promise((resolve) => setTimeout(resolve, 2000));
94
95
  }
95
- throw new Error(`Timed out waiting up to 60 seconds for an SMS with header: ${args.selector}`);
96
+ throw new Error(`Timed out waiting up to ${waitTime} seconds for an SMS with header: ${args.selector}`);
96
97
  }
97
98
  catch (error) {
98
99
  args.scriptDataAppender.setErrorNLP("getOtp");
@@ -4,6 +4,7 @@ exports.MOB_EnterInputIntoElementFromClipBoard = MOB_EnterInputIntoElementFromCl
4
4
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
5
5
  const enterActionHelper_js_1 = require("../../../../utils/helpers/enterActionHelper.js");
6
6
  const logData_js_1 = require("../../../../utils/logger/logData.js");
7
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
7
8
  async function MOB_EnterInputIntoElementFromClipBoard(args) {
8
9
  try {
9
10
  const { ffNumber, xpathPath } = (0, enterActionHelper_js_1.enterActionHelperMob)(args.pageDOM, args.fireflinkIndex);
@@ -16,7 +17,7 @@ async function MOB_EnterInputIntoElementFromClipBoard(args) {
16
17
  (0, appendScriptData_js_1.appendScriptData)({
17
18
  scriptDataAppender: args.scriptDataAppender,
18
19
  nlpName: "MOB_EnterInputIntoElementFromClipBoard",
19
- stepInputs: [],
20
+ stepInputs: [value],
20
21
  pageDOM: args.pageDOM,
21
22
  elementGetter: args.elementGetter,
22
23
  ffNumber: ffElementNumber,
@@ -25,6 +26,7 @@ async function MOB_EnterInputIntoElementFromClipBoard(args) {
25
26
  selector: args.selector,
26
27
  platform: args.platform
27
28
  });
29
+ (0, getHelper_js_1.saveStepInputData)(args, value);
28
30
  }
29
31
  catch (error) {
30
32
  args.scriptDataAppender.setErrorNLP("MOB_EnterInputIntoElementFromClipBoard");
@@ -37,6 +37,7 @@ exports.enterInput = enterInput;
37
37
  const enterActionHelper_js_1 = require("../../../../utils/helpers/enterActionHelper.js");
38
38
  const logData_js_1 = require("../../../../utils/logger/logData.js");
39
39
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
40
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
40
41
  async function enterInput(args) {
41
42
  const nlpName = args.platform === "ios" ? "IOS_SendKeys" : "MOB_SendKeys";
42
43
  switch (args.platform) {
@@ -69,7 +70,7 @@ async function enterInput(args) {
69
70
  (0, appendScriptData_js_1.appendScriptData)({
70
71
  scriptDataAppender: args.scriptDataAppender,
71
72
  nlpName: nlpName,
72
- stepInputs: [args.value],
73
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
73
74
  pageDOM: args.pageDOM,
74
75
  elementGetter: args.elementGetter,
75
76
  ffNumber: ffElementNumber,
@@ -78,6 +79,7 @@ async function enterInput(args) {
78
79
  selector: args.selector,
79
80
  platform: args.platform
80
81
  });
82
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
81
83
  }
82
84
  catch (error) {
83
85
  args.scriptDataAppender.setErrorNLP(nlpName);
@@ -100,7 +102,7 @@ async function enterInput(args) {
100
102
  (0, appendScriptData_js_1.appendScriptData)({
101
103
  scriptDataAppender: args.scriptDataAppender,
102
104
  nlpName: 'SendKeys',
103
- stepInputs: [args.value],
105
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
104
106
  pageDOM: args.pageDOM,
105
107
  elementGetter: args.elementGetter,
106
108
  ffNumber: ffElementNumber,
@@ -109,6 +111,7 @@ async function enterInput(args) {
109
111
  selector: xpathPath,
110
112
  platform: args.platform
111
113
  });
114
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
112
115
  }
113
116
  catch (error) {
114
117
  args.scriptDataAppender.setErrorNLP("SendKeys");
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.enterInputAndPress = enterInputAndPress;
4
4
  const enterActionHelper_js_1 = require("../../../../utils/helpers/enterActionHelper.js");
5
5
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
6
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
6
7
  async function enterInputAndPress(args) {
7
8
  switch (args.platform) {
8
9
  case "android":
@@ -44,7 +45,7 @@ async function enterInputAndPress(args) {
44
45
  (0, appendScriptData_js_1.appendScriptData)({
45
46
  scriptDataAppender: args.scriptDataAppender,
46
47
  nlpName: "MOB_EnterDataAndPressKey",
47
- stepInputs: [inputValue, keyValue],
48
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : inputValue, keyValue],
48
49
  pageDOM: args.pageDOM,
49
50
  elementGetter: args.elementGetter,
50
51
  ffNumber: ffElementNumber,
@@ -53,6 +54,7 @@ async function enterInputAndPress(args) {
53
54
  selector: args.selector,
54
55
  platform: args.platform
55
56
  });
57
+ (0, getHelper_js_1.saveStepInputData)(args, inputValue || args.value);
56
58
  }
57
59
  catch (error) {
58
60
  args.scriptDataAppender.setErrorNLP("MOB_EnterDataAndPressKey");
@@ -98,7 +100,7 @@ async function enterInputAndPress(args) {
98
100
  (0, appendScriptData_js_1.appendScriptData)({
99
101
  scriptDataAppender: args.scriptDataAppender,
100
102
  nlpName: "EnterDataAndPressKey",
101
- stepInputs: [inputValue, keyValue],
103
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : inputValue, keyValue],
102
104
  pageDOM: args.pageDOM,
103
105
  elementGetter: args.elementGetter,
104
106
  ffNumber: ffElementNumber,
@@ -107,6 +109,7 @@ async function enterInputAndPress(args) {
107
109
  selector: xpathPath,
108
110
  platform: args.platform
109
111
  });
112
+ (0, getHelper_js_1.saveStepInputData)(args, inputValue || args.value);
110
113
  }
111
114
  catch (error) {
112
115
  args.scriptDataAppender.setErrorNLP("EnterDataAndPressKey");
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.enterUrl = enterUrl;
4
4
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
5
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
5
6
  async function enterUrl(args) {
6
7
  const nlpName = args.platform === "ios" ? "IOS_EnterUrl" : "MOB_EnterUrl";
7
8
  switch (args.platform) {
@@ -21,8 +22,9 @@ async function enterUrl(args) {
21
22
  (0, appendScriptData_js_1.appendScriptData)({
22
23
  scriptDataAppender: args.scriptDataAppender,
23
24
  nlpName: nlpName,
24
- stepInputs: [args.value],
25
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
25
26
  });
27
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
26
28
  }
27
29
  catch (error) {
28
30
  args.scriptDataAppender.setErrorNLP(nlpName);
@@ -36,8 +38,9 @@ async function enterUrl(args) {
36
38
  (0, appendScriptData_js_1.appendScriptData)({
37
39
  scriptDataAppender: args.scriptDataAppender,
38
40
  nlpName: 'EnterURL',
39
- stepInputs: [args.value],
41
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
40
42
  });
43
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
41
44
  }
42
45
  catch (error) {
43
46
  args.scriptDataAppender.setErrorNLP("EnterURL");
@@ -4,6 +4,7 @@ exports.enterInputUsingJs = enterInputUsingJs;
4
4
  const enterActionHelper_js_1 = require("../../../../utils/helpers/enterActionHelper.js");
5
5
  const logData_js_1 = require("../../../../utils/logger/logData.js");
6
6
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
7
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
7
8
  async function enterInputUsingJs(args) {
8
9
  try {
9
10
  const { ffNumber, xpathPath } = (0, enterActionHelper_js_1.enterActionHelper)(args.pageDOM, args.fireflinkIndex);
@@ -20,7 +21,7 @@ async function enterInputUsingJs(args) {
20
21
  (0, appendScriptData_js_1.appendScriptData)({
21
22
  scriptDataAppender: args.scriptDataAppender,
22
23
  nlpName: "EnterDataAndPressKey",
23
- stepInputs: [args.value],
24
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : args.value],
24
25
  pageDOM: args.pageDOM,
25
26
  elementGetter: args.elementGetter,
26
27
  ffNumber: ffElementNumber,
@@ -29,6 +30,7 @@ async function enterInputUsingJs(args) {
29
30
  selector: xpathPath,
30
31
  platform: args.platform
31
32
  });
33
+ (0, getHelper_js_1.saveStepInputData)(args, args.value);
32
34
  }
33
35
  catch (error) {
34
36
  args.scriptDataAppender.setErrorNLP("EnterInputUsingJS");
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.waitAndEnter = waitAndEnter;
4
4
  const enterActionHelper_js_1 = require("../../../../utils/helpers/enterActionHelper.js");
5
5
  const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
6
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
6
7
  async function waitAndEnter(args) {
7
8
  const DEFAULT_WAIT = 5;
8
9
  const parseValue = (value) => {
@@ -28,7 +29,7 @@ async function waitAndEnter(args) {
28
29
  (0, appendScriptData_js_1.appendScriptData)({
29
30
  scriptDataAppender: args.scriptDataAppender,
30
31
  nlpName: "MOB_WaitAndSendKeys",
31
- stepInputs: [inputValue, waitTimeSeconds.toString()],
32
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : inputValue, waitTimeSeconds.toString()],
32
33
  pageDOM: args.pageDOM,
33
34
  elementGetter: args.elementGetter,
34
35
  ffNumber: ffElementNumber,
@@ -37,6 +38,7 @@ async function waitAndEnter(args) {
37
38
  selector: args.selector,
38
39
  platform: args.platform
39
40
  });
41
+ (0, getHelper_js_1.saveStepInputData)(args, inputValue || args.value);
40
42
  }
41
43
  catch (error) {
42
44
  args.scriptDataAppender.setErrorNLP("MOB_WaitAndSendKeys");
@@ -63,7 +65,7 @@ async function waitAndEnter(args) {
63
65
  (0, appendScriptData_js_1.appendScriptData)({
64
66
  scriptDataAppender: args.scriptDataAppender,
65
67
  nlpName: "WaitAndSendKeys",
66
- stepInputs: [inputValue, waitTimeSeconds.toString()],
68
+ stepInputs: [args.variableName ? `variable:${args.variableName}` : inputValue, waitTimeSeconds.toString()],
67
69
  pageDOM: args.pageDOM,
68
70
  elementGetter: args.elementGetter,
69
71
  ffNumber: ffElementNumber,
@@ -72,6 +74,7 @@ async function waitAndEnter(args) {
72
74
  selector: args.selector,
73
75
  platform: args.platform
74
76
  });
77
+ (0, getHelper_js_1.saveStepInputData)(args, inputValue || args.value);
75
78
  }
76
79
  catch (error) {
77
80
  args.scriptDataAppender.setErrorNLP("WaitAndSendKeys");
@@ -0,0 +1,2 @@
1
+ import { VerifyPDFInterface } from "../../interface/verifyActionInterface.js";
2
+ export declare function verifyPDF(args: VerifyPDFInterface): Promise<void>;
@@ -0,0 +1,171 @@
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.verifyPDF = verifyPDF;
7
+ const appendScriptData_js_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData.js");
8
+ const logData_js_1 = require("../../../../utils/logger/logData.js");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ //Normalizing
12
+ function normalizeText(text) {
13
+ return text.replace(/\s+/g, " ").trim();
14
+ }
15
+ //Extracting
16
+ async function extractTextFromPdf(buffer) {
17
+ try {
18
+ const dynamicImport = new Function("modulePath", "return import(modulePath)");
19
+ const pdfjs = await dynamicImport("pdfjs-dist/legacy/build/pdf.mjs").catch(() => dynamicImport("pdfjs-dist"));
20
+ const data = new Uint8Array(buffer);
21
+ const loadingTask = pdfjs.getDocument({
22
+ data,
23
+ useSystemFonts: true,
24
+ disableFontFace: true,
25
+ });
26
+ const pdfDoc = await loadingTask.promise;
27
+ const pageTexts = [];
28
+ for (let i = 1; i <= pdfDoc.numPages; i++) {
29
+ const page = await pdfDoc.getPage(i);
30
+ const textContent = await page.getTextContent();
31
+ const pageString = textContent.items
32
+ .map((item) => ("str" in item ? item.str : ""))
33
+ .join(" ");
34
+ pageTexts.push(pageString);
35
+ }
36
+ return pageTexts.join("\n");
37
+ }
38
+ catch (err) {
39
+ logData_js_1.logger.error("pdfjs-dist extraction failed, falling back to raw buffer string scan", err);
40
+ return buffer.toString("latin1");
41
+ }
42
+ }
43
+ //Downloading time
44
+ const DOWNLOAD_TIMEOUT_MS = 30000;
45
+ const POLL_INTERVAL_MS = 400;
46
+ const STABILITY_WAIT_MS = 250;
47
+ async function waitForDownloadComplete(tempFileDir, timeoutMs = DOWNLOAD_TIMEOUT_MS) {
48
+ const startTime = Date.now();
49
+ while (Date.now() - startTime < timeoutMs) {
50
+ if (fs_1.default.existsSync(tempFileDir)) {
51
+ const allEntries = fs_1.default.readdirSync(tempFileDir);
52
+ let hasActiveDownload = false;
53
+ const pdfFiles = [];
54
+ // Single pass: early exit if active download is present, stat only PDF files
55
+ for (const file of allEntries) {
56
+ const lower = file.toLowerCase();
57
+ if (lower.endsWith(".crdownload") || lower.endsWith(".part") || lower.endsWith(".tmp")) {
58
+ hasActiveDownload = true;
59
+ break; // Download still in progress, skip remaining work this cycle
60
+ }
61
+ if (lower.endsWith(".pdf")) {
62
+ const fullPath = path_1.default.join(tempFileDir, file);
63
+ try {
64
+ const stat = fs_1.default.statSync(fullPath);
65
+ if (stat.isFile()) {
66
+ pdfFiles.push({ name: file, fullPath, mtime: stat.mtimeMs, size: stat.size });
67
+ }
68
+ }
69
+ catch {
70
+ // File locked or in transition, skip for this cycle
71
+ }
72
+ }
73
+ }
74
+ if (!hasActiveDownload && pdfFiles.length > 0) {
75
+ pdfFiles.sort((a, b) => b.mtime - a.mtime);
76
+ const latest = pdfFiles[0];
77
+ if (latest.size > 0) {
78
+ await new Promise(res => setTimeout(res, STABILITY_WAIT_MS));
79
+ try {
80
+ const newStat = fs_1.default.statSync(latest.fullPath);
81
+ if (newStat.size === latest.size && newStat.size > 0) {
82
+ const durationSeconds = Math.max(1, Math.ceil((Date.now() - startTime) / 1000));
83
+ return { file: latest, durationSeconds };
84
+ }
85
+ }
86
+ catch {
87
+ // Retry on next cycle
88
+ }
89
+ }
90
+ }
91
+ }
92
+ await new Promise(res => setTimeout(res, POLL_INTERVAL_MS));
93
+ }
94
+ throw new Error(`PDF download did not complete within ${timeoutMs / 1000} seconds in directory: ${tempFileDir}. ` +
95
+ `Ensure the download was triggered prior to VerifyPDF.`);
96
+ }
97
+ async function verifyPDF(args) {
98
+ const tempFileDir = path_1.default.resolve(process.cwd(), "session", "temp_file");
99
+ let calculatedDuration = 2;
100
+ try {
101
+ const { file: latestFile, durationSeconds } = await waitForDownloadComplete(tempFileDir);
102
+ calculatedDuration = durationSeconds;
103
+ logData_js_1.logger.info("VerifyPDF: found latest file", { file: latestFile.name, dir: tempFileDir, durationSeconds });
104
+ const buffer = fs_1.default.readFileSync(latestFile.fullPath);
105
+ const header = buffer.subarray(0, 5).toString("ascii");
106
+ if (!header.startsWith("%PDF")) {
107
+ throw new Error(`File does not have a valid PDF header (%PDF): ${latestFile.name}`);
108
+ }
109
+ const expectedText = args.value?.trim();
110
+ if (expectedText) {
111
+ const extractedText = await extractTextFromPdf(buffer);
112
+ const normalizedExtracted = normalizeText(extractedText).toLowerCase();
113
+ const normalizedExpected = normalizeText(expectedText).toLowerCase();
114
+ if (!normalizedExtracted.includes(normalizedExpected)) {
115
+ // Secondary check on raw buffer
116
+ const rawContent = buffer.toString("latin1").toLowerCase();
117
+ if (!rawContent.includes(normalizedExpected)) {
118
+ throw new Error(`PDF "${latestFile.name}" does not contain expected text: "${expectedText}"`);
119
+ }
120
+ }
121
+ }
122
+ logData_js_1.logger.info("VerifyPDF passed", {
123
+ file: latestFile.name,
124
+ expectedText: expectedText || "(none — structural check only)",
125
+ sizeBytes: buffer.length
126
+ });
127
+ (0, appendScriptData_js_1.appendScriptData)({
128
+ scriptDataAppender: args.scriptDataAppender,
129
+ nlpName: "Sleep",
130
+ stepInputs: [calculatedDuration],
131
+ });
132
+ (0, appendScriptData_js_1.appendScriptData)({
133
+ scriptDataAppender: args.scriptDataAppender,
134
+ nlpName: "GetUserHomeDirectory",
135
+ stepInputs: [],
136
+ returnTypeVariableName: "userHomeDirectory"
137
+ });
138
+ (0, appendScriptData_js_1.appendScriptData)({
139
+ scriptDataAppender: args.scriptDataAppender,
140
+ nlpName: "ConcatString",
141
+ stepInputs: ["variable:userHomeDirectory", "/Downloads"],
142
+ returnTypeVariableName: "finalpath"
143
+ });
144
+ (0, appendScriptData_js_1.appendScriptData)({
145
+ scriptDataAppender: args.scriptDataAppender,
146
+ nlpName: "GetLastModifiedFile",
147
+ stepInputs: ["variable:finalpath"],
148
+ returnTypeVariableName: "lastModifiedFilePath"
149
+ });
150
+ (0, appendScriptData_js_1.appendScriptData)({
151
+ scriptDataAppender: args.scriptDataAppender,
152
+ nlpName: "VerifyPDF",
153
+ stepInputs: ["variable:lastModifiedFilePath", args.value ?? ""],
154
+ });
155
+ }
156
+ catch (error) {
157
+ args.scriptDataAppender.setErrorNLP("VerifyPDF");
158
+ throw new Error("VerifyPDF action failed", { cause: error });
159
+ }
160
+ finally {
161
+ try {
162
+ if (fs_1.default.existsSync(tempFileDir)) {
163
+ fs_1.default.rmSync(tempFileDir, { recursive: true, force: true });
164
+ logData_js_1.logger.info(`Cleaned up temp_file directory: ${tempFileDir}`);
165
+ }
166
+ }
167
+ catch (cleanupErr) {
168
+ logData_js_1.logger.error("Error cleaning up temp_file directory after VerifyPDF:", cleanupErr);
169
+ }
170
+ }
171
+ }
@@ -1,16 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MOB_GetADBLogsForGivenAppPackage = void 0;
4
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
4
5
  const appendScriptData_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData");
5
6
  const MOB_GetADBLogsForGivenAppPackage = async (args) => {
6
7
  try {
7
8
  const packageName = args.value;
8
9
  const logs = await args.driver.getLogs("logcat");
9
10
  const _filteredLogs = logs.filter((log) => log.message && log.message.includes(packageName));
11
+ (0, getHelper_js_1.saveStepInputData)(args, logs);
10
12
  (0, appendScriptData_1.appendScriptData)({
11
13
  scriptDataAppender: args.scriptDataAppender,
12
14
  nlpName: "MOB_GetADBLogsForGivenAppPackage",
13
- stepInputs: [packageName]
15
+ stepInputs: [packageName],
16
+ returnTypeVariableName: args.returnTypeVariableName
14
17
  });
15
18
  }
16
19
  catch (error) {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MOB_GetAllContexts = void 0;
4
+ const getHelper_js_1 = require("../../../../utils/helpers/getHelper.js");
4
5
  const appendScriptData_1 = require("../../../../fireflinkData/fireflinkScript/appendScriptData");
5
6
  const MOB_GetAllContexts = async (args) => {
6
7
  try {
@@ -8,8 +9,11 @@ const MOB_GetAllContexts = async (args) => {
8
9
  const _contexts = await args.driver.getContexts();
9
10
  (0, appendScriptData_1.appendScriptData)({
10
11
  scriptDataAppender: args.scriptDataAppender,
11
- nlpName: "MOB_GetAllContexts"
12
+ nlpName: "MOB_GetAllContexts",
13
+ returnTypeVariableName: args.returnTypeVariableName
12
14
  });
15
+ const __result = _contexts;
16
+ (0, getHelper_js_1.saveStepInputData)(args, __result);
13
17
  }
14
18
  catch (error) {
15
19
  args.scriptDataAppender.setErrorNLP("MOB_GetAllContexts");