donobu 2.15.1 → 2.17.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 (756) hide show
  1. package/dist/apis/EnvDataApi.d.ts +26 -0
  2. package/dist/apis/EnvDataApi.d.ts.map +1 -0
  3. package/dist/apis/EnvDataApi.js +59 -0
  4. package/dist/apis/EnvDataApi.js.map +1 -0
  5. package/dist/apis/EnvironmentDataApi.d.ts +26 -0
  6. package/dist/apis/EnvironmentDataApi.d.ts.map +1 -0
  7. package/dist/apis/EnvironmentDataApi.js +59 -0
  8. package/dist/apis/EnvironmentDataApi.js.map +1 -0
  9. package/dist/apis/FlowsApi.d.ts +4 -0
  10. package/dist/apis/FlowsApi.d.ts.map +1 -1
  11. package/dist/apis/FlowsApi.js +26 -2
  12. package/dist/apis/FlowsApi.js.map +1 -1
  13. package/dist/apis/FlowsFilesApi.d.ts +1 -1
  14. package/dist/apis/FlowsFilesApi.d.ts.map +1 -1
  15. package/dist/apis/SpecialFlowsApi.js +1 -1
  16. package/dist/apis/SpecialFlowsApi.js.map +1 -1
  17. package/dist/assets/control-panel.js +30 -3
  18. package/dist/assets/generated/parameter-schemas.json +51 -37
  19. package/dist/assets/generated/version +1 -1
  20. package/dist/assets/interactive-elements-tracker.js +351 -0
  21. package/dist/assets/page-interactions-tracker.js +39 -20
  22. package/dist/assets/smart-selector-generator.js +38 -15
  23. package/dist/bindings/FocusPage.d.ts +6 -1
  24. package/dist/bindings/FocusPage.d.ts.map +1 -1
  25. package/dist/bindings/FocusPage.js +2 -8
  26. package/dist/bindings/FocusPage.js.map +1 -1
  27. package/dist/bindings/PageInteractionTracker.d.ts +9 -2
  28. package/dist/bindings/PageInteractionTracker.d.ts.map +1 -1
  29. package/dist/bindings/PageInteractionTracker.js +27 -3
  30. package/dist/bindings/PageInteractionTracker.js.map +1 -1
  31. package/dist/bindings/ProposeToolCall.d.ts +20 -0
  32. package/dist/bindings/ProposeToolCall.d.ts.map +1 -0
  33. package/dist/bindings/ProposeToolCall.js +29 -0
  34. package/dist/bindings/ProposeToolCall.js.map +1 -0
  35. package/dist/bindings/ToggleDonobuAnnotations.d.ts +5 -2
  36. package/dist/bindings/ToggleDonobuAnnotations.d.ts.map +1 -1
  37. package/dist/bindings/ToggleDonobuAnnotations.js +12 -6
  38. package/dist/bindings/ToggleDonobuAnnotations.js.map +1 -1
  39. package/dist/esm/apis/EnvDataApi.d.ts +26 -0
  40. package/dist/esm/apis/EnvDataApi.d.ts.map +1 -0
  41. package/dist/esm/apis/EnvDataApi.js +59 -0
  42. package/dist/esm/apis/EnvDataApi.js.map +1 -0
  43. package/dist/esm/apis/EnvironmentDataApi.d.ts +26 -0
  44. package/dist/esm/apis/EnvironmentDataApi.d.ts.map +1 -0
  45. package/dist/esm/apis/EnvironmentDataApi.js +59 -0
  46. package/dist/esm/apis/EnvironmentDataApi.js.map +1 -0
  47. package/dist/esm/apis/FlowsApi.d.ts +4 -0
  48. package/dist/esm/apis/FlowsApi.d.ts.map +1 -1
  49. package/dist/esm/apis/FlowsApi.js +26 -2
  50. package/dist/esm/apis/FlowsApi.js.map +1 -1
  51. package/dist/esm/apis/FlowsFilesApi.d.ts +1 -1
  52. package/dist/esm/apis/FlowsFilesApi.d.ts.map +1 -1
  53. package/dist/esm/apis/SpecialFlowsApi.js +1 -1
  54. package/dist/esm/apis/SpecialFlowsApi.js.map +1 -1
  55. package/dist/esm/assets/control-panel.js +30 -3
  56. package/dist/esm/assets/generated/parameter-schemas.json +51 -37
  57. package/dist/esm/assets/generated/version +1 -1
  58. package/dist/esm/assets/interactive-elements-tracker.js +351 -0
  59. package/dist/esm/assets/page-interactions-tracker.js +39 -20
  60. package/dist/esm/assets/smart-selector-generator.js +38 -15
  61. package/dist/esm/bindings/FocusPage.d.ts +6 -1
  62. package/dist/esm/bindings/FocusPage.d.ts.map +1 -1
  63. package/dist/esm/bindings/FocusPage.js +2 -8
  64. package/dist/esm/bindings/FocusPage.js.map +1 -1
  65. package/dist/esm/bindings/PageInteractionTracker.d.ts +9 -2
  66. package/dist/esm/bindings/PageInteractionTracker.d.ts.map +1 -1
  67. package/dist/esm/bindings/PageInteractionTracker.js +27 -3
  68. package/dist/esm/bindings/PageInteractionTracker.js.map +1 -1
  69. package/dist/esm/bindings/ProposeToolCall.d.ts +20 -0
  70. package/dist/esm/bindings/ProposeToolCall.d.ts.map +1 -0
  71. package/dist/esm/bindings/ProposeToolCall.js +29 -0
  72. package/dist/esm/bindings/ProposeToolCall.js.map +1 -0
  73. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts +5 -2
  74. package/dist/esm/bindings/ToggleDonobuAnnotations.d.ts.map +1 -1
  75. package/dist/esm/bindings/ToggleDonobuAnnotations.js +12 -6
  76. package/dist/esm/bindings/ToggleDonobuAnnotations.js.map +1 -1
  77. package/dist/esm/lib/DonobuExtendedPage.d.ts +106 -0
  78. package/dist/esm/lib/DonobuExtendedPage.d.ts.map +1 -0
  79. package/dist/esm/lib/DonobuExtendedPage.js +3 -0
  80. package/dist/esm/lib/DonobuExtendedPage.js.map +1 -0
  81. package/dist/esm/lib/constants.d.ts +8 -0
  82. package/dist/esm/lib/constants.d.ts.map +1 -0
  83. package/dist/esm/lib/constants.js +14 -0
  84. package/dist/esm/lib/constants.js.map +1 -0
  85. package/dist/esm/lib/fixtures/browserState.d.ts +6 -0
  86. package/dist/esm/lib/fixtures/browserState.d.ts.map +1 -0
  87. package/dist/esm/lib/fixtures/browserState.js +15 -0
  88. package/dist/esm/lib/fixtures/browserState.js.map +1 -0
  89. package/dist/esm/lib/fixtures/gptClients.d.ts +40 -0
  90. package/dist/esm/lib/fixtures/gptClients.d.ts.map +1 -0
  91. package/dist/esm/lib/fixtures/gptClients.js +187 -0
  92. package/dist/esm/lib/fixtures/gptClients.js.map +1 -0
  93. package/dist/esm/lib/fixtures/testExtension.d.ts +10 -0
  94. package/dist/esm/lib/fixtures/testExtension.d.ts.map +1 -0
  95. package/dist/esm/lib/fixtures/testExtension.js +383 -0
  96. package/dist/esm/lib/fixtures/testExtension.js.map +1 -0
  97. package/dist/esm/lib/testExtension.d.ts +10 -0
  98. package/dist/esm/lib/testExtension.d.ts.map +1 -0
  99. package/dist/esm/lib/testExtension.js +383 -0
  100. package/dist/esm/lib/testExtension.js.map +1 -0
  101. package/dist/esm/lib/types.d.ts +106 -0
  102. package/dist/esm/lib/types.d.ts.map +1 -0
  103. package/dist/esm/{models/BrowserState.js → lib/types.js} +1 -1
  104. package/dist/esm/lib/types.js.map +1 -0
  105. package/dist/esm/lib/utils/donobuTestStack.d.ts +7 -0
  106. package/dist/esm/lib/utils/donobuTestStack.d.ts.map +1 -0
  107. package/dist/esm/lib/utils/donobuTestStack.js +31 -0
  108. package/dist/esm/lib/utils/donobuTestStack.js.map +1 -0
  109. package/dist/esm/lib/utils/selfHealing.d.ts +15 -0
  110. package/dist/esm/lib/utils/selfHealing.d.ts.map +1 -0
  111. package/dist/esm/lib/utils/selfHealing.js +89 -0
  112. package/dist/esm/lib/utils/selfHealing.js.map +1 -0
  113. package/dist/esm/main.d.ts +5 -1
  114. package/dist/esm/main.d.ts.map +1 -1
  115. package/dist/esm/main.js +8 -5
  116. package/dist/esm/main.js.map +1 -1
  117. package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
  118. package/dist/esm/managers/AdminApiController.js +7 -0
  119. package/dist/esm/managers/AdminApiController.js.map +1 -1
  120. package/dist/esm/managers/AgentsManager.d.ts +1 -1
  121. package/dist/esm/managers/AgentsManager.d.ts.map +1 -1
  122. package/dist/esm/managers/CodeGenerator.d.ts.map +1 -1
  123. package/dist/esm/managers/CodeGenerator.js +2 -1
  124. package/dist/esm/managers/CodeGenerator.js.map +1 -1
  125. package/dist/esm/managers/ControlPanel.d.ts +124 -0
  126. package/dist/esm/managers/ControlPanel.d.ts.map +1 -0
  127. package/dist/esm/managers/ControlPanel.js +282 -0
  128. package/dist/esm/managers/ControlPanel.js.map +1 -0
  129. package/dist/esm/managers/DonobuFlow.d.ts +7 -14
  130. package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
  131. package/dist/esm/managers/DonobuFlow.js +124 -160
  132. package/dist/esm/managers/DonobuFlow.js.map +1 -1
  133. package/dist/esm/managers/DonobuFlowsManager.d.ts +47 -6
  134. package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
  135. package/dist/esm/managers/DonobuFlowsManager.js +104 -24
  136. package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
  137. package/dist/esm/managers/DonobuStack.d.ts +18 -4
  138. package/dist/esm/managers/DonobuStack.d.ts.map +1 -1
  139. package/dist/esm/managers/DonobuStack.js +21 -5
  140. package/dist/esm/managers/DonobuStack.js.map +1 -1
  141. package/dist/esm/managers/EnvDataManager.d.ts +58 -0
  142. package/dist/esm/managers/EnvDataManager.d.ts.map +1 -0
  143. package/dist/esm/managers/EnvDataManager.js +134 -0
  144. package/dist/esm/managers/EnvDataManager.js.map +1 -0
  145. package/dist/esm/managers/EnvironmentDataManager.d.ts +58 -0
  146. package/dist/esm/managers/EnvironmentDataManager.d.ts.map +1 -0
  147. package/dist/esm/managers/EnvironmentDataManager.js +134 -0
  148. package/dist/esm/managers/EnvironmentDataManager.js.map +1 -0
  149. package/dist/esm/managers/GptConfigsManager.d.ts +1 -1
  150. package/dist/esm/managers/GptConfigsManager.d.ts.map +1 -1
  151. package/dist/esm/managers/InteractionVisualizer.d.ts +9 -15
  152. package/dist/esm/managers/InteractionVisualizer.d.ts.map +1 -1
  153. package/dist/esm/managers/InteractionVisualizer.js +44 -44
  154. package/dist/esm/managers/InteractionVisualizer.js.map +1 -1
  155. package/dist/esm/managers/PageInspector.d.ts +241 -0
  156. package/dist/esm/managers/PageInspector.d.ts.map +1 -0
  157. package/dist/esm/managers/PageInspector.js +786 -0
  158. package/dist/esm/managers/PageInspector.js.map +1 -0
  159. package/dist/esm/managers/ToolManager.d.ts +10 -0
  160. package/dist/esm/managers/ToolManager.d.ts.map +1 -1
  161. package/dist/esm/managers/ToolManager.js +49 -8
  162. package/dist/esm/managers/ToolManager.js.map +1 -1
  163. package/dist/esm/models/BrowserConfig.d.ts +1 -6
  164. package/dist/esm/models/BrowserConfig.d.ts.map +1 -1
  165. package/dist/esm/models/BrowserFramework.d.ts +2 -6
  166. package/dist/esm/models/BrowserFramework.d.ts.map +1 -1
  167. package/dist/esm/models/BrowserFramework.js +4 -22
  168. package/dist/esm/models/BrowserFramework.js.map +1 -1
  169. package/dist/esm/models/CreateDonobuFlow.d.ts +4 -0
  170. package/dist/esm/models/CreateDonobuFlow.d.ts.map +1 -1
  171. package/dist/esm/models/EnvironmentDatum.d.ts +54 -0
  172. package/dist/esm/models/EnvironmentDatum.d.ts.map +1 -0
  173. package/dist/esm/models/EnvironmentDatum.js +57 -0
  174. package/dist/esm/models/EnvironmentDatum.js.map +1 -0
  175. package/dist/esm/models/FlowMetadata.d.ts +14 -1
  176. package/dist/esm/models/FlowMetadata.d.ts.map +1 -1
  177. package/dist/esm/models/FlowMetadata.js.map +1 -1
  178. package/dist/esm/models/InteractableElement.d.ts +2 -2
  179. package/dist/esm/models/PaginatedResult.d.ts +10 -0
  180. package/dist/esm/models/PaginatedResult.d.ts.map +1 -0
  181. package/dist/esm/models/PaginatedResult.js +6 -0
  182. package/dist/esm/models/PaginatedResult.js.map +1 -0
  183. package/dist/esm/models/ToolCallContext.d.ts +8 -3
  184. package/dist/esm/models/ToolCallContext.d.ts.map +1 -1
  185. package/dist/esm/models/ToolTemplateDataSource.d.ts +4 -0
  186. package/dist/esm/models/ToolTemplateDataSource.d.ts.map +1 -1
  187. package/dist/esm/persistence/DonobuSqliteDb.d.ts.map +1 -1
  188. package/dist/esm/persistence/DonobuSqliteDb.js +12 -0
  189. package/dist/esm/persistence/DonobuSqliteDb.js.map +1 -1
  190. package/dist/esm/persistence/FlowsPersistence.d.ts +23 -14
  191. package/dist/esm/persistence/FlowsPersistence.d.ts.map +1 -1
  192. package/dist/esm/persistence/FlowsPersistenceAwsS3.d.ts +10 -5
  193. package/dist/esm/persistence/FlowsPersistenceAwsS3.d.ts.map +1 -1
  194. package/dist/esm/persistence/FlowsPersistenceAwsS3.js +79 -1
  195. package/dist/esm/persistence/FlowsPersistenceAwsS3.js.map +1 -1
  196. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.js +1 -1
  197. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.js.map +1 -1
  198. package/dist/esm/persistence/FlowsPersistenceFilesystem.d.ts +32 -5
  199. package/dist/esm/persistence/FlowsPersistenceFilesystem.d.ts.map +1 -1
  200. package/dist/esm/persistence/FlowsPersistenceFilesystem.js +114 -4
  201. package/dist/esm/persistence/FlowsPersistenceFilesystem.js.map +1 -1
  202. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.d.ts +10 -5
  203. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -1
  204. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.js +58 -1
  205. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.js.map +1 -1
  206. package/dist/esm/persistence/FlowsPersistenceSqlite.d.ts +12 -5
  207. package/dist/esm/persistence/FlowsPersistenceSqlite.d.ts.map +1 -1
  208. package/dist/esm/persistence/FlowsPersistenceSqlite.js +35 -1
  209. package/dist/esm/persistence/FlowsPersistenceSqlite.js.map +1 -1
  210. package/dist/esm/persistence/FlowsPersistenceSupabase.d.ts +10 -5
  211. package/dist/esm/persistence/FlowsPersistenceSupabase.d.ts.map +1 -1
  212. package/dist/esm/persistence/FlowsPersistenceSupabase.js +46 -1
  213. package/dist/esm/persistence/FlowsPersistenceSupabase.js.map +1 -1
  214. package/dist/esm/persistence/FlowsPersistenceVolatile.d.ts +10 -5
  215. package/dist/esm/persistence/FlowsPersistenceVolatile.d.ts.map +1 -1
  216. package/dist/esm/persistence/FlowsPersistenceVolatile.js +21 -1
  217. package/dist/esm/persistence/FlowsPersistenceVolatile.js.map +1 -1
  218. package/dist/esm/persistence/agents/AgentsPersistence.d.ts +12 -0
  219. package/dist/esm/persistence/agents/AgentsPersistence.d.ts.map +1 -0
  220. package/dist/esm/persistence/agents/AgentsPersistence.js +3 -0
  221. package/dist/esm/persistence/agents/AgentsPersistence.js.map +1 -0
  222. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.d.ts +15 -0
  223. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.d.ts.map +1 -0
  224. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.js +50 -0
  225. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.js.map +1 -0
  226. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.d.ts +14 -0
  227. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.d.ts.map +1 -0
  228. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.js +26 -0
  229. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.js.map +1 -0
  230. package/dist/esm/persistence/env/EnvPersistence.d.ts +20 -0
  231. package/dist/esm/persistence/env/EnvPersistence.d.ts.map +1 -0
  232. package/dist/esm/{models/ResolverContext.js → persistence/env/EnvPersistence.js} +1 -1
  233. package/dist/esm/persistence/env/EnvPersistence.js.map +1 -0
  234. package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts +31 -0
  235. package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts.map +1 -0
  236. package/dist/esm/persistence/env/EnvPersistenceAwsS3.js +117 -0
  237. package/dist/esm/persistence/env/EnvPersistenceAwsS3.js.map +1 -0
  238. package/dist/esm/persistence/env/EnvPersistenceFactory.d.ts +6 -0
  239. package/dist/esm/persistence/env/EnvPersistenceFactory.d.ts.map +1 -0
  240. package/dist/esm/persistence/env/EnvPersistenceFactory.js +3 -0
  241. package/dist/esm/persistence/env/EnvPersistenceFactory.js.map +1 -0
  242. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.d.ts +45 -0
  243. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.d.ts.map +1 -0
  244. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.js +86 -0
  245. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.js.map +1 -0
  246. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.d.ts +12 -0
  247. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.d.ts.map +1 -0
  248. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.js +17 -0
  249. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.js.map +1 -0
  250. package/dist/esm/persistence/env/EnvPersistenceFilesystem.d.ts +36 -0
  251. package/dist/esm/persistence/env/EnvPersistenceFilesystem.d.ts.map +1 -0
  252. package/dist/esm/persistence/env/EnvPersistenceFilesystem.js +132 -0
  253. package/dist/esm/persistence/env/EnvPersistenceFilesystem.js.map +1 -0
  254. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +30 -0
  255. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +1 -0
  256. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js +131 -0
  257. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +1 -0
  258. package/dist/esm/persistence/env/EnvPersistenceSqlite.d.ts +19 -0
  259. package/dist/esm/persistence/env/EnvPersistenceSqlite.d.ts.map +1 -0
  260. package/dist/esm/persistence/env/EnvPersistenceSqlite.js +54 -0
  261. package/dist/esm/persistence/env/EnvPersistenceSqlite.js.map +1 -0
  262. package/dist/esm/persistence/env/EnvPersistenceSupabase.d.ts +17 -0
  263. package/dist/esm/persistence/env/EnvPersistenceSupabase.d.ts.map +1 -0
  264. package/dist/esm/persistence/env/EnvPersistenceSupabase.js +60 -0
  265. package/dist/esm/persistence/env/EnvPersistenceSupabase.js.map +1 -0
  266. package/dist/esm/persistence/env/EnvPersistenceVolatile.d.ts +13 -0
  267. package/dist/esm/persistence/env/EnvPersistenceVolatile.d.ts.map +1 -0
  268. package/dist/esm/persistence/env/EnvPersistenceVolatile.js +31 -0
  269. package/dist/esm/persistence/env/EnvPersistenceVolatile.js.map +1 -0
  270. package/dist/esm/persistence/flows/FlowsPersistence.d.ts +87 -0
  271. package/dist/esm/persistence/flows/FlowsPersistence.d.ts.map +1 -0
  272. package/dist/esm/persistence/flows/FlowsPersistence.js +3 -0
  273. package/dist/esm/persistence/flows/FlowsPersistence.js.map +1 -0
  274. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts +71 -0
  275. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +1 -0
  276. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js +448 -0
  277. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js.map +1 -0
  278. package/dist/esm/persistence/flows/FlowsPersistenceFactory.d.ts +10 -0
  279. package/dist/esm/persistence/flows/FlowsPersistenceFactory.d.ts.map +1 -0
  280. package/dist/esm/persistence/flows/FlowsPersistenceFactory.js +3 -0
  281. package/dist/esm/persistence/flows/FlowsPersistenceFactory.js.map +1 -0
  282. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.d.ts +57 -0
  283. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.d.ts.map +1 -0
  284. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.js +238 -0
  285. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.js.map +1 -0
  286. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.d.ts +13 -0
  287. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.d.ts.map +1 -0
  288. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.js +24 -0
  289. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.js.map +1 -0
  290. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.d.ts +52 -0
  291. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.d.ts.map +1 -0
  292. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.js +291 -0
  293. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.js.map +1 -0
  294. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +71 -0
  295. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -0
  296. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +429 -0
  297. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +1 -0
  298. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts +43 -0
  299. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -0
  300. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js +259 -0
  301. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js.map +1 -0
  302. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.d.ts +40 -0
  303. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.d.ts.map +1 -0
  304. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.js +218 -0
  305. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.js.map +1 -0
  306. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.d.ts +37 -0
  307. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.d.ts.map +1 -0
  308. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.js +151 -0
  309. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.js.map +1 -0
  310. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.d.ts +12 -0
  311. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.d.ts.map +1 -0
  312. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.js +3 -0
  313. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.js.map +1 -0
  314. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts +13 -0
  315. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts.map +1 -0
  316. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.js +35 -0
  317. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.js.map +1 -0
  318. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts +15 -0
  319. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts.map +1 -0
  320. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.js +31 -0
  321. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.js.map +1 -0
  322. package/dist/esm/playwrightTestExtensions.d.ts +5 -0
  323. package/dist/esm/playwrightTestExtensions.d.ts.map +1 -1
  324. package/dist/esm/playwrightTestExtensions.js +83 -23
  325. package/dist/esm/playwrightTestExtensions.js.map +1 -1
  326. package/dist/esm/tools/AnalyzePageTextTool.js +1 -1
  327. package/dist/esm/tools/AnalyzePageTextTool.js.map +1 -1
  328. package/dist/esm/tools/AssertPageTextTool.js +1 -1
  329. package/dist/esm/tools/AssertPageTextTool.js.map +1 -1
  330. package/dist/esm/tools/AssertTool.d.ts.map +1 -1
  331. package/dist/esm/tools/AssertTool.js +4 -4
  332. package/dist/esm/tools/AssertTool.js.map +1 -1
  333. package/dist/esm/tools/ChangeWebBrowserTabTool.d.ts.map +1 -1
  334. package/dist/esm/tools/ChangeWebBrowserTabTool.js +8 -7
  335. package/dist/esm/tools/ChangeWebBrowserTabTool.js.map +1 -1
  336. package/dist/esm/tools/ClickTool.js +1 -1
  337. package/dist/esm/tools/ClickTool.js.map +1 -1
  338. package/dist/esm/tools/CreateBrowserCookieReportTool.js +1 -1
  339. package/dist/esm/tools/CreateBrowserCookieReportTool.js.map +1 -1
  340. package/dist/esm/tools/CustomToolRunnerTool.d.ts.map +1 -1
  341. package/dist/esm/tools/CustomToolRunnerTool.js +1 -1
  342. package/dist/esm/tools/CustomToolRunnerTool.js.map +1 -1
  343. package/dist/esm/tools/DetectBrokenLinksTool.js +1 -1
  344. package/dist/esm/tools/DetectBrokenLinksTool.js.map +1 -1
  345. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js +1 -1
  346. package/dist/esm/tools/ExtractGoogleStreetviewEntityDataTool.js.map +1 -1
  347. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js +1 -1
  348. package/dist/esm/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
  349. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js +1 -1
  350. package/dist/esm/tools/ExtractPublicFacebookEntityDataTool.js.map +1 -1
  351. package/dist/esm/tools/GoForwardOrBackTool.js +1 -1
  352. package/dist/esm/tools/GoForwardOrBackTool.js.map +1 -1
  353. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js +1 -1
  354. package/dist/esm/tools/GoToGoogleMapsStreetViewTool.js.map +1 -1
  355. package/dist/esm/tools/GoToWebpageTool.d.ts.map +1 -1
  356. package/dist/esm/tools/GoToWebpageTool.js +4 -3
  357. package/dist/esm/tools/GoToWebpageTool.js.map +1 -1
  358. package/dist/esm/tools/HoverOverElementTool.d.ts.map +1 -1
  359. package/dist/esm/tools/HoverOverElementTool.js +1 -1
  360. package/dist/esm/tools/HoverOverElementTool.js.map +1 -1
  361. package/dist/esm/tools/NavigateWithinStreetView.js +1 -1
  362. package/dist/esm/tools/NavigateWithinStreetView.js.map +1 -1
  363. package/dist/esm/tools/PressKeyTool.js +1 -1
  364. package/dist/esm/tools/PressKeyTool.js.map +1 -1
  365. package/dist/esm/tools/ReloadPageTool.js +1 -1
  366. package/dist/esm/tools/ReloadPageTool.js.map +1 -1
  367. package/dist/esm/tools/ReplayableInteraction.d.ts +16 -1
  368. package/dist/esm/tools/ReplayableInteraction.d.ts.map +1 -1
  369. package/dist/esm/tools/ReplayableInteraction.js +169 -16
  370. package/dist/esm/tools/ReplayableInteraction.js.map +1 -1
  371. package/dist/esm/tools/RunAccessibilityTestTool.d.ts +8 -0
  372. package/dist/esm/tools/RunAccessibilityTestTool.d.ts.map +1 -1
  373. package/dist/esm/tools/RunAccessibilityTestTool.js +15 -2
  374. package/dist/esm/tools/RunAccessibilityTestTool.js.map +1 -1
  375. package/dist/esm/tools/RunInlineJavaScriptCodeTool.d.ts.map +1 -1
  376. package/dist/esm/tools/RunInlineJavaScriptCodeTool.js +1 -1
  377. package/dist/esm/tools/RunInlineJavaScriptCodeTool.js.map +1 -1
  378. package/dist/esm/tools/SaveWebpageAsPdfTool.js +1 -1
  379. package/dist/esm/tools/SaveWebpageAsPdfTool.js.map +1 -1
  380. package/dist/esm/tools/ScrollPageTool.d.ts +1 -1
  381. package/dist/esm/tools/ScrollPageTool.d.ts.map +1 -1
  382. package/dist/esm/tools/ScrollPageTool.js +47 -4
  383. package/dist/esm/tools/ScrollPageTool.js.map +1 -1
  384. package/dist/esm/tools/WaitTool.js +1 -1
  385. package/dist/esm/tools/WaitTool.js.map +1 -1
  386. package/dist/esm/utils/MiscUtils.d.ts +2 -2
  387. package/dist/esm/utils/MiscUtils.js +2 -2
  388. package/dist/esm/utils/PlaywrightUtils.d.ts +26 -127
  389. package/dist/esm/utils/PlaywrightUtils.d.ts.map +1 -1
  390. package/dist/esm/utils/PlaywrightUtils.js +133 -935
  391. package/dist/esm/utils/PlaywrightUtils.js.map +1 -1
  392. package/dist/esm/utils/TemplateInterpolator.d.ts +21 -3
  393. package/dist/esm/utils/TemplateInterpolator.d.ts.map +1 -1
  394. package/dist/esm/utils/TemplateInterpolator.js +167 -21
  395. package/dist/esm/utils/TemplateInterpolator.js.map +1 -1
  396. package/dist/lib/DonobuExtendedPage.d.ts +106 -0
  397. package/dist/lib/DonobuExtendedPage.d.ts.map +1 -0
  398. package/dist/lib/DonobuExtendedPage.js +3 -0
  399. package/dist/lib/DonobuExtendedPage.js.map +1 -0
  400. package/dist/lib/constants.d.ts +8 -0
  401. package/dist/lib/constants.d.ts.map +1 -0
  402. package/dist/lib/constants.js +14 -0
  403. package/dist/lib/constants.js.map +1 -0
  404. package/dist/lib/fixtures/browserState.d.ts +6 -0
  405. package/dist/lib/fixtures/browserState.d.ts.map +1 -0
  406. package/dist/lib/fixtures/browserState.js +15 -0
  407. package/dist/lib/fixtures/browserState.js.map +1 -0
  408. package/dist/lib/fixtures/gptClients.d.ts +40 -0
  409. package/dist/lib/fixtures/gptClients.d.ts.map +1 -0
  410. package/dist/lib/fixtures/gptClients.js +187 -0
  411. package/dist/lib/fixtures/gptClients.js.map +1 -0
  412. package/dist/lib/fixtures/testExtension.d.ts +10 -0
  413. package/dist/lib/fixtures/testExtension.d.ts.map +1 -0
  414. package/dist/lib/fixtures/testExtension.js +383 -0
  415. package/dist/lib/fixtures/testExtension.js.map +1 -0
  416. package/dist/lib/testExtension.d.ts +10 -0
  417. package/dist/lib/testExtension.d.ts.map +1 -0
  418. package/dist/lib/testExtension.js +383 -0
  419. package/dist/lib/testExtension.js.map +1 -0
  420. package/dist/lib/types.d.ts +106 -0
  421. package/dist/lib/types.d.ts.map +1 -0
  422. package/dist/{models/BrowserState.js → lib/types.js} +1 -1
  423. package/dist/lib/types.js.map +1 -0
  424. package/dist/lib/utils/donobuTestStack.d.ts +7 -0
  425. package/dist/lib/utils/donobuTestStack.d.ts.map +1 -0
  426. package/dist/lib/utils/donobuTestStack.js +31 -0
  427. package/dist/lib/utils/donobuTestStack.js.map +1 -0
  428. package/dist/lib/utils/selfHealing.d.ts +15 -0
  429. package/dist/lib/utils/selfHealing.d.ts.map +1 -0
  430. package/dist/lib/utils/selfHealing.js +89 -0
  431. package/dist/lib/utils/selfHealing.js.map +1 -0
  432. package/dist/main.d.ts +5 -1
  433. package/dist/main.d.ts.map +1 -1
  434. package/dist/main.js +8 -5
  435. package/dist/main.js.map +1 -1
  436. package/dist/managers/AdminApiController.d.ts.map +1 -1
  437. package/dist/managers/AdminApiController.js +7 -0
  438. package/dist/managers/AdminApiController.js.map +1 -1
  439. package/dist/managers/AgentsManager.d.ts +1 -1
  440. package/dist/managers/AgentsManager.d.ts.map +1 -1
  441. package/dist/managers/CodeGenerator.d.ts.map +1 -1
  442. package/dist/managers/CodeGenerator.js +2 -1
  443. package/dist/managers/CodeGenerator.js.map +1 -1
  444. package/dist/managers/ControlPanel.d.ts +124 -0
  445. package/dist/managers/ControlPanel.d.ts.map +1 -0
  446. package/dist/managers/ControlPanel.js +282 -0
  447. package/dist/managers/ControlPanel.js.map +1 -0
  448. package/dist/managers/DonobuFlow.d.ts +7 -14
  449. package/dist/managers/DonobuFlow.d.ts.map +1 -1
  450. package/dist/managers/DonobuFlow.js +124 -160
  451. package/dist/managers/DonobuFlow.js.map +1 -1
  452. package/dist/managers/DonobuFlowsManager.d.ts +47 -6
  453. package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
  454. package/dist/managers/DonobuFlowsManager.js +104 -24
  455. package/dist/managers/DonobuFlowsManager.js.map +1 -1
  456. package/dist/managers/DonobuStack.d.ts +18 -4
  457. package/dist/managers/DonobuStack.d.ts.map +1 -1
  458. package/dist/managers/DonobuStack.js +21 -5
  459. package/dist/managers/DonobuStack.js.map +1 -1
  460. package/dist/managers/EnvDataManager.d.ts +58 -0
  461. package/dist/managers/EnvDataManager.d.ts.map +1 -0
  462. package/dist/managers/EnvDataManager.js +134 -0
  463. package/dist/managers/EnvDataManager.js.map +1 -0
  464. package/dist/managers/EnvironmentDataManager.d.ts +58 -0
  465. package/dist/managers/EnvironmentDataManager.d.ts.map +1 -0
  466. package/dist/managers/EnvironmentDataManager.js +134 -0
  467. package/dist/managers/EnvironmentDataManager.js.map +1 -0
  468. package/dist/managers/GptConfigsManager.d.ts +1 -1
  469. package/dist/managers/GptConfigsManager.d.ts.map +1 -1
  470. package/dist/managers/InteractionVisualizer.d.ts +9 -15
  471. package/dist/managers/InteractionVisualizer.d.ts.map +1 -1
  472. package/dist/managers/InteractionVisualizer.js +44 -44
  473. package/dist/managers/InteractionVisualizer.js.map +1 -1
  474. package/dist/managers/PageInspector.d.ts +241 -0
  475. package/dist/managers/PageInspector.d.ts.map +1 -0
  476. package/dist/managers/PageInspector.js +786 -0
  477. package/dist/managers/PageInspector.js.map +1 -0
  478. package/dist/managers/ToolManager.d.ts +10 -0
  479. package/dist/managers/ToolManager.d.ts.map +1 -1
  480. package/dist/managers/ToolManager.js +49 -8
  481. package/dist/managers/ToolManager.js.map +1 -1
  482. package/dist/models/BrowserConfig.d.ts +1 -6
  483. package/dist/models/BrowserConfig.d.ts.map +1 -1
  484. package/dist/models/BrowserFramework.d.ts +2 -6
  485. package/dist/models/BrowserFramework.d.ts.map +1 -1
  486. package/dist/models/BrowserFramework.js +4 -22
  487. package/dist/models/BrowserFramework.js.map +1 -1
  488. package/dist/models/CreateDonobuFlow.d.ts +4 -0
  489. package/dist/models/CreateDonobuFlow.d.ts.map +1 -1
  490. package/dist/models/EnvironmentDatum.d.ts +54 -0
  491. package/dist/models/EnvironmentDatum.d.ts.map +1 -0
  492. package/dist/models/EnvironmentDatum.js +57 -0
  493. package/dist/models/EnvironmentDatum.js.map +1 -0
  494. package/dist/models/FlowMetadata.d.ts +14 -1
  495. package/dist/models/FlowMetadata.d.ts.map +1 -1
  496. package/dist/models/FlowMetadata.js.map +1 -1
  497. package/dist/models/InteractableElement.d.ts +2 -2
  498. package/dist/models/PaginatedResult.d.ts +10 -0
  499. package/dist/models/PaginatedResult.d.ts.map +1 -0
  500. package/dist/models/PaginatedResult.js +6 -0
  501. package/dist/models/PaginatedResult.js.map +1 -0
  502. package/dist/models/ToolCallContext.d.ts +8 -3
  503. package/dist/models/ToolCallContext.d.ts.map +1 -1
  504. package/dist/models/ToolTemplateDataSource.d.ts +4 -0
  505. package/dist/models/ToolTemplateDataSource.d.ts.map +1 -1
  506. package/dist/persistence/DonobuSqliteDb.d.ts.map +1 -1
  507. package/dist/persistence/DonobuSqliteDb.js +12 -0
  508. package/dist/persistence/DonobuSqliteDb.js.map +1 -1
  509. package/dist/persistence/FlowsPersistence.d.ts +23 -14
  510. package/dist/persistence/FlowsPersistence.d.ts.map +1 -1
  511. package/dist/persistence/FlowsPersistenceAwsS3.d.ts +10 -5
  512. package/dist/persistence/FlowsPersistenceAwsS3.d.ts.map +1 -1
  513. package/dist/persistence/FlowsPersistenceAwsS3.js +79 -1
  514. package/dist/persistence/FlowsPersistenceAwsS3.js.map +1 -1
  515. package/dist/persistence/FlowsPersistenceFactoryImpl.js +1 -1
  516. package/dist/persistence/FlowsPersistenceFactoryImpl.js.map +1 -1
  517. package/dist/persistence/FlowsPersistenceFilesystem.d.ts +32 -5
  518. package/dist/persistence/FlowsPersistenceFilesystem.d.ts.map +1 -1
  519. package/dist/persistence/FlowsPersistenceFilesystem.js +114 -4
  520. package/dist/persistence/FlowsPersistenceFilesystem.js.map +1 -1
  521. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.d.ts +10 -5
  522. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -1
  523. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.js +58 -1
  524. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.js.map +1 -1
  525. package/dist/persistence/FlowsPersistenceSqlite.d.ts +12 -5
  526. package/dist/persistence/FlowsPersistenceSqlite.d.ts.map +1 -1
  527. package/dist/persistence/FlowsPersistenceSqlite.js +35 -1
  528. package/dist/persistence/FlowsPersistenceSqlite.js.map +1 -1
  529. package/dist/persistence/FlowsPersistenceSupabase.d.ts +10 -5
  530. package/dist/persistence/FlowsPersistenceSupabase.d.ts.map +1 -1
  531. package/dist/persistence/FlowsPersistenceSupabase.js +46 -1
  532. package/dist/persistence/FlowsPersistenceSupabase.js.map +1 -1
  533. package/dist/persistence/FlowsPersistenceVolatile.d.ts +10 -5
  534. package/dist/persistence/FlowsPersistenceVolatile.d.ts.map +1 -1
  535. package/dist/persistence/FlowsPersistenceVolatile.js +21 -1
  536. package/dist/persistence/FlowsPersistenceVolatile.js.map +1 -1
  537. package/dist/persistence/agents/AgentsPersistence.d.ts +12 -0
  538. package/dist/persistence/agents/AgentsPersistence.d.ts.map +1 -0
  539. package/dist/persistence/agents/AgentsPersistence.js +3 -0
  540. package/dist/persistence/agents/AgentsPersistence.js.map +1 -0
  541. package/dist/persistence/agents/AgentsPersistenceSqlite.d.ts +15 -0
  542. package/dist/persistence/agents/AgentsPersistenceSqlite.d.ts.map +1 -0
  543. package/dist/persistence/agents/AgentsPersistenceSqlite.js +50 -0
  544. package/dist/persistence/agents/AgentsPersistenceSqlite.js.map +1 -0
  545. package/dist/persistence/agents/AgentsPersistenceVolatile.d.ts +14 -0
  546. package/dist/persistence/agents/AgentsPersistenceVolatile.d.ts.map +1 -0
  547. package/dist/persistence/agents/AgentsPersistenceVolatile.js +26 -0
  548. package/dist/persistence/agents/AgentsPersistenceVolatile.js.map +1 -0
  549. package/dist/persistence/env/EnvPersistence.d.ts +20 -0
  550. package/dist/persistence/env/EnvPersistence.d.ts.map +1 -0
  551. package/dist/{models/ResolverContext.js → persistence/env/EnvPersistence.js} +1 -1
  552. package/dist/persistence/env/EnvPersistence.js.map +1 -0
  553. package/dist/persistence/env/EnvPersistenceAwsS3.d.ts +31 -0
  554. package/dist/persistence/env/EnvPersistenceAwsS3.d.ts.map +1 -0
  555. package/dist/persistence/env/EnvPersistenceAwsS3.js +117 -0
  556. package/dist/persistence/env/EnvPersistenceAwsS3.js.map +1 -0
  557. package/dist/persistence/env/EnvPersistenceFactory.d.ts +6 -0
  558. package/dist/persistence/env/EnvPersistenceFactory.d.ts.map +1 -0
  559. package/dist/persistence/env/EnvPersistenceFactory.js +3 -0
  560. package/dist/persistence/env/EnvPersistenceFactory.js.map +1 -0
  561. package/dist/persistence/env/EnvPersistenceFactoryImpl.d.ts +45 -0
  562. package/dist/persistence/env/EnvPersistenceFactoryImpl.d.ts.map +1 -0
  563. package/dist/persistence/env/EnvPersistenceFactoryImpl.js +86 -0
  564. package/dist/persistence/env/EnvPersistenceFactoryImpl.js.map +1 -0
  565. package/dist/persistence/env/EnvPersistenceFactoryPreset.d.ts +12 -0
  566. package/dist/persistence/env/EnvPersistenceFactoryPreset.d.ts.map +1 -0
  567. package/dist/persistence/env/EnvPersistenceFactoryPreset.js +17 -0
  568. package/dist/persistence/env/EnvPersistenceFactoryPreset.js.map +1 -0
  569. package/dist/persistence/env/EnvPersistenceFilesystem.d.ts +36 -0
  570. package/dist/persistence/env/EnvPersistenceFilesystem.d.ts.map +1 -0
  571. package/dist/persistence/env/EnvPersistenceFilesystem.js +132 -0
  572. package/dist/persistence/env/EnvPersistenceFilesystem.js.map +1 -0
  573. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +30 -0
  574. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +1 -0
  575. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js +131 -0
  576. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +1 -0
  577. package/dist/persistence/env/EnvPersistenceSqlite.d.ts +19 -0
  578. package/dist/persistence/env/EnvPersistenceSqlite.d.ts.map +1 -0
  579. package/dist/persistence/env/EnvPersistenceSqlite.js +54 -0
  580. package/dist/persistence/env/EnvPersistenceSqlite.js.map +1 -0
  581. package/dist/persistence/env/EnvPersistenceSupabase.d.ts +17 -0
  582. package/dist/persistence/env/EnvPersistenceSupabase.d.ts.map +1 -0
  583. package/dist/persistence/env/EnvPersistenceSupabase.js +60 -0
  584. package/dist/persistence/env/EnvPersistenceSupabase.js.map +1 -0
  585. package/dist/persistence/env/EnvPersistenceVolatile.d.ts +13 -0
  586. package/dist/persistence/env/EnvPersistenceVolatile.d.ts.map +1 -0
  587. package/dist/persistence/env/EnvPersistenceVolatile.js +31 -0
  588. package/dist/persistence/env/EnvPersistenceVolatile.js.map +1 -0
  589. package/dist/persistence/flows/FlowsPersistence.d.ts +87 -0
  590. package/dist/persistence/flows/FlowsPersistence.d.ts.map +1 -0
  591. package/dist/persistence/flows/FlowsPersistence.js +3 -0
  592. package/dist/persistence/flows/FlowsPersistence.js.map +1 -0
  593. package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts +71 -0
  594. package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +1 -0
  595. package/dist/persistence/flows/FlowsPersistenceAwsS3.js +448 -0
  596. package/dist/persistence/flows/FlowsPersistenceAwsS3.js.map +1 -0
  597. package/dist/persistence/flows/FlowsPersistenceFactory.d.ts +10 -0
  598. package/dist/persistence/flows/FlowsPersistenceFactory.d.ts.map +1 -0
  599. package/dist/persistence/flows/FlowsPersistenceFactory.js +3 -0
  600. package/dist/persistence/flows/FlowsPersistenceFactory.js.map +1 -0
  601. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.d.ts +57 -0
  602. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.d.ts.map +1 -0
  603. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.js +238 -0
  604. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.js.map +1 -0
  605. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.d.ts +13 -0
  606. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.d.ts.map +1 -0
  607. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.js +24 -0
  608. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.js.map +1 -0
  609. package/dist/persistence/flows/FlowsPersistenceFilesystem.d.ts +52 -0
  610. package/dist/persistence/flows/FlowsPersistenceFilesystem.d.ts.map +1 -0
  611. package/dist/persistence/flows/FlowsPersistenceFilesystem.js +291 -0
  612. package/dist/persistence/flows/FlowsPersistenceFilesystem.js.map +1 -0
  613. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +71 -0
  614. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -0
  615. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +429 -0
  616. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +1 -0
  617. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts +43 -0
  618. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -0
  619. package/dist/persistence/flows/FlowsPersistenceSqlite.js +259 -0
  620. package/dist/persistence/flows/FlowsPersistenceSqlite.js.map +1 -0
  621. package/dist/persistence/flows/FlowsPersistenceSupabase.d.ts +40 -0
  622. package/dist/persistence/flows/FlowsPersistenceSupabase.d.ts.map +1 -0
  623. package/dist/persistence/flows/FlowsPersistenceSupabase.js +218 -0
  624. package/dist/persistence/flows/FlowsPersistenceSupabase.js.map +1 -0
  625. package/dist/persistence/flows/FlowsPersistenceVolatile.d.ts +37 -0
  626. package/dist/persistence/flows/FlowsPersistenceVolatile.d.ts.map +1 -0
  627. package/dist/persistence/flows/FlowsPersistenceVolatile.js +151 -0
  628. package/dist/persistence/flows/FlowsPersistenceVolatile.js.map +1 -0
  629. package/dist/persistence/gptconfigs/GptConfigsPersistence.d.ts +12 -0
  630. package/dist/persistence/gptconfigs/GptConfigsPersistence.d.ts.map +1 -0
  631. package/dist/persistence/gptconfigs/GptConfigsPersistence.js +3 -0
  632. package/dist/persistence/gptconfigs/GptConfigsPersistence.js.map +1 -0
  633. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts +13 -0
  634. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts.map +1 -0
  635. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.js +35 -0
  636. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.js.map +1 -0
  637. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts +15 -0
  638. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts.map +1 -0
  639. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.js +31 -0
  640. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.js.map +1 -0
  641. package/dist/playwrightTestExtensions.d.ts +5 -0
  642. package/dist/playwrightTestExtensions.d.ts.map +1 -1
  643. package/dist/playwrightTestExtensions.js +83 -23
  644. package/dist/playwrightTestExtensions.js.map +1 -1
  645. package/dist/tools/AnalyzePageTextTool.js +1 -1
  646. package/dist/tools/AnalyzePageTextTool.js.map +1 -1
  647. package/dist/tools/AssertPageTextTool.js +1 -1
  648. package/dist/tools/AssertPageTextTool.js.map +1 -1
  649. package/dist/tools/AssertTool.d.ts.map +1 -1
  650. package/dist/tools/AssertTool.js +4 -4
  651. package/dist/tools/AssertTool.js.map +1 -1
  652. package/dist/tools/ChangeWebBrowserTabTool.d.ts.map +1 -1
  653. package/dist/tools/ChangeWebBrowserTabTool.js +8 -7
  654. package/dist/tools/ChangeWebBrowserTabTool.js.map +1 -1
  655. package/dist/tools/ClickTool.js +1 -1
  656. package/dist/tools/ClickTool.js.map +1 -1
  657. package/dist/tools/CreateBrowserCookieReportTool.js +1 -1
  658. package/dist/tools/CreateBrowserCookieReportTool.js.map +1 -1
  659. package/dist/tools/CustomToolRunnerTool.d.ts.map +1 -1
  660. package/dist/tools/CustomToolRunnerTool.js +1 -1
  661. package/dist/tools/CustomToolRunnerTool.js.map +1 -1
  662. package/dist/tools/DetectBrokenLinksTool.js +1 -1
  663. package/dist/tools/DetectBrokenLinksTool.js.map +1 -1
  664. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js +1 -1
  665. package/dist/tools/ExtractGoogleStreetviewEntityDataTool.js.map +1 -1
  666. package/dist/tools/ExtractPaymentProviderKeyTool.js +1 -1
  667. package/dist/tools/ExtractPaymentProviderKeyTool.js.map +1 -1
  668. package/dist/tools/ExtractPublicFacebookEntityDataTool.js +1 -1
  669. package/dist/tools/ExtractPublicFacebookEntityDataTool.js.map +1 -1
  670. package/dist/tools/GoForwardOrBackTool.js +1 -1
  671. package/dist/tools/GoForwardOrBackTool.js.map +1 -1
  672. package/dist/tools/GoToGoogleMapsStreetViewTool.js +1 -1
  673. package/dist/tools/GoToGoogleMapsStreetViewTool.js.map +1 -1
  674. package/dist/tools/GoToWebpageTool.d.ts.map +1 -1
  675. package/dist/tools/GoToWebpageTool.js +4 -3
  676. package/dist/tools/GoToWebpageTool.js.map +1 -1
  677. package/dist/tools/HoverOverElementTool.d.ts.map +1 -1
  678. package/dist/tools/HoverOverElementTool.js +1 -1
  679. package/dist/tools/HoverOverElementTool.js.map +1 -1
  680. package/dist/tools/NavigateWithinStreetView.js +1 -1
  681. package/dist/tools/NavigateWithinStreetView.js.map +1 -1
  682. package/dist/tools/PressKeyTool.js +1 -1
  683. package/dist/tools/PressKeyTool.js.map +1 -1
  684. package/dist/tools/ReloadPageTool.js +1 -1
  685. package/dist/tools/ReloadPageTool.js.map +1 -1
  686. package/dist/tools/ReplayableInteraction.d.ts +16 -1
  687. package/dist/tools/ReplayableInteraction.d.ts.map +1 -1
  688. package/dist/tools/ReplayableInteraction.js +169 -16
  689. package/dist/tools/ReplayableInteraction.js.map +1 -1
  690. package/dist/tools/RunAccessibilityTestTool.d.ts +8 -0
  691. package/dist/tools/RunAccessibilityTestTool.d.ts.map +1 -1
  692. package/dist/tools/RunAccessibilityTestTool.js +15 -2
  693. package/dist/tools/RunAccessibilityTestTool.js.map +1 -1
  694. package/dist/tools/RunInlineJavaScriptCodeTool.d.ts.map +1 -1
  695. package/dist/tools/RunInlineJavaScriptCodeTool.js +1 -1
  696. package/dist/tools/RunInlineJavaScriptCodeTool.js.map +1 -1
  697. package/dist/tools/SaveWebpageAsPdfTool.js +1 -1
  698. package/dist/tools/SaveWebpageAsPdfTool.js.map +1 -1
  699. package/dist/tools/ScrollPageTool.d.ts +1 -1
  700. package/dist/tools/ScrollPageTool.d.ts.map +1 -1
  701. package/dist/tools/ScrollPageTool.js +47 -4
  702. package/dist/tools/ScrollPageTool.js.map +1 -1
  703. package/dist/tools/WaitTool.js +1 -1
  704. package/dist/tools/WaitTool.js.map +1 -1
  705. package/dist/utils/MiscUtils.d.ts +2 -2
  706. package/dist/utils/MiscUtils.js +2 -2
  707. package/dist/utils/PlaywrightUtils.d.ts +26 -127
  708. package/dist/utils/PlaywrightUtils.d.ts.map +1 -1
  709. package/dist/utils/PlaywrightUtils.js +133 -935
  710. package/dist/utils/PlaywrightUtils.js.map +1 -1
  711. package/dist/utils/TemplateInterpolator.d.ts +21 -3
  712. package/dist/utils/TemplateInterpolator.d.ts.map +1 -1
  713. package/dist/utils/TemplateInterpolator.js +162 -21
  714. package/dist/utils/TemplateInterpolator.js.map +1 -1
  715. package/package.json +3 -1
  716. package/dist/assets/clickable-elements-tracker.js +0 -63
  717. package/dist/assets/zaru-eyes.html +0 -141
  718. package/dist/esm/assets/clickable-elements-tracker.js +0 -63
  719. package/dist/esm/assets/zaru-eyes.html +0 -141
  720. package/dist/esm/managers/TemplateInterpolator.d.ts +0 -19
  721. package/dist/esm/managers/TemplateInterpolator.d.ts.map +0 -1
  722. package/dist/esm/managers/TemplateInterpolator.js +0 -86
  723. package/dist/esm/managers/TemplateInterpolator.js.map +0 -1
  724. package/dist/esm/managers/ToolTipper.d.ts +0 -32
  725. package/dist/esm/managers/ToolTipper.d.ts.map +0 -1
  726. package/dist/esm/managers/ToolTipper.js +0 -229
  727. package/dist/esm/managers/ToolTipper.js.map +0 -1
  728. package/dist/esm/models/BrowserState.d.ts +0 -26
  729. package/dist/esm/models/BrowserState.d.ts.map +0 -1
  730. package/dist/esm/models/BrowserState.js.map +0 -1
  731. package/dist/esm/models/ResolverContext.d.ts +0 -7
  732. package/dist/esm/models/ResolverContext.d.ts.map +0 -1
  733. package/dist/esm/models/ResolverContext.js.map +0 -1
  734. package/dist/esm/test.d.ts +0 -78
  735. package/dist/esm/test.d.ts.map +0 -1
  736. package/dist/esm/test.js +0 -423
  737. package/dist/esm/test.js.map +0 -1
  738. package/dist/managers/TemplateInterpolator.d.ts +0 -19
  739. package/dist/managers/TemplateInterpolator.d.ts.map +0 -1
  740. package/dist/managers/TemplateInterpolator.js +0 -86
  741. package/dist/managers/TemplateInterpolator.js.map +0 -1
  742. package/dist/managers/ToolTipper.d.ts +0 -32
  743. package/dist/managers/ToolTipper.d.ts.map +0 -1
  744. package/dist/managers/ToolTipper.js +0 -229
  745. package/dist/managers/ToolTipper.js.map +0 -1
  746. package/dist/models/BrowserState.d.ts +0 -26
  747. package/dist/models/BrowserState.d.ts.map +0 -1
  748. package/dist/models/BrowserState.js.map +0 -1
  749. package/dist/models/ResolverContext.d.ts +0 -7
  750. package/dist/models/ResolverContext.d.ts.map +0 -1
  751. package/dist/models/ResolverContext.js.map +0 -1
  752. package/dist/test.d.ts +0 -78
  753. package/dist/test.d.ts.map +0 -1
  754. package/dist/test.js +0 -423
  755. package/dist/test.js.map +0 -1
  756. package/dist/tsconfig.esm.tsbuildinfo +0 -1
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- // PlaywrightUtils.ts
3
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
4
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
4
  };
