donobu 2.16.0 → 2.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (543) 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/generated/parameter-schemas.json +51 -37
  18. package/dist/assets/generated/version +1 -1
  19. package/dist/esm/apis/EnvDataApi.d.ts +26 -0
  20. package/dist/esm/apis/EnvDataApi.d.ts.map +1 -0
  21. package/dist/esm/apis/EnvDataApi.js +59 -0
  22. package/dist/esm/apis/EnvDataApi.js.map +1 -0
  23. package/dist/esm/apis/EnvironmentDataApi.d.ts +26 -0
  24. package/dist/esm/apis/EnvironmentDataApi.d.ts.map +1 -0
  25. package/dist/esm/apis/EnvironmentDataApi.js +59 -0
  26. package/dist/esm/apis/EnvironmentDataApi.js.map +1 -0
  27. package/dist/esm/apis/FlowsApi.d.ts +4 -0
  28. package/dist/esm/apis/FlowsApi.d.ts.map +1 -1
  29. package/dist/esm/apis/FlowsApi.js +26 -2
  30. package/dist/esm/apis/FlowsApi.js.map +1 -1
  31. package/dist/esm/apis/FlowsFilesApi.d.ts +1 -1
  32. package/dist/esm/apis/FlowsFilesApi.d.ts.map +1 -1
  33. package/dist/esm/apis/SpecialFlowsApi.js +1 -1
  34. package/dist/esm/apis/SpecialFlowsApi.js.map +1 -1
  35. package/dist/esm/assets/generated/parameter-schemas.json +51 -37
  36. package/dist/esm/assets/generated/version +1 -1
  37. package/dist/esm/lib/DonobuExtendedPage.d.ts +106 -0
  38. package/dist/esm/lib/DonobuExtendedPage.d.ts.map +1 -0
  39. package/dist/esm/lib/DonobuExtendedPage.js +3 -0
  40. package/dist/esm/lib/DonobuExtendedPage.js.map +1 -0
  41. package/dist/esm/lib/constants.d.ts +8 -0
  42. package/dist/esm/lib/constants.d.ts.map +1 -0
  43. package/dist/esm/lib/constants.js +14 -0
  44. package/dist/esm/lib/constants.js.map +1 -0
  45. package/dist/esm/lib/fixtures/browserState.d.ts +6 -0
  46. package/dist/esm/lib/fixtures/browserState.d.ts.map +1 -0
  47. package/dist/esm/lib/fixtures/browserState.js +15 -0
  48. package/dist/esm/lib/fixtures/browserState.js.map +1 -0
  49. package/dist/esm/lib/fixtures/gptClients.d.ts +40 -0
  50. package/dist/esm/lib/fixtures/gptClients.d.ts.map +1 -0
  51. package/dist/esm/lib/fixtures/gptClients.js +187 -0
  52. package/dist/esm/lib/fixtures/gptClients.js.map +1 -0
  53. package/dist/esm/lib/fixtures/testExtension.d.ts +10 -0
  54. package/dist/esm/lib/fixtures/testExtension.d.ts.map +1 -0
  55. package/dist/esm/lib/fixtures/testExtension.js +383 -0
  56. package/dist/esm/lib/fixtures/testExtension.js.map +1 -0
  57. package/dist/esm/lib/testExtension.d.ts +10 -0
  58. package/dist/esm/lib/testExtension.d.ts.map +1 -0
  59. package/dist/esm/lib/testExtension.js +383 -0
  60. package/dist/esm/lib/testExtension.js.map +1 -0
  61. package/dist/esm/lib/types.d.ts +106 -0
  62. package/dist/esm/lib/types.d.ts.map +1 -0
  63. package/dist/esm/lib/types.js +3 -0
  64. package/dist/esm/lib/types.js.map +1 -0
  65. package/dist/esm/lib/utils/donobuTestStack.d.ts +7 -0
  66. package/dist/esm/lib/utils/donobuTestStack.d.ts.map +1 -0
  67. package/dist/esm/lib/utils/donobuTestStack.js +31 -0
  68. package/dist/esm/lib/utils/donobuTestStack.js.map +1 -0
  69. package/dist/esm/lib/utils/selfHealing.d.ts +15 -0
  70. package/dist/esm/lib/utils/selfHealing.d.ts.map +1 -0
  71. package/dist/esm/lib/utils/selfHealing.js +89 -0
  72. package/dist/esm/lib/utils/selfHealing.js.map +1 -0
  73. package/dist/esm/main.d.ts +5 -1
  74. package/dist/esm/main.d.ts.map +1 -1
  75. package/dist/esm/main.js +8 -5
  76. package/dist/esm/main.js.map +1 -1
  77. package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
  78. package/dist/esm/managers/AdminApiController.js +7 -0
  79. package/dist/esm/managers/AdminApiController.js.map +1 -1
  80. package/dist/esm/managers/AgentsManager.d.ts +1 -1
  81. package/dist/esm/managers/AgentsManager.d.ts.map +1 -1
  82. package/dist/esm/managers/DonobuFlow.d.ts +3 -2
  83. package/dist/esm/managers/DonobuFlow.d.ts.map +1 -1
  84. package/dist/esm/managers/DonobuFlow.js +90 -21
  85. package/dist/esm/managers/DonobuFlow.js.map +1 -1
  86. package/dist/esm/managers/DonobuFlowsManager.d.ts +47 -6
  87. package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
  88. package/dist/esm/managers/DonobuFlowsManager.js +104 -24
  89. package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
  90. package/dist/esm/managers/DonobuStack.d.ts +18 -4
  91. package/dist/esm/managers/DonobuStack.d.ts.map +1 -1
  92. package/dist/esm/managers/DonobuStack.js +21 -5
  93. package/dist/esm/managers/DonobuStack.js.map +1 -1
  94. package/dist/esm/managers/EnvDataManager.d.ts +58 -0
  95. package/dist/esm/managers/EnvDataManager.d.ts.map +1 -0
  96. package/dist/esm/managers/EnvDataManager.js +134 -0
  97. package/dist/esm/managers/EnvDataManager.js.map +1 -0
  98. package/dist/esm/managers/EnvironmentDataManager.d.ts +58 -0
  99. package/dist/esm/managers/EnvironmentDataManager.d.ts.map +1 -0
  100. package/dist/esm/managers/EnvironmentDataManager.js +134 -0
  101. package/dist/esm/managers/EnvironmentDataManager.js.map +1 -0
  102. package/dist/esm/managers/GptConfigsManager.d.ts +1 -1
  103. package/dist/esm/managers/GptConfigsManager.d.ts.map +1 -1
  104. package/dist/esm/managers/InteractionVisualizer.d.ts +8 -30
  105. package/dist/esm/managers/InteractionVisualizer.d.ts.map +1 -1
  106. package/dist/esm/managers/InteractionVisualizer.js +132 -204
  107. package/dist/esm/managers/InteractionVisualizer.js.map +1 -1
  108. package/dist/esm/managers/PageInspector.d.ts +0 -1
  109. package/dist/esm/managers/PageInspector.d.ts.map +1 -1
  110. package/dist/esm/managers/PageInspector.js +59 -58
  111. package/dist/esm/managers/PageInspector.js.map +1 -1
  112. package/dist/esm/managers/ToolManager.d.ts +10 -0
  113. package/dist/esm/managers/ToolManager.d.ts.map +1 -1
  114. package/dist/esm/managers/ToolManager.js +46 -3
  115. package/dist/esm/managers/ToolManager.js.map +1 -1
  116. package/dist/esm/models/BrowserConfig.d.ts +1 -6
  117. package/dist/esm/models/BrowserConfig.d.ts.map +1 -1
  118. package/dist/esm/models/BrowserFramework.d.ts +2 -6
  119. package/dist/esm/models/BrowserFramework.d.ts.map +1 -1
  120. package/dist/esm/models/BrowserFramework.js +4 -22
  121. package/dist/esm/models/BrowserFramework.js.map +1 -1
  122. package/dist/esm/models/CreateDonobuFlow.d.ts +4 -0
  123. package/dist/esm/models/CreateDonobuFlow.d.ts.map +1 -1
  124. package/dist/esm/models/EnvironmentDatum.d.ts +54 -0
  125. package/dist/esm/models/EnvironmentDatum.d.ts.map +1 -0
  126. package/dist/esm/models/EnvironmentDatum.js +57 -0
  127. package/dist/esm/models/EnvironmentDatum.js.map +1 -0
  128. package/dist/esm/models/FlowMetadata.d.ts +14 -1
  129. package/dist/esm/models/FlowMetadata.d.ts.map +1 -1
  130. package/dist/esm/models/FlowMetadata.js.map +1 -1
  131. package/dist/esm/models/PaginatedResult.d.ts +10 -0
  132. package/dist/esm/models/PaginatedResult.d.ts.map +1 -0
  133. package/dist/esm/models/PaginatedResult.js +6 -0
  134. package/dist/esm/models/PaginatedResult.js.map +1 -0
  135. package/dist/esm/models/ToolCallContext.d.ts +2 -1
  136. package/dist/esm/models/ToolCallContext.d.ts.map +1 -1
  137. package/dist/esm/models/ToolTemplateDataSource.d.ts +40 -0
  138. package/dist/esm/models/ToolTemplateDataSource.d.ts.map +1 -0
  139. package/dist/esm/models/ToolTemplateDataSource.js +3 -0
  140. package/dist/esm/models/ToolTemplateDataSource.js.map +1 -0
  141. package/dist/esm/persistence/DonobuSqliteDb.d.ts.map +1 -1
  142. package/dist/esm/persistence/DonobuSqliteDb.js +12 -0
  143. package/dist/esm/persistence/DonobuSqliteDb.js.map +1 -1
  144. package/dist/esm/persistence/FlowsPersistence.d.ts +23 -14
  145. package/dist/esm/persistence/FlowsPersistence.d.ts.map +1 -1
  146. package/dist/esm/persistence/FlowsPersistenceAwsS3.d.ts +10 -5
  147. package/dist/esm/persistence/FlowsPersistenceAwsS3.d.ts.map +1 -1
  148. package/dist/esm/persistence/FlowsPersistenceAwsS3.js +79 -1
  149. package/dist/esm/persistence/FlowsPersistenceAwsS3.js.map +1 -1
  150. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.js +1 -1
  151. package/dist/esm/persistence/FlowsPersistenceFactoryImpl.js.map +1 -1
  152. package/dist/esm/persistence/FlowsPersistenceFilesystem.d.ts +32 -5
  153. package/dist/esm/persistence/FlowsPersistenceFilesystem.d.ts.map +1 -1
  154. package/dist/esm/persistence/FlowsPersistenceFilesystem.js +114 -4
  155. package/dist/esm/persistence/FlowsPersistenceFilesystem.js.map +1 -1
  156. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.d.ts +10 -5
  157. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -1
  158. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.js +58 -1
  159. package/dist/esm/persistence/FlowsPersistenceGoogleCloudStorage.js.map +1 -1
  160. package/dist/esm/persistence/FlowsPersistenceSqlite.d.ts +12 -5
  161. package/dist/esm/persistence/FlowsPersistenceSqlite.d.ts.map +1 -1
  162. package/dist/esm/persistence/FlowsPersistenceSqlite.js +35 -1
  163. package/dist/esm/persistence/FlowsPersistenceSqlite.js.map +1 -1
  164. package/dist/esm/persistence/FlowsPersistenceSupabase.d.ts +10 -5
  165. package/dist/esm/persistence/FlowsPersistenceSupabase.d.ts.map +1 -1
  166. package/dist/esm/persistence/FlowsPersistenceSupabase.js +46 -1
  167. package/dist/esm/persistence/FlowsPersistenceSupabase.js.map +1 -1
  168. package/dist/esm/persistence/FlowsPersistenceVolatile.d.ts +10 -5
  169. package/dist/esm/persistence/FlowsPersistenceVolatile.d.ts.map +1 -1
  170. package/dist/esm/persistence/FlowsPersistenceVolatile.js +21 -1
  171. package/dist/esm/persistence/FlowsPersistenceVolatile.js.map +1 -1
  172. package/dist/esm/persistence/agents/AgentsPersistence.d.ts +12 -0
  173. package/dist/esm/persistence/agents/AgentsPersistence.d.ts.map +1 -0
  174. package/dist/esm/persistence/agents/AgentsPersistence.js +3 -0
  175. package/dist/esm/persistence/agents/AgentsPersistence.js.map +1 -0
  176. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.d.ts +15 -0
  177. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.d.ts.map +1 -0
  178. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.js +50 -0
  179. package/dist/esm/persistence/agents/AgentsPersistenceSqlite.js.map +1 -0
  180. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.d.ts +14 -0
  181. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.d.ts.map +1 -0
  182. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.js +26 -0
  183. package/dist/esm/persistence/agents/AgentsPersistenceVolatile.js.map +1 -0
  184. package/dist/esm/persistence/env/EnvPersistence.d.ts +20 -0
  185. package/dist/esm/persistence/env/EnvPersistence.d.ts.map +1 -0
  186. package/dist/esm/persistence/env/EnvPersistence.js +3 -0
  187. package/dist/esm/persistence/env/EnvPersistence.js.map +1 -0
  188. package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts +31 -0
  189. package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts.map +1 -0
  190. package/dist/esm/persistence/env/EnvPersistenceAwsS3.js +117 -0
  191. package/dist/esm/persistence/env/EnvPersistenceAwsS3.js.map +1 -0
  192. package/dist/esm/persistence/env/EnvPersistenceFactory.d.ts +6 -0
  193. package/dist/esm/persistence/env/EnvPersistenceFactory.d.ts.map +1 -0
  194. package/dist/esm/persistence/env/EnvPersistenceFactory.js +3 -0
  195. package/dist/esm/persistence/env/EnvPersistenceFactory.js.map +1 -0
  196. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.d.ts +45 -0
  197. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.d.ts.map +1 -0
  198. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.js +86 -0
  199. package/dist/esm/persistence/env/EnvPersistenceFactoryImpl.js.map +1 -0
  200. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.d.ts +12 -0
  201. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.d.ts.map +1 -0
  202. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.js +17 -0
  203. package/dist/esm/persistence/env/EnvPersistenceFactoryPreset.js.map +1 -0
  204. package/dist/esm/persistence/env/EnvPersistenceFilesystem.d.ts +36 -0
  205. package/dist/esm/persistence/env/EnvPersistenceFilesystem.d.ts.map +1 -0
  206. package/dist/esm/persistence/env/EnvPersistenceFilesystem.js +132 -0
  207. package/dist/esm/persistence/env/EnvPersistenceFilesystem.js.map +1 -0
  208. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +30 -0
  209. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +1 -0
  210. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js +131 -0
  211. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +1 -0
  212. package/dist/esm/persistence/env/EnvPersistenceSqlite.d.ts +19 -0
  213. package/dist/esm/persistence/env/EnvPersistenceSqlite.d.ts.map +1 -0
  214. package/dist/esm/persistence/env/EnvPersistenceSqlite.js +54 -0
  215. package/dist/esm/persistence/env/EnvPersistenceSqlite.js.map +1 -0
  216. package/dist/esm/persistence/env/EnvPersistenceSupabase.d.ts +17 -0
  217. package/dist/esm/persistence/env/EnvPersistenceSupabase.d.ts.map +1 -0
  218. package/dist/esm/persistence/env/EnvPersistenceSupabase.js +60 -0
  219. package/dist/esm/persistence/env/EnvPersistenceSupabase.js.map +1 -0
  220. package/dist/esm/persistence/env/EnvPersistenceVolatile.d.ts +13 -0
  221. package/dist/esm/persistence/env/EnvPersistenceVolatile.d.ts.map +1 -0
  222. package/dist/esm/persistence/env/EnvPersistenceVolatile.js +31 -0
  223. package/dist/esm/persistence/env/EnvPersistenceVolatile.js.map +1 -0
  224. package/dist/esm/persistence/flows/FlowsPersistence.d.ts +87 -0
  225. package/dist/esm/persistence/flows/FlowsPersistence.d.ts.map +1 -0
  226. package/dist/esm/persistence/flows/FlowsPersistence.js +3 -0
  227. package/dist/esm/persistence/flows/FlowsPersistence.js.map +1 -0
  228. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts +71 -0
  229. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +1 -0
  230. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js +448 -0
  231. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js.map +1 -0
  232. package/dist/esm/persistence/flows/FlowsPersistenceFactory.d.ts +10 -0
  233. package/dist/esm/persistence/flows/FlowsPersistenceFactory.d.ts.map +1 -0
  234. package/dist/esm/persistence/flows/FlowsPersistenceFactory.js +3 -0
  235. package/dist/esm/persistence/flows/FlowsPersistenceFactory.js.map +1 -0
  236. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.d.ts +57 -0
  237. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.d.ts.map +1 -0
  238. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.js +238 -0
  239. package/dist/esm/persistence/flows/FlowsPersistenceFactoryImpl.js.map +1 -0
  240. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.d.ts +13 -0
  241. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.d.ts.map +1 -0
  242. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.js +24 -0
  243. package/dist/esm/persistence/flows/FlowsPersistenceFactoryPreset.js.map +1 -0
  244. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.d.ts +52 -0
  245. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.d.ts.map +1 -0
  246. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.js +291 -0
  247. package/dist/esm/persistence/flows/FlowsPersistenceFilesystem.js.map +1 -0
  248. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +71 -0
  249. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -0
  250. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +429 -0
  251. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +1 -0
  252. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts +43 -0
  253. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -0
  254. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js +259 -0
  255. package/dist/esm/persistence/flows/FlowsPersistenceSqlite.js.map +1 -0
  256. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.d.ts +40 -0
  257. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.d.ts.map +1 -0
  258. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.js +218 -0
  259. package/dist/esm/persistence/flows/FlowsPersistenceSupabase.js.map +1 -0
  260. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.d.ts +37 -0
  261. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.d.ts.map +1 -0
  262. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.js +151 -0
  263. package/dist/esm/persistence/flows/FlowsPersistenceVolatile.js.map +1 -0
  264. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.d.ts +12 -0
  265. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.d.ts.map +1 -0
  266. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.js +3 -0
  267. package/dist/esm/persistence/gptconfigs/GptConfigsPersistence.js.map +1 -0
  268. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts +13 -0
  269. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts.map +1 -0
  270. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.js +35 -0
  271. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceSqlite.js.map +1 -0
  272. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts +15 -0
  273. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts.map +1 -0
  274. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.js +31 -0
  275. package/dist/esm/persistence/gptconfigs/GptConfigsPersistenceVolatile.js.map +1 -0
  276. package/dist/esm/playwrightTestExtensions.d.ts.map +1 -1
  277. package/dist/esm/playwrightTestExtensions.js +31 -10
  278. package/dist/esm/playwrightTestExtensions.js.map +1 -1
  279. package/dist/esm/tools/GoToWebpageTool.d.ts.map +1 -1
  280. package/dist/esm/tools/GoToWebpageTool.js +3 -2
  281. package/dist/esm/tools/GoToWebpageTool.js.map +1 -1
  282. package/dist/esm/tools/SolveMfaChallenge.d.ts +32 -0
  283. package/dist/esm/tools/SolveMfaChallenge.d.ts.map +1 -0
  284. package/dist/esm/tools/SolveMfaChallenge.js +185 -0
  285. package/dist/esm/tools/SolveMfaChallenge.js.map +1 -0
  286. package/dist/esm/utils/TemplateInterpolator.d.ts +47 -0
  287. package/dist/esm/utils/TemplateInterpolator.d.ts.map +1 -0
  288. package/dist/esm/utils/TemplateInterpolator.js +352 -0
  289. package/dist/esm/utils/TemplateInterpolator.js.map +1 -0
  290. package/dist/lib/DonobuExtendedPage.d.ts +106 -0
  291. package/dist/lib/DonobuExtendedPage.d.ts.map +1 -0
  292. package/dist/lib/DonobuExtendedPage.js +3 -0
  293. package/dist/lib/DonobuExtendedPage.js.map +1 -0
  294. package/dist/lib/constants.d.ts +8 -0
  295. package/dist/lib/constants.d.ts.map +1 -0
  296. package/dist/lib/constants.js +14 -0
  297. package/dist/lib/constants.js.map +1 -0
  298. package/dist/lib/fixtures/browserState.d.ts +6 -0
  299. package/dist/lib/fixtures/browserState.d.ts.map +1 -0
  300. package/dist/lib/fixtures/browserState.js +15 -0
  301. package/dist/lib/fixtures/browserState.js.map +1 -0
  302. package/dist/lib/fixtures/gptClients.d.ts +40 -0
  303. package/dist/lib/fixtures/gptClients.d.ts.map +1 -0
  304. package/dist/lib/fixtures/gptClients.js +187 -0
  305. package/dist/lib/fixtures/gptClients.js.map +1 -0
  306. package/dist/lib/fixtures/testExtension.d.ts +10 -0
  307. package/dist/lib/fixtures/testExtension.d.ts.map +1 -0
  308. package/dist/lib/fixtures/testExtension.js +383 -0
  309. package/dist/lib/fixtures/testExtension.js.map +1 -0
  310. package/dist/lib/testExtension.d.ts +10 -0
  311. package/dist/lib/testExtension.d.ts.map +1 -0
  312. package/dist/lib/testExtension.js +383 -0
  313. package/dist/lib/testExtension.js.map +1 -0
  314. package/dist/lib/types.d.ts +106 -0
  315. package/dist/lib/types.d.ts.map +1 -0
  316. package/dist/lib/types.js +3 -0
  317. package/dist/lib/types.js.map +1 -0
  318. package/dist/lib/utils/donobuTestStack.d.ts +7 -0
  319. package/dist/lib/utils/donobuTestStack.d.ts.map +1 -0
  320. package/dist/lib/utils/donobuTestStack.js +31 -0
  321. package/dist/lib/utils/donobuTestStack.js.map +1 -0
  322. package/dist/lib/utils/selfHealing.d.ts +15 -0
  323. package/dist/lib/utils/selfHealing.d.ts.map +1 -0
  324. package/dist/lib/utils/selfHealing.js +89 -0
  325. package/dist/lib/utils/selfHealing.js.map +1 -0
  326. package/dist/main.d.ts +5 -1
  327. package/dist/main.d.ts.map +1 -1
  328. package/dist/main.js +8 -5
  329. package/dist/main.js.map +1 -1
  330. package/dist/managers/AdminApiController.d.ts.map +1 -1
  331. package/dist/managers/AdminApiController.js +7 -0
  332. package/dist/managers/AdminApiController.js.map +1 -1
  333. package/dist/managers/AgentsManager.d.ts +1 -1
  334. package/dist/managers/AgentsManager.d.ts.map +1 -1
  335. package/dist/managers/DonobuFlow.d.ts +3 -2
  336. package/dist/managers/DonobuFlow.d.ts.map +1 -1
  337. package/dist/managers/DonobuFlow.js +90 -21
  338. package/dist/managers/DonobuFlow.js.map +1 -1
  339. package/dist/managers/DonobuFlowsManager.d.ts +47 -6
  340. package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
  341. package/dist/managers/DonobuFlowsManager.js +104 -24
  342. package/dist/managers/DonobuFlowsManager.js.map +1 -1
  343. package/dist/managers/DonobuStack.d.ts +18 -4
  344. package/dist/managers/DonobuStack.d.ts.map +1 -1
  345. package/dist/managers/DonobuStack.js +21 -5
  346. package/dist/managers/DonobuStack.js.map +1 -1
  347. package/dist/managers/EnvDataManager.d.ts +58 -0
  348. package/dist/managers/EnvDataManager.d.ts.map +1 -0
  349. package/dist/managers/EnvDataManager.js +134 -0
  350. package/dist/managers/EnvDataManager.js.map +1 -0
  351. package/dist/managers/EnvironmentDataManager.d.ts +58 -0
  352. package/dist/managers/EnvironmentDataManager.d.ts.map +1 -0
  353. package/dist/managers/EnvironmentDataManager.js +134 -0
  354. package/dist/managers/EnvironmentDataManager.js.map +1 -0
  355. package/dist/managers/GptConfigsManager.d.ts +1 -1
  356. package/dist/managers/GptConfigsManager.d.ts.map +1 -1
  357. package/dist/managers/InteractionVisualizer.d.ts +8 -30
  358. package/dist/managers/InteractionVisualizer.d.ts.map +1 -1
  359. package/dist/managers/InteractionVisualizer.js +132 -204
  360. package/dist/managers/InteractionVisualizer.js.map +1 -1
  361. package/dist/managers/PageInspector.d.ts +0 -1
  362. package/dist/managers/PageInspector.d.ts.map +1 -1
  363. package/dist/managers/PageInspector.js +59 -58
  364. package/dist/managers/PageInspector.js.map +1 -1
  365. package/dist/managers/ToolManager.d.ts +10 -0
  366. package/dist/managers/ToolManager.d.ts.map +1 -1
  367. package/dist/managers/ToolManager.js +46 -3
  368. package/dist/managers/ToolManager.js.map +1 -1
  369. package/dist/models/BrowserConfig.d.ts +1 -6
  370. package/dist/models/BrowserConfig.d.ts.map +1 -1
  371. package/dist/models/BrowserFramework.d.ts +2 -6
  372. package/dist/models/BrowserFramework.d.ts.map +1 -1
  373. package/dist/models/BrowserFramework.js +4 -22
  374. package/dist/models/BrowserFramework.js.map +1 -1
  375. package/dist/models/CreateDonobuFlow.d.ts +4 -0
  376. package/dist/models/CreateDonobuFlow.d.ts.map +1 -1
  377. package/dist/models/EnvironmentDatum.d.ts +54 -0
  378. package/dist/models/EnvironmentDatum.d.ts.map +1 -0
  379. package/dist/models/EnvironmentDatum.js +57 -0
  380. package/dist/models/EnvironmentDatum.js.map +1 -0
  381. package/dist/models/FlowMetadata.d.ts +14 -1
  382. package/dist/models/FlowMetadata.d.ts.map +1 -1
  383. package/dist/models/FlowMetadata.js.map +1 -1
  384. package/dist/models/PaginatedResult.d.ts +10 -0
  385. package/dist/models/PaginatedResult.d.ts.map +1 -0
  386. package/dist/models/PaginatedResult.js +6 -0
  387. package/dist/models/PaginatedResult.js.map +1 -0
  388. package/dist/models/ToolCallContext.d.ts +2 -1
  389. package/dist/models/ToolCallContext.d.ts.map +1 -1
  390. package/dist/models/ToolTemplateDataSource.d.ts +40 -0
  391. package/dist/models/ToolTemplateDataSource.d.ts.map +1 -0
  392. package/dist/models/ToolTemplateDataSource.js +3 -0
  393. package/dist/models/ToolTemplateDataSource.js.map +1 -0
  394. package/dist/persistence/DonobuSqliteDb.d.ts.map +1 -1
  395. package/dist/persistence/DonobuSqliteDb.js +12 -0
  396. package/dist/persistence/DonobuSqliteDb.js.map +1 -1
  397. package/dist/persistence/FlowsPersistence.d.ts +23 -14
  398. package/dist/persistence/FlowsPersistence.d.ts.map +1 -1
  399. package/dist/persistence/FlowsPersistenceAwsS3.d.ts +10 -5
  400. package/dist/persistence/FlowsPersistenceAwsS3.d.ts.map +1 -1
  401. package/dist/persistence/FlowsPersistenceAwsS3.js +79 -1
  402. package/dist/persistence/FlowsPersistenceAwsS3.js.map +1 -1
  403. package/dist/persistence/FlowsPersistenceFactoryImpl.js +1 -1
  404. package/dist/persistence/FlowsPersistenceFactoryImpl.js.map +1 -1
  405. package/dist/persistence/FlowsPersistenceFilesystem.d.ts +32 -5
  406. package/dist/persistence/FlowsPersistenceFilesystem.d.ts.map +1 -1
  407. package/dist/persistence/FlowsPersistenceFilesystem.js +114 -4
  408. package/dist/persistence/FlowsPersistenceFilesystem.js.map +1 -1
  409. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.d.ts +10 -5
  410. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -1
  411. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.js +58 -1
  412. package/dist/persistence/FlowsPersistenceGoogleCloudStorage.js.map +1 -1
  413. package/dist/persistence/FlowsPersistenceSqlite.d.ts +12 -5
  414. package/dist/persistence/FlowsPersistenceSqlite.d.ts.map +1 -1
  415. package/dist/persistence/FlowsPersistenceSqlite.js +35 -1
  416. package/dist/persistence/FlowsPersistenceSqlite.js.map +1 -1
  417. package/dist/persistence/FlowsPersistenceSupabase.d.ts +10 -5
  418. package/dist/persistence/FlowsPersistenceSupabase.d.ts.map +1 -1
  419. package/dist/persistence/FlowsPersistenceSupabase.js +46 -1
  420. package/dist/persistence/FlowsPersistenceSupabase.js.map +1 -1
  421. package/dist/persistence/FlowsPersistenceVolatile.d.ts +10 -5
  422. package/dist/persistence/FlowsPersistenceVolatile.d.ts.map +1 -1
  423. package/dist/persistence/FlowsPersistenceVolatile.js +21 -1
  424. package/dist/persistence/FlowsPersistenceVolatile.js.map +1 -1
  425. package/dist/persistence/agents/AgentsPersistence.d.ts +12 -0
  426. package/dist/persistence/agents/AgentsPersistence.d.ts.map +1 -0
  427. package/dist/persistence/agents/AgentsPersistence.js +3 -0
  428. package/dist/persistence/agents/AgentsPersistence.js.map +1 -0
  429. package/dist/persistence/agents/AgentsPersistenceSqlite.d.ts +15 -0
  430. package/dist/persistence/agents/AgentsPersistenceSqlite.d.ts.map +1 -0
  431. package/dist/persistence/agents/AgentsPersistenceSqlite.js +50 -0
  432. package/dist/persistence/agents/AgentsPersistenceSqlite.js.map +1 -0
  433. package/dist/persistence/agents/AgentsPersistenceVolatile.d.ts +14 -0
  434. package/dist/persistence/agents/AgentsPersistenceVolatile.d.ts.map +1 -0
  435. package/dist/persistence/agents/AgentsPersistenceVolatile.js +26 -0
  436. package/dist/persistence/agents/AgentsPersistenceVolatile.js.map +1 -0
  437. package/dist/persistence/env/EnvPersistence.d.ts +20 -0
  438. package/dist/persistence/env/EnvPersistence.d.ts.map +1 -0
  439. package/dist/persistence/env/EnvPersistence.js +3 -0
  440. package/dist/persistence/env/EnvPersistence.js.map +1 -0
  441. package/dist/persistence/env/EnvPersistenceAwsS3.d.ts +31 -0
  442. package/dist/persistence/env/EnvPersistenceAwsS3.d.ts.map +1 -0
  443. package/dist/persistence/env/EnvPersistenceAwsS3.js +117 -0
  444. package/dist/persistence/env/EnvPersistenceAwsS3.js.map +1 -0
  445. package/dist/persistence/env/EnvPersistenceFactory.d.ts +6 -0
  446. package/dist/persistence/env/EnvPersistenceFactory.d.ts.map +1 -0
  447. package/dist/persistence/env/EnvPersistenceFactory.js +3 -0
  448. package/dist/persistence/env/EnvPersistenceFactory.js.map +1 -0
  449. package/dist/persistence/env/EnvPersistenceFactoryImpl.d.ts +45 -0
  450. package/dist/persistence/env/EnvPersistenceFactoryImpl.d.ts.map +1 -0
  451. package/dist/persistence/env/EnvPersistenceFactoryImpl.js +86 -0
  452. package/dist/persistence/env/EnvPersistenceFactoryImpl.js.map +1 -0
  453. package/dist/persistence/env/EnvPersistenceFactoryPreset.d.ts +12 -0
  454. package/dist/persistence/env/EnvPersistenceFactoryPreset.d.ts.map +1 -0
  455. package/dist/persistence/env/EnvPersistenceFactoryPreset.js +17 -0
  456. package/dist/persistence/env/EnvPersistenceFactoryPreset.js.map +1 -0
  457. package/dist/persistence/env/EnvPersistenceFilesystem.d.ts +36 -0
  458. package/dist/persistence/env/EnvPersistenceFilesystem.d.ts.map +1 -0
  459. package/dist/persistence/env/EnvPersistenceFilesystem.js +132 -0
  460. package/dist/persistence/env/EnvPersistenceFilesystem.js.map +1 -0
  461. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +30 -0
  462. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +1 -0
  463. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js +131 -0
  464. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +1 -0
  465. package/dist/persistence/env/EnvPersistenceSqlite.d.ts +19 -0
  466. package/dist/persistence/env/EnvPersistenceSqlite.d.ts.map +1 -0
  467. package/dist/persistence/env/EnvPersistenceSqlite.js +54 -0
  468. package/dist/persistence/env/EnvPersistenceSqlite.js.map +1 -0
  469. package/dist/persistence/env/EnvPersistenceSupabase.d.ts +17 -0
  470. package/dist/persistence/env/EnvPersistenceSupabase.d.ts.map +1 -0
  471. package/dist/persistence/env/EnvPersistenceSupabase.js +60 -0
  472. package/dist/persistence/env/EnvPersistenceSupabase.js.map +1 -0
  473. package/dist/persistence/env/EnvPersistenceVolatile.d.ts +13 -0
  474. package/dist/persistence/env/EnvPersistenceVolatile.d.ts.map +1 -0
  475. package/dist/persistence/env/EnvPersistenceVolatile.js +31 -0
  476. package/dist/persistence/env/EnvPersistenceVolatile.js.map +1 -0
  477. package/dist/persistence/flows/FlowsPersistence.d.ts +87 -0
  478. package/dist/persistence/flows/FlowsPersistence.d.ts.map +1 -0
  479. package/dist/persistence/flows/FlowsPersistence.js +3 -0
  480. package/dist/persistence/flows/FlowsPersistence.js.map +1 -0
  481. package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts +71 -0
  482. package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +1 -0
  483. package/dist/persistence/flows/FlowsPersistenceAwsS3.js +448 -0
  484. package/dist/persistence/flows/FlowsPersistenceAwsS3.js.map +1 -0
  485. package/dist/persistence/flows/FlowsPersistenceFactory.d.ts +10 -0
  486. package/dist/persistence/flows/FlowsPersistenceFactory.d.ts.map +1 -0
  487. package/dist/persistence/flows/FlowsPersistenceFactory.js +3 -0
  488. package/dist/persistence/flows/FlowsPersistenceFactory.js.map +1 -0
  489. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.d.ts +57 -0
  490. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.d.ts.map +1 -0
  491. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.js +238 -0
  492. package/dist/persistence/flows/FlowsPersistenceFactoryImpl.js.map +1 -0
  493. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.d.ts +13 -0
  494. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.d.ts.map +1 -0
  495. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.js +24 -0
  496. package/dist/persistence/flows/FlowsPersistenceFactoryPreset.js.map +1 -0
  497. package/dist/persistence/flows/FlowsPersistenceFilesystem.d.ts +52 -0
  498. package/dist/persistence/flows/FlowsPersistenceFilesystem.d.ts.map +1 -0
  499. package/dist/persistence/flows/FlowsPersistenceFilesystem.js +291 -0
  500. package/dist/persistence/flows/FlowsPersistenceFilesystem.js.map +1 -0
  501. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +71 -0
  502. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +1 -0
  503. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +429 -0
  504. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +1 -0
  505. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts +43 -0
  506. package/dist/persistence/flows/FlowsPersistenceSqlite.d.ts.map +1 -0
  507. package/dist/persistence/flows/FlowsPersistenceSqlite.js +259 -0
  508. package/dist/persistence/flows/FlowsPersistenceSqlite.js.map +1 -0
  509. package/dist/persistence/flows/FlowsPersistenceSupabase.d.ts +40 -0
  510. package/dist/persistence/flows/FlowsPersistenceSupabase.d.ts.map +1 -0
  511. package/dist/persistence/flows/FlowsPersistenceSupabase.js +218 -0
  512. package/dist/persistence/flows/FlowsPersistenceSupabase.js.map +1 -0
  513. package/dist/persistence/flows/FlowsPersistenceVolatile.d.ts +37 -0
  514. package/dist/persistence/flows/FlowsPersistenceVolatile.d.ts.map +1 -0
  515. package/dist/persistence/flows/FlowsPersistenceVolatile.js +151 -0
  516. package/dist/persistence/flows/FlowsPersistenceVolatile.js.map +1 -0
  517. package/dist/persistence/gptconfigs/GptConfigsPersistence.d.ts +12 -0
  518. package/dist/persistence/gptconfigs/GptConfigsPersistence.d.ts.map +1 -0
  519. package/dist/persistence/gptconfigs/GptConfigsPersistence.js +3 -0
  520. package/dist/persistence/gptconfigs/GptConfigsPersistence.js.map +1 -0
  521. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts +13 -0
  522. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.d.ts.map +1 -0
  523. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.js +35 -0
  524. package/dist/persistence/gptconfigs/GptConfigsPersistenceSqlite.js.map +1 -0
  525. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts +15 -0
  526. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.d.ts.map +1 -0
  527. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.js +31 -0
  528. package/dist/persistence/gptconfigs/GptConfigsPersistenceVolatile.js.map +1 -0
  529. package/dist/playwrightTestExtensions.d.ts.map +1 -1
  530. package/dist/playwrightTestExtensions.js +31 -10
  531. package/dist/playwrightTestExtensions.js.map +1 -1
  532. package/dist/tools/GoToWebpageTool.d.ts.map +1 -1
  533. package/dist/tools/GoToWebpageTool.js +3 -2
  534. package/dist/tools/GoToWebpageTool.js.map +1 -1
  535. package/dist/tools/SolveMfaChallenge.d.ts +32 -0
  536. package/dist/tools/SolveMfaChallenge.d.ts.map +1 -0
  537. package/dist/tools/SolveMfaChallenge.js +185 -0
  538. package/dist/tools/SolveMfaChallenge.js.map +1 -0
  539. package/dist/utils/TemplateInterpolator.d.ts +47 -0
  540. package/dist/utils/TemplateInterpolator.d.ts.map +1 -0
  541. package/dist/utils/TemplateInterpolator.js +352 -0
  542. package/dist/utils/TemplateInterpolator.js.map +1 -0
  543. package/package.json +3 -1
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FlowsPersistenceFactoryImpl = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const NoApiAccessTokenPresentException_1 = require("../../exceptions/NoApiAccessTokenPresentException");
10
+ const FlowsPersistenceGoogleCloudStorage_1 = require("./FlowsPersistenceGoogleCloudStorage");
11
+ const FlowsPersistenceFilesystem_1 = require("./FlowsPersistenceFilesystem");
12
+ const FlowsPersistenceSupabase_1 = require("./FlowsPersistenceSupabase");
13
+ const SupabaseClient_1 = require("../../clients/SupabaseClient");
14
+ const DonobuDeploymentEnvironment_1 = require("../../models/DonobuDeploymentEnvironment");
15
+ const FlowsPersistenceAwsS3_1 = require("./FlowsPersistenceAwsS3");
16
+ const FlowsPersistenceSqlite_1 = require("./FlowsPersistenceSqlite");
17
+ const Logger_1 = require("../../utils/Logger");
18
+ const MiscUtils_1 = require("../../utils/MiscUtils");
19
+ const DonobuSqliteDb_1 = require("../DonobuSqliteDb");
20
+ const envVars_1 = require("../../envVars");
21
+ /**
22
+ * A factory class for creating new FlowsPersistence instances. The type of persistence
23
+ * objects created varies depending on this factory's constructor arguments and the current API
24
+ * request context.
25
+ */
26
+ class FlowsPersistenceFactoryImpl {
27
+ /**
28
+ * Creates an instance.
29
+ *
30
+ * @param deploymentEnvironment The deployment environment for this application. If this is set to
31
+ * a value of DonobuDeploymentEnvironment.DONOBU_HOSTED_MULTI_TENANT, then the
32
+ * supabaseJwtSecretKey must also be specified.
33
+ * @param awsS3Bucket The name of the AWS S3 bucket to use for persistence.
34
+ * @param awsS3Region The region of the AWS S3 bucket.
35
+ * @param googleCloudStorageBucket The name of the Google Cloud storage bucket to use for
36
+ * persistence. Note that no special authentication is performed, so the current environment
37
+ * must be able to reach said bucket. If deployed in Google Cloud, this may be done
38
+ * automatically. If running locally, this may mean you have to log in to Google Cloud using
39
+ * the Google Cloud CLI before running this application.
40
+ * @param supabaseJwtSecretKey The Supabase JWT secret key used to generate new JWTs for the
41
+ * purposes of authentication. This key is extremely sensitive! This parameter MUST be
42
+ * specified if deploymentEnvironment is set to DonobuDeploymentEnvironment.DONOBU_HOSTED_MULTI_TENANT.
43
+ * @param requestContextHolder The object used to get the current API request context.
44
+ */
45
+ constructor(deploymentEnvironment, awsS3Bucket, awsS3Region, googleCloudStorageBucket, supabaseJwtSecretKey, requestContextHolder) {
46
+ this.deploymentEnvironment = deploymentEnvironment;
47
+ this.awsS3Bucket = awsS3Bucket;
48
+ this.awsS3Region = awsS3Region;
49
+ this.googleCloudStorageBucket = googleCloudStorageBucket;
50
+ this.supabaseJwtSecretKey = supabaseJwtSecretKey;
51
+ this.requestContextHolder = requestContextHolder;
52
+ if (deploymentEnvironment ===
53
+ DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.DONOBU_HOSTED_MULTI_TENANT &&
54
+ !supabaseJwtSecretKey) {
55
+ throw new Error('supabaseJwtSecretKey cannot be null if deploymentEnvironment is set to DONOBU_HOSTED_MULTI_TENANT.');
56
+ }
57
+ }
58
+ /**
59
+ * Creates an instance, fetching the values for googleCloudStorageBucket and
60
+ * supabaseJwtSecretKey from the environment variables.
61
+ */
62
+ static async fromEnvironment(deploymentEnvironment, requestContextHolder) {
63
+ if (deploymentEnvironment === DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.LOCAL) {
64
+ await FlowsPersistenceFactoryImpl.migrateToSqlite();
65
+ }
66
+ const awsS3Bucket = process.env[envVars_1.ENV_VAR_NAMES.AWS_S3_BUCKET];
67
+ const awsS3Region = process.env[envVars_1.ENV_VAR_NAMES.AWS_S3_REGION || envVars_1.ENV_VAR_NAMES.AWS_REGION];
68
+ const googleCloudStorageBucket = process.env[envVars_1.ENV_VAR_NAMES.GOOGLE_CLOUD_STORAGE_BUCKET];
69
+ const supabaseJwtSecretKey = process.env[envVars_1.ENV_VAR_NAMES.SUPABASE_JWT_SECRET_KEY];
70
+ return new FlowsPersistenceFactoryImpl(deploymentEnvironment, awsS3Bucket ?? null, awsS3Region ?? null, googleCloudStorageBucket ?? null, supabaseJwtSecretKey ?? null, requestContextHolder);
71
+ }
72
+ /**
73
+ * Creates a new FlowsPersistence instance.
74
+ *
75
+ * @throws NoApiAccessTokenPresentException If the deploymentEnvironment has a value of
76
+ * DonobuDeploymentEnvironment.DONOBU_HOSTED_MULTI_TENANT, and the current RequestContext
77
+ * accessToken is null or invalid.
78
+ */
79
+ async createPersistenceLayer() {
80
+ const requestContext = this.requestContextHolder.get();
81
+ if (this.awsS3Bucket && this.awsS3Region) {
82
+ return new FlowsPersistenceAwsS3_1.FlowsPersistenceAwsS3(this.awsS3Bucket, this.awsS3Region);
83
+ }
84
+ else if (this.googleCloudStorageBucket) {
85
+ return FlowsPersistenceGoogleCloudStorage_1.FlowsPersistenceGoogleCloudStorage.create(this.googleCloudStorageBucket);
86
+ }
87
+ else if (this.deploymentEnvironment === DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.LOCAL) {
88
+ return await FlowsPersistenceSqlite_1.FlowsPersistenceSqlite.create((0, DonobuSqliteDb_1.getDonobuSqliteDatabase)());
89
+ }
90
+ else if (this.deploymentEnvironment ===
91
+ DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.DONOBU_HOSTED_MULTI_TENANT) {
92
+ if (!requestContext.accessToken) {
93
+ throw new NoApiAccessTokenPresentException_1.NoApiAccessTokenPresentException();
94
+ }
95
+ return new FlowsPersistenceSupabase_1.FlowsPersistenceSupabase(SupabaseClient_1.SupabaseClient.createClient(requestContext.accessToken, this.supabaseJwtSecretKey));
96
+ }
97
+ throw new Error('No valid flow persistence implementation available!');
98
+ }
99
+ /** Returns a list of all valid persistence layers. Note that the returned list may be empty! */
100
+ async createPersistenceLayers() {
101
+ const layers = [];
102
+ const requestContext = this.requestContextHolder.get();
103
+ if (this.awsS3Bucket && this.awsS3Region) {
104
+ layers.push(new FlowsPersistenceAwsS3_1.FlowsPersistenceAwsS3(this.awsS3Bucket, this.awsS3Region));
105
+ }
106
+ if (this.googleCloudStorageBucket) {
107
+ layers.push(await FlowsPersistenceGoogleCloudStorage_1.FlowsPersistenceGoogleCloudStorage.create(this.googleCloudStorageBucket));
108
+ }
109
+ if (this.deploymentEnvironment ===
110
+ DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.DONOBU_HOSTED_MULTI_TENANT &&
111
+ requestContext.accessToken &&
112
+ this.supabaseJwtSecretKey) {
113
+ layers.push(new FlowsPersistenceSupabase_1.FlowsPersistenceSupabase(SupabaseClient_1.SupabaseClient.createClient(requestContext.accessToken, this.supabaseJwtSecretKey)));
114
+ }
115
+ else if (this.deploymentEnvironment === DonobuDeploymentEnvironment_1.DonobuDeploymentEnvironment.LOCAL) {
116
+ layers.push(await FlowsPersistenceSqlite_1.FlowsPersistenceSqlite.create((0, DonobuSqliteDb_1.getDonobuSqliteDatabase)()));
117
+ }
118
+ return layers;
119
+ }
120
+ static async migrateToSqlite() {
121
+ const legacyFlowsDir = path_1.default.join(MiscUtils_1.MiscUtils.baseWorkingDirectory(), 'flows');
122
+ // Check if the `flows` directory exists.
123
+ try {
124
+ await promises_1.default.access(legacyFlowsDir);
125
+ }
126
+ catch (_error) {
127
+ // No legacy flows to migrate.
128
+ return;
129
+ }
130
+ const legacyPersistence = await FlowsPersistenceFilesystem_1.FlowsPersistenceFilesystem.create(MiscUtils_1.MiscUtils.baseWorkingDirectory());
131
+ const sqlitePersistence = await FlowsPersistenceSqlite_1.FlowsPersistenceSqlite.create((0, DonobuSqliteDb_1.getDonobuSqliteDatabase)());
132
+ try {
133
+ // Use pagination to fetch all flows.
134
+ let allFlows = [];
135
+ let nextPageToken;
136
+ // Collect all flows using pagination.
137
+ do {
138
+ const result = await legacyPersistence.getFlows({
139
+ limit: 100, // Use large batch size for migration
140
+ pageToken: nextPageToken,
141
+ });
142
+ allFlows.push(...result.items);
143
+ nextPageToken = result.nextPageToken;
144
+ } while (nextPageToken);
145
+ Logger_1.appLogger.info(`Migrating ${allFlows.length} flows to SQLite...`);
146
+ for (const metadata of allFlows) {
147
+ try {
148
+ await sqlitePersistence.setMetadata(metadata);
149
+ // Migrate tool calls for each flow...
150
+ const toolCalls = (await legacyPersistence.getToolCalls(metadata.id)).map((t) => FlowsPersistenceFactoryImpl.revampToolCall(t));
151
+ for (const toolCall of toolCalls) {
152
+ await sqlitePersistence.saveToolCall(metadata.id, toolCall);
153
+ // Migrate the images of each tool call...
154
+ if (toolCall.postCallImageId) {
155
+ const image = await legacyPersistence.getFlowFile(metadata.id, toolCall.postCallImageId);
156
+ if (image) {
157
+ await sqlitePersistence.setFlowFile(metadata.id, toolCall.postCallImageId, image);
158
+ }
159
+ }
160
+ }
161
+ // Migrate browser state for each flow...
162
+ const browserState = await legacyPersistence.getBrowserState(metadata.id);
163
+ if (browserState) {
164
+ await sqlitePersistence.setBrowserState(metadata.id, browserState);
165
+ }
166
+ // Migrate the video of each flow...
167
+ const flowVideo = await legacyPersistence.getVideoSegment(metadata.id, 0, Number.MAX_SAFE_INTEGER);
168
+ if (flowVideo) {
169
+ await sqlitePersistence.setVideo(metadata.id, flowVideo.bytes);
170
+ }
171
+ Logger_1.appLogger.info(`Successfully migrated flow ${metadata.id}`);
172
+ }
173
+ catch (error) {
174
+ Logger_1.appLogger.error(`Failed to migrate flow ${metadata.id} to SQLite`, error);
175
+ }
176
+ }
177
+ // Only remove the directory if migration was successful
178
+ if (allFlows.length > 0) {
179
+ Logger_1.appLogger.info('Migration complete. Removing legacy flows directory...');
180
+ await promises_1.default.rm(legacyPersistence.flowsDirectory, {
181
+ recursive: true,
182
+ force: true,
183
+ });
184
+ }
185
+ }
186
+ catch (error) {
187
+ Logger_1.appLogger.error('Failed to migrate flows to SQLite', error);
188
+ }
189
+ }
190
+ /**
191
+ * Update a given tool call to conform with the latest expected schema.
192
+ */
193
+ static revampToolCall(toolCall) {
194
+ const outcomeMetadata = toolCall.outcome.metadata;
195
+ const isLegacyMetadata = (outcomeMetadata?.elementSelectorCandidatesForReplay ?? false)
196
+ ? true
197
+ : false;
198
+ if (isLegacyMetadata) {
199
+ // Remap the legacy selector metadata to the new format.
200
+ outcomeMetadata.element =
201
+ outcomeMetadata.elementSelectorCandidatesForReplay;
202
+ outcomeMetadata.frame = outcomeMetadata.frameSelectorForReplay;
203
+ delete outcomeMetadata.elementSelectorCandidatesForReplay;
204
+ delete outcomeMetadata.frameSelectorForReplay;
205
+ }
206
+ const isLegacyRerun = (toolCall.parameters.selectorForReplay ?? false) ? true : false;
207
+ if (isLegacyRerun) {
208
+ // Remap the legacy rerun params to the new format.
209
+ toolCall.parameters.selector = {
210
+ element: toolCall.parameters.selectorForReplay
211
+ .elementSelectorCandidatesForReplay,
212
+ frame: toolCall.parameters.selectorForReplay.frameSelectorForReplay,
213
+ };
214
+ delete toolCall.parameters.selectorForReplay;
215
+ }
216
+ else if (toolCall.parameters.selectorForReplay === null) {
217
+ delete toolCall.parameters.selectorForReplay;
218
+ }
219
+ // Remap legacy tool names.
220
+ if (toolCall.toolName === 'clickButton') {
221
+ return {
222
+ ...toolCall,
223
+ toolName: 'click',
224
+ };
225
+ }
226
+ else if (toolCall.toolName === 'navigateToWebpage') {
227
+ return {
228
+ ...toolCall,
229
+ toolName: 'goToWebpage',
230
+ };
231
+ }
232
+ else {
233
+ return toolCall;
234
+ }
235
+ }
236
+ }
237
+ exports.FlowsPersistenceFactoryImpl = FlowsPersistenceFactoryImpl;
238
+ //# sourceMappingURL=FlowsPersistenceFactoryImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowsPersistenceFactoryImpl.js","sourceRoot":"","sources":["../../../src/persistence/flows/FlowsPersistenceFactoryImpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { FlowsPersistence } from './FlowsPersistence';
2
+ import { FlowsPersistenceFactory } from './FlowsPersistenceFactory';
3
+ /**
4
+ * An implementation of FlowsPersistenceFactory that always returns the same
5
+ * persistence layers given at construction time.
6
+ */
7
+ export declare class FlowsPersistenceFactoryPreset implements FlowsPersistenceFactory {
8
+ private readonly persistenceLayers;
9
+ constructor(persistenceLayers: FlowsPersistence[]);
10
+ createPersistenceLayer(): Promise<FlowsPersistence>;
11
+ createPersistenceLayers(): Promise<FlowsPersistence[]>;
12
+ }
13
+ //# sourceMappingURL=FlowsPersistenceFactoryPreset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowsPersistenceFactoryPreset.d.ts","sourceRoot":"","sources":["../../../src/persistence/flows/FlowsPersistenceFactoryPreset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;GAGG;AACH,qBAAa,6BAA8B,YAAW,uBAAuB;IACxD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,gBAAgB,EAAE;IAEnE,sBAAsB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAUnD,uBAAuB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAG7D"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlowsPersistenceFactoryPreset = void 0;
4
+ /**
5
+ * An implementation of FlowsPersistenceFactory that always returns the same
6
+ * persistence layers given at construction time.
7
+ */
8
+ class FlowsPersistenceFactoryPreset {
9
+ constructor(persistenceLayers) {
10
+ this.persistenceLayers = persistenceLayers;
11
+ }
12
+ async createPersistenceLayer() {
13
+ const persistenceLayer = this.persistenceLayers[0];
14
+ if (!persistenceLayer) {
15
+ throw new Error('No persistence layer available');
16
+ }
17
+ return persistenceLayer;
18
+ }
19
+ async createPersistenceLayers() {
20
+ return this.persistenceLayers;
21
+ }
22
+ }
23
+ exports.FlowsPersistenceFactoryPreset = FlowsPersistenceFactoryPreset;
24
+ //# sourceMappingURL=FlowsPersistenceFactoryPreset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowsPersistenceFactoryPreset.js","sourceRoot":"","sources":["../../../src/persistence/flows/FlowsPersistenceFactoryPreset.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,6BAA6B;IACxC,YAAoC,iBAAqC;QAArC,sBAAiB,GAAjB,iBAAiB,CAAoB;IAAG,CAAC;IAE7E,KAAK,CAAC,sBAAsB;QAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;CACF;AAhBD,sEAgBC"}
@@ -0,0 +1,52 @@
1
+ import { FlowMetadata, FlowsQuery } from '../../models/FlowMetadata';
2
+ import { ToolCall } from '../../models/ToolCall';
3
+ import { VideoSegment } from '../../models/VideoSegment';
4
+ import { FlowsPersistence } from './FlowsPersistence';
5
+ import { BrowserStorageState } from '../../models/BrowserStorageState';
6
+ import { PaginatedResult } from '../../models/PaginatedResult';
7
+ /**
8
+ * A persistence implementation that uses the filesystem.
9
+ */
10
+ export declare class FlowsPersistenceFilesystem implements FlowsPersistence {
11
+ readonly flowsDirectory: string;
12
+ readonly environmentDirectory: string;
13
+ private static readonly METADATA_FILENAME;
14
+ private static readonly BROWSER_STATE_FILENAME;
15
+ private static readonly TOOL_CALL_FILENAME_SUFFIX;
16
+ private static readonly VIDEO_FILENAME;
17
+ private constructor();
18
+ static create(storageDirectory: string): Promise<FlowsPersistenceFilesystem>;
19
+ setMetadata(flowMetadata: FlowMetadata): Promise<void>;
20
+ getMetadataByFlowId(flowId: string): Promise<FlowMetadata>;
21
+ /**
22
+ * Get flow metadata by name using pagination for efficiency
23
+ */
24
+ getMetadataByFlowName(flowName: string): Promise<FlowMetadata>;
25
+ saveScreenShot(flowId: string, bytes: Buffer): Promise<string>;
26
+ getScreenShot(flowId: string, screenShotId: string): Promise<Buffer | null>;
27
+ saveToolCall(flowId: string, toolCall: ToolCall): Promise<void>;
28
+ getToolCalls(flowId: string): Promise<ToolCall[]>;
29
+ /**
30
+ * Get flows with pagination and filtering from filesystem storage
31
+ */
32
+ getFlows(query: FlowsQuery): Promise<PaginatedResult<FlowMetadata>>;
33
+ setVideo(flowId: string, bytes: Buffer): Promise<void>;
34
+ getVideoSegment(flowId: string, startOffset: number, length: number): Promise<VideoSegment | null>;
35
+ getFlowFile(flowId: string, fileId: string): Promise<Buffer | null>;
36
+ setFlowFile(flowId: string, fileId: string, fileBytes: Buffer): Promise<void>;
37
+ setBrowserState(flowId: string, browserState: BrowserStorageState): Promise<void>;
38
+ getBrowserState(flowId: string): Promise<BrowserStorageState | null>;
39
+ deleteFlow(flowId: string): Promise<void>;
40
+ private getFlowDirectory;
41
+ private getAllFlowDirectories;
42
+ /**
43
+ * Encode a key to be used as a filename.
44
+ * This ensures special characters in keys don't cause filesystem issues.
45
+ */
46
+ private encodeKey;
47
+ /**
48
+ * Decode a filename back to the original key.
49
+ */
50
+ private decodeKey;
51
+ }
52
+ //# sourceMappingURL=FlowsPersistenceFilesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlowsPersistenceFilesystem.d.ts","sourceRoot":"","sources":["../../../src/persistence/flows/FlowsPersistenceFilesystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;GAEG;AACH,qBAAa,0BAA2B,YAAW,gBAAgB;aAO/C,cAAc,EAAE,MAAM;aACtB,oBAAoB,EAAE,MAAM;IAP9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAuB;IACrE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAqB;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAEtD,OAAO;WAMa,MAAM,CACxB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,0BAA0B,CAAC;IAgBzB,WAAW,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBvE;;OAEG;IACU,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8B9D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ9D,aAAa,CACxB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIZ,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAgC9D;;OAEG;IACU,QAAQ,CACnB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IA0G5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD,eAAe,CAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IA8BlB,WAAW,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUZ,WAAW,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAKV,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,IAAI,CAAC;IAYV,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAuB7D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD,OAAO,CAAC,gBAAgB;YAQV,qBAAqB;IAcnC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,SAAS;CAGlB"}
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FlowsPersistenceFilesystem = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const FlowNotFoundException_1 = require("../../exceptions/FlowNotFoundException");
10
+ const Logger_1 = require("../../utils/Logger");
11
+ const JsonUtils_1 = require("../../utils/JsonUtils");
12
+ const MiscUtils_1 = require("../../utils/MiscUtils");
13
+ /**
14
+ * A persistence implementation that uses the filesystem.
15
+ */
16
+ class FlowsPersistenceFilesystem {
17
+ constructor(flowsDirectory, environmentDirectory) {
18
+ this.flowsDirectory = flowsDirectory;
19
+ this.environmentDirectory = environmentDirectory;
20
+ }
21
+ // Update the create method to also create the environment directory
22
+ static async create(storageDirectory) {
23
+ const flowsDirectory = path_1.default.join(storageDirectory, 'flows');
24
+ const environmentDirectory = path_1.default.join(storageDirectory, 'environment');
25
+ // Ensure directories exist
26
+ await promises_1.default.mkdir(flowsDirectory, { recursive: true }).catch((err) => {
27
+ Logger_1.appLogger.error('Failed to create flows directory', err);
28
+ });
29
+ await promises_1.default.mkdir(environmentDirectory, { recursive: true }).catch((err) => {
30
+ Logger_1.appLogger.error('Failed to create environment directory', err);
31
+ });
32
+ return new FlowsPersistenceFilesystem(flowsDirectory, environmentDirectory);
33
+ }
34
+ async setMetadata(flowMetadata) {
35
+ const flowDir = this.getFlowDirectory(flowMetadata.id);
36
+ await promises_1.default.mkdir(flowDir, { recursive: true });
37
+ const filePath = path_1.default.join(flowDir, FlowsPersistenceFilesystem.METADATA_FILENAME);
38
+ await promises_1.default.writeFile(filePath, JSON.stringify(flowMetadata, null, 2));
39
+ }
40
+ async getMetadataByFlowId(flowId) {
41
+ const filePath = path_1.default.join(this.getFlowDirectory(flowId), FlowsPersistenceFilesystem.METADATA_FILENAME);
42
+ try {
43
+ const content = await promises_1.default.readFile(filePath, 'utf-8');
44
+ const metadata = JSON.parse(content);
45
+ if (typeof metadata.startedAt === 'string') {
46
+ metadata.startedAt = Date.parse(metadata.startedAt) || 0;
47
+ }
48
+ if (typeof metadata.completedAt === 'string') {
49
+ metadata.completedAt = Date.parse(metadata.completedAt) || 0;
50
+ }
51
+ return metadata;
52
+ }
53
+ catch (_e) {
54
+ throw FlowNotFoundException_1.FlowNotFoundException.forId(flowId);
55
+ }
56
+ }
57
+ /**
58
+ * Get flow metadata by name using pagination for efficiency
59
+ */
60
+ async getMetadataByFlowName(flowName) {
61
+ if (!flowName) {
62
+ throw FlowNotFoundException_1.FlowNotFoundException.forName('null');
63
+ }
64
+ const batchSize = 100;
65
+ let pageToken;
66
+ do {
67
+ // Get a batch of flows.
68
+ const result = await this.getFlows({
69
+ limit: batchSize,
70
+ pageToken,
71
+ });
72
+ // Search in the current batch.
73
+ const matchingFlow = result.items.find((flow) => flow.name === flowName);
74
+ if (matchingFlow) {
75
+ return matchingFlow;
76
+ }
77
+ // Continue to next page if available.
78
+ pageToken = result.nextPageToken;
79
+ } while (pageToken);
80
+ // If we get here, we've searched all flows and found nothing.
81
+ throw FlowNotFoundException_1.FlowNotFoundException.forName(flowName);
82
+ }
83
+ async saveScreenShot(flowId, bytes) {
84
+ const imageType = MiscUtils_1.MiscUtils.detectImageType(bytes);
85
+ const filename = `${new Date().toISOString()}.screenshot.${imageType}`;
86
+ const screenShotPath = path_1.default.join(this.getFlowDirectory(flowId), filename);
87
+ await promises_1.default.writeFile(screenShotPath, bytes);
88
+ return filename;
89
+ }
90
+ async getScreenShot(flowId, screenShotId) {
91
+ return this.getFlowFile(flowId, screenShotId);
92
+ }
93
+ async saveToolCall(flowId, toolCall) {
94
+ const filePath = path_1.default.join(this.getFlowDirectory(flowId), `${toolCall.startedAt}${FlowsPersistenceFilesystem.TOOL_CALL_FILENAME_SUFFIX}`);
95
+ await promises_1.default.writeFile(filePath, JSON.stringify(toolCall, null, 2));
96
+ }
97
+ async getToolCalls(flowId) {
98
+ const flowDir = this.getFlowDirectory(flowId);
99
+ try {
100
+ const files = await promises_1.default.readdir(flowDir);
101
+ const toolCallFiles = files.filter((file) => file.endsWith(FlowsPersistenceFilesystem.TOOL_CALL_FILENAME_SUFFIX));
102
+ const toolCalls = await Promise.all(toolCallFiles.sort().map(async (file) => {
103
+ const content = await promises_1.default.readFile(path_1.default.join(flowDir, file), 'utf-8');
104
+ const toolCall = JSON.parse(content);
105
+ if (typeof toolCall.startedAt === 'string') {
106
+ toolCall.startedAt = Date.parse(toolCall.startedAt) || 0;
107
+ }
108
+ if (typeof toolCall.completedAt === 'string') {
109
+ toolCall.completedAt = Date.parse(toolCall.completedAt) || 0;
110
+ }
111
+ return toolCall;
112
+ }));
113
+ return toolCalls.sort((a, b) => a.startedAt - b.startedAt);
114
+ }
115
+ catch (_e) {
116
+ throw FlowNotFoundException_1.FlowNotFoundException.forId(flowId);
117
+ }
118
+ }
119
+ /**
120
+ * Get flows with pagination and filtering from filesystem storage
121
+ */
122
+ async getFlows(query) {
123
+ const { limit = 20, pageToken, name, runMode, state, startedAfter, startedBefore, } = query || {};
124
+ // Validate inputs.
125
+ const validLimit = Math.min(Math.max(1, limit), 100);
126
+ // Get all flow directories.
127
+ const flowDirs = await this.getAllFlowDirectories();
128
+ // Load metadata for all flows.
129
+ const metadataPromises = flowDirs.map(async (dir) => {
130
+ try {
131
+ const metadataPath = path_1.default.join(dir, FlowsPersistenceFilesystem.METADATA_FILENAME);
132
+ const content = await promises_1.default.readFile(metadataPath, 'utf-8');
133
+ const metadata = JSON.parse(content);
134
+ if (typeof metadata.startedAt === 'string') {
135
+ metadata.startedAt = Date.parse(metadata.startedAt) || 0;
136
+ }
137
+ if (typeof metadata.completedAt === 'string') {
138
+ metadata.completedAt = Date.parse(metadata.completedAt) || 0;
139
+ }
140
+ return metadata;
141
+ }
142
+ catch (error) {
143
+ Logger_1.appLogger.warn(`Failed to read metadata in ${dir}`, error);
144
+ return null;
145
+ }
146
+ });
147
+ // Wait for all metadata to load.
148
+ const allMetadata = (await Promise.all(metadataPromises)).filter((metadata) => metadata !== null);
149
+ // Apply filters based on query parameters
150
+ let filteredMetadata = allMetadata;
151
+ if (name) {
152
+ filteredMetadata = filteredMetadata.filter((flow) => flow.name === name);
153
+ }
154
+ if (runMode) {
155
+ filteredMetadata = filteredMetadata.filter((flow) => flow.runMode === runMode);
156
+ }
157
+ if (state) {
158
+ filteredMetadata = filteredMetadata.filter((flow) => flow.state === state);
159
+ }
160
+ // Apply startedAfter filter
161
+ if (startedAfter !== undefined) {
162
+ filteredMetadata = filteredMetadata.filter((flow) => (flow.startedAt || 0) >= startedAfter);
163
+ }
164
+ // Apply startedBefore filter
165
+ if (startedBefore !== undefined) {
166
+ filteredMetadata = filteredMetadata.filter((flow) => (flow.startedAt || 0) <= startedBefore);
167
+ }
168
+ // Sort by creation date (newest first).
169
+ filteredMetadata.sort((a, b) => (b.startedAt || 0) - (a.startedAt || 0));
170
+ // Parse page token to get the offset.
171
+ const offset = pageToken ? parseInt(pageToken, 10) : 0;
172
+ // Apply pagination.
173
+ const paginatedMetadata = filteredMetadata.slice(offset, offset + validLimit);
174
+ // Check if there are more results.
175
+ const hasMore = offset + validLimit < filteredMetadata.length;
176
+ // Calculate next page token.
177
+ const nextPageToken = hasMore
178
+ ? (offset + validLimit).toString()
179
+ : undefined;
180
+ return {
181
+ items: paginatedMetadata,
182
+ nextPageToken,
183
+ };
184
+ }
185
+ async setVideo(flowId, bytes) {
186
+ const videoPath = path_1.default.join(this.getFlowDirectory(flowId), FlowsPersistenceFilesystem.VIDEO_FILENAME);
187
+ await promises_1.default.writeFile(videoPath, bytes);
188
+ }
189
+ async getVideoSegment(flowId, startOffset, length) {
190
+ try {
191
+ await this.getMetadataByFlowId(flowId);
192
+ const videoPath = path_1.default.join(this.getFlowDirectory(flowId), FlowsPersistenceFilesystem.VIDEO_FILENAME);
193
+ const stats = await promises_1.default.stat(videoPath);
194
+ const totalLength = stats.size;
195
+ const adjustedLength = Math.min(length, totalLength - startOffset);
196
+ const buffer = Buffer.alloc(adjustedLength);
197
+ const fileHandle = await promises_1.default.open(videoPath, 'r');
198
+ try {
199
+ await fileHandle.read(buffer, 0, adjustedLength, startOffset);
200
+ return {
201
+ bytes: buffer,
202
+ totalLength: totalLength,
203
+ startOffset: startOffset,
204
+ };
205
+ }
206
+ finally {
207
+ await fileHandle.close();
208
+ }
209
+ }
210
+ catch {
211
+ return null;
212
+ }
213
+ }
214
+ async getFlowFile(flowId, fileId) {
215
+ try {
216
+ await this.getMetadataByFlowId(flowId);
217
+ const filePath = path_1.default.join(this.getFlowDirectory(flowId), fileId);
218
+ return await promises_1.default.readFile(filePath);
219
+ }
220
+ catch {
221
+ return null;
222
+ }
223
+ }
224
+ async setFlowFile(flowId, fileId, fileBytes) {
225
+ const filePath = path_1.default.join(this.getFlowDirectory(flowId), fileId);
226
+ await promises_1.default.writeFile(filePath, fileBytes);
227
+ }
228
+ async setBrowserState(flowId, browserState) {
229
+ const serializedBrowserState = Buffer.from(JSON.stringify(browserState), 'utf-8');
230
+ await this.setFlowFile(flowId, FlowsPersistenceFilesystem.BROWSER_STATE_FILENAME, serializedBrowserState);
231
+ }
232
+ async getBrowserState(flowId) {
233
+ const browserStateRaw = await this.getFlowFile(flowId, FlowsPersistenceFilesystem.BROWSER_STATE_FILENAME);
234
+ if (browserStateRaw) {
235
+ const browserState = JsonUtils_1.JsonUtils.jsonStringToJsonObject(browserStateRaw.toString('utf-8'));
236
+ if (browserState) {
237
+ return browserState;
238
+ }
239
+ else {
240
+ throw new Error(`Cannot load malformed browser state from flow ${flowId}`);
241
+ }
242
+ }
243
+ else {
244
+ return null;
245
+ }
246
+ }
247
+ async deleteFlow(flowId) {
248
+ const flowDirectory = this.getFlowDirectory(flowId);
249
+ await promises_1.default.rm(flowDirectory, { recursive: true, force: true });
250
+ }
251
+ getFlowDirectory(flowId) {
252
+ if (!flowId) {
253
+ throw FlowNotFoundException_1.FlowNotFoundException.forId(flowId);
254
+ }
255
+ return path_1.default.join(this.flowsDirectory, flowId);
256
+ }
257
+ async getAllFlowDirectories() {
258
+ try {
259
+ const entries = await promises_1.default.readdir(this.flowsDirectory, {
260
+ withFileTypes: true,
261
+ });
262
+ return entries
263
+ .filter((entry) => entry.isDirectory())
264
+ .map((entry) => path_1.default.join(this.flowsDirectory, entry.name));
265
+ }
266
+ catch (error) {
267
+ Logger_1.appLogger.error('Failed to find flow root directory', error);
268
+ throw error;
269
+ }
270
+ }
271
+ /**
272
+ * Encode a key to be used as a filename.
273
+ * This ensures special characters in keys don't cause filesystem issues.
274
+ */
275
+ encodeKey(key) {
276
+ // Base64 encode to handle any special characters
277
+ return Buffer.from(key).toString('base64');
278
+ }
279
+ /**
280
+ * Decode a filename back to the original key.
281
+ */
282
+ decodeKey(encodedKey) {
283
+ return Buffer.from(encodedKey, 'base64').toString('utf-8');
284
+ }
285
+ }
286
+ exports.FlowsPersistenceFilesystem = FlowsPersistenceFilesystem;
287
+ FlowsPersistenceFilesystem.METADATA_FILENAME = 'metadata.json';
288
+ FlowsPersistenceFilesystem.BROWSER_STATE_FILENAME = 'browserstate.json';
289
+ FlowsPersistenceFilesystem.TOOL_CALL_FILENAME_SUFFIX = '.tool-call.json';
290
+ FlowsPersistenceFilesystem.VIDEO_FILENAME = 'video.webm';
291
+ //# sourceMappingURL=FlowsPersistenceFilesystem.js.map