@@ -10,6 +9,9 @@ const MiscUtils_1 = require("./MiscUtils");
10
9
  const path_1 = __importDefault(require("path"));
11
10
  const PageClosedException_1 = require("../exceptions/PageClosedException");
12
11
  const child_process_1 = require("child_process");
12
+ const ControlPanel_1 = require("../managers/ControlPanel");
13
+ const PageInspector_1 = require("../managers/PageInspector");
14
+ const RunAccessibilityTestTool_1 = require("../tools/RunAccessibilityTestTool");
13
15
  /**
14
16
  * Miscellaneous utility functions for working with the Playwright SDK. If you are looking to
15
17
  * instantiate a Playwright instance, see PlaywrightSetup instead.
@@ -26,7 +28,7 @@ class PlaywrightUtils {
26
28
  */
27
29
  static async takeScreenshot(page, type = 'jpeg') {
28
30
  try {
29
- const style = `#${PlaywrightUtils.DONOBU_CONTROL_PANEL_ELEMENT_ID} { display: none !important; }`;
31
+ const style = `#${ControlPanel_1.ControlPanel.DONOBU_CONTROL_PANEL_ELEMENT_ID} { display: none !important; }`;
30
32
  return await page.screenshot({
31
33
  style,
32
34
  type: type,
@@ -50,56 +52,9 @@ class PlaywrightUtils {
50
52
  */
51
53
  static async generateSelectors(element) {
52
54
  return element.evaluate((elem) => {
53
- return window.donobuGenerateSmartSelectors(elem);
55
+ return window.__donobu.generateSmartSelectors(elem);
54
56
  });
55
57
  }
56
- /**
57
- * Returns a JavaScript code snippet intended to run as an initialization
58
- * script for `DonobuFlow` flows. This script helps other scripts to know
59
- * which elements have mouse-click related event listeners attached to them
60
- * via inspecting the {@code window.donobuGetClickableElements} element array.
61
- */
62
- static clickableElementsTrackerInitScript() {
63
- return PlaywrightUtils.CLICKABLE_ELEMENTS_TRACKER_INIT_SCRIPT;
64
- }
65
- /**
66
- * Returns a JavaScript code snippet intended to run as an initialization
67
- * script for `DonobuFlow` flows. This script helps flows handle/track
68
- * prompts/confirmations. This is done specially since these browser actions
69
- * pause the Javascript main thread and also cause issues with running various
70
- * Playwright actions. See `DonobuFlow.onDialog(Dialog)` for details.
71
- */
72
- static dialogPromptTrackerInitScript() {
73
- return PlaywrightUtils.DIALOG_PROMPT_TRACKER_INIT_SCRIPT;
74
- }
75
- /**
76
- * Returns a JavaScript code snippet intended to run as an initialization
77
- * script for `DonobuFlow` flows. This is an in-page version of the
78
- * `SelectorGenerator` class so that smart selectors can be generated in
79
- * the web client. This is done so the
80
- * {@link PlaywrightUtils.pageInteractionsTrackerInitScript()} can generate
81
- * smart selectors on the fly and pass them to the `PageInteractionTracker`
82
- * so the page interactions can be converted to synthetic `ToolCallResult`s.
83
- */
84
- static smartSelectorGeneratorInitScript() {
85
- return PlaywrightUtils.SMART_SELECTOR_GENERATOR_INIT_SCRIPT;
86
- }
87
- /**
88
- * This script is used by the `RunAccessibilityTestTool` to test the
89
- * accessibility of a webpage. This script is injected on page load, rather
90
- * than when running the `RunAccessibilityTestTool` because we need to bypass
91
- * webpage Content Security Policy (CSP); this is done by injecting the
92
- * script via `BrowserContext#addInitScript`.
93
- */
94
- static accessibilityTestInitScript() {
95
- return PlaywrightUtils.ACCESSIBILITY_TEST_INIT_SCRIPT;
96
- }
97
- static pageInteractionsTrackerInitScript() {
98
- return PlaywrightUtils.PAGE_INTERACTIONS_TRACKER_INIT_SCRIPT;
99
- }
100
- static donobuControlPanelInitScript() {
101
- return PlaywrightUtils.DONOBU_CONTROL_PANEL_INIT_SCRIPT;
102
- }
103
58
  /**
104
59
  * Sets up the given browser context so that it can be minimally used by the
105
60
  * rest of Donobu. This involves registering virtual routes for serving up
@@ -107,614 +62,10 @@ class PlaywrightUtils {
107
62
  * scripts.
108
63
  */
109
64
  static async setupBasicBrowserContext(browserContext) {
110
- // Add Donobu CSS and SVG routes to the browser so that are not violating
111
- // the CSP of any of the pages we attempt to render our custom stuff on.
112
- await browserContext.route('**/donobu-virtual-mouse.svg', async (route) => {
113
- await route.fulfill({
114
- status: 200,
115
- contentType: 'image/svg+xml',
116
- body: MiscUtils_1.MiscUtils.getResourceFileAsString('donobu-virtual-mouse.svg'),
117
- });
118
- });
119
- await browserContext.route('**/donobu.css', async (route) => {
120
- await route.fulfill({
121
- status: 200,
122
- contentType: 'text/css',
123
- body: MiscUtils_1.MiscUtils.getResourceFileAsString('donobu.css'),
124
- });
125
- });
126
- await browserContext.addInitScript(PlaywrightUtils.accessibilityTestInitScript());
127
- await browserContext.addInitScript(PlaywrightUtils.clickableElementsTrackerInitScript());
128
- await browserContext.addInitScript(PlaywrightUtils.dialogPromptTrackerInitScript());
129
- await browserContext.addInitScript(PlaywrightUtils.smartSelectorGeneratorInitScript());
130
- }
131
- /**
132
- * Returns the given locator or its label, if it has one and is associated with a labelable element.
133
- * Labelable elements include: button, input (except hidden), meter, output, progress, select, and textarea.
134
- */
135
- static async getLocatorOrItsLabel(element) {
136
- const timeoutMilliseconds = 5000;
137
- try {
138
- // First check if the element itself is visible
139
- try {
140
- await element.waitFor({
141
- state: 'visible',
142
- timeout: timeoutMilliseconds,
143
- });
144
- }
145
- catch (error) {
146
- // If the element itself isn't visible, just return it without looking for labels
147
- if (PlaywrightUtils.isPageClosedError(error)) {
148
- throw new PageClosedException_1.PageClosedException();
149
- }
150
- return element;
151
- }
152
- // Check if the element is a labelable element
153
- // See https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/label
154
- const isLabelable = await element.evaluate((elem) => {
155
- const tagName = elem.tagName.toLowerCase();
156
- if (tagName === 'button' ||
157
- tagName === 'meter' ||
158
- tagName === 'output' ||
159
- tagName === 'progress' ||
160
- tagName === 'select' ||
161
- tagName === 'textarea') {
162
- return true;
163
- }
164
- if (tagName === 'input') {
165
- // Input is labelable except when type="hidden"
166
- const type = elem.getAttribute('type')?.toLowerCase() || 'text';
167
- return type !== 'hidden';
168
- }
169
- return false;
170
- });
171
- // If the element is not labelable, return the original locator
172
- if (!isLabelable) {
173
- return element;
174
- }
175
- // Try to get the ID attribute
176
- const id = await element
177
- .getAttribute('id', {
178
- timeout: timeoutMilliseconds,
179
- })
180
- .catch(() => null);
181
- if (id) {
182
- try {
183
- // Get the underlying ElementHandle first
184
- const handle = await element.elementHandle({
185
- timeout: timeoutMilliseconds,
186
- });
187
- if (handle) {
188
- // From the handle, retrieve the frame that owns this element
189
- const frame = await handle.ownerFrame();
190
- if (frame) {
191
- // Look for label with matching 'for' attribute
192
- const labelByFor = frame.locator(`label[for="${id}"]`);
193
- // Check if the label exists and is visible
194
- if ((await labelByFor.count()) > 0) {
195
- try {
196
- await labelByFor.waitFor({
197
- state: 'visible',
198
- timeout: timeoutMilliseconds,
199
- });
200
- return labelByFor;
201
- }
202
- catch (visibilityError) {
203
- // If label exists but isn't visible, continue to other checks
204
- if (PlaywrightUtils.isPageClosedError(visibilityError)) {
205
- throw new PageClosedException_1.PageClosedException();
206
- }
207
- }
208
- }
209
- }
210
- }
211
- }
212
- catch (error) {
213
- // Handle errors in the ElementHandle/frame retrieval, but continue to other checks
214
- if (PlaywrightUtils.isPageClosedError(error)) {
215
- throw new PageClosedException_1.PageClosedException();
216
- }
217
- }
218
- }
219
- // Fallback: look for a directly wrapping label (immediate ancestor)
220
- // Using 'xpath=parent::label' to only get direct parent if it's a label
221
- const directParentLabel = element.locator('xpath=parent::label');
222
- if ((await directParentLabel.count()) > 0) {
223
- try {
224
- await directParentLabel.waitFor({
225
- state: 'visible',
226
- timeout: timeoutMilliseconds,
227
- });
228
- return directParentLabel;
229
- }
230
- catch (visibilityError) {
231
- if (PlaywrightUtils.isPageClosedError(visibilityError)) {
232
- throw new PageClosedException_1.PageClosedException();
233
- }
234
- }
235
- }
236
- // If direct parent isn't a label, check any ancestor label
237
- const wrappingLabel = element.locator('xpath=ancestor::label[1]'); // Get closest ancestor label
238
- if ((await wrappingLabel.count()) > 0) {
239
- try {
240
- await wrappingLabel.waitFor({
241
- state: 'visible',
242
- timeout: timeoutMilliseconds,
243
- });
244
- return wrappingLabel;
245
- }
246
- catch (visibilityError) {
247
- if (PlaywrightUtils.isPageClosedError(visibilityError)) {
248
- throw new PageClosedException_1.PageClosedException();
249
- }
250
- }
251
- }
252
- // Neither "for" nor wrapping label found or visible
253
- return element;
254
- }
255
- catch (error) {
256
- if (PlaywrightUtils.isPageClosedError(error)) {
257
- throw new PageClosedException_1.PageClosedException();
258
- }
259
- throw error;
260
- }
261
- }
262
- /**
263
- * Reads and clears the desired next state as directed by the in-flow control
264
- * panel. Note that the control panel does not have carte blanche control, as
265
- * we only support the control panel signaling an intent to pause and resume a
266
- * flow.
267
- */
268
- static async popControlPanelNextDesiredState(page) {
269
- try {
270
- const desiredNextState = await page.evaluate(() => {
271
- const tmpState = window.donobuNextState;
272
- window.donobuNextState = null;
273
- return tmpState;
274
- });
275
- if (desiredNextState) {
276
- return desiredNextState;
277
- }
278
- }
279
- catch (error) {
280
- if (PlaywrightUtils.isPageClosedError(error)) {
281
- throw new PageClosedException_1.PageClosedException();
282
- }
283
- else {
284
- throw error;
285
- }
286
- }
287
- return null;
288
- }
289
- /**
290
- * Hides the control panel by setting its display to 'none'. This ensures the
291
- * panel is not visible and does not intercept mouse events.
292
- */
293
- static async hideControlPanel(focusedPage, flowMetadata) {
294
- if (!flowMetadata.isControlPanelEnabled) {
295
- return;
296
- }
297
- for (const page of focusedPage.context().pages()) {
298
- try {
299
- await page.evaluate((panelId) => {
300
- const element = document.querySelector(`#${panelId}`);
301
- if (element) {
302
- element.style.display = 'none';
303
- }
304
- }, PlaywrightUtils.DONOBU_CONTROL_PANEL_ELEMENT_ID);
305
- }
306
- catch (error) {
307
- if (PlaywrightUtils.isPageClosedError(error)) {
308
- // Pass; this can happen normally.
309
- }
310
- else {
311
- Logger_1.appLogger.error(`Unexpected exception while attempting to show control panel for flow '${flowMetadata.id}'`, error);
312
- }
313
- }
314
- }
315
- }
316
- /**
317
- * Shows the control panel by resetting its display property. Assumes the
318
- * original display was 'block'.
319
- */
320
- static async showControlPanel(focusedPage, flowMetadata) {
321
- if (!flowMetadata.isControlPanelEnabled) {
322
- return;
323
- }
324
- for (const page of focusedPage.context().pages()) {
325
- try {
326
- await page.evaluate((panelId) => {
327
- const element = document.querySelector(`#${panelId}`);
328
- if (element) {
329
- element.style.display = 'block';
330
- }
331
- }, PlaywrightUtils.DONOBU_CONTROL_PANEL_ELEMENT_ID);
332
- }
333
- catch (error) {
334
- if (PlaywrightUtils.isPageClosedError(error)) {
335
- // Pass; this can happen normally.
336
- }
337
- else {
338
- Logger_1.appLogger.error(`Unexpected exception while attempting to show control panel for flow '${flowMetadata.id}'`, error);
339
- }
340
- }
341
- }
342
- }
343
- /**
344
- * Updates all control panels in the given browser context. If the provided
345
- * headline is non-null, the headline in the control panel will be updated.
346
- */
347
- static async updateControlPanel(focusedPage, flowMetadata, headline) {
348
- const controlPanelQuerySelector = `#${PlaywrightUtils.DONOBU_CONTROL_PANEL_ELEMENT_ID}`;
349
- const controlPanelHeadlineQuerySelector = `#${PlaywrightUtils.DONOBU_CONTROL_PANEL_HEADLINE_ELEMENT_ID}`;
350
- for (const page of focusedPage.context().pages()) {
351
- try {
352
- const controlPanel = page.locator(controlPanelQuerySelector).first();
353
- if ((await controlPanel.count()) === 1) {
354
- await controlPanel.evaluate((element, state) => {
355
- element.donobuFlowState = state;
356
- }, flowMetadata.state.toString());
357
- if (headline) {
358
- const controlPanelHeadline = page
359
- .locator(controlPanelHeadlineQuerySelector)
360
- .first();
361
- if ((await controlPanelHeadline.count()) === 1) {
362
- const escapedMessage = headline.replace(/[\\"']/g, '\\$&');
363
- await controlPanelHeadline.evaluate((element, message) => {
364
- element.textContent = message;
365
- }, escapedMessage);
366
- }
367
- }
368
- }
369
- }
370
- catch (error) {
371
- if (PlaywrightUtils.isPageClosedError(error)) {
372
- // Pass; this can happen normally.
373
- }
374
- else {
375
- Logger_1.appLogger.error(`Unexpected exception while attempting to show control panel for flow '${flowMetadata.id}'`, error);
376
- }
377
- }
378
- }
379
- }
380
- /**
381
- * Returns all elements that have the
382
- * {@link PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE} HTML attribute.
383
- **/
384
- static async getAttributedInteractableElements(page) {
385
- try {
386
- const interactableElements = [];
387
- const frames = page
388
- .frames()
389
- .filter((frame) => PlaywrightUtils.frameFilter(frame));
390
- for (const frame of frames) {
391
- const attributeMap = await frame.evaluate((interactableAttribute) => {
392
- const getOuterHTMLWithoutChildrenExceptForSelectElements = (element) => {
393
- if (element.tagName.toLowerCase() === 'select') {
394
- return element.outerHTML;
395
- }
396
- else {
397
- const tempElement = document.createElement('div');
398
- tempElement.appendChild(element.cloneNode(false));
399
- return tempElement.innerHTML;
400
- }
401
- };
402
- const attributeToHtmlMap = {};
403
- const elements = document.querySelectorAll(`[${interactableAttribute}]`);
404
- elements.forEach((element) => {
405
- const attributeValue = element.getAttribute(interactableAttribute);
406
- const outerHtml = getOuterHTMLWithoutChildrenExceptForSelectElements(element);
407
- if (attributeValue) {
408
- attributeToHtmlMap[attributeValue] = outerHtml;
409
- }
410
- });
411
- return attributeToHtmlMap;
412
- }, PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE);
413
- Object.entries(attributeMap).forEach(([donobuAttributeValue, htmlSnippet]) => {
414
- interactableElements.push({
415
- donobuAttributeValue,
416
- htmlSnippet,
417
- });
418
- });
419
- }
420
- return interactableElements;
421
- }
422
- catch (error) {
423
- if (PlaywrightUtils.isPageClosedError(error)) {
424
- throw new PageClosedException_1.PageClosedException();
425
- }
426
- else {
427
- throw error;
428
- }
429
- }
430
- }
431
- /**
432
- * Assigns a globally unique {@link PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE}
433
- * attribute value to each visible, interactable, element in the given page.
434
- * Any pre-existing {@link PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE}
435
- * attributes will be removed.
436
- */
437
- static async attributeInteractableElements(page) {
438
- try {
439
- // Remove any preexisting attributes
440
- await this.deattributeVisibleInteractableElements(page);
441
- // Get viewport dimensions and scroll position properly
442
- const viewportInfo = await page.evaluate(() => {
443
- return {
444
- viewportWidth: window.innerWidth,
445
- viewportHeight: window.innerHeight,
446
- scrollX: window.scrollX || window.pageXOffset,
447
- scrollY: window.scrollY || window.pageYOffset,
448
- };
449
- });
450
- // 1) Attribute elements in the main page
451
- let annotationOffset = await page.evaluate(this.attributeElementsInContext, [0, PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE]);
452
- // 2) Check child frames, attributing elements if the frame is (partially) in view
453
- const frames = page
454
- .frames()
455
- .filter((frame) => PlaywrightUtils.frameFilter(frame) && frame !== page.mainFrame());
456
- for (const frame of frames) {
457
- const elementHandle = await frame.frameElement();
458
- if (!elementHandle) {
459
- continue;
460
- }
461
- const boundingBox = await elementHandle.boundingBox();
462
- if (!boundingBox) {
463
- continue;
464
- }
465
- // boundingBox coordinates are already in viewport space, so we need to account for scroll
466
- const isInViewport = boundingBox.x + boundingBox.width > 0 &&
467
- boundingBox.x < viewportInfo.viewportWidth &&
468
- boundingBox.y + boundingBox.height > 0 &&
469
- boundingBox.y < viewportInfo.viewportHeight;
470
- if (isInViewport) {
471
- annotationOffset = await frame.evaluate(this.attributeElementsInContext, [
472
- annotationOffset,
473
- PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE,
474
- ]);
475
- }
476
- }
477
- }
478
- catch (error) {
479
- if (PlaywrightUtils.isPageClosedError(error)) {
480
- throw new PageClosedException_1.PageClosedException();
481
- }
482
- else {
483
- throw error;
484
- }
485
- }
486
- }
487
- /**
488
- * Annotate all elements in the given page that have a
489
- * {@link PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE} HTML attribute.
490
- *
491
- * The annotations are placed in a shadow root to avoid site-specific CSS,
492
- * each having a {@link PlaywrightUtils.DONOBU_ANNOTATION_ATTRIBUTE} attribute.
493
- */
494
- static async annotateInteractableElements(page) {
495
- try {
496
- // Filter frames as needed
497
- const frames = page
498
- .frames()
499
- .filter((frame) => PlaywrightUtils.frameFilter(frame));
500
- for (const frame of frames) {
501
- await frame.evaluate(([interactableAttr, annotationAttr]) => {
502
- // 1) Ensure we have a shadow container in the main document
503
- let container = document.getElementById('annotation-shadow-container');
504
- if (!container) {
505
- container = document.createElement('div');
506
- container.id = 'annotation-shadow-container';
507
- // Position container so child elements can be absolutely placed
508
- Object.assign(container.style, {
509
- position: 'fixed', // anchor to viewport
510
- inset: '0', // stretch across it
511
- pointerEvents: 'none', // Let clicks pass through
512
- zIndex: '2147483647', // win every z-index fight
513
- });
514
- // Check if document.body exists before trying to append.
515
- if (document.body) {
516
- document.body.appendChild(container);
517
- }
518
- else if (document.documentElement) {
519
- // Fall back to document.documentElement if body does not exist.
520
- document.documentElement.appendChild(container);
521
- }
522
- else {
523
- // If neither exists, we can't proceed with annotations in this frame.
524
- console.warn(`Cannot create annotation container for ${window.location.href} since the document structure is incomplete`);
525
- return;
526
- }
527
- // Attach a shadow root
528
- const shadowRoot = container.attachShadow({ mode: 'open' });
529
- // Add a <style> element inside the shadow root to reset and define annotation styles
530
- const style = document.createElement('style');
531
- style.textContent = `
532
- :host {
533
- all: initial; /* Reset styles in shadow root */
534
- }
535
- .annotation {
536
- position: absolute;
537
- z-index: 2147483647;
538
- background-color: black;
539
- color: white;
540
- width: 40px;
541
- height: 40px;
542
- border-radius: 50%;
543
- display: flex;
544
- align-items: center;
545
- justify-content: center;
546
- font-size: 14px;
547
- font-weight: bold;
548
- line-height: 20px;
549
- text-align: center;
550
- box-shadow: 0px 2px 4px rgba(0,0,0,0.2);
551
- border: 4px solid #FF4136;
552
- pointer-events: none;
553
- }
554
- `;
555
- shadowRoot.appendChild(style);
556
- }
557
- // Retrieve the shadow root to place annotation elements
558
- const containerEl = document.getElementById('annotation-shadow-container');
559
- if (!containerEl?.shadowRoot) {
560
- return;
561
- }
562
- const shadowRoot = containerEl.shadowRoot;
563
- // 2) Factory to create a new annotation inside the shadow root
564
- const createAnnotation = (value) => {
565
- const annotation = document.createElement('div');
566
- annotation.classList.add('annotation');
567
- annotation.dataset[annotationAttr] = '1';
568
- annotation.textContent = value;
569
- return annotation;
570
- };
571
- // 3) Position annotation relative to an element
572
- const positionAnnotation = (annotation, element) => {
573
- const rect = element.getBoundingClientRect();
574
- // Center the annotation on the element, adjusting for its size
575
- const x = rect.left + rect.width / 2 - 20 + window.scrollX;
576
- const y = rect.top + rect.height / 2 - 20 + window.scrollY;
577
- annotation.style.left = `${x}px`;
578
- annotation.style.top = `${y}px`;
579
- };
580
- // 4) Traverse DOM (including any nested shadow roots) to find interactable elements
581
- const processNode = (root) => {
582
- // Find elements with the interactable attribute
583
- const elements = root.querySelectorAll(`[${interactableAttr}]`);
584
- elements.forEach((element) => {
585
- const value = element.getAttribute(interactableAttr);
586
- if (value) {
587
- const annotation = createAnnotation(value);
588
- shadowRoot.appendChild(annotation);
589
- positionAnnotation(annotation, element);
590
- }
591
- });
592
- // Recursively process any child shadow roots
593
- root.querySelectorAll('*').forEach((el) => {
594
- if (el.shadowRoot) {
595
- processNode(el.shadowRoot);
596
- }
597
- });
598
- };
599
- // Start processing from the (frame) document root
600
- processNode(document);
601
- }, [
602
- PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE,
603
- PlaywrightUtils.convertToJsAttribute(PlaywrightUtils.DONOBU_ANNOTATION_ATTRIBUTE),
604
- ]);
605
- }
606
- }
607
- catch (error) {
608
- if (PlaywrightUtils.isPageClosedError(error)) {
609
- throw new PageClosedException_1.PageClosedException();
610
- }
611
- else {
612
- throw error;
613
- }
614
- }
615
- }
616
- /**
617
- * Removes all annotations with a {@link PlaywrightUtils.DONOBU_ANNOTATION_ATTRIBUTE}
618
- * HTML attribute in the given page, including any containers in shadow DOM.
619
- */
620
- static async removeDonobuAnnotations(page) {
621
- try {
622
- const frames = page
623
- .frames()
624
- .filter((frame) => PlaywrightUtils.frameFilter(frame));
625
- for (const frame of frames) {
626
- await frame.evaluate(() => {
627
- const containerId = 'annotation-shadow-container';
628
- const container = document.getElementById(containerId);
629
- if (container) {
630
- container.remove();
631
- }
632
- });
633
- }
634
- }
635
- catch (error) {
636
- if (PlaywrightUtils.isPageClosedError(error)) {
637
- throw new PageClosedException_1.PageClosedException();
638
- }
639
- throw error;
640
- }
641
- }
642
- /**
643
- * Removes the {@link PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE} HTML
644
- * attribute for all elements in the given page. This attribute is normally
645
- * added by the {@link PlaywrightUtils.attributeInteractableElements(Page)}
646
- * function.
647
- */
648
- static async deattributeVisibleInteractableElements(page) {
649
- try {
650
- const frames = page
651
- .frames()
652
- .filter((frame) => PlaywrightUtils.frameFilter(frame));
653
- for (const frame of frames) {
654
- await frame.evaluate((attr) => {
655
- document.querySelectorAll(`[${attr}]`).forEach((element) => {
656
- element.removeAttribute(attr);
657
- });
658
- }, PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE);
659
- }
660
- }
661
- catch (error) {
662
- if (PlaywrightUtils.isPageClosedError(error)) {
663
- throw new PageClosedException_1.PageClosedException();
664
- }
665
- else {
666
- throw error;
667
- }
668
- }
669
- }
670
- static async parseUnambiguousSelector(elementHandle) {
671
- try {
672
- return await elementHandle.evaluate((element) => {
673
- const escapeCssIdentifier = (ident) => {
674
- return ident.replace(/([!"#$%&'()*+,./:;<=>?@[\\]^{|}~])/g, '\\$1');
675
- };
676
- const getPath = (el) => {
677
- if (el.id)
678
- return '#' + escapeCssIdentifier(el.id);
679
- if (!el.parentNode || el.parentNode.nodeType === Node.DOCUMENT_NODE)
680
- return '';
681
- const siblings = Array.from(el.parentNode.children).filter((e) => e.tagName === el.tagName);
682
- const index = siblings.indexOf(el) + 1;
683
- const tag = el.tagName.toLowerCase();
684
- const parentPath = getPath(el.parentNode);
685
- return (parentPath +
686
- (parentPath ? ' > ' : '') +
687
- tag +
688
- (siblings.length > 1 ? ':nth-child(' + index + ')' : ''));
689
- };
690
- return getPath(element);
691
- });
692
- }
693
- catch (error) {
694
- if (PlaywrightUtils.isPageClosedError(error)) {
695
- throw new PageClosedException_1.PageClosedException();
696
- }
697
- else {
698
- throw error;
699
- }
700
- }
701
- }
702
- /**
703
- * Converts an HTML attribute to a JavaScript attribute. For example,
704
- * "data-foo-bar" is turned into "fooBar". Notice the dropping of the "data-"
705
- * prefix, and the conversion from kebab-case to camelCase.
706
- */
707
- static convertToJsAttribute(htmlAttribute) {
708
- if (htmlAttribute.startsWith('data-')) {
709
- htmlAttribute = htmlAttribute.substring(5);
710
- }
711
- const parts = htmlAttribute.split('-');
712
- const jsAttribute = parts[0] +
713
- parts
714
- .slice(1)
715
- .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
716
- .join('');
717
- return jsAttribute;
65
+ await browserContext.addInitScript(RunAccessibilityTestTool_1.RunAccessibilityTestTool.INIT_SCRIPT);
66
+ await browserContext.addInitScript(PageInspector_1.PageInspector.INIT_SCRIPT);
67
+ await browserContext.addInitScript(PlaywrightUtils.DIALOG_PROMPT_TRACKER_INIT_SCRIPT);
68
+ await browserContext.addInitScript(PlaywrightUtils.SMART_SELECTOR_GENERATOR_INIT_SCRIPT);
718
69
  }
719
70
  /**
720
71
  * Returned true IFF the given error is a Playwright error regarding page closing,
@@ -805,295 +156,142 @@ class PlaywrightUtils {
805
156
  }
806
157
  }
807
158
  }
808
- static frameFilter(frame) {
809
- return (!frame.isDetached() &&
810
- !frame.url().startsWith('about:') &&
811
- !frame.url().startsWith('chrome:') &&
812
- !frame.url().startsWith('edge:'));
813
- }
814
159
  /**
815
- * This function is injected into the page (or frame) context. It finds
816
- * "interactable" elements, checks visibility, and sets a unique attribute.
817
- * It returns the updated offset after labeling.
160
+ * Takes a screenshot of the webpage as if it were scrolled down by one viewport.
161
+ * If the page cannot be scrolled as a whole, tries to find and scroll individual
162
+ * scrollable elements on the page. After taking the screenshot, it reverts to
163
+ * the original scroll position.
164
+ *
165
+ * @param page The Playwright Page to take a screenshot of
166
+ * @returns An image buffer of the scrolled down view, or undefined if scrolling isn't possible
818
167
  */
819
- static attributeElementsInContext(arg) {
820
- let offset = arg[0];
821
- const interactableAttribute = arg[1];
822
- // --- Utility Functions ---
823
- function isElementVisible(rect, style) {
824
- return (rect.width > 0 &&
825
- rect.height > 0 &&
826
- style.display !== 'none' &&
827
- style.visibility !== 'hidden');
828
- }
829
- function isElementMoreThanHalfInViewport(rect) {
830
- const viewportWidth = window.innerWidth || document.documentElement.clientWidth;
831
- const viewportHeight = window.innerHeight || document.documentElement.clientHeight;
832
- const visibleWidth = Math.min(rect.right, viewportWidth) - Math.max(rect.left, 0);
833
- const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);
834
- const visibleArea = Math.max(0, visibleWidth) * Math.max(0, visibleHeight);
835
- const elementArea = rect.width * rect.height;
836
- return visibleArea >= elementArea / 2;
837
- }
838
- function isElementEnabled(element, style) {
839
- // Check standard disabled attribute (for form controls like button, input, etc.)
840
- if (element.hasAttribute('disabled')) {
841
- return false;
842
- }
843
- // Check for ARIA attributes that indicate non-interactivity
844
- if (element.getAttribute('aria-disabled') === 'true' ||
845
- element.getAttribute('aria-hidden') === 'true') {
846
- return false;
847
- }
848
- // Check for pointer-events: none which prevents interactions
849
- if (style.pointerEvents === 'none') {
850
- return false;
851
- }
852
- // Check for ARIA attributes indicating disabled state
853
- if (element.getAttribute('aria-disabled') === 'true') {
854
- return false;
855
- }
856
- // Check for inert attribute which makes elements non-interactive
857
- if (element.hasAttribute('inert')) {
858
- return false;
859
- }
860
- // If the element is in a form and the fieldset is disabled, it might be disabled as well
861
- let parent = element.parentElement;
862
- while (parent) {
863
- if (parent.tagName.toLowerCase() === 'fieldset' &&
864
- parent.hasAttribute('disabled') &&
865
- element.tagName.toLowerCase() !== 'legend') {
866
- return false;
867
- }
868
- parent = parent.parentElement;
869
- }
870
- return true;
871
- }
872
- /**
873
- * Generate a few test points on the element's bounding box. We only need
874
- * a small offset (1px) from each corner, plus the center.
875
- */
876
- function getPointsToCheck(rect) {
877
- const cornerOffset = 1;
878
- return [
879
- { x: rect.left + cornerOffset, y: rect.top + cornerOffset },
880
- { x: rect.right - cornerOffset, y: rect.top + cornerOffset },
881
- { x: rect.left + cornerOffset, y: rect.bottom - cornerOffset },
882
- { x: rect.right - cornerOffset, y: rect.bottom - cornerOffset },
883
- { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 },
884
- ];
885
- }
886
- /**
887
- * Like `elementFromPoint` but continues walking shadow roots if found.
888
- */
889
- function getDeepElementFromPoint(x, y) {
890
- let el = document.elementFromPoint(x, y);
891
- while (el && el.shadowRoot) {
892
- const shadowEl = el.shadowRoot.elementFromPoint(x, y);
893
- if (!shadowEl || shadowEl === el)
894
- break;
895
- el = shadowEl;
896
- }
897
- return el;
898
- }
899
- function getAllInteractableElements(root) {
900
- const selector = [
901
- // ----- STANDARD HTML INTERACTIVE ELEMENTS -----
902
- // Basic form controls and interactive elements
903
- 'button',
904
- 'button svg', // SVG inside buttons are also clickable
905
- 'input',
906
- 'textarea',
907
- 'a',
908
- 'select',
909
- 'summary', // Disclosure (details/summary) elements
910
- 'details',
911
- 'audio[controls]', // Media controls
912
- 'video[controls]',
913
- // ----- ARIA ROLE-BASED INTERACTIVE ELEMENTS -----
914
- // Elements with explicit interactive ARIA roles
915
- '[role="button"]',
916
- '[role="option"]',
917
- '[role="link"]',
918
- '[role="checkbox"]',
919
- '[role="radio"]',
920
- '[role="tab"]',
921
- '[role="menuitem"]',
922
- '[role="menuitemcheckbox"]',
923
- '[role="menuitemradio"]',
924
- '[role="combobox"]',
925
- '[role="listbox"]',
926
- '[role="searchbox"]',
927
- '[role="spinbutton"]',
928
- '[role="slider"]',
929
- '[role="switch"]',
930
- '[role="menu"]',
931
- '[role="menubar"]',
932
- '[role="treeitem"]',
933
- // ----- INTERACTIVE ARIA ATTRIBUTES -----
934
- // Elements with popup behavior
935
- '[aria-haspopup]',
936
- '[aria-controls]',
937
- '[aria-expanded]', // Elements that can expand/collapse
938
- '[aria-pressed]', // Toggle buttons
939
- '[aria-selected]', // Selectable items
940
- // ----- EDITABLE AND FOCUSABLE ELEMENTS -----
941
- // Elements that can receive input
942
- '[contenteditable="true"]',
943
- // Elements that can be dragged
944
- '[draggable="true"]',
945
- // Elements with explicit focus capability
946
- '[tabindex]:not([tabindex="-1"])',
947
- // ----- CSS FRAMEWORK-SPECIFIC CLASSES -----
948
- // Bootstrap & similar frameworks
949
- '.btn', // Standard button class
950
- '.dropdown-toggle', // Dropdown triggers
951
- '.nav-link', // Navigation links
952
- '.page-link', // Pagination links
953
- '.card-header[data-toggle="collapse"]', // Collapsible headers
954
- '.accordion-button', // Accordion toggles
955
- '.close', // Close buttons
956
- '.modal-close', // Modal close buttons
957
- // Material Design & Angular Material
958
- '.mdc-button',
959
- '.mat-button',
960
- '.mat-icon-button',
961
- '.mat-fab',
962
- '.mat-mini-fab',
963
- '.mat-menu-item',
964
- '.mat-tab-label',
965
- // Foundation
966
- '.button',
967
- '.menu-item',
968
- '.accordion-title',
969
- // Tailwind UI & Headless UI components
970
- '.tw-button',
971
- '[x-on\\:click]', // Alpine.js click handlers
972
- // Vue-based frameworks
973
- '.v-btn', // Vuetify
974
- '.el-button', // Element UI
975
- // React-based frameworks
976
- '.ant-btn', // Ant Design
977
- '.chakra-button', // Chakra UI
978
- '.mui-button', // Material-UI
979
- // ----- CUSTOM INTERACTIVE PATTERNS -----
980
- // Common custom interactive classes
981
- '.clickable',
982
- '.selectable',
983
- '.interactive',
984
- '.toggle',
985
- '.expandable',
986
- '.switch',
987
- '.slider',
988
- // Common dropdown/select libraries
989
- '.select2-selection',
990
- '.chosen-single',
991
- '.vs__dropdown-toggle', // Vue Select
992
- // Tabs and accordion components
993
- '.tab',
994
- '.tab-header',
995
- '.tab-title',
996
- '.accordion-header',
997
- // Mobile-friendly interactive elements
998
- '.swipe-item',
999
- '.touch-target',
1000
- // ----- COMMON COMPONENT PATTERNS -----
1001
- // Cards and tiles that are often clickable
1002
- '.card[onclick]',
1003
- '.tile[onclick]',
1004
- '.card a', // Links inside cards
1005
- // Social media & e-commerce patterns
1006
- '.share-button',
1007
- '.like-button',
1008
- '.add-to-cart',
1009
- '.product-card',
1010
- // Notification and alert controls
1011
- '.alert .close',
1012
- '.toast .close',
1013
- '.notification-action',
1014
- ].join(', ');
1015
- let elements = Array.from(root.querySelectorAll(selector));
1016
- // Dive into shadow roots
1017
- root.querySelectorAll('*').forEach((el) => {
1018
- if (el.shadowRoot) {
1019
- // Recurse
1020
- elements = elements.concat(getAllInteractableElements(el.shadowRoot));
1021
- }
168
+ static async getScrolledDownScreenShot(page) {
169
+ try {
170
+ // Get the current scroll position and viewport height
171
+ const { scrollX, scrollY, viewportHeight } = await page.evaluate(() => {
172
+ return {
173
+ scrollX: window.scrollX,
174
+ scrollY: window.scrollY,
175
+ viewportHeight: window.innerHeight,
176
+ };
1022
177
  });
1023
- // Remove duplicates
1024
- return Array.from(new Set(elements));
1025
- }
1026
- // 1) Gather candidate elements (including any custom "clickable" from donobuGetClickableElements)
1027
- let interactableElements = getAllInteractableElements(document);
1028
- if (window.donobuGetClickableElements) {
1029
- interactableElements = interactableElements.concat(window
1030
- .donobuGetClickableElements()
1031
- // Exclude elements with a "donobu-" prefixed ID.
1032
- .filter((el) => !el.id ||
1033
- (typeof el.id === 'string' && !el.id.startsWith('donobu-'))));
1034
- }
1035
- // Use a Set to avoid duplicates
1036
- const uniqueElements = new Set(interactableElements);
1037
- // 2) Check each element for visibility + actual "interactability"
1038
- uniqueElements.forEach((element) => {
1039
- if (typeof element.getBoundingClientRect !== 'function') {
1040
- // Should be rare, but just in case
1041
- return;
1042
- }
1043
- const rect = element.getBoundingClientRect();
1044
- const style = window.getComputedStyle(element);
1045
- const visible = isElementVisible(rect, style) && isElementMoreThanHalfInViewport(rect);
1046
- // Check if the element is actually enabled/interactive
1047
- const enabled = isElementEnabled(element, style);
1048
- if (!visible || !enabled) {
1049
- return;
1050
- }
1051
- let annotated = false;
1052
- // 3) Test small set of points on the element to confirm it's truly topmost
1053
- for (const pt of getPointsToCheck(rect)) {
1054
- let elToCheck = getDeepElementFromPoint(pt.x, pt.y);
1055
- // Walk up the DOM tree from that point
1056
- while (elToCheck) {
1057
- if (elToCheck === element) {
1058
- // Found the actual element
1059
- element.setAttribute(interactableAttribute, offset.toString());
1060
- offset++;
1061
- annotated = true;
1062
- break;
1063
- }
1064
- else if (elToCheck.tagName?.toLowerCase() === 'label' &&
1065
- elToCheck.htmlFor) {
1066
- // If we found a label referencing an element, also mark that
1067
- const forId = elToCheck.htmlFor;
1068
- const associatedInput = document.getElementById(forId);
1069
- if (associatedInput) {
1070
- associatedInput.setAttribute(interactableAttribute, offset.toString());
1071
- offset++;
178
+ // Step 1: Try to scroll the window down by one viewport
179
+ await page.evaluate((viewportHeight) => {
180
+ window.scrollBy(0, viewportHeight);
181
+ }, viewportHeight);
182
+ // Check if the page actually scrolled
183
+ const newScrollY = await page.evaluate(() => window.scrollY);
184
+ // If the window scrolled successfully, take the screenshot and return
185
+ if (newScrollY > scrollY) {
186
+ // Take the screenshot
187
+ const screenshot = await PlaywrightUtils.takeScreenshot(page);
188
+ // Scroll back to the original position
189
+ await page.evaluate(([x, y]) => {
190
+ window.scrollTo(x, y);
191
+ }, [scrollX, scrollY]);
192
+ return screenshot;
193
+ }
194
+ // Step 2: If window didn't scroll, try to find scrollable elements
195
+ const didScrollElement = await page.evaluate(() => {
196
+ // Find all potentially scrollable elements
197
+ function findScrollableElements() {
198
+ const allElements = document.querySelectorAll('*');
199
+ const scrollableElements = [];
200
+ allElements.forEach((el) => {
201
+ const style = window.getComputedStyle(el);
202
+ const overflowY = style.getPropertyValue('overflow-y');
203
+ const overflowX = style.getPropertyValue('overflow-x');
204
+ const overflow = style.getPropertyValue('overflow');
205
+ // Check if the element has scrollable properties
206
+ if (overflowY === 'auto' ||
207
+ overflowY === 'scroll' ||
208
+ overflowX === 'auto' ||
209
+ overflowX === 'scroll' ||
210
+ overflow === 'auto' ||
211
+ overflow === 'scroll') {
212
+ // Additional check to see if the element actually has content to scroll
213
+ const scrollHeight = el.scrollHeight;
214
+ const clientHeight = el.clientHeight;
215
+ if (scrollHeight > clientHeight) {
216
+ scrollableElements.push({
217
+ element: el,
218
+ area: el.clientWidth * el.clientHeight, // Calculate area for sorting
219
+ scrollTop: el.scrollTop, // Save original scroll position
220
+ });
221
+ }
1072
222
  }
1073
- annotated = true;
223
+ });
224
+ return scrollableElements;
225
+ }
226
+ // Find and sort scrollable elements by size (largest first)
227
+ const scrollableElements = findScrollableElements().sort((a, b) => b.area - a.area);
228
+ let didScroll = false;
229
+ // Try to scroll each element until one successfully scrolls
230
+ for (const { element } of scrollableElements) {
231
+ const originalScrollTop = element.scrollTop;
232
+ // Try to scroll down by the element's client height
233
+ element.scrollTop += element.clientHeight;
234
+ // Check if scrolling was successful
235
+ if (element.scrollTop > originalScrollTop) {
236
+ didScroll = true;
237
+ // Save the element in the window object so we can access it later
238
+ // @ts-ignore
239
+ window.__lastScrolledElement = element;
240
+ // @ts-ignore
241
+ window.__lastScrolledElementOriginalPosition = originalScrollTop;
1074
242
  break;
1075
243
  }
1076
- elToCheck = elToCheck.parentElement;
1077
244
  }
1078
- if (annotated) {
1079
- break;
245
+ return didScroll;
246
+ });
247
+ // If no element could be scrolled, return undefined
248
+ if (!didScrollElement) {
249
+ return undefined;
250
+ }
251
+ // Take a screenshot after scrolling the element
252
+ const screenshot = await PlaywrightUtils.takeScreenshot(page);
253
+ // Restore the original scroll position of the element
254
+ await page.evaluate(() => {
255
+ if (
256
+ // @ts-ignore
257
+ window.__lastScrolledElement &&
258
+ // @ts-ignore
259
+ window.__lastScrolledElementOriginalPosition !== undefined) {
260
+ // @ts-ignore
261
+ window.__lastScrolledElement.scrollTop = window.__lastScrolledElementOriginalPosition;
262
+ // Clean up
263
+ // @ts-ignore
264
+ delete window.__lastScrolledElement;
265
+ // @ts-ignore
266
+ delete window.__lastScrolledElementOriginalPosition;
1080
267
  }
268
+ });
269
+ return screenshot;
270
+ }
271
+ catch (error) {
272
+ if (PlaywrightUtils.isPageClosedError(error)) {
273
+ throw new PageClosedException_1.PageClosedException();
1081
274
  }
1082
- });
1083
- return offset;
275
+ else {
276
+ throw error;
277
+ }
278
+ }
1084
279
  }
1085
280
  }
1086
281
  exports.PlaywrightUtils = PlaywrightUtils;
1087
- PlaywrightUtils.ACCESSIBILITY_TEST_INIT_SCRIPT = MiscUtils_1.MiscUtils.getResourceFileAsString(path_1.default.join('axe.js'));
1088
- PlaywrightUtils.CLICKABLE_ELEMENTS_TRACKER_INIT_SCRIPT = MiscUtils_1.MiscUtils.getResourceFileAsString(path_1.default.join('clickable-elements-tracker.js'));
282
+ /**
283
+ * A JavaScript code snippet intended to run as an initialization
284
+ * script for `DonobuFlow` flows. This script helps flows handle/track
285
+ * prompts/confirmations. This is done specially since these browser actions
286
+ * pause the Javascript main thread and also cause issues with running various
287
+ * Playwright actions. See `DonobuFlow.onDialog(Dialog)` for details.
288
+ */
1089
289
  PlaywrightUtils.DIALOG_PROMPT_TRACKER_INIT_SCRIPT = MiscUtils_1.MiscUtils.getResourceFileAsString(path_1.default.join('dialog-prompt-tracker.js'));
290
+ /**
291
+ * Returns a JavaScript code snippet intended to run as an initialization
292
+ * script for `DonobuFlow` flows. This enables the {@link ReplayableInteraction}
293
+ * and {@link PageInteractionTracker.INIT_SCRIPT} to generate
294
+ * smart selectors.
295
+ */
1090
296
  PlaywrightUtils.SMART_SELECTOR_GENERATOR_INIT_SCRIPT = MiscUtils_1.MiscUtils.getResourceFileAsString(path_1.default.join('smart-selector-generator.js'));
1091
- PlaywrightUtils.PAGE_INTERACTIONS_TRACKER_INIT_SCRIPT = MiscUtils_1.MiscUtils.getResourceFileAsString(path_1.default.join('page-interactions-tracker.js'));
1092
- PlaywrightUtils.DONOBU_CONTROL_PANEL_INIT_SCRIPT = MiscUtils_1.MiscUtils.getResourceFileAsString(path_1.default.join('control-panel.js'));
1093
- // WARNING: If the control panel ID is changed here, you must also change the
1094
- // control-panel.js control panel ID value.
1095
- PlaywrightUtils.DONOBU_CONTROL_PANEL_ELEMENT_ID = 'donobu-control-panel';
1096
- PlaywrightUtils.DONOBU_CONTROL_PANEL_HEADLINE_ELEMENT_ID = 'donobu-control-panel-title-text';
1097
- PlaywrightUtils.DONOBU_INTERACTABLE_ATTRIBUTE = 'data-donobu-interactable';
1098
- PlaywrightUtils.DONOBU_ANNOTATION_ATTRIBUTE = 'data-donobu-annotation';
1099
297
  //# sourceMappingURL=PlaywrightUtils.js.map