@ductape/sdk 0.0.4 → 0.0.6

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 (952) hide show
  1. package/README.md +87 -53
  2. package/dist/agents/agent-context.d.ts +100 -0
  3. package/dist/agents/agent-context.js +604 -0
  4. package/dist/agents/agent-context.js.map +1 -0
  5. package/dist/agents/agent-executor.d.ts +180 -0
  6. package/dist/agents/agent-executor.js +715 -0
  7. package/dist/agents/agent-executor.js.map +1 -0
  8. package/dist/agents/agents.service.d.ts +310 -0
  9. package/dist/agents/agents.service.js +1253 -0
  10. package/dist/agents/agents.service.js.map +1 -0
  11. package/dist/agents/index.d.ts +55 -0
  12. package/dist/agents/index.js +110 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/memory-manager.d.ts +182 -0
  15. package/dist/agents/memory-manager.js +383 -0
  16. package/dist/agents/memory-manager.js.map +1 -0
  17. package/dist/agents/tool-registry.d.ts +141 -0
  18. package/dist/agents/tool-registry.js +355 -0
  19. package/dist/agents/tool-registry.js.map +1 -0
  20. package/dist/agents/types/agents.types.d.ts +1240 -0
  21. package/dist/agents/types/agents.types.js +12 -0
  22. package/dist/agents/types/agents.types.js.map +1 -0
  23. package/dist/agents/types/index.d.ts +6 -0
  24. package/dist/agents/types/index.js +23 -0
  25. package/dist/agents/types/index.js.map +1 -0
  26. package/dist/agents/vector-store-adapter.d.ts +108 -0
  27. package/dist/agents/vector-store-adapter.js +213 -0
  28. package/dist/agents/vector-store-adapter.js.map +1 -0
  29. package/dist/api/services/appApi.service.d.ts +51 -5
  30. package/dist/api/services/appApi.service.js +116 -9
  31. package/dist/api/services/appApi.service.js.map +1 -1
  32. package/dist/api/services/logsApi.service.d.ts +51 -0
  33. package/dist/api/services/logsApi.service.js +19 -2
  34. package/dist/api/services/logsApi.service.js.map +1 -1
  35. package/dist/api/services/pricingApi.service.d.ts +10 -0
  36. package/dist/api/services/pricingApi.service.js +34 -0
  37. package/dist/api/services/pricingApi.service.js.map +1 -0
  38. package/dist/api/services/processorApi.service.d.ts +900 -2
  39. package/dist/api/services/processorApi.service.js +665 -12
  40. package/dist/api/services/processorApi.service.js.map +1 -1
  41. package/dist/api/services/productsApi.service.d.ts +130 -1
  42. package/dist/api/services/productsApi.service.js +198 -11
  43. package/dist/api/services/productsApi.service.js.map +1 -1
  44. package/dist/api/services/resilienceApi.service.d.ts +106 -0
  45. package/dist/api/services/resilienceApi.service.js +224 -0
  46. package/dist/api/services/resilienceApi.service.js.map +1 -0
  47. package/dist/api/services/secretsApi.service.d.ts +50 -0
  48. package/dist/api/services/secretsApi.service.js +113 -0
  49. package/dist/api/services/secretsApi.service.js.map +1 -0
  50. package/dist/api/services/webhooksApi.service.js +13 -6
  51. package/dist/api/services/webhooksApi.service.js.map +1 -1
  52. package/dist/api/services/workflowApi.service.d.ts +199 -0
  53. package/dist/api/services/workflowApi.service.js +201 -0
  54. package/dist/api/services/workflowApi.service.js.map +1 -0
  55. package/dist/api/services/workspaceApi.service.d.ts +8 -0
  56. package/dist/api/services/workspaceApi.service.js +20 -0
  57. package/dist/api/services/workspaceApi.service.js.map +1 -1
  58. package/dist/api/urls.d.ts +92 -1
  59. package/dist/api/urls.js +118 -18
  60. package/dist/api/urls.js.map +1 -1
  61. package/dist/api/utils/auth.utils.d.ts +1 -3
  62. package/dist/api/utils/auth.utils.js.map +1 -1
  63. package/dist/api/utils/cache.utils.d.ts +1 -1
  64. package/dist/api/utils/cache.utils.js +2 -2
  65. package/dist/api/utils/cache.utils.js.map +1 -1
  66. package/dist/api/utils/strings.utils.d.ts +2 -0
  67. package/dist/api/utils/strings.utils.js +14 -0
  68. package/dist/api/utils/strings.utils.js.map +1 -1
  69. package/dist/apps/services/app.service.d.ts +42 -33
  70. package/dist/apps/services/app.service.js +574 -223
  71. package/dist/apps/services/app.service.js.map +1 -1
  72. package/dist/apps/utils/auth-context-manager.d.ts +137 -0
  73. package/dist/apps/utils/auth-context-manager.js +248 -0
  74. package/dist/apps/utils/auth-context-manager.js.map +1 -0
  75. package/dist/apps/utils/credential-manager.d.ts +128 -0
  76. package/dist/apps/utils/credential-manager.js +199 -0
  77. package/dist/apps/utils/credential-manager.js.map +1 -0
  78. package/dist/apps/utils/index.d.ts +10 -0
  79. package/dist/apps/utils/index.js +54 -0
  80. package/dist/apps/utils/index.js.map +1 -0
  81. package/dist/apps/utils/input-helpers.d.ts +67 -0
  82. package/dist/apps/utils/input-helpers.js +185 -0
  83. package/dist/apps/utils/input-helpers.js.map +1 -0
  84. package/dist/apps/utils/input-resolver.d.ts +165 -0
  85. package/dist/apps/utils/input-resolver.js +477 -0
  86. package/dist/apps/utils/input-resolver.js.map +1 -0
  87. package/dist/apps/utils/oauth-manager.d.ts +196 -0
  88. package/dist/apps/utils/oauth-manager.js +429 -0
  89. package/dist/apps/utils/oauth-manager.js.map +1 -0
  90. package/dist/apps/validators/joi-validators/create.appAction.validator.d.ts +1 -2
  91. package/dist/apps/validators/joi-validators/create.appAction.validator.js +22 -2
  92. package/dist/apps/validators/joi-validators/create.appAction.validator.js.map +1 -1
  93. package/dist/apps/validators/joi-validators/update.app.validator.js +2 -0
  94. package/dist/apps/validators/joi-validators/update.app.validator.js.map +1 -1
  95. package/dist/apps/validators/joi-validators/update.appAction.validator.js +23 -2
  96. package/dist/apps/validators/joi-validators/update.appAction.validator.js.map +1 -1
  97. package/dist/apps/validators/joi-validators/update.appActionResponse.validator.d.ts +1 -1
  98. package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js +34 -1
  99. package/dist/apps/validators/joi-validators/update.appActionResponse.validator.js.map +1 -1
  100. package/dist/bin.d.ts +26 -0
  101. package/dist/bin.js +28 -0
  102. package/dist/bin.js.map +1 -0
  103. package/dist/brokers/brokers.service.d.ts +435 -0
  104. package/dist/brokers/brokers.service.js +1205 -0
  105. package/dist/brokers/brokers.service.js.map +1 -0
  106. package/dist/brokers/index.d.ts +46 -0
  107. package/dist/brokers/index.js +83 -0
  108. package/dist/brokers/index.js.map +1 -0
  109. package/dist/brokers/types/index.d.ts +567 -0
  110. package/dist/brokers/types/index.js +8 -0
  111. package/dist/brokers/types/index.js.map +1 -0
  112. package/dist/brokers/utils/broker.util.d.ts +33 -0
  113. package/dist/brokers/utils/broker.util.js +125 -0
  114. package/dist/brokers/utils/broker.util.js.map +1 -0
  115. package/dist/{processor/services/messagebrokers → brokers/utils/providers}/aws-sqs.service.d.ts +3 -2
  116. package/dist/brokers/utils/providers/aws-sqs.service.js +71 -0
  117. package/dist/brokers/utils/providers/aws-sqs.service.js.map +1 -0
  118. package/dist/{processor/services/messagebrokers → brokers/utils/providers}/google-pubsub.service.d.ts +2 -2
  119. package/dist/{processor/services/messagebrokers → brokers/utils/providers}/google-pubsub.service.js +16 -7
  120. package/dist/brokers/utils/providers/google-pubsub.service.js.map +1 -0
  121. package/dist/brokers/utils/providers/index.d.ts +6 -0
  122. package/dist/brokers/utils/providers/index.js +16 -0
  123. package/dist/brokers/utils/providers/index.js.map +1 -0
  124. package/dist/brokers/utils/providers/kafka.service.d.ts +23 -0
  125. package/dist/brokers/utils/providers/kafka.service.js +131 -0
  126. package/dist/brokers/utils/providers/kafka.service.js.map +1 -0
  127. package/dist/brokers/utils/providers/nats.service.d.ts +18 -0
  128. package/dist/brokers/utils/providers/nats.service.js +63 -0
  129. package/dist/brokers/utils/providers/nats.service.js.map +1 -0
  130. package/dist/brokers/utils/providers/rabbitmq.service.d.ts +25 -0
  131. package/dist/brokers/utils/providers/rabbitmq.service.js +138 -0
  132. package/dist/brokers/utils/providers/rabbitmq.service.js.map +1 -0
  133. package/dist/{processor/services/messagebrokers → brokers/utils/providers}/redis.service.d.ts +3 -3
  134. package/dist/{processor/services/messagebrokers → brokers/utils/providers}/redis.service.js +25 -14
  135. package/dist/brokers/utils/providers/redis.service.js.map +1 -0
  136. package/dist/cache/cache.manager.d.ts +308 -0
  137. package/dist/cache/cache.manager.js +900 -0
  138. package/dist/cache/cache.manager.js.map +1 -0
  139. package/dist/cache/cache.service.d.ts +191 -0
  140. package/dist/cache/cache.service.js +594 -0
  141. package/dist/cache/cache.service.js.map +1 -0
  142. package/dist/cache/index.d.ts +52 -0
  143. package/dist/cache/index.js +81 -0
  144. package/dist/cache/index.js.map +1 -0
  145. package/dist/cache/types/index.d.ts +110 -0
  146. package/dist/cache/types/index.js +6 -0
  147. package/dist/cache/types/index.js.map +1 -0
  148. package/dist/clients/apps.client.js +1 -1
  149. package/dist/clients/apps.client.js.map +1 -1
  150. package/dist/clients/pricing.client.d.ts +3 -0
  151. package/dist/clients/pricing.client.js +33 -0
  152. package/dist/clients/pricing.client.js.map +1 -0
  153. package/dist/database/actions/action-manager.d.ts +170 -0
  154. package/dist/database/actions/action-manager.js +465 -0
  155. package/dist/database/actions/action-manager.js.map +1 -0
  156. package/dist/database/actions/index.d.ts +6 -0
  157. package/dist/database/actions/index.js +13 -0
  158. package/dist/database/actions/index.js.map +1 -0
  159. package/dist/database/adapters/adapter.factory.d.ts +62 -0
  160. package/dist/database/adapters/adapter.factory.js +97 -0
  161. package/dist/database/adapters/adapter.factory.js.map +1 -0
  162. package/dist/database/adapters/base.adapter.d.ts +423 -0
  163. package/dist/database/adapters/base.adapter.js +260 -0
  164. package/dist/database/adapters/base.adapter.js.map +1 -0
  165. package/dist/database/adapters/cassandra.adapter.d.ts +92 -0
  166. package/dist/database/adapters/cassandra.adapter.js +1091 -0
  167. package/dist/database/adapters/cassandra.adapter.js.map +1 -0
  168. package/dist/database/adapters/dynamodb.adapter.d.ts +110 -0
  169. package/dist/database/adapters/dynamodb.adapter.js +1564 -0
  170. package/dist/database/adapters/dynamodb.adapter.js.map +1 -0
  171. package/dist/database/adapters/index.d.ts +11 -0
  172. package/dist/database/adapters/index.js +27 -0
  173. package/dist/database/adapters/index.js.map +1 -0
  174. package/dist/database/adapters/mariadb.adapter.d.ts +100 -0
  175. package/dist/database/adapters/mariadb.adapter.js +247 -0
  176. package/dist/database/adapters/mariadb.adapter.js.map +1 -0
  177. package/dist/database/adapters/mongodb.adapter.d.ts +121 -0
  178. package/dist/database/adapters/mongodb.adapter.js +1284 -0
  179. package/dist/database/adapters/mongodb.adapter.js.map +1 -0
  180. package/dist/database/adapters/mysql.adapter.d.ts +86 -0
  181. package/dist/database/adapters/mysql.adapter.js +1371 -0
  182. package/dist/database/adapters/mysql.adapter.js.map +1 -0
  183. package/dist/database/adapters/postgresql.adapter.d.ts +90 -0
  184. package/dist/database/adapters/postgresql.adapter.js +1487 -0
  185. package/dist/database/adapters/postgresql.adapter.js.map +1 -0
  186. package/dist/database/databases.service.d.ts +1476 -0
  187. package/dist/database/databases.service.js +3068 -0
  188. package/dist/database/databases.service.js.map +1 -0
  189. package/dist/database/index.d.ts +46 -0
  190. package/dist/database/index.js +109 -0
  191. package/dist/database/index.js.map +1 -0
  192. package/dist/database/migrations/index.d.ts +6 -0
  193. package/dist/database/migrations/index.js +12 -0
  194. package/dist/database/migrations/index.js.map +1 -0
  195. package/dist/database/migrations/migration-engine.d.ts +136 -0
  196. package/dist/database/migrations/migration-engine.js +1421 -0
  197. package/dist/database/migrations/migration-engine.js.map +1 -0
  198. package/dist/database/operators/aggregation-builder.d.ts +67 -0
  199. package/dist/database/operators/aggregation-builder.js +841 -0
  200. package/dist/database/operators/aggregation-builder.js.map +1 -0
  201. package/dist/database/operators/index.d.ts +7 -0
  202. package/dist/database/operators/index.js +15 -0
  203. package/dist/database/operators/index.js.map +1 -0
  204. package/dist/database/operators/query-builder.d.ts +69 -0
  205. package/dist/database/operators/query-builder.js +447 -0
  206. package/dist/database/operators/query-builder.js.map +1 -0
  207. package/dist/database/presave/decrypt.d.ts +25 -0
  208. package/dist/database/presave/decrypt.js +146 -0
  209. package/dist/database/presave/decrypt.js.map +1 -0
  210. package/dist/database/presave/index.d.ts +9 -0
  211. package/dist/database/presave/index.js +18 -0
  212. package/dist/database/presave/index.js.map +1 -0
  213. package/dist/database/presave/presave-processor.d.ts +148 -0
  214. package/dist/database/presave/presave-processor.js +702 -0
  215. package/dist/database/presave/presave-processor.js.map +1 -0
  216. package/dist/database/schema/index.d.ts +7 -0
  217. package/dist/database/schema/index.js +13 -0
  218. package/dist/database/schema/index.js.map +1 -0
  219. package/dist/database/schema/schema-manager.d.ts +258 -0
  220. package/dist/database/schema/schema-manager.js +638 -0
  221. package/dist/database/schema/schema-manager.js.map +1 -0
  222. package/dist/database/transactions/index.d.ts +6 -0
  223. package/dist/database/transactions/index.js +13 -0
  224. package/dist/database/transactions/index.js.map +1 -0
  225. package/dist/database/transactions/transaction-manager.d.ts +113 -0
  226. package/dist/database/transactions/transaction-manager.js +344 -0
  227. package/dist/database/transactions/transaction-manager.js.map +1 -0
  228. package/dist/database/triggers/index.d.ts +7 -0
  229. package/dist/database/triggers/index.js +14 -0
  230. package/dist/database/triggers/index.js.map +1 -0
  231. package/dist/database/triggers/trigger-processor.d.ts +239 -0
  232. package/dist/database/triggers/trigger-processor.js +1034 -0
  233. package/dist/database/triggers/trigger-processor.js.map +1 -0
  234. package/dist/database/types/action.interface.d.ts +148 -0
  235. package/dist/database/types/action.interface.js +6 -0
  236. package/dist/database/types/action.interface.js.map +1 -0
  237. package/dist/database/types/aggregation.interface.d.ts +185 -0
  238. package/dist/database/types/aggregation.interface.js +6 -0
  239. package/dist/database/types/aggregation.interface.js.map +1 -0
  240. package/dist/database/types/connection.interface.d.ts +137 -0
  241. package/dist/database/types/connection.interface.js +6 -0
  242. package/dist/database/types/connection.interface.js.map +1 -0
  243. package/dist/database/types/dashboard.interface.d.ts +74 -0
  244. package/dist/database/types/dashboard.interface.js +7 -0
  245. package/dist/database/types/dashboard.interface.js.map +1 -0
  246. package/dist/database/types/enums.d.ts +195 -0
  247. package/dist/database/types/enums.js +244 -0
  248. package/dist/database/types/enums.js.map +1 -0
  249. package/dist/database/types/index.d.ts +15 -0
  250. package/dist/database/types/index.js +31 -0
  251. package/dist/database/types/index.js.map +1 -0
  252. package/dist/database/types/migration.interface.d.ts +686 -0
  253. package/dist/database/types/migration.interface.js +9 -0
  254. package/dist/database/types/migration.interface.js.map +1 -0
  255. package/dist/database/types/presave.interface.d.ts +292 -0
  256. package/dist/database/types/presave.interface.js +60 -0
  257. package/dist/database/types/presave.interface.js.map +1 -0
  258. package/dist/database/types/query.interface.d.ts +205 -0
  259. package/dist/database/types/query.interface.js +6 -0
  260. package/dist/database/types/query.interface.js.map +1 -0
  261. package/dist/database/types/schema.interface.d.ts +412 -0
  262. package/dist/database/types/schema.interface.js +6 -0
  263. package/dist/database/types/schema.interface.js.map +1 -0
  264. package/dist/database/types/transaction.interface.d.ts +84 -0
  265. package/dist/database/types/transaction.interface.js +6 -0
  266. package/dist/database/types/transaction.interface.js.map +1 -0
  267. package/dist/database/types/trigger.interface.d.ts +612 -0
  268. package/dist/database/types/trigger.interface.js +121 -0
  269. package/dist/database/types/trigger.interface.js.map +1 -0
  270. package/dist/database/types/write.interface.d.ts +216 -0
  271. package/dist/database/types/write.interface.js +6 -0
  272. package/dist/database/types/write.interface.js.map +1 -0
  273. package/dist/database/utils/database-error.d.ts +96 -0
  274. package/dist/database/utils/database-error.js +221 -0
  275. package/dist/database/utils/database-error.js.map +1 -0
  276. package/dist/database/utils/index.d.ts +6 -0
  277. package/dist/database/utils/index.js +11 -0
  278. package/dist/database/utils/index.js.map +1 -0
  279. package/dist/graph/adapters/adapter.factory.d.ts +47 -0
  280. package/dist/graph/adapters/adapter.factory.js +77 -0
  281. package/dist/graph/adapters/adapter.factory.js.map +1 -0
  282. package/dist/graph/adapters/arangodb.adapter.d.ts +86 -0
  283. package/dist/graph/adapters/arangodb.adapter.js +1588 -0
  284. package/dist/graph/adapters/arangodb.adapter.js.map +1 -0
  285. package/dist/graph/adapters/base.adapter.d.ts +264 -0
  286. package/dist/graph/adapters/base.adapter.js +156 -0
  287. package/dist/graph/adapters/base.adapter.js.map +1 -0
  288. package/dist/graph/adapters/index.d.ts +11 -0
  289. package/dist/graph/adapters/index.js +21 -0
  290. package/dist/graph/adapters/index.js.map +1 -0
  291. package/dist/graph/adapters/memgraph.adapter.d.ts +110 -0
  292. package/dist/graph/adapters/memgraph.adapter.js +1452 -0
  293. package/dist/graph/adapters/memgraph.adapter.js.map +1 -0
  294. package/dist/graph/adapters/neo4j.adapter.d.ts +81 -0
  295. package/dist/graph/adapters/neo4j.adapter.js +1317 -0
  296. package/dist/graph/adapters/neo4j.adapter.js.map +1 -0
  297. package/dist/graph/adapters/neptune.adapter.d.ts +82 -0
  298. package/dist/graph/adapters/neptune.adapter.js +1369 -0
  299. package/dist/graph/adapters/neptune.adapter.js.map +1 -0
  300. package/dist/graph/graphs.service.d.ts +606 -0
  301. package/dist/graph/graphs.service.js +2434 -0
  302. package/dist/graph/graphs.service.js.map +1 -0
  303. package/dist/graph/index.d.ts +57 -0
  304. package/dist/graph/index.js +77 -0
  305. package/dist/graph/index.js.map +1 -0
  306. package/dist/graph/transactions/index.d.ts +4 -0
  307. package/dist/graph/transactions/index.js +9 -0
  308. package/dist/graph/transactions/index.js.map +1 -0
  309. package/dist/graph/transactions/transaction-manager.d.ts +61 -0
  310. package/dist/graph/transactions/transaction-manager.js +126 -0
  311. package/dist/graph/transactions/transaction-manager.js.map +1 -0
  312. package/dist/graph/types/connection.interface.d.ts +149 -0
  313. package/dist/graph/types/connection.interface.js +9 -0
  314. package/dist/graph/types/connection.interface.js.map +1 -0
  315. package/dist/graph/types/enums.d.ts +101 -0
  316. package/dist/graph/types/enums.js +114 -0
  317. package/dist/graph/types/enums.js.map +1 -0
  318. package/dist/graph/types/index.d.ts +13 -0
  319. package/dist/graph/types/index.js +20 -0
  320. package/dist/graph/types/index.js.map +1 -0
  321. package/dist/graph/types/node.interface.d.ts +248 -0
  322. package/dist/graph/types/node.interface.js +9 -0
  323. package/dist/graph/types/node.interface.js.map +1 -0
  324. package/dist/graph/types/query.interface.d.ts +175 -0
  325. package/dist/graph/types/query.interface.js +9 -0
  326. package/dist/graph/types/query.interface.js.map +1 -0
  327. package/dist/graph/types/relationship.interface.d.ts +207 -0
  328. package/dist/graph/types/relationship.interface.js +9 -0
  329. package/dist/graph/types/relationship.interface.js.map +1 -0
  330. package/dist/graph/types/schema.interface.d.ts +295 -0
  331. package/dist/graph/types/schema.interface.js +9 -0
  332. package/dist/graph/types/schema.interface.js.map +1 -0
  333. package/dist/graph/types/transaction.interface.d.ts +55 -0
  334. package/dist/graph/types/transaction.interface.js +9 -0
  335. package/dist/graph/types/transaction.interface.js.map +1 -0
  336. package/dist/graph/types/traversal.interface.d.ts +181 -0
  337. package/dist/graph/types/traversal.interface.js +9 -0
  338. package/dist/graph/types/traversal.interface.js.map +1 -0
  339. package/dist/graph/utils/graph-error.d.ts +71 -0
  340. package/dist/graph/utils/graph-error.js +142 -0
  341. package/dist/graph/utils/graph-error.js.map +1 -0
  342. package/dist/graph/utils/index.d.ts +4 -0
  343. package/dist/graph/utils/index.js +9 -0
  344. package/dist/graph/utils/index.js.map +1 -0
  345. package/dist/imports/imports.service.d.ts +3 -3
  346. package/dist/imports/imports.service.js +8 -7
  347. package/dist/imports/imports.service.js.map +1 -1
  348. package/dist/imports/imports.types.d.ts +8 -0
  349. package/dist/imports/repos/openApi.repo.d.ts +1 -2
  350. package/dist/imports/repos/openApi.repo.js +409 -70
  351. package/dist/imports/repos/openApi.repo.js.map +1 -1
  352. package/dist/imports/repos/postmanV21.repo.d.ts +1 -1
  353. package/dist/imports/repos/postmanV21.repo.js +126 -83
  354. package/dist/imports/repos/postmanV21.repo.js.map +1 -1
  355. package/dist/index.d.ts +3926 -269
  356. package/dist/index.js +5475 -682
  357. package/dist/index.js.map +1 -1
  358. package/dist/init.interface.d.ts +407 -0
  359. package/dist/{processor/services/messagebrokers/messagebrokers.type.js → init.interface.js} +1 -1
  360. package/dist/init.interface.js.map +1 -0
  361. package/dist/inputs/inputs.service.d.ts +1 -1
  362. package/dist/inputs/inputs.service.js +2 -2
  363. package/dist/inputs/inputs.service.js.map +1 -1
  364. package/dist/inputs/utils/inputs.utils.create.js +1 -1
  365. package/dist/inputs/utils/inputs.utils.create.js.map +1 -1
  366. package/dist/jobs/index.d.ts +38 -0
  367. package/dist/jobs/index.js +50 -0
  368. package/dist/jobs/index.js.map +1 -0
  369. package/dist/jobs/jobs.service.d.ts +154 -0
  370. package/dist/jobs/jobs.service.js +491 -0
  371. package/dist/jobs/jobs.service.js.map +1 -0
  372. package/dist/jobs/jobs.state.d.ts +113 -0
  373. package/dist/jobs/jobs.state.js +447 -0
  374. package/dist/jobs/jobs.state.js.map +1 -0
  375. package/dist/jobs/types.d.ts +449 -0
  376. package/dist/jobs/types.js +74 -0
  377. package/dist/jobs/types.js.map +1 -0
  378. package/dist/logs/logs.service.js +6 -1
  379. package/dist/logs/logs.service.js.map +1 -1
  380. package/dist/logs/logs.types.d.ts +33 -1
  381. package/dist/logs/logs.types.js +17 -0
  382. package/dist/logs/logs.types.js.map +1 -1
  383. package/dist/models/index.d.ts +6 -0
  384. package/dist/models/index.js +11 -0
  385. package/dist/models/index.js.map +1 -0
  386. package/dist/models/models.service.d.ts +137 -0
  387. package/dist/models/models.service.js +195 -0
  388. package/dist/models/models.service.js.map +1 -0
  389. package/dist/notifications/index.d.ts +13 -0
  390. package/dist/notifications/index.js +26 -0
  391. package/dist/notifications/index.js.map +1 -0
  392. package/dist/notifications/notifications.service.d.ts +268 -0
  393. package/dist/notifications/notifications.service.js +905 -0
  394. package/dist/notifications/notifications.service.js.map +1 -0
  395. package/dist/notifications/types/index.d.ts +4 -0
  396. package/dist/notifications/types/index.js +21 -0
  397. package/dist/notifications/types/index.js.map +1 -0
  398. package/dist/notifications/types/notifications.types.d.ts +452 -0
  399. package/dist/notifications/types/notifications.types.js +49 -0
  400. package/dist/notifications/types/notifications.types.js.map +1 -0
  401. package/dist/parsers/index.d.ts +3 -0
  402. package/dist/parsers/index.js +27 -0
  403. package/dist/parsers/index.js.map +1 -0
  404. package/dist/parsers/pipelines/postman.pipelines.d.ts +15 -0
  405. package/dist/parsers/pipelines/postman.pipelines.js +103 -0
  406. package/dist/parsers/pipelines/postman.pipelines.js.map +1 -0
  407. package/dist/parsers/types/postman.types.d.ts +200 -0
  408. package/dist/parsers/types/postman.types.js +3 -0
  409. package/dist/parsers/types/postman.types.js.map +1 -0
  410. package/dist/parsers/utils/postman.utils.d.ts +12 -0
  411. package/dist/parsers/utils/postman.utils.js +116 -0
  412. package/dist/parsers/utils/postman.utils.js.map +1 -0
  413. package/dist/parsers/validators/postman-auth.validators.d.ts +10 -0
  414. package/dist/parsers/validators/postman-auth.validators.js +127 -0
  415. package/dist/parsers/validators/postman-auth.validators.js.map +1 -0
  416. package/dist/parsers/validators/postman-request.validators.d.ts +13 -0
  417. package/dist/parsers/validators/postman-request.validators.js +139 -0
  418. package/dist/parsers/validators/postman-request.validators.js.map +1 -0
  419. package/dist/parsers/validators/postman-response.validators.d.ts +13 -0
  420. package/dist/parsers/validators/postman-response.validators.js +150 -0
  421. package/dist/parsers/validators/postman-response.validators.js.map +1 -0
  422. package/dist/parsers/validators/postman-variable.validators.d.ts +14 -0
  423. package/dist/parsers/validators/postman-variable.validators.js +163 -0
  424. package/dist/parsers/validators/postman-variable.validators.js.map +1 -0
  425. package/dist/pricing/pricing.repo.js +1 -0
  426. package/dist/pricing/pricing.repo.js.map +1 -0
  427. package/dist/pricing/pricing.service.d.ts +24 -0
  428. package/dist/pricing/pricing.service.js +51 -0
  429. package/dist/pricing/pricing.service.js.map +1 -0
  430. package/dist/pricing/pricing.types.d.ts +76 -0
  431. package/dist/pricing/pricing.types.js +21 -0
  432. package/dist/pricing/pricing.types.js.map +1 -0
  433. package/dist/pricing/utils/string.utils.d.ts +1 -0
  434. package/dist/pricing/utils/string.utils.js +9 -0
  435. package/dist/pricing/utils/string.utils.js.map +1 -0
  436. package/dist/processor/repos/sms.repo.d.ts +4 -4
  437. package/dist/processor/repos/sms.repo.js +23 -10
  438. package/dist/processor/repos/sms.repo.js.map +1 -1
  439. package/dist/processor/services/processor.service.d.ts +251 -78
  440. package/dist/processor/services/processor.service.js +2803 -1495
  441. package/dist/processor/services/processor.service.js.map +1 -1
  442. package/dist/processor/services/request.service.d.ts +36 -0
  443. package/dist/processor/services/request.service.js +304 -0
  444. package/dist/processor/services/request.service.js.map +1 -0
  445. package/dist/processor/types/request.types.d.ts +14 -0
  446. package/dist/processor/types/request.types.js +3 -0
  447. package/dist/processor/types/request.types.js.map +1 -0
  448. package/dist/processor/utils/processor.utils.d.ts +8 -0
  449. package/dist/processor/utils/processor.utils.js +152 -12
  450. package/dist/processor/utils/processor.utils.js.map +1 -1
  451. package/dist/processor/utils/request.utils.d.ts +20 -0
  452. package/dist/processor/utils/request.utils.js +113 -0
  453. package/dist/processor/utils/request.utils.js.map +1 -0
  454. package/dist/processor/utils/storage.util.js +63 -40
  455. package/dist/processor/utils/storage.util.js.map +1 -1
  456. package/dist/products/services/products.service.d.ts +386 -76
  457. package/dist/products/services/products.service.js +3221 -419
  458. package/dist/products/services/products.service.js.map +1 -1
  459. package/dist/products/utils/string.utils.d.ts +1 -1
  460. package/dist/products/utils/string.utils.js +14 -2
  461. package/dist/products/utils/string.utils.js.map +1 -1
  462. package/dist/products/validators/index.d.ts +7 -1
  463. package/dist/products/validators/index.js +16 -1
  464. package/dist/products/validators/index.js.map +1 -1
  465. package/dist/products/validators/joi-validators/create.productAgent.validator.d.ts +3 -0
  466. package/dist/products/validators/joi-validators/create.productAgent.validator.js +266 -0
  467. package/dist/products/validators/joi-validators/create.productAgent.validator.js.map +1 -0
  468. package/dist/products/validators/joi-validators/create.productApp.validator.js +2 -2
  469. package/dist/products/validators/joi-validators/create.productApp.validator.js.map +1 -1
  470. package/dist/products/validators/joi-validators/create.productDatabase.validator.js +5 -0
  471. package/dist/products/validators/joi-validators/create.productDatabase.validator.js.map +1 -1
  472. package/dist/products/validators/joi-validators/create.productEnv.validator.js +1 -0
  473. package/dist/products/validators/joi-validators/create.productEnv.validator.js.map +1 -1
  474. package/dist/products/validators/joi-validators/create.productFeature.validator.js +1 -1
  475. package/dist/products/validators/joi-validators/create.productGraph.validator.js +89 -0
  476. package/dist/products/validators/joi-validators/create.productGraph.validator.js.map +1 -0
  477. package/dist/products/validators/joi-validators/create.productHealthcheck.validator.d.ts +4 -0
  478. package/dist/{processor/services/messagebrokers/rabbitmq.service.js → products/validators/joi-validators/create.productHealthcheck.validator.js} +23 -32
  479. package/dist/products/validators/joi-validators/create.productHealthcheck.validator.js.map +1 -0
  480. package/dist/products/validators/joi-validators/create.productJob.validator.js +2 -2
  481. package/dist/products/validators/joi-validators/create.productJob.validator.js.map +1 -1
  482. package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js +1 -0
  483. package/dist/products/validators/joi-validators/create.productMessageBrokerTopic.validator.js.map +1 -1
  484. package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js +81 -25
  485. package/dist/products/validators/joi-validators/create.productMessageBrokers.validator.js.map +1 -1
  486. package/dist/products/validators/joi-validators/create.productModel.validator.d.ts +3 -0
  487. package/dist/products/validators/joi-validators/create.productModel.validator.js +132 -0
  488. package/dist/products/validators/joi-validators/create.productModel.validator.js.map +1 -0
  489. package/dist/products/validators/joi-validators/create.productNotification.validator.js +150 -51
  490. package/dist/products/validators/joi-validators/create.productNotification.validator.js.map +1 -1
  491. package/dist/products/validators/joi-validators/create.productStorage.validator.js +77 -18
  492. package/dist/products/validators/joi-validators/create.productStorage.validator.js.map +1 -1
  493. package/dist/products/validators/joi-validators/create.productVector.validator.d.ts +3 -0
  494. package/dist/products/validators/joi-validators/create.productVector.validator.js +136 -0
  495. package/dist/products/validators/joi-validators/create.productVector.validator.js.map +1 -0
  496. package/dist/products/validators/joi-validators/create.userAuth.validator.js +1 -0
  497. package/dist/products/validators/joi-validators/create.userAuth.validator.js.map +1 -1
  498. package/dist/products/validators/joi-validators/update.dataValue.validator.js +1 -0
  499. package/dist/products/validators/joi-validators/update.dataValue.validator.js.map +1 -1
  500. package/dist/products/validators/joi-validators/update.productDatabase.validator.js +5 -0
  501. package/dist/products/validators/joi-validators/update.productDatabase.validator.js.map +1 -1
  502. package/dist/products/validators/joi-validators/update.productEnv.validator.js +3 -0
  503. package/dist/products/validators/joi-validators/update.productEnv.validator.js.map +1 -1
  504. package/dist/products/validators/joi-validators/update.productGraph.validator.js +88 -0
  505. package/dist/products/validators/joi-validators/update.productGraph.validator.js.map +1 -0
  506. package/dist/products/validators/joi-validators/update.userAuth.validator.js +1 -0
  507. package/dist/products/validators/joi-validators/update.userAuth.validator.js.map +1 -1
  508. package/dist/resilience/fallback.service.d.ts +141 -0
  509. package/dist/resilience/fallback.service.js +766 -0
  510. package/dist/resilience/fallback.service.js.map +1 -0
  511. package/dist/resilience/healthcheck.service.d.ts +159 -0
  512. package/dist/resilience/healthcheck.service.js +943 -0
  513. package/dist/resilience/healthcheck.service.js.map +1 -0
  514. package/dist/resilience/index.d.ts +104 -0
  515. package/dist/resilience/index.js +140 -0
  516. package/dist/resilience/index.js.map +1 -0
  517. package/dist/resilience/quota.service.d.ts +83 -0
  518. package/dist/resilience/quota.service.js +518 -0
  519. package/dist/resilience/quota.service.js.map +1 -0
  520. package/dist/resilience/resilience.service.d.ts +98 -0
  521. package/dist/resilience/resilience.service.js +560 -0
  522. package/dist/resilience/resilience.service.js.map +1 -0
  523. package/dist/resilience/types/index.d.ts +513 -0
  524. package/dist/resilience/types/index.js +29 -0
  525. package/dist/resilience/types/index.js.map +1 -0
  526. package/dist/secrets/index.d.ts +10 -0
  527. package/dist/secrets/index.js +33 -0
  528. package/dist/secrets/index.js.map +1 -0
  529. package/dist/secrets/secrets.resolver.d.ts +52 -0
  530. package/dist/secrets/secrets.resolver.js +236 -0
  531. package/dist/secrets/secrets.resolver.js.map +1 -0
  532. package/dist/secrets/secrets.service.d.ts +93 -0
  533. package/dist/secrets/secrets.service.js +246 -0
  534. package/dist/secrets/secrets.service.js.map +1 -0
  535. package/dist/secrets/secrets.types.d.ts +188 -0
  536. package/dist/secrets/secrets.types.js +87 -0
  537. package/dist/secrets/secrets.types.js.map +1 -0
  538. package/dist/sessions/index.d.ts +50 -0
  539. package/dist/sessions/index.js +96 -0
  540. package/dist/sessions/index.js.map +1 -0
  541. package/dist/sessions/sessions.helper.d.ts +88 -0
  542. package/dist/sessions/sessions.helper.js +133 -0
  543. package/dist/sessions/sessions.helper.js.map +1 -0
  544. package/dist/sessions/sessions.resolver.d.ts +188 -0
  545. package/dist/sessions/sessions.resolver.js +603 -0
  546. package/dist/sessions/sessions.resolver.js.map +1 -0
  547. package/dist/sessions/sessions.service.d.ts +194 -0
  548. package/dist/sessions/sessions.service.js +987 -0
  549. package/dist/sessions/sessions.service.js.map +1 -0
  550. package/dist/sessions/types/index.d.ts +342 -0
  551. package/dist/sessions/types/index.js +6 -0
  552. package/dist/sessions/types/index.js.map +1 -0
  553. package/dist/storage/index.d.ts +66 -0
  554. package/dist/storage/index.js +99 -0
  555. package/dist/storage/index.js.map +1 -0
  556. package/dist/storage/storage.service.d.ts +177 -0
  557. package/dist/storage/storage.service.js +897 -0
  558. package/dist/storage/storage.service.js.map +1 -0
  559. package/dist/storage/types/index.d.ts +267 -0
  560. package/dist/storage/types/index.js +6 -0
  561. package/dist/storage/types/index.js.map +1 -0
  562. package/dist/storage/utils/storage.util.d.ts +62 -0
  563. package/dist/storage/utils/storage.util.js +593 -0
  564. package/dist/storage/utils/storage.util.js.map +1 -0
  565. package/dist/types/appBuilder.types.d.ts +13 -14
  566. package/dist/types/enums.d.ts +11 -1
  567. package/dist/types/enums.js +10 -0
  568. package/dist/types/enums.js.map +1 -1
  569. package/dist/types/index.types.d.ts +9 -4
  570. package/dist/types/index.types.js +0 -1
  571. package/dist/types/index.types.js.map +1 -1
  572. package/dist/types/inputs.types.d.ts +1 -0
  573. package/dist/types/inputs.types.js +4 -3
  574. package/dist/types/inputs.types.js.map +1 -1
  575. package/dist/types/pricing.types.d.ts +4 -0
  576. package/dist/types/pricing.types.js +3 -0
  577. package/dist/types/pricing.types.js.map +1 -0
  578. package/dist/types/processor.types.d.ts +324 -18
  579. package/dist/types/processor.types.js +9 -1
  580. package/dist/types/processor.types.js.map +1 -1
  581. package/dist/types/productsBuilder.types.d.ts +1007 -23
  582. package/dist/types/productsBuilder.types.js +216 -2
  583. package/dist/types/productsBuilder.types.js.map +1 -1
  584. package/dist/types/request-tracker.interface.js +1 -0
  585. package/dist/types/request-tracker.interface.js.map +1 -0
  586. package/dist/types/requests.types.d.ts +2 -0
  587. package/dist/utils/constants.d.ts +1 -0
  588. package/dist/utils/constants.js +5 -0
  589. package/dist/utils/constants.js.map +1 -0
  590. package/dist/utils/index.d.ts +0 -2
  591. package/dist/utils/index.js +24 -52
  592. package/dist/utils/index.js.map +1 -1
  593. package/dist/vector/actions/action-manager.d.ts +140 -0
  594. package/dist/vector/actions/action-manager.js +356 -0
  595. package/dist/vector/actions/action-manager.js.map +1 -0
  596. package/dist/vector/adapters/base.adapter.d.ts +169 -0
  597. package/dist/vector/adapters/base.adapter.js +218 -0
  598. package/dist/vector/adapters/base.adapter.js.map +1 -0
  599. package/dist/vector/adapters/index.d.ts +10 -0
  600. package/dist/vector/adapters/index.js +19 -0
  601. package/dist/vector/adapters/index.js.map +1 -0
  602. package/dist/vector/adapters/memory.adapter.d.ts +85 -0
  603. package/dist/vector/adapters/memory.adapter.js +505 -0
  604. package/dist/vector/adapters/memory.adapter.js.map +1 -0
  605. package/dist/vector/adapters/pinecone.adapter.d.ts +52 -0
  606. package/dist/vector/adapters/pinecone.adapter.js +433 -0
  607. package/dist/vector/adapters/pinecone.adapter.js.map +1 -0
  608. package/dist/vector/adapters/qdrant.adapter.d.ts +56 -0
  609. package/dist/vector/adapters/qdrant.adapter.js +442 -0
  610. package/dist/vector/adapters/qdrant.adapter.js.map +1 -0
  611. package/dist/vector/adapters/weaviate.adapter.d.ts +68 -0
  612. package/dist/vector/adapters/weaviate.adapter.js +661 -0
  613. package/dist/vector/adapters/weaviate.adapter.js.map +1 -0
  614. package/dist/vector/index.d.ts +36 -0
  615. package/dist/vector/index.js +70 -0
  616. package/dist/vector/index.js.map +1 -0
  617. package/dist/vector/types/action.interface.d.ts +195 -0
  618. package/dist/vector/types/action.interface.js +100 -0
  619. package/dist/vector/types/action.interface.js.map +1 -0
  620. package/dist/vector/types/connection.interface.d.ts +151 -0
  621. package/dist/vector/types/connection.interface.js +8 -0
  622. package/dist/vector/types/connection.interface.js.map +1 -0
  623. package/dist/vector/types/embedding.interface.d.ts +144 -0
  624. package/dist/vector/types/embedding.interface.js +8 -0
  625. package/dist/vector/types/embedding.interface.js.map +1 -0
  626. package/dist/vector/types/enums.d.ts +104 -0
  627. package/dist/vector/types/enums.js +113 -0
  628. package/dist/vector/types/enums.js.map +1 -0
  629. package/dist/vector/types/index.d.ts +11 -0
  630. package/dist/vector/types/index.js +23 -0
  631. package/dist/vector/types/index.js.map +1 -0
  632. package/dist/vector/types/vector.interface.d.ts +315 -0
  633. package/dist/vector/types/vector.interface.js +8 -0
  634. package/dist/vector/types/vector.interface.js.map +1 -0
  635. package/dist/vector/utils/index.d.ts +6 -0
  636. package/dist/vector/utils/index.js +11 -0
  637. package/dist/vector/utils/index.js.map +1 -0
  638. package/dist/vector/utils/vector-error.d.ts +69 -0
  639. package/dist/vector/utils/vector-error.js +116 -0
  640. package/dist/vector/utils/vector-error.js.map +1 -0
  641. package/dist/vector/vector-database.service.d.ts +476 -0
  642. package/dist/vector/vector-database.service.js +892 -0
  643. package/dist/vector/vector-database.service.js.map +1 -0
  644. package/dist/vector/vector.service.d.ts +283 -0
  645. package/dist/vector/vector.service.js +544 -0
  646. package/dist/vector/vector.service.js.map +1 -0
  647. package/dist/warehouse/executor/index.d.ts +5 -0
  648. package/dist/warehouse/executor/index.js +12 -0
  649. package/dist/warehouse/executor/index.js.map +1 -0
  650. package/dist/warehouse/executor/joins/index.d.ts +5 -0
  651. package/dist/warehouse/executor/joins/index.js +11 -0
  652. package/dist/warehouse/executor/joins/index.js.map +1 -0
  653. package/dist/warehouse/executor/joins/join-executor.d.ts +101 -0
  654. package/dist/warehouse/executor/joins/join-executor.js +493 -0
  655. package/dist/warehouse/executor/joins/join-executor.js.map +1 -0
  656. package/dist/warehouse/executor/joins/semantic-join.d.ts +64 -0
  657. package/dist/warehouse/executor/joins/semantic-join.js +241 -0
  658. package/dist/warehouse/executor/joins/semantic-join.js.map +1 -0
  659. package/dist/warehouse/executor/single-source-executor.d.ts +155 -0
  660. package/dist/warehouse/executor/single-source-executor.js +573 -0
  661. package/dist/warehouse/executor/single-source-executor.js.map +1 -0
  662. package/dist/warehouse/index.d.ts +79 -0
  663. package/dist/warehouse/index.js +111 -0
  664. package/dist/warehouse/index.js.map +1 -0
  665. package/dist/warehouse/parser/index.d.ts +4 -0
  666. package/dist/warehouse/parser/index.js +10 -0
  667. package/dist/warehouse/parser/index.js.map +1 -0
  668. package/dist/warehouse/parser/query-parser.d.ts +181 -0
  669. package/dist/warehouse/parser/query-parser.js +415 -0
  670. package/dist/warehouse/parser/query-parser.js.map +1 -0
  671. package/dist/warehouse/registry/data-source-registry.d.ts +207 -0
  672. package/dist/warehouse/registry/data-source-registry.js +396 -0
  673. package/dist/warehouse/registry/data-source-registry.js.map +1 -0
  674. package/dist/warehouse/registry/index.d.ts +4 -0
  675. package/dist/warehouse/registry/index.js +9 -0
  676. package/dist/warehouse/registry/index.js.map +1 -0
  677. package/dist/warehouse/transactions/index.d.ts +4 -0
  678. package/dist/warehouse/transactions/index.js +9 -0
  679. package/dist/warehouse/transactions/index.js.map +1 -0
  680. package/dist/warehouse/transactions/saga-orchestrator.d.ts +92 -0
  681. package/dist/warehouse/transactions/saga-orchestrator.js +383 -0
  682. package/dist/warehouse/transactions/saga-orchestrator.js.map +1 -0
  683. package/dist/warehouse/types/index.d.ts +9 -0
  684. package/dist/warehouse/types/index.js +33 -0
  685. package/dist/warehouse/types/index.js.map +1 -0
  686. package/dist/warehouse/types/join.interface.d.ts +225 -0
  687. package/dist/warehouse/types/join.interface.js +87 -0
  688. package/dist/warehouse/types/join.interface.js.map +1 -0
  689. package/dist/warehouse/types/query.interface.d.ts +232 -0
  690. package/dist/warehouse/types/query.interface.js +9 -0
  691. package/dist/warehouse/types/query.interface.js.map +1 -0
  692. package/dist/warehouse/types/transaction.interface.d.ts +236 -0
  693. package/dist/warehouse/types/transaction.interface.js +74 -0
  694. package/dist/warehouse/types/transaction.interface.js.map +1 -0
  695. package/dist/warehouse/types/where.interface.d.ts +208 -0
  696. package/dist/warehouse/types/where.interface.js +89 -0
  697. package/dist/warehouse/types/where.interface.js.map +1 -0
  698. package/dist/warehouse/warehouse.service.d.ts +200 -0
  699. package/dist/warehouse/warehouse.service.js +470 -0
  700. package/dist/warehouse/warehouse.service.js.map +1 -0
  701. package/dist/workflows/index.d.ts +30 -0
  702. package/dist/workflows/index.js +64 -0
  703. package/dist/workflows/index.js.map +1 -0
  704. package/dist/workflows/types/index.d.ts +6 -0
  705. package/dist/workflows/types/index.js +23 -0
  706. package/dist/workflows/types/index.js.map +1 -0
  707. package/dist/workflows/types/workflows.types.d.ts +1095 -0
  708. package/dist/workflows/types/workflows.types.js +13 -0
  709. package/dist/workflows/types/workflows.types.js.map +1 -0
  710. package/dist/workflows/workflow-builder.d.ts +70 -0
  711. package/dist/workflows/workflow-builder.js +353 -0
  712. package/dist/workflows/workflow-builder.js.map +1 -0
  713. package/dist/workflows/workflow-executor.d.ts +287 -0
  714. package/dist/workflows/workflow-executor.js +2399 -0
  715. package/dist/workflows/workflow-executor.js.map +1 -0
  716. package/dist/workflows/workflows.service.d.ts +412 -0
  717. package/dist/workflows/workflows.service.js +2188 -0
  718. package/dist/workflows/workflows.service.js.map +1 -0
  719. package/package.json +83 -11
  720. package/dist/actions/actions.repo.js +0 -13
  721. package/dist/actions/actions.repo.js.map +0 -1
  722. package/dist/actions/actions.service.js +0 -24
  723. package/dist/actions/actions.service.js.map +0 -1
  724. package/dist/actions/utils/actions.util.read.d.ts +0 -0
  725. package/dist/actions/utils/actions.util.read.js +0 -427
  726. package/dist/actions/utils/actions.util.read.js.map +0 -1
  727. package/dist/api/services/integrationsApi.service.d.ts +0 -18
  728. package/dist/api/services/integrationsApi.service.js +0 -80
  729. package/dist/api/services/integrationsApi.service.js.map +0 -1
  730. package/dist/appBuilder/services/app.service.d.ts +0 -111
  731. package/dist/appBuilder/services/app.service.js +0 -737
  732. package/dist/appBuilder/services/app.service.js.map +0 -1
  733. package/dist/appBuilder/services/appBuilder.service.d.ts +0 -111
  734. package/dist/appBuilder/services/appBuilder.service.js +0 -662
  735. package/dist/appBuilder/services/appBuilder.service.js.map +0 -1
  736. package/dist/appBuilder/utils/objects.utils.d.ts +0 -3
  737. package/dist/appBuilder/utils/objects.utils.js +0 -9
  738. package/dist/appBuilder/utils/objects.utils.js.map +0 -1
  739. package/dist/appBuilder/utils/string.utils.d.ts +0 -2
  740. package/dist/appBuilder/utils/string.utils.js +0 -57
  741. package/dist/appBuilder/utils/string.utils.js.map +0 -1
  742. package/dist/appBuilder/validators/index.d.ts +0 -19
  743. package/dist/appBuilder/validators/index.js +0 -40
  744. package/dist/appBuilder/validators/index.js.map +0 -1
  745. package/dist/appBuilder/validators/joi-validators/create.app.validator.js +0 -10
  746. package/dist/appBuilder/validators/joi-validators/create.app.validator.js.map +0 -1
  747. package/dist/appBuilder/validators/joi-validators/create.appAction.validator.d.ts +0 -4
  748. package/dist/appBuilder/validators/joi-validators/create.appAction.validator.js +0 -20
  749. package/dist/appBuilder/validators/joi-validators/create.appAction.validator.js.map +0 -1
  750. package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.d.ts +0 -7
  751. package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.js +0 -44
  752. package/dist/appBuilder/validators/joi-validators/create.appActionResponse.validator.js.map +0 -1
  753. package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.d.ts +0 -3
  754. package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.js +0 -31
  755. package/dist/appBuilder/validators/joi-validators/create.appAuth.validator.js.map +0 -1
  756. package/dist/appBuilder/validators/joi-validators/create.appBody.validators.d.ts +0 -4
  757. package/dist/appBuilder/validators/joi-validators/create.appBody.validators.js +0 -11
  758. package/dist/appBuilder/validators/joi-validators/create.appBody.validators.js.map +0 -1
  759. package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.d.ts +0 -4
  760. package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.js +0 -12
  761. package/dist/appBuilder/validators/joi-validators/create.appConstants.validator.js.map +0 -1
  762. package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.d.ts +0 -4
  763. package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.js +0 -17
  764. package/dist/appBuilder/validators/joi-validators/create.appEnv.validator.js.map +0 -1
  765. package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.d.ts +0 -5
  766. package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.js +0 -30
  767. package/dist/appBuilder/validators/joi-validators/create.appEvent.validator.js.map +0 -1
  768. package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.d.ts +0 -4
  769. package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.js +0 -14
  770. package/dist/appBuilder/validators/joi-validators/create.appVariable.validator.js.map +0 -1
  771. package/dist/appBuilder/validators/joi-validators/sample.validator.d.ts +0 -5
  772. package/dist/appBuilder/validators/joi-validators/sample.validator.js +0 -26
  773. package/dist/appBuilder/validators/joi-validators/sample.validator.js.map +0 -1
  774. package/dist/appBuilder/validators/joi-validators/update.app.validator.d.ts +0 -4
  775. package/dist/appBuilder/validators/joi-validators/update.app.validator.js +0 -34
  776. package/dist/appBuilder/validators/joi-validators/update.app.validator.js.map +0 -1
  777. package/dist/appBuilder/validators/joi-validators/update.appAction.validator.d.ts +0 -4
  778. package/dist/appBuilder/validators/joi-validators/update.appAction.validator.js +0 -23
  779. package/dist/appBuilder/validators/joi-validators/update.appAction.validator.js.map +0 -1
  780. package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.d.ts +0 -3
  781. package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.js +0 -21
  782. package/dist/appBuilder/validators/joi-validators/update.appActionResponse.validator.js.map +0 -1
  783. package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.d.ts +0 -4
  784. package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.js +0 -19
  785. package/dist/appBuilder/validators/joi-validators/update.appAuth.validator.js.map +0 -1
  786. package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.d.ts +0 -4
  787. package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.js +0 -12
  788. package/dist/appBuilder/validators/joi-validators/update.appConstants.validator.js.map +0 -1
  789. package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.d.ts +0 -4
  790. package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.js +0 -17
  791. package/dist/appBuilder/validators/joi-validators/update.appEnv.validator.js.map +0 -1
  792. package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.d.ts +0 -4
  793. package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.js +0 -16
  794. package/dist/appBuilder/validators/joi-validators/update.appEvent.validator.js.map +0 -1
  795. package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.d.ts +0 -4
  796. package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.js +0 -14
  797. package/dist/appBuilder/validators/joi-validators/update.appVariables.validator.js.map +0 -1
  798. package/dist/appBuilder/validators/joi-validators/update.validation.entityData.validator.js +0 -27
  799. package/dist/appBuilder/validators/joi-validators/update.validation.entityData.validator.js.map +0 -1
  800. package/dist/apps/validators/joi-validators/create.appEvent.validator.d.ts +0 -5
  801. package/dist/apps/validators/joi-validators/create.appEvent.validator.js +0 -30
  802. package/dist/apps/validators/joi-validators/create.appEvent.validator.js.map +0 -1
  803. package/dist/apps/validators/joi-validators/update.appEvent.validator.d.ts +0 -4
  804. package/dist/apps/validators/joi-validators/update.appEvent.validator.js +0 -16
  805. package/dist/apps/validators/joi-validators/update.appEvent.validator.js.map +0 -1
  806. package/dist/clients/integrations.client.d.ts +0 -2
  807. package/dist/clients/integrations.client.js +0 -26
  808. package/dist/clients/integrations.client.js.map +0 -1
  809. package/dist/integrationsBuilder/services/integration.service.d.ts +0 -138
  810. package/dist/integrationsBuilder/services/integration.service.js +0 -1148
  811. package/dist/integrationsBuilder/services/integration.service.js.map +0 -1
  812. package/dist/integrationsBuilder/services/integrationBuilder.service.d.ts +0 -130
  813. package/dist/integrationsBuilder/services/integrationBuilder.service.js +0 -1017
  814. package/dist/integrationsBuilder/services/integrationBuilder.service.js.map +0 -1
  815. package/dist/integrationsBuilder/utils/objects.utils.d.ts +0 -2
  816. package/dist/integrationsBuilder/utils/objects.utils.js +0 -48
  817. package/dist/integrationsBuilder/utils/objects.utils.js.map +0 -1
  818. package/dist/integrationsBuilder/utils/string.utils.d.ts +0 -1
  819. package/dist/integrationsBuilder/utils/string.utils.js +0 -9
  820. package/dist/integrationsBuilder/utils/string.utils.js.map +0 -1
  821. package/dist/integrationsBuilder/validators/index.d.ts +0 -18
  822. package/dist/integrationsBuilder/validators/index.js +0 -38
  823. package/dist/integrationsBuilder/validators/index.js.map +0 -1
  824. package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.d.ts +0 -3
  825. package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.js +0 -10
  826. package/dist/integrationsBuilder/validators/joi-validators/create.integration.validator.js.map +0 -1
  827. package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.d.ts +0 -4
  828. package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.js +0 -26
  829. package/dist/integrationsBuilder/validators/joi-validators/create.integrationApp.validator.js.map +0 -1
  830. package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.d.ts +0 -3
  831. package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.js +0 -8
  832. package/dist/integrationsBuilder/validators/joi-validators/create.integrationCache.validator.js.map +0 -1
  833. package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.d.ts +0 -3
  834. package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.js +0 -8
  835. package/dist/integrationsBuilder/validators/joi-validators/create.integrationDatabase.validator.js.map +0 -1
  836. package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.d.ts +0 -3
  837. package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.js +0 -10
  838. package/dist/integrationsBuilder/validators/joi-validators/create.integrationEnv.validator.js.map +0 -1
  839. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.d.ts +0 -3
  840. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.js +0 -60
  841. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFeature.validator.js.map +0 -1
  842. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.d.ts +0 -3
  843. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.js +0 -8
  844. package/dist/integrationsBuilder/validators/joi-validators/create.integrationFunction.validator.js.map +0 -1
  845. package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.d.ts +0 -3
  846. package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.js +0 -8
  847. package/dist/integrationsBuilder/validators/joi-validators/create.integrationJob.validator.js.map +0 -1
  848. package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.d.ts +0 -3
  849. package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.js +0 -8
  850. package/dist/integrationsBuilder/validators/joi-validators/create.integrationNotification.validator.js.map +0 -1
  851. package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.d.ts +0 -3
  852. package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.js +0 -9
  853. package/dist/integrationsBuilder/validators/joi-validators/update.integrationApp.validator.js.map +0 -1
  854. package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.d.ts +0 -3
  855. package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.js +0 -8
  856. package/dist/integrationsBuilder/validators/joi-validators/update.integrationCache.validator.js.map +0 -1
  857. package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.d.ts +0 -3
  858. package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.js +0 -8
  859. package/dist/integrationsBuilder/validators/joi-validators/update.integrationDatabase.validator.js.map +0 -1
  860. package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.d.ts +0 -3
  861. package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.js +0 -8
  862. package/dist/integrationsBuilder/validators/joi-validators/update.integrationEnv.validator.js.map +0 -1
  863. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.d.ts +0 -3
  864. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.js +0 -8
  865. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFeature.validator.js.map +0 -1
  866. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.d.ts +0 -3
  867. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.js +0 -8
  868. package/dist/integrationsBuilder/validators/joi-validators/update.integrationFunction.validator copy.js.map +0 -1
  869. package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.d.ts +0 -3
  870. package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.js +0 -8
  871. package/dist/integrationsBuilder/validators/joi-validators/update.integrationJob.validator.js.map +0 -1
  872. package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.d.ts +0 -3
  873. package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.js +0 -8
  874. package/dist/integrationsBuilder/validators/joi-validators/update.integrationNotification.validator.js.map +0 -1
  875. package/dist/postman.d.ts +0 -1
  876. package/dist/postman.js +0 -21674
  877. package/dist/postman.js.map +0 -1
  878. package/dist/processor/services/fallback.service.d.ts +0 -5
  879. package/dist/processor/services/fallback.service.js +0 -43
  880. package/dist/processor/services/fallback.service.js.map +0 -1
  881. package/dist/processor/services/messagebrokers/aws-sqs.service.js +0 -77
  882. package/dist/processor/services/messagebrokers/aws-sqs.service.js.map +0 -1
  883. package/dist/processor/services/messagebrokers/google-pubsub.service.js.map +0 -1
  884. package/dist/processor/services/messagebrokers/index.d.ts +0 -3
  885. package/dist/processor/services/messagebrokers/index.js +0 -26
  886. package/dist/processor/services/messagebrokers/index.js.map +0 -1
  887. package/dist/processor/services/messagebrokers/kafka.service.d.ts +0 -14
  888. package/dist/processor/services/messagebrokers/kafka.service.js +0 -45
  889. package/dist/processor/services/messagebrokers/kafka.service.js.map +0 -1
  890. package/dist/processor/services/messagebrokers/messagebrokers.type.d.ts +0 -6
  891. package/dist/processor/services/messagebrokers/messagebrokers.type.js.map +0 -1
  892. package/dist/processor/services/messagebrokers/rabbitmq.service.d.ts +0 -14
  893. package/dist/processor/services/messagebrokers/rabbitmq.service.js.map +0 -1
  894. package/dist/processor/services/messagebrokers/redis.service.js.map +0 -1
  895. package/dist/processor/services/quota.service.d.ts +0 -15
  896. package/dist/processor/services/quota.service.js +0 -63
  897. package/dist/processor/services/quota.service.js.map +0 -1
  898. package/dist/processor/utils/mongo.util.d.ts +0 -0
  899. package/dist/processor/utils/mongo.util.js +0 -152
  900. package/dist/processor/utils/mongo.util.js.map +0 -1
  901. package/dist/processor/utils/postgres.util.d.ts +0 -14
  902. package/dist/processor/utils/postgres.util.js +0 -83
  903. package/dist/processor/utils/postgres.util.js.map +0 -1
  904. package/dist/products/validators/joi-validators/create.product.validator.d.ts +0 -3
  905. package/dist/products/validators/joi-validators/create.product.validator.js +0 -10
  906. package/dist/products/validators/joi-validators/create.product.validator.js.map +0 -1
  907. package/dist/test/test.appBuilder.d.ts +0 -1
  908. package/dist/test/test.appBuilder.js +0 -16
  909. package/dist/test/test.appBuilder.js.map +0 -1
  910. package/dist/test/test.import.d.ts +0 -1
  911. package/dist/test/test.import.js +0 -1460
  912. package/dist/test/test.import.js.map +0 -1
  913. package/dist/test/test.import.openapi.d.ts +0 -1
  914. package/dist/test/test.import.openapi.js +0 -76
  915. package/dist/test/test.import.openapi.js.map +0 -1
  916. package/dist/test/test.imports.d.ts +0 -1
  917. package/dist/test/test.imports.js +0 -62
  918. package/dist/test/test.imports.js.map +0 -1
  919. package/dist/test/test.logs.d.ts +0 -1
  920. package/dist/test/test.logs.js +0 -18
  921. package/dist/test/test.logs.js.map +0 -1
  922. package/dist/test/test.processor.d.ts +0 -1
  923. package/dist/test/test.processor.js +0 -123
  924. package/dist/test/test.processor.js.map +0 -1
  925. package/dist/test/test.productBuilder.d.ts +0 -1
  926. package/dist/test/test.productBuilder.js +0 -661
  927. package/dist/test/test.productBuilder.js.map +0 -1
  928. package/dist/test.appBuilder.d.ts +0 -1
  929. package/dist/test.appBuilder.js +0 -14
  930. package/dist/test.appBuilder.js.map +0 -1
  931. package/dist/test.import.d.ts +0 -0
  932. package/dist/test.import.js +0 -24
  933. package/dist/test.import.js.map +0 -1
  934. package/dist/test.imports.d.ts +0 -1
  935. package/dist/test.imports.js +0 -28
  936. package/dist/test.imports.js.map +0 -1
  937. package/dist/test.integrationBuilder.d.ts +0 -1
  938. package/dist/test.integrationBuilder.js +0 -276
  939. package/dist/test.integrationBuilder.js.map +0 -1
  940. package/dist/test.processor.d.ts +0 -1
  941. package/dist/test.processor.js +0 -23
  942. package/dist/test.processor.js.map +0 -1
  943. package/dist/test.utils.d.ts +0 -1
  944. package/dist/test.utils.js +0 -25
  945. package/dist/test.utils.js.map +0 -1
  946. package/dist/types/integrationsBuilder.types.d.ts +0 -276
  947. package/dist/types/integrationsBuilder.types.js +0 -51
  948. package/dist/types/integrationsBuilder.types.js.map +0 -1
  949. /package/dist/{actions/actions.repo.d.ts → pricing/pricing.repo.d.ts} +0 -0
  950. /package/dist/{appBuilder/validators/joi-validators/create.app.validator.d.ts → products/validators/joi-validators/create.productGraph.validator.d.ts} +0 -0
  951. /package/dist/{appBuilder/validators/joi-validators/update.validation.entityData.validator.d.ts → products/validators/joi-validators/update.productGraph.validator.d.ts} +0 -0
  952. /package/dist/{actions/actions.service.d.ts → types/request-tracker.interface.d.ts} +0 -0
@@ -0,0 +1,2188 @@
1
+ "use strict";
2
+ /**
3
+ * Workflow Service
4
+ *
5
+ * Main service class for workflow operations.
6
+ * Provides CRUD operations and execution for Ductape Workflows.
7
+ *
8
+ * Based on Ductape Workflows Code-First API documentation.
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ var __importDefault = (this && this.__importDefault) || function (mod) {
44
+ return (mod && mod.__esModule) ? mod : { "default": mod };
45
+ };
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.workflowService = exports.WorkflowService = exports.WorkflowError = void 0;
48
+ const crypto_1 = require("crypto");
49
+ const products_service_1 = __importDefault(require("../products/services/products.service"));
50
+ const processor_service_1 = __importDefault(require("../processor/services/processor.service"));
51
+ const workflowApi_service_1 = require("../api/services/workflowApi.service");
52
+ const logs_service_1 = __importDefault(require("../logs/logs.service"));
53
+ const logs_types_1 = require("../logs/logs.types");
54
+ const processor_utils_1 = require("../processor/utils/processor.utils");
55
+ const cache_manager_1 = require("../cache/cache.manager");
56
+ const productsBuilder_types_1 = require("../types/productsBuilder.types");
57
+ const workflow_executor_1 = require("./workflow-executor");
58
+ /**
59
+ * Error class for workflow-related errors
60
+ */
61
+ class WorkflowError extends Error {
62
+ constructor(message, code, details) {
63
+ if (typeof window !== 'undefined') {
64
+ throw new Error('Ductape SDK can only be initialized in a server environment.');
65
+ }
66
+ super(message);
67
+ this.code = code;
68
+ this.details = details;
69
+ this.name = 'WorkflowError';
70
+ }
71
+ static configurationError(message) {
72
+ return new WorkflowError(message, 'CONFIGURATION_ERROR');
73
+ }
74
+ static validationError(message, details) {
75
+ return new WorkflowError(message, 'VALIDATION_ERROR', details);
76
+ }
77
+ static notFoundError(message) {
78
+ return new WorkflowError(message, 'NOT_FOUND');
79
+ }
80
+ static executionError(message, details) {
81
+ return new WorkflowError(message, 'EXECUTION_ERROR', details);
82
+ }
83
+ }
84
+ exports.WorkflowError = WorkflowError;
85
+ /**
86
+ * Main Workflow Service class
87
+ * Provides unified interface for workflow management and execution
88
+ */
89
+ class WorkflowService {
90
+ /**
91
+ * Create a new WorkflowService instance
92
+ * @param config - Optional configuration for authentication and workspace context
93
+ */
94
+ constructor(config) {
95
+ /** Service configuration */
96
+ this.config = null;
97
+ /** ProductBuilder instances cache (keyed by product tag) */
98
+ this.productBuilders = new Map();
99
+ /** Local workflow configurations */
100
+ this.localConfigs = new Map();
101
+ /** Workflow API service for backend communication */
102
+ this.workflowApiService = null;
103
+ /** LogService instance for logging operations */
104
+ this.logService = null;
105
+ /** Current product ID for logging */
106
+ this.productId = '';
107
+ /** Cache manager for 3-tier caching */
108
+ this.cacheManager = null;
109
+ /** Local cache for cache configurations to avoid repeated API calls */
110
+ this.cacheConfigCache = new Map();
111
+ console.log('[WorkflowService] constructor', { hasConfig: !!config, env_type: config === null || config === void 0 ? void 0 : config.env_type, hasRedis: !!(config === null || config === void 0 ? void 0 : config.redis_client) });
112
+ this.config = config || null;
113
+ this._privateKey = (config === null || config === void 0 ? void 0 : config.private_key) || '';
114
+ if (config) {
115
+ this.workflowApiService = new workflowApi_service_1.WorkflowApiService(config.env_type);
116
+ console.log('[WorkflowService] WorkflowApiService initialized', { env_type: config.env_type });
117
+ // Initialize CacheManager if Redis client is provided
118
+ if (config.redis_client) {
119
+ this.cacheManager = new cache_manager_1.CacheManager({
120
+ workspace_id: config.workspace_id,
121
+ public_key: config.public_key,
122
+ user_id: config.user_id,
123
+ token: config.token,
124
+ env_type: config.env_type,
125
+ redis_client: config.redis_client,
126
+ });
127
+ console.log('[WorkflowService] CacheManager initialized');
128
+ }
129
+ else {
130
+ console.log('[WorkflowService] No redis_client provided, cache disabled');
131
+ }
132
+ }
133
+ else {
134
+ console.log('[WorkflowService] No config provided, service unconfigured');
135
+ }
136
+ }
137
+ // ==================== CONFIGURATION ====================
138
+ /**
139
+ * Update service configuration
140
+ */
141
+ updateConfig(config) {
142
+ console.log('[WorkflowService] updateConfig', { env_type: config.env_type, workspace_id: config.workspace_id });
143
+ this.config = config;
144
+ this.workflowApiService = new workflowApi_service_1.WorkflowApiService(config.env_type);
145
+ }
146
+ /**
147
+ * Get auth payload for API calls
148
+ */
149
+ getAuthPayload() {
150
+ if (!this.config) {
151
+ console.log('[WorkflowService] getAuthPayload failed: no config');
152
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
153
+ }
154
+ const hasAccessKey = !!this.config.access_key;
155
+ console.log('[WorkflowService] getAuthPayload', { user_id: this.config.user_id, workspace_id: this.config.workspace_id, hasAccessKey });
156
+ return Object.assign({ user_id: this.config.user_id, workspace_id: this.config.workspace_id, public_key: this.config.public_key, token: this.config.token }, (this.config.access_key && { access_key: this.config.access_key }));
157
+ }
158
+ /**
159
+ * Ensure WorkflowApiService is initialized
160
+ */
161
+ ensureApiService() {
162
+ if (!this.workflowApiService) {
163
+ console.log('[WorkflowService] ensureApiService failed: WorkflowApiService not initialized');
164
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
165
+ }
166
+ return this.workflowApiService;
167
+ }
168
+ /**
169
+ * Get service configuration
170
+ */
171
+ getConfig() {
172
+ var _a;
173
+ console.log('[WorkflowService] getConfig', { hasConfig: !!this.config, env_type: (_a = this.config) === null || _a === void 0 ? void 0 : _a.env_type });
174
+ return this.config;
175
+ }
176
+ // ==================== PRODUCT BUILDER MANAGEMENT ====================
177
+ /**
178
+ * Create a new ProductBuilder instance
179
+ */
180
+ createNewProductBuilder() {
181
+ if (!this.config) {
182
+ console.log('[WorkflowService] createNewProductBuilder failed: no config');
183
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
184
+ }
185
+ console.log('[WorkflowService] createNewProductBuilder', { env_type: this.config.env_type, hasAccessKey: !!this.config.access_key });
186
+ return new products_service_1.default({
187
+ workspace_id: this.config.workspace_id,
188
+ public_key: this.config.public_key,
189
+ user_id: this.config.user_id,
190
+ token: this.config.token,
191
+ env_type: this.config.env_type,
192
+ access_key: this.config.access_key,
193
+ workspace_private_key: this._privateKey || undefined,
194
+ });
195
+ }
196
+ /**
197
+ * Get or create a ProductBuilder instance for the given product tag
198
+ */
199
+ async getProductBuilder(productTag) {
200
+ let builder = this.productBuilders.get(productTag);
201
+ if (!builder) {
202
+ console.log('[WorkflowService] getProductBuilder creating new builder', { productTag });
203
+ builder = this.createNewProductBuilder();
204
+ await builder.initializeProductByTag(productTag);
205
+ this.productBuilders.set(productTag, builder);
206
+ // Update productId for logging
207
+ this.productId = builder.fetchProductId() || '';
208
+ console.log('[WorkflowService] getProductBuilder initialized', { productTag, productId: this.productId });
209
+ }
210
+ else {
211
+ console.log('[WorkflowService] getProductBuilder cache hit', { productTag });
212
+ }
213
+ return builder;
214
+ }
215
+ /**
216
+ * Initialize logging service
217
+ */
218
+ initializeLogService() {
219
+ if (!this.logService && this.config) {
220
+ console.log('[WorkflowService] initializeLogService', { productId: this.productId });
221
+ this.logService = new logs_service_1.default({
222
+ product_id: this.productId,
223
+ workspace_id: this.config.workspace_id,
224
+ public_key: this.config.public_key,
225
+ user_id: this.config.user_id,
226
+ token: this.config.token,
227
+ env_type: this.config.env_type,
228
+ });
229
+ }
230
+ }
231
+ /**
232
+ * Validate cache tag exists in product and return cache configuration
233
+ */
234
+ async validateCache(productTag, cacheTag) {
235
+ const cacheKey = `${productTag}:${cacheTag}`;
236
+ const cached = this.cacheConfigCache.get(cacheKey);
237
+ const now = Date.now();
238
+ const CACHE_TTL = 5 * 60 * 1000; // 5 minutes
239
+ console.log('[WorkflowService] validateCache', { productTag, cacheTag, cacheKey, hasCached: !!cached });
240
+ // Return cached config if still valid
241
+ if (cached && (now - cached.fetchedAt) < CACHE_TTL) {
242
+ console.log('[WorkflowService] validateCache using cached config', { cacheKey, expiry: cached.expiry });
243
+ return { expiry: cached.expiry };
244
+ }
245
+ // Fetch from API and cache the result
246
+ const builder = await this.getProductBuilder(productTag);
247
+ const cache = await builder.fetchCache(cacheTag);
248
+ if (!cache) {
249
+ console.log('[WorkflowService] validateCache cache config not found', { cacheTag });
250
+ throw WorkflowError.validationError(`Cache configuration '${cacheTag}' does not exist`);
251
+ }
252
+ this.cacheConfigCache.set(cacheKey, { expiry: cache.expiry, fetchedAt: now });
253
+ console.log('[WorkflowService] validateCache fetched and cached', { cacheKey, expiry: cache.expiry });
254
+ return { expiry: cache.expiry };
255
+ }
256
+ /**
257
+ * Create a new ProcessorService instance for job scheduling
258
+ */
259
+ createNewProcessor() {
260
+ if (!this.config) {
261
+ console.log('[WorkflowService] createNewProcessor failed: no config');
262
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
263
+ }
264
+ console.log('[WorkflowService] createNewProcessor', { env_type: this.config.env_type, hasAccessKey: !!this.config.access_key });
265
+ return new processor_service_1.default({
266
+ workspace_id: this.config.workspace_id,
267
+ public_key: this.config.public_key,
268
+ user_id: this.config.user_id,
269
+ token: this.config.token,
270
+ env_type: this.config.env_type,
271
+ private_key: this._privateKey,
272
+ access_key: this.config.access_key,
273
+ });
274
+ }
275
+ // ==================== WORKFLOW CRUD OPERATIONS ====================
276
+ /**
277
+ * Create a new workflow from JSON schema
278
+ *
279
+ * @example
280
+ * ```ts
281
+ * await ductape.workflows.create('my-product', {
282
+ * tag: 'order-fulfillment',
283
+ * name: 'Order Fulfillment',
284
+ * steps: [
285
+ * { tag: 'validate', type: 'action', app: 'orders', event: 'validate', input: {} },
286
+ * { tag: 'process', type: 'database_action', database: 'orders-db', event: 'create', input: {} },
287
+ * ],
288
+ * envs: [{ slug: 'prd' }],
289
+ * });
290
+ * ```
291
+ */
292
+ async create(productTag, workflowData) {
293
+ var _a, _b, _c;
294
+ console.log('[WorkflowService] create ENTRY', { productTag, tag: workflowData.tag, name: workflowData.name, stepsCount: (_b = (_a = workflowData.steps) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 });
295
+ // Validate required fields
296
+ if (!workflowData.name || !workflowData.tag || !((_c = workflowData.steps) === null || _c === void 0 ? void 0 : _c.length)) {
297
+ console.log('[WorkflowService] create validation failed: missing name, tag, or steps');
298
+ throw WorkflowError.validationError('Workflow requires name, tag, and at least one step');
299
+ }
300
+ // Persist to backend using ProductBuilder
301
+ const builder = await this.getProductBuilder(productTag);
302
+ console.log('[WorkflowService] create calling builder.createWorkflow', { tag: workflowData.tag });
303
+ await builder.createWorkflow(workflowData);
304
+ // Store locally
305
+ const localConfig = {
306
+ name: workflowData.name,
307
+ tag: workflowData.tag,
308
+ description: workflowData.description,
309
+ input: workflowData.input,
310
+ output: workflowData.output,
311
+ steps: workflowData.steps,
312
+ signals: workflowData.signals,
313
+ queries: workflowData.queries,
314
+ options: workflowData.options,
315
+ envs: workflowData.envs,
316
+ };
317
+ this.localConfigs.set(workflowData.tag, localConfig);
318
+ console.log('[WorkflowService] create SUCCESS', { productTag, tag: workflowData.tag });
319
+ }
320
+ /**
321
+ * Fetch all workflows for a product
322
+ *
323
+ * @example
324
+ * ```ts
325
+ * const workflows = await ductape.workflows.fetchAll('my-product');
326
+ * workflows.forEach(wf => console.log(wf.name, wf.tag));
327
+ * ```
328
+ */
329
+ async fetchAll(productTag) {
330
+ var _a;
331
+ console.log('[WorkflowService] fetchAll ENTRY', { productTag });
332
+ // Return local configs if no product tag
333
+ if (!productTag) {
334
+ const localCount = this.localConfigs.size;
335
+ console.log('[WorkflowService] fetchAll no productTag, returning local configs', { count: localCount });
336
+ return Array.from(this.localConfigs.values());
337
+ }
338
+ // Fetch from API using ProductBuilder
339
+ try {
340
+ const builder = await this.getProductBuilder(productTag);
341
+ console.log('[WorkflowService] fetchAll calling builder.fetchWorkflows', { productTag });
342
+ const workflows = await builder.fetchWorkflows();
343
+ // Convert IProductWorkflow[] to IWorkflowConfig[]
344
+ const result = workflows.map((wf) => this.productWorkflowToConfig(wf));
345
+ console.log('[WorkflowService] fetchAll SUCCESS', { productTag, count: result.length });
346
+ return result;
347
+ }
348
+ catch (error) {
349
+ // Fall back to local configs if API fails
350
+ console.log('[WorkflowService] fetchAll API failed, falling back to local', { productTag, error: (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error });
351
+ return Array.from(this.localConfigs.values());
352
+ }
353
+ }
354
+ /**
355
+ * Fetch a specific workflow by tag
356
+ *
357
+ * @example
358
+ * ```ts
359
+ * const workflow = await ductape.workflows.fetch('order-fulfillment', 'my-product');
360
+ * console.log(workflow?.name, workflow?.steps.length);
361
+ * ```
362
+ */
363
+ async fetch(workflowTag, productTag) {
364
+ var _a, _b;
365
+ console.log('[WorkflowService] fetch ENTRY', { workflowTag, productTag });
366
+ // If productTag is provided, fetch from API
367
+ if (productTag) {
368
+ try {
369
+ const builder = await this.getProductBuilder(productTag);
370
+ console.log('[WorkflowService] fetch calling builder.fetchWorkflow', { workflowTag, productTag });
371
+ const workflow = await builder.fetchWorkflow(workflowTag);
372
+ if (workflow) {
373
+ const config = this.productWorkflowToConfig(workflow);
374
+ // Update local cache
375
+ this.localConfigs.set(workflowTag, config);
376
+ console.log('[WorkflowService] fetch SUCCESS from API', { workflowTag, productTag, stepsCount: (_a = config.steps) === null || _a === void 0 ? void 0 : _a.length });
377
+ return config;
378
+ }
379
+ console.log('[WorkflowService] fetch not found on API', { workflowTag, productTag });
380
+ return null;
381
+ }
382
+ catch (error) {
383
+ // Fall back to local config
384
+ console.log('[WorkflowService] fetch API failed, trying local', { workflowTag, productTag, error: (_b = error === null || error === void 0 ? void 0 : error.message) !== null && _b !== void 0 ? _b : error });
385
+ return this.localConfigs.get(workflowTag) || null;
386
+ }
387
+ }
388
+ const local = this.localConfigs.get(workflowTag) || null;
389
+ console.log('[WorkflowService] fetch from local only', { workflowTag, found: !!local });
390
+ return local;
391
+ }
392
+ /**
393
+ * Update a workflow
394
+ *
395
+ * @example
396
+ * ```ts
397
+ * await ductape.workflows.update('order-fulfillment', 'my-product', {
398
+ * description: 'Updated description',
399
+ * options: { timeout: 3600000 },
400
+ * });
401
+ * ```
402
+ */
403
+ async update(workflowTag, productTag, updates) {
404
+ var _a, _b, _c, _d, _e, _f, _g;
405
+ console.log('[WorkflowService] update ENTRY', { workflowTag, productTag, updateKeys: Object.keys(updates || {}) });
406
+ // Update in backend
407
+ const builder = await this.getProductBuilder(productTag);
408
+ await builder.updateWorkflow(workflowTag, updates);
409
+ // Update local cache
410
+ const existing = this.localConfigs.get(workflowTag);
411
+ if (existing) {
412
+ const updated = Object.assign(Object.assign({}, existing), { name: updates.name || existing.name, description: (_a = updates.description) !== null && _a !== void 0 ? _a : existing.description, input: (_b = updates.input) !== null && _b !== void 0 ? _b : existing.input, output: (_c = updates.output) !== null && _c !== void 0 ? _c : existing.output, steps: updates.steps || existing.steps, signals: (_d = updates.signals) !== null && _d !== void 0 ? _d : existing.signals, queries: (_e = updates.queries) !== null && _e !== void 0 ? _e : existing.queries, options: (_f = updates.options) !== null && _f !== void 0 ? _f : existing.options, envs: (_g = updates.envs) !== null && _g !== void 0 ? _g : existing.envs });
413
+ this.localConfigs.set(workflowTag, updated);
414
+ }
415
+ console.log('[WorkflowService] update SUCCESS', { workflowTag, productTag });
416
+ }
417
+ /**
418
+ * Delete a workflow
419
+ *
420
+ * @example
421
+ * ```ts
422
+ * await ductape.workflows.delete('order-fulfillment', 'my-product');
423
+ * ```
424
+ */
425
+ async delete(workflowTag, productTag) {
426
+ console.log('[WorkflowService] delete ENTRY', { workflowTag, productTag });
427
+ // Delete from backend
428
+ const builder = await this.getProductBuilder(productTag);
429
+ await builder.deleteWorkflow(workflowTag);
430
+ // Remove from local cache
431
+ this.localConfigs.delete(workflowTag);
432
+ console.log('[WorkflowService] delete SUCCESS', { workflowTag, productTag });
433
+ }
434
+ // ==================== CODE-FIRST API ====================
435
+ /**
436
+ * Define a workflow using the code-first API
437
+ * Compiles the handler to JSON schema and creates the workflow in one step
438
+ *
439
+ * @example
440
+ * ```ts
441
+ * const orderWorkflow = await ductape.workflows.define({
442
+ * product: 'my-product',
443
+ * tag: 'order-fulfillment',
444
+ * name: 'Order Fulfillment',
445
+ * handler: async (ctx) => {
446
+ * const validation = await ctx.step('validate', async () => {
447
+ * return ctx.action.run({
448
+ * app: 'inventory-service',
449
+ * event: 'validate-order',
450
+ * input: { body: ctx.input },
451
+ * });
452
+ * });
453
+ *
454
+ * if (!validation.valid) {
455
+ * return { success: false, error: validation.reason };
456
+ * }
457
+ *
458
+ * return { success: true };
459
+ * },
460
+ * });
461
+ * ```
462
+ */
463
+ async define(options) {
464
+ var _a, _b;
465
+ console.log('[WorkflowService] define ENTRY', { tag: options.tag, name: options.name, product: options.product });
466
+ // Validate required fields
467
+ if (!options.tag || !options.name || !options.handler) {
468
+ console.log('[WorkflowService] define validation failed: missing tag, name, or handler');
469
+ throw WorkflowError.validationError('Workflow definition requires tag, name, and handler');
470
+ }
471
+ // Create a workflow compiler instance
472
+ const compiler = new WorkflowCompiler(options);
473
+ // Compile the handler to JSON schema (await so async handler runs and steps are captured)
474
+ console.log('[WorkflowService] define compiling handler (compileAsync)', { tag: options.tag });
475
+ const schema = await compiler.compileAsync();
476
+ console.log('[WorkflowService] define compiled schema', { tag: schema.tag, stepsCount: (_b = (_a = schema.steps) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 });
477
+ // If product is specified, create the workflow
478
+ if (options.product) {
479
+ console.log('[WorkflowService] define creating workflow on backend', { product: options.product, tag: schema.tag });
480
+ await this.create(options.product, schema);
481
+ }
482
+ // Store locally
483
+ const localConfig = {
484
+ name: schema.name,
485
+ tag: schema.tag,
486
+ description: schema.description,
487
+ input: schema.input,
488
+ output: schema.output,
489
+ steps: schema.steps,
490
+ signals: schema.signals,
491
+ queries: schema.queries,
492
+ options: schema.options,
493
+ envs: schema.envs,
494
+ };
495
+ this.localConfigs.set(schema.tag, localConfig);
496
+ console.log('[WorkflowService] define SUCCESS', { tag: options.tag, product: options.product });
497
+ // Return the defined workflow with compile method
498
+ return {
499
+ tag: options.tag,
500
+ name: options.name,
501
+ handler: options.handler,
502
+ compile: () => schema,
503
+ schema,
504
+ };
505
+ }
506
+ // ==================== WORKFLOW EXECUTION ====================
507
+ /**
508
+ * Execute a workflow
509
+ *
510
+ * @example
511
+ * ```ts
512
+ * const result = await ductape.workflows.execute({
513
+ * product: 'my-product',
514
+ * env: 'production',
515
+ * tag: 'order-fulfillment',
516
+ * input: {
517
+ * order_id: 'ORD-12345',
518
+ * items: [{ product_id: 'PROD-1', quantity: 2 }],
519
+ * },
520
+ * });
521
+ *
522
+ * console.log(result.status); // 'completed' | 'failed' | 'rolled_back'
523
+ * console.log(result.output);
524
+ * ```
525
+ */
526
+ async execute(options) {
527
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
528
+ console.log('[WorkflowService] execute ENTRY', { product: options.product, env: options.env, tag: options.tag, hasSession: !!options.session, cache: options.cache });
529
+ if (!this.config) {
530
+ console.log('[WorkflowService] execute failed: no config');
531
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
532
+ }
533
+ const process_id = (0, processor_utils_1.generateObjectId)();
534
+ console.log('[WorkflowService] execute process_id', { process_id });
535
+ // Session log fields (will be populated if session is provided)
536
+ let sessionLogFields = {};
537
+ let resolvedOptions = options;
538
+ // Fetch the workflow configuration from backend
539
+ const builder = await this.getProductBuilder(options.product);
540
+ console.log('[WorkflowService] execute fetching workflow', { tag: options.tag, product: options.product });
541
+ const workflow = await builder.fetchWorkflow(options.tag);
542
+ if (!workflow) {
543
+ console.log('[WorkflowService] execute workflow not found', { tag: options.tag });
544
+ throw WorkflowError.notFoundError(`Workflow ${options.tag} not found`);
545
+ }
546
+ console.log('[WorkflowService] execute workflow loaded', { tag: workflow.tag, stepsCount: (_b = (_a = workflow.steps) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 });
547
+ // Process session if provided - verify and resolve $Session{} references
548
+ if (options.session) {
549
+ const privateKey = builder.fetchPrivateKey();
550
+ if (privateKey) {
551
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
552
+ const sessionResult = await processSessionForExecution(options.session, privateKey, options, options.env, {
553
+ fetchSessionSelector: async (sessionTag) => {
554
+ const sessionConfig = await builder.fetchSession(sessionTag);
555
+ return sessionConfig === null || sessionConfig === void 0 ? void 0 : sessionConfig.selector;
556
+ },
557
+ });
558
+ if (sessionResult.error) {
559
+ console.log('[WorkflowService] execute session validation failed', { error: sessionResult.error });
560
+ throw WorkflowError.executionError(`Session validation failed: ${sessionResult.error}`);
561
+ }
562
+ resolvedOptions = sessionResult.input;
563
+ sessionLogFields = sessionResult.logFields;
564
+ console.log('[WorkflowService] execute session resolved', { hasLogFields: Object.keys(sessionLogFields).length > 0 });
565
+ }
566
+ }
567
+ // Initialize logging
568
+ this.initializeLogService();
569
+ const baseLogs = Object.assign({ product_tag: options.product, workspace_id: this.config.workspace_id, env: options.env, process_id, type: logs_types_1.LogEventTypes.WORKFLOW, parent_tag: options.tag, data: { workflow: options.tag, operation: 'execute' } }, sessionLogFields);
570
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow execute - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
571
+ const { cache } = options;
572
+ try {
573
+ // Check cache for idempotency (prevent duplicate executions with same input)
574
+ if (cache && this.cacheManager && this._privateKey) {
575
+ console.log('[WorkflowService] execute checking cache', { cache, tag: options.tag });
576
+ const cacheConfig = await this.validateCache(options.product, cache);
577
+ const cacheOptions = {
578
+ cache_tag: cache,
579
+ product_tag: options.product,
580
+ component_tag: options.tag,
581
+ component_type: 'workflow',
582
+ operation: 'execute',
583
+ input: { tag: options.tag, input: resolvedOptions.input },
584
+ privateKey: this._privateKey,
585
+ expiry: cacheConfig.expiry,
586
+ };
587
+ const cached = await this.cacheManager.fetch(cacheOptions);
588
+ if (cached.hit && cached.data) {
589
+ console.log('[WorkflowService] execute cache HIT', { cache, source: cached.source });
590
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.add(Object.assign(Object.assign({}, baseLogs), { message: `Workflow execute - cache hit (${cached.source})`, successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS, data: { workflow: options.tag, operation: 'execute', cache_source: cached.source }, cache_tag: cache, cache_key: cached.key, cache_status: true }));
591
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.publish();
592
+ return cached.data;
593
+ }
594
+ }
595
+ // Create and run the workflow executor with resolved options and session context (pass builder to avoid duplicate init)
596
+ console.log('[WorkflowService] execute creating WorkflowExecutor and running', { tag: options.tag });
597
+ const executor = new workflow_executor_1.WorkflowExecutor(this.config, workflow, resolvedOptions, this._privateKey, sessionLogFields, builder);
598
+ const result = await executor.execute();
599
+ console.log('[WorkflowService] execute executor completed', { tag: options.tag, status: result === null || result === void 0 ? void 0 : result.status });
600
+ // Store in cache for idempotency (fire-and-forget)
601
+ if (cache && this.cacheManager && this._privateKey) {
602
+ const cacheConfig = await this.validateCache(options.product, cache);
603
+ this.cacheManager.store({
604
+ cache_tag: cache,
605
+ product_tag: options.product,
606
+ component_tag: options.tag,
607
+ component_type: 'workflow',
608
+ operation: 'execute',
609
+ input: { tag: options.tag, input: resolvedOptions.input },
610
+ privateKey: this._privateKey,
611
+ expiry: cacheConfig.expiry,
612
+ }, result);
613
+ }
614
+ (_f = this.logService) === null || _f === void 0 ? void 0 : _f.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow execute - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
615
+ (_g = this.logService) === null || _g === void 0 ? void 0 : _g.publish();
616
+ console.log('[WorkflowService] execute SUCCESS', { tag: options.tag, process_id });
617
+ return result;
618
+ }
619
+ catch (error) {
620
+ console.log('[WorkflowService] execute FAILED', { tag: options.tag, process_id, error: (_h = error === null || error === void 0 ? void 0 : error.message) !== null && _h !== void 0 ? _h : error });
621
+ (_j = this.logService) === null || _j === void 0 ? void 0 : _j.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow execute - failed', failed_execution: true, data: { workflow: options.tag, operation: 'execute', error: error.message || String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
622
+ await ((_k = this.logService) === null || _k === void 0 ? void 0 : _k.publish());
623
+ throw error;
624
+ }
625
+ }
626
+ // ==================== WORKFLOW DISPATCH ====================
627
+ /**
628
+ * Dispatch a workflow to run as a scheduled job
629
+ *
630
+ * @example
631
+ * ```ts
632
+ * // Schedule a workflow to run in 1 hour
633
+ * const result = await ductape.workflows.dispatch({
634
+ * product: 'my-product',
635
+ * env: 'production',
636
+ * workflow: 'order-fulfillment',
637
+ * input: { order_id: 'ORD-123' },
638
+ * schedule: { start_at: Date.now() + 3600000 },
639
+ * });
640
+ *
641
+ * // Run on a cron schedule
642
+ * const result = await ductape.workflows.dispatch({
643
+ * product: 'my-product',
644
+ * env: 'production',
645
+ * workflow: 'daily-report',
646
+ * input: {},
647
+ * schedule: { cron: '0 0 * * *' }, // Daily at midnight
648
+ * });
649
+ * ```
650
+ */
651
+ async dispatch(data) {
652
+ var _a, _b, _c, _d, _e, _f, _g, _h;
653
+ console.log('[WorkflowService] dispatch ENTRY', { product: data.product, env: data.env, workflow: data.workflow, schedule: !!data.schedule, session: !!data.session, cache: data.cache });
654
+ const process_id = (0, processor_utils_1.generateObjectId)();
655
+ const processorService = this.createNewProcessor();
656
+ const productBuilder = await this.getProductBuilder(data.product);
657
+ const schedule = data.schedule || {};
658
+ const startAt = typeof schedule.start_at === 'string' ? new Date(schedule.start_at).getTime() : schedule.start_at || Date.now();
659
+ // Generate job tag based on workflow
660
+ const jobTag = `workflow:${data.workflow}`;
661
+ console.log('[WorkflowService] dispatch jobTag', { jobTag, startAt, cron: schedule.cron, every: schedule.every });
662
+ // Session log fields (will be populated if session is provided)
663
+ let sessionLogFields = {};
664
+ let resolvedData = data;
665
+ // Process session if provided - verify and resolve $Session{} references
666
+ if (data.session) {
667
+ const privateKey = productBuilder.fetchPrivateKey();
668
+ if (privateKey) {
669
+ const { processSessionForExecution } = await Promise.resolve().then(() => __importStar(require('../sessions')));
670
+ const sessionResult = await processSessionForExecution(data.session, privateKey, data, data.env, {
671
+ fetchSessionSelector: async (sessionTag) => {
672
+ const sessionConfig = await productBuilder.fetchSession(sessionTag);
673
+ return sessionConfig === null || sessionConfig === void 0 ? void 0 : sessionConfig.selector;
674
+ },
675
+ });
676
+ if (sessionResult.error) {
677
+ console.log('[WorkflowService] dispatch session validation failed', { error: sessionResult.error });
678
+ throw WorkflowError.executionError(`Session validation failed: ${sessionResult.error}`);
679
+ }
680
+ resolvedData = sessionResult.input;
681
+ sessionLogFields = sessionResult.logFields;
682
+ console.log('[WorkflowService] dispatch session resolved');
683
+ }
684
+ }
685
+ // Initialize logging
686
+ this.initializeLogService();
687
+ const baseLogs = Object.assign({ product_tag: data.product, workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '', env: data.env, process_id, type: logs_types_1.LogEventTypes.WORKFLOW, parent_tag: data.workflow, data: { workflow: data.workflow, operation: 'dispatch' } }, sessionLogFields);
688
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow dispatch - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
689
+ const { cache } = data;
690
+ try {
691
+ // Check cache for idempotency (prevent duplicate dispatches with same input)
692
+ if (cache && this.cacheManager && this._privateKey) {
693
+ console.log('[WorkflowService] dispatch checking cache', { cache, workflow: data.workflow });
694
+ const cacheConfig = await this.validateCache(data.product, cache);
695
+ const cacheOptions = {
696
+ cache_tag: cache,
697
+ product_tag: data.product,
698
+ component_tag: data.workflow,
699
+ component_type: 'workflow',
700
+ operation: 'dispatch',
701
+ input: { workflow: data.workflow, input: data.input, schedule: data.schedule },
702
+ privateKey: this._privateKey,
703
+ expiry: cacheConfig.expiry,
704
+ };
705
+ const cached = await this.cacheManager.fetch(cacheOptions);
706
+ if (cached.hit && cached.data) {
707
+ console.log('[WorkflowService] dispatch cache HIT', { cache, source: cached.source });
708
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: `Workflow dispatch - cache hit (${cached.source})`, successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS, data: { workflow: data.workflow, operation: 'dispatch', cache_source: cached.source }, cache_tag: cache, cache_key: cached.key, cache_status: true }));
709
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
710
+ return cached.data;
711
+ }
712
+ }
713
+ // Check if job exists, if not create it
714
+ console.log('[WorkflowService] dispatch fetching existing job', { jobTag });
715
+ const existingJob = await productBuilder.fetchJob(jobTag);
716
+ if (!existingJob) {
717
+ console.log('[WorkflowService] dispatch job not found, creating', { jobTag });
718
+ await productBuilder.createJob({
719
+ tag: jobTag,
720
+ name: `Workflow: ${data.workflow}`,
721
+ description: `Auto-created job for workflow ${data.workflow}`,
722
+ type: productsBuilder_types_1.JobEventTypes.WORKFLOW, // Use workflow job type
723
+ app: data.workflow,
724
+ event: 'execute',
725
+ executions: 0,
726
+ intervals: schedule.every || 0,
727
+ start_at: startAt,
728
+ });
729
+ }
730
+ const jobInput = {
731
+ product: data.product,
732
+ env: data.env,
733
+ event: jobTag,
734
+ input: resolvedData.input,
735
+ retries: data.retries || 0,
736
+ start_at: startAt,
737
+ session: data.session,
738
+ cache: data.cache,
739
+ repeat: schedule.cron || schedule.every
740
+ ? {
741
+ cron: schedule.cron,
742
+ every: schedule.every,
743
+ limit: schedule.limit,
744
+ endDate: schedule.endDate,
745
+ tz: schedule.tz,
746
+ }
747
+ : undefined,
748
+ };
749
+ console.log('[WorkflowService] dispatch calling processJob', { jobTag, hasRepeat: !!(schedule.cron || schedule.every) });
750
+ await processorService.processJob(jobInput);
751
+ const isRecurring = !!(schedule.cron || schedule.every);
752
+ console.log('[WorkflowService] dispatch processJob completed', { isRecurring });
753
+ let nextRunAt;
754
+ if (isRecurring && schedule.every) {
755
+ nextRunAt = startAt + schedule.every;
756
+ }
757
+ const job_id = (0, crypto_1.randomUUID)();
758
+ const result = {
759
+ job_id,
760
+ status: startAt > Date.now() ? 'scheduled' : 'queued',
761
+ scheduled_at: startAt,
762
+ recurring: isRecurring,
763
+ next_run_at: nextRunAt,
764
+ };
765
+ // Store in cache for idempotency (fire-and-forget)
766
+ if (cache && this.cacheManager && this._privateKey) {
767
+ const cacheConfig = await this.validateCache(data.product, cache);
768
+ this.cacheManager.store({
769
+ cache_tag: cache,
770
+ product_tag: data.product,
771
+ component_tag: data.workflow,
772
+ component_type: 'workflow',
773
+ operation: 'dispatch',
774
+ input: { workflow: data.workflow, input: data.input, schedule: data.schedule },
775
+ privateKey: this._privateKey,
776
+ expiry: cacheConfig.expiry,
777
+ }, result);
778
+ }
779
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow dispatch - success', successful_execution: true, data: { workflow: data.workflow, operation: 'dispatch', job_id }, status: logs_types_1.LogEventStatus.SUCCESS }));
780
+ (_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish();
781
+ console.log('[WorkflowService] dispatch SUCCESS', { workflow: data.workflow, job_id: result.job_id, status: result.status });
782
+ return result;
783
+ }
784
+ catch (error) {
785
+ console.log('[WorkflowService] dispatch FAILED', { workflow: data.workflow, error: String(error) });
786
+ (_g = this.logService) === null || _g === void 0 ? void 0 : _g.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow dispatch - failed', failed_execution: true, data: { workflow: data.workflow, operation: 'dispatch', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
787
+ await ((_h = this.logService) === null || _h === void 0 ? void 0 : _h.publish());
788
+ throw error;
789
+ }
790
+ }
791
+ // ==================== SIGNAL & QUERY ====================
792
+ /**
793
+ * Send a signal to a running workflow
794
+ *
795
+ * @example
796
+ * ```ts
797
+ * await ductape.workflows.signal({
798
+ * product: 'my-product',
799
+ * env: 'production',
800
+ * workflow_id: 'wf-123',
801
+ * signal: 'approve',
802
+ * payload: { approver_id: 'user-456', comments: 'Approved' },
803
+ * });
804
+ * ```
805
+ */
806
+ async signal(options) {
807
+ var _a, _b, _c, _d, _e, _f;
808
+ console.log('[WorkflowService] signal ENTRY', { workflow_id: options.workflow_id, signal: options.signal, product: options.product, env: options.env });
809
+ const process_id = (0, processor_utils_1.generateObjectId)();
810
+ // Initialize logging
811
+ if (options.product) {
812
+ await this.getProductBuilder(options.product);
813
+ }
814
+ this.initializeLogService();
815
+ const baseLogs = {
816
+ product_tag: options.product,
817
+ workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '',
818
+ env: options.env,
819
+ process_id,
820
+ type: logs_types_1.LogEventTypes.WORKFLOW,
821
+ parent_tag: options.workflow_id,
822
+ child_tag: options.signal,
823
+ data: { workflow_id: options.workflow_id, signal: options.signal, operation: 'signal' },
824
+ };
825
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow signal - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
826
+ try {
827
+ const apiService = this.ensureApiService();
828
+ const auth = this.getAuthPayload();
829
+ console.log('[WorkflowService] signal calling apiService.sendSignal', { workflow_id: options.workflow_id, signal: options.signal });
830
+ await apiService.sendSignal(options.workflow_id, {
831
+ product: options.product,
832
+ env: options.env,
833
+ signal: options.signal,
834
+ payload: options.payload,
835
+ }, auth);
836
+ console.log('[WorkflowService] signal SUCCESS', { workflow_id: options.workflow_id, signal: options.signal });
837
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow signal - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
838
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
839
+ }
840
+ catch (error) {
841
+ console.log('[WorkflowService] signal FAILED', { workflow_id: options.workflow_id, signal: options.signal, error: String(error) });
842
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow signal - failed', failed_execution: true, data: { workflow_id: options.workflow_id, signal: options.signal, operation: 'signal', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
843
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
844
+ throw error;
845
+ }
846
+ }
847
+ /**
848
+ * Query a running workflow
849
+ *
850
+ * @example
851
+ * ```ts
852
+ * const status = await ductape.workflows.query({
853
+ * product: 'my-product',
854
+ * env: 'production',
855
+ * workflow_id: 'wf-123',
856
+ * query: 'getStatus',
857
+ * });
858
+ *
859
+ * console.log(status.current_step, status.progress);
860
+ * ```
861
+ */
862
+ async query(options) {
863
+ console.log('[WorkflowService] query ENTRY', { workflow_id: options.workflow_id, query: options.query, product: options.product, env: options.env });
864
+ // Query is handled by getting workflow status and extracting query result
865
+ const status = await this.status({
866
+ product: options.product,
867
+ env: options.env,
868
+ workflow_id: options.workflow_id,
869
+ });
870
+ if (!status) {
871
+ console.log('[WorkflowService] query workflow not found', { workflow_id: options.workflow_id });
872
+ throw WorkflowError.notFoundError(`Workflow ${options.workflow_id} not found`);
873
+ }
874
+ const result = (status.state[options.query] || status);
875
+ console.log('[WorkflowService] query SUCCESS', { workflow_id: options.workflow_id, query: options.query, hasResult: result !== undefined });
876
+ // Return the state which contains query results
877
+ return result;
878
+ }
879
+ // ==================== REPLAY, RESTART & RESUME ====================
880
+ /**
881
+ * Replay a workflow with the same input
882
+ *
883
+ * @example
884
+ * ```ts
885
+ * const result = await ductape.workflows.replay({
886
+ * product: 'my-product',
887
+ * env: 'production',
888
+ * workflow_id: 'wf-123',
889
+ * reason: 'Debugging payment failure',
890
+ * });
891
+ * ```
892
+ */
893
+ async replay(options) {
894
+ var _a, _b, _c, _d, _e, _f;
895
+ console.log('[WorkflowService] replay ENTRY', { workflow_id: options.workflow_id, product: options.product, env: options.env });
896
+ const process_id = (0, processor_utils_1.generateObjectId)();
897
+ if (!this.config) {
898
+ console.log('[WorkflowService] replay failed: no config');
899
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
900
+ }
901
+ // Initialize logging
902
+ await this.getProductBuilder(options.product);
903
+ this.initializeLogService();
904
+ const baseLogs = {
905
+ product_tag: options.product,
906
+ workspace_id: ((_a = this.config) === null || _a === void 0 ? void 0 : _a.workspace_id) || '',
907
+ env: options.env,
908
+ process_id,
909
+ type: logs_types_1.LogEventTypes.WORKFLOW,
910
+ parent_tag: options.workflow_id,
911
+ data: { workflow_id: options.workflow_id, operation: 'replay' },
912
+ };
913
+ (_b = this.logService) === null || _b === void 0 ? void 0 : _b.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow replay - initiated', status: logs_types_1.LogEventStatus.PROCESSING }));
914
+ try {
915
+ // Get original workflow execution state from backend
916
+ console.log('[WorkflowService] replay fetching original status', { workflow_id: options.workflow_id });
917
+ const originalStatus = await this.status({
918
+ product: options.product,
919
+ env: options.env,
920
+ workflow_id: options.workflow_id,
921
+ });
922
+ if (!originalStatus) {
923
+ console.log('[WorkflowService] replay original workflow not found', { workflow_id: options.workflow_id });
924
+ throw WorkflowError.notFoundError(`Workflow ${options.workflow_id} not found`);
925
+ }
926
+ console.log('[WorkflowService] replay original status', { workflow_tag: originalStatus.workflow_tag, status: originalStatus.status });
927
+ // Execute with the same input
928
+ console.log('[WorkflowService] replay executing with same input', { tag: originalStatus.workflow_tag });
929
+ const result = await this.execute({
930
+ product: options.product,
931
+ env: options.env,
932
+ tag: originalStatus.workflow_tag,
933
+ input: originalStatus.input || {},
934
+ idempotency_key: options.idempotency_key,
935
+ });
936
+ (_c = this.logService) === null || _c === void 0 ? void 0 : _c.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow replay - success', successful_execution: true, status: logs_types_1.LogEventStatus.SUCCESS }));
937
+ (_d = this.logService) === null || _d === void 0 ? void 0 : _d.publish();
938
+ console.log('[WorkflowService] replay SUCCESS', { workflow_id: options.workflow_id, replayed_from: options.workflow_id });
939
+ return Object.assign(Object.assign({}, result), { replayed_from: options.workflow_id });
940
+ }
941
+ catch (error) {
942
+ console.log('[WorkflowService] replay FAILED', { workflow_id: options.workflow_id, error: String(error) });
943
+ (_e = this.logService) === null || _e === void 0 ? void 0 : _e.add(Object.assign(Object.assign({}, baseLogs), { message: 'Workflow replay - failed', failed_execution: true, data: { workflow_id: options.workflow_id, operation: 'replay', error: String(error) }, status: logs_types_1.LogEventStatus.FAIL }));
944
+ await ((_f = this.logService) === null || _f === void 0 ? void 0 : _f.publish());
945
+ throw error;
946
+ }
947
+ }
948
+ /**
949
+ * Restart a workflow with new or modified input
950
+ *
951
+ * @example
952
+ * ```ts
953
+ * const result = await ductape.workflows.restart({
954
+ * product: 'my-product',
955
+ * env: 'production',
956
+ * workflow_id: 'wf-123',
957
+ * input: { email: 'corrected@email.com' },
958
+ * reason: 'Customer email was incorrect',
959
+ * });
960
+ * ```
961
+ */
962
+ async restart(options) {
963
+ console.log('[WorkflowService] restart ENTRY', { workflow_id: options.workflow_id, product: options.product, env: options.env, hasInput: !!options.input });
964
+ if (!this.config) {
965
+ console.log('[WorkflowService] restart failed: no config');
966
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
967
+ }
968
+ // Get original workflow execution state from backend
969
+ const originalStatus = await this.status({
970
+ product: options.product,
971
+ env: options.env,
972
+ workflow_id: options.workflow_id,
973
+ });
974
+ if (!originalStatus) {
975
+ console.log('[WorkflowService] restart workflow not found', { workflow_id: options.workflow_id });
976
+ throw WorkflowError.notFoundError(`Workflow ${options.workflow_id} not found`);
977
+ }
978
+ console.log('[WorkflowService] restart original status', { workflow_tag: originalStatus.workflow_tag });
979
+ // Determine the new input
980
+ let newInput;
981
+ if (options.input) {
982
+ newInput = options.input;
983
+ }
984
+ else if (options.input_override && options.merge_input) {
985
+ newInput = Object.assign(Object.assign({}, (originalStatus.input || {})), options.input_override);
986
+ }
987
+ else if (options.input_override) {
988
+ newInput = options.input_override;
989
+ }
990
+ else {
991
+ newInput = originalStatus.input || {};
992
+ }
993
+ // Execute with the new input
994
+ console.log('[WorkflowService] restart executing with new input', { tag: originalStatus.workflow_tag, inputKeys: Object.keys(newInput || {}) });
995
+ const result = await this.execute({
996
+ product: options.product,
997
+ env: options.env,
998
+ tag: originalStatus.workflow_tag,
999
+ input: newInput,
1000
+ });
1001
+ console.log('[WorkflowService] restart SUCCESS', { workflow_id: options.workflow_id, restarted_from: options.workflow_id });
1002
+ return Object.assign(Object.assign({}, result), { restarted_from: options.workflow_id });
1003
+ }
1004
+ /**
1005
+ * Resume a paused or failed workflow from where it stopped
1006
+ *
1007
+ * @example
1008
+ * ```ts
1009
+ * const result = await ductape.workflows.resume({
1010
+ * product: 'my-product',
1011
+ * env: 'production',
1012
+ * workflow_id: 'wf-123',
1013
+ * from_checkpoint: 'payment-complete',
1014
+ * });
1015
+ * ```
1016
+ */
1017
+ async resume(options) {
1018
+ var _a, _b;
1019
+ console.log('[WorkflowService] resume ENTRY', { workflow_id: options.workflow_id, product: options.product, env: options.env, from_checkpoint: options.from_checkpoint, from_step: options.from_step });
1020
+ if (!this.config) {
1021
+ console.log('[WorkflowService] resume failed: no config');
1022
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
1023
+ }
1024
+ // Get original workflow execution state from backend
1025
+ const originalStatus = await this.status({
1026
+ product: options.product,
1027
+ env: options.env,
1028
+ workflow_id: options.workflow_id,
1029
+ });
1030
+ if (!originalStatus) {
1031
+ console.log('[WorkflowService] resume workflow not found', { workflow_id: options.workflow_id });
1032
+ throw WorkflowError.notFoundError(`Workflow ${options.workflow_id} not found`);
1033
+ }
1034
+ console.log('[WorkflowService] resume original status', { workflow_tag: originalStatus.workflow_tag, completed_steps: (_b = (_a = originalStatus.completed_steps) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 });
1035
+ // Fetch the workflow configuration
1036
+ const builder = await this.getProductBuilder(options.product);
1037
+ const workflow = await builder.fetchWorkflow(originalStatus.workflow_tag);
1038
+ if (!workflow) {
1039
+ console.log('[WorkflowService] resume workflow config not found', { tag: originalStatus.workflow_tag });
1040
+ throw WorkflowError.notFoundError(`Workflow ${originalStatus.workflow_tag} not found`);
1041
+ }
1042
+ // Create executor with resume options
1043
+ console.log('[WorkflowService] resume creating executor and resuming', { tag: workflow.tag });
1044
+ const executor = new workflow_executor_1.WorkflowExecutor(this.config, workflow, {
1045
+ product: options.product,
1046
+ env: options.env,
1047
+ tag: originalStatus.workflow_tag,
1048
+ input: Object.assign(Object.assign({}, (originalStatus.input || {})), (options.input || {})),
1049
+ }, this._privateKey);
1050
+ // Resume execution (executor handles skipping completed steps)
1051
+ const result = await executor.resume({
1052
+ completed_steps: originalStatus.completed_steps,
1053
+ state: originalStatus.state,
1054
+ from_checkpoint: options.from_checkpoint,
1055
+ from_step: options.from_step,
1056
+ skip_steps: options.skip_steps,
1057
+ });
1058
+ console.log('[WorkflowService] resume SUCCESS', { workflow_id: options.workflow_id, resumed_from: options.workflow_id });
1059
+ return Object.assign(Object.assign({}, result), { resumed_from: options.workflow_id, resumed_checkpoint: options.from_checkpoint });
1060
+ }
1061
+ /**
1062
+ * Replay a workflow starting from a specific step
1063
+ *
1064
+ * @example
1065
+ * ```ts
1066
+ * const result = await ductape.workflows.replayFromStep({
1067
+ * product: 'my-product',
1068
+ * env: 'production',
1069
+ * workflow_id: 'wf-123',
1070
+ * from_step: 'process-payment',
1071
+ * });
1072
+ * ```
1073
+ */
1074
+ async replayFromStep(options) {
1075
+ console.log('[WorkflowService] replayFromStep ENTRY', { workflow_id: options.workflow_id, from_step: options.from_step, product: options.product, env: options.env });
1076
+ if (!this.config) {
1077
+ console.log('[WorkflowService] replayFromStep failed: no config');
1078
+ throw WorkflowError.configurationError('WorkflowService not configured. Please provide config when initializing.');
1079
+ }
1080
+ // Get original workflow execution state
1081
+ const originalStatus = await this.status({
1082
+ product: options.product,
1083
+ env: options.env,
1084
+ workflow_id: options.workflow_id,
1085
+ });
1086
+ if (!originalStatus) {
1087
+ console.log('[WorkflowService] replayFromStep workflow not found', { workflow_id: options.workflow_id });
1088
+ throw WorkflowError.notFoundError(`Workflow ${options.workflow_id} not found`);
1089
+ }
1090
+ // Fetch the workflow configuration
1091
+ const builder = await this.getProductBuilder(options.product);
1092
+ const workflow = await builder.fetchWorkflow(originalStatus.workflow_tag);
1093
+ if (!workflow) {
1094
+ console.log('[WorkflowService] replayFromStep workflow config not found', { tag: originalStatus.workflow_tag });
1095
+ throw WorkflowError.notFoundError(`Workflow ${originalStatus.workflow_tag} not found`);
1096
+ }
1097
+ // Find steps before from_step to mark as completed
1098
+ const stepIndex = workflow.steps.findIndex((s) => s.tag === options.from_step);
1099
+ if (stepIndex === -1) {
1100
+ console.log('[WorkflowService] replayFromStep step not found', { from_step: options.from_step });
1101
+ throw WorkflowError.validationError(`Step ${options.from_step} not found in workflow`);
1102
+ }
1103
+ const completedSteps = workflow.steps.slice(0, stepIndex).map((s) => s.tag);
1104
+ console.log('[WorkflowService] replayFromStep stepIndex and completedSteps', { from_step: options.from_step, stepIndex, completedStepsCount: completedSteps.length });
1105
+ // Create executor with partial state
1106
+ const executor = new workflow_executor_1.WorkflowExecutor(this.config, workflow, {
1107
+ product: options.product,
1108
+ env: options.env,
1109
+ tag: originalStatus.workflow_tag,
1110
+ input: originalStatus.input || {},
1111
+ }, this._privateKey);
1112
+ // Resume from the specified step with overridden outputs
1113
+ const result = await executor.resume({
1114
+ completed_steps: completedSteps,
1115
+ state: originalStatus.state,
1116
+ step_outputs: options.step_outputs,
1117
+ });
1118
+ console.log('[WorkflowService] replayFromStep SUCCESS', { workflow_id: options.workflow_id, from_step: options.from_step });
1119
+ return Object.assign(Object.assign({}, result), { replayed_from: options.workflow_id });
1120
+ }
1121
+ // ==================== STATUS & MANAGEMENT ====================
1122
+ /**
1123
+ * Get the status of a workflow execution
1124
+ *
1125
+ * @example
1126
+ * ```ts
1127
+ * const status = await ductape.workflows.status({
1128
+ * product: 'my-product',
1129
+ * env: 'production',
1130
+ * workflow_id: 'wf-123',
1131
+ * });
1132
+ * ```
1133
+ */
1134
+ async status(options) {
1135
+ console.log('[WorkflowService] status ENTRY', { workflow_id: options.workflow_id, product: options.product, env: options.env });
1136
+ const apiService = this.ensureApiService();
1137
+ const auth = this.getAuthPayload();
1138
+ const response = await apiService.getStatus(options.workflow_id, options.product, options.env, auth);
1139
+ if (!response) {
1140
+ console.log('[WorkflowService] status not found', { workflow_id: options.workflow_id });
1141
+ return null;
1142
+ }
1143
+ console.log('[WorkflowService] status SUCCESS', { workflow_id: response.workflow_id, workflow_tag: response.workflow_tag, status: response.status });
1144
+ return {
1145
+ workflow_id: response.workflow_id,
1146
+ workflow_tag: response.workflow_tag,
1147
+ status: response.status,
1148
+ current_step: response.current_step,
1149
+ completed_steps: response.completed_steps,
1150
+ state: response.state,
1151
+ started_at: response.started_at,
1152
+ updated_at: response.updated_at,
1153
+ input: response.input,
1154
+ output: response.output,
1155
+ error: response.error,
1156
+ };
1157
+ }
1158
+ /**
1159
+ * Cancel a running workflow
1160
+ *
1161
+ * @example
1162
+ * ```ts
1163
+ * const result = await ductape.workflows.cancel({
1164
+ * product: 'my-product',
1165
+ * env: 'production',
1166
+ * workflow_id: 'wf-123',
1167
+ * reason: 'User requested cancellation',
1168
+ * });
1169
+ * ```
1170
+ */
1171
+ async cancel(options) {
1172
+ var _a, _b, _c, _d;
1173
+ console.log('[WorkflowService] cancel ENTRY', {
1174
+ workflow_id: options.workflow_id,
1175
+ product: options.product,
1176
+ env: options.env,
1177
+ reason: options.reason,
1178
+ });
1179
+ const apiService = this.ensureApiService();
1180
+ const auth = this.getAuthPayload();
1181
+ const response = await apiService.cancel(options.workflow_id, options.product, options.env, options.reason || 'Cancelled by user', auth);
1182
+ console.log('[WorkflowService] cancel SUCCESS', {
1183
+ workflow_id: options.workflow_id,
1184
+ cancelled: response.cancelled,
1185
+ rolled_back_count: (_b = (_a = response.rolled_back_steps) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0,
1186
+ failed_rollbacks_count: (_d = (_c = response.failed_rollbacks) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0,
1187
+ });
1188
+ return {
1189
+ cancelled: response.cancelled,
1190
+ rolled_back_steps: response.rolled_back_steps,
1191
+ failed_rollbacks: response.failed_rollbacks,
1192
+ };
1193
+ }
1194
+ /**
1195
+ * Get the execution history of a workflow
1196
+ *
1197
+ * @example
1198
+ * ```ts
1199
+ * const history = await ductape.workflows.history({
1200
+ * product: 'my-product',
1201
+ * env: 'production',
1202
+ * workflow_id: 'wf-123',
1203
+ * });
1204
+ * ```
1205
+ */
1206
+ async history(options) {
1207
+ var _a, _b, _c, _d;
1208
+ console.log('[WorkflowService] history ENTRY', { workflow_id: options.workflow_id, product: options.product, env: options.env });
1209
+ const apiService = this.ensureApiService();
1210
+ const auth = this.getAuthPayload();
1211
+ const response = await apiService.getHistory(options.workflow_id, options.product, options.env, auth);
1212
+ console.log('[WorkflowService] history SUCCESS', { workflow_id: response.workflow_id, eventsCount: (_b = (_a = response.events) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0, checkpointsCount: (_d = (_c = response.checkpoints) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0 });
1213
+ return {
1214
+ workflow_id: response.workflow_id,
1215
+ workflow_tag: response.workflow_tag,
1216
+ status: response.status,
1217
+ events: response.events.map((e) => ({
1218
+ type: e.type,
1219
+ timestamp: e.timestamp,
1220
+ data: e.data,
1221
+ })),
1222
+ checkpoints: response.checkpoints,
1223
+ replays: response.replays,
1224
+ restarts: response.restarts,
1225
+ };
1226
+ }
1227
+ /**
1228
+ * Get detailed information about a specific step
1229
+ *
1230
+ * @example
1231
+ * ```ts
1232
+ * const detail = await ductape.workflows.stepDetail({
1233
+ * product: 'my-product',
1234
+ * env: 'production',
1235
+ * workflow_id: 'wf-123',
1236
+ * step_tag: 'process-payment',
1237
+ * });
1238
+ * ```
1239
+ */
1240
+ async stepDetail(options) {
1241
+ console.log('[WorkflowService] stepDetail ENTRY', { workflow_id: options.workflow_id, step_tag: options.step_tag, product: options.product, env: options.env });
1242
+ const apiService = this.ensureApiService();
1243
+ const auth = this.getAuthPayload();
1244
+ const response = await apiService.getStepDetail(options.workflow_id, options.step_tag, options.product, options.env, auth);
1245
+ if (!response) {
1246
+ console.log('[WorkflowService] stepDetail not found', { workflow_id: options.workflow_id, step_tag: options.step_tag });
1247
+ return null;
1248
+ }
1249
+ console.log('[WorkflowService] stepDetail SUCCESS', { workflow_id: options.workflow_id, step_tag: response.tag, status: response.status });
1250
+ return {
1251
+ tag: response.tag,
1252
+ name: response.name,
1253
+ status: response.status,
1254
+ input: response.input,
1255
+ output: response.output,
1256
+ error: response.error,
1257
+ attempts: response.attempts,
1258
+ start_time: response.start_time,
1259
+ end_time: response.end_time,
1260
+ duration: response.duration,
1261
+ rollback_status: response.rollback_status,
1262
+ rollback_error: response.rollback_error,
1263
+ };
1264
+ }
1265
+ /**
1266
+ * List all related executions (replays, restarts, resumes)
1267
+ *
1268
+ * @example
1269
+ * ```ts
1270
+ * const related = await ductape.workflows.relatedExecutions({
1271
+ * product: 'my-product',
1272
+ * env: 'production',
1273
+ * workflow_id: 'wf-123',
1274
+ * });
1275
+ * ```
1276
+ */
1277
+ async relatedExecutions(options) {
1278
+ var _a, _b;
1279
+ console.log('[WorkflowService] relatedExecutions ENTRY', { workflow_id: options.workflow_id, product: options.product, env: options.env });
1280
+ const apiService = this.ensureApiService();
1281
+ const auth = this.getAuthPayload();
1282
+ const response = await apiService.getRelatedExecutions(options.workflow_id, options.product, options.env, auth);
1283
+ console.log('[WorkflowService] relatedExecutions SUCCESS', { workflow_id: options.workflow_id, executionsCount: (_b = (_a = response.executions) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0 });
1284
+ return {
1285
+ original: response.original,
1286
+ executions: response.executions.map((e) => ({
1287
+ workflow_id: e.workflow_id,
1288
+ type: e.type,
1289
+ status: e.status,
1290
+ created_at: e.created_at,
1291
+ replayed_from: e.replayed_from,
1292
+ restarted_from: e.restarted_from,
1293
+ resumed_from: e.resumed_from,
1294
+ })),
1295
+ };
1296
+ }
1297
+ /**
1298
+ * Compare two workflow executions
1299
+ *
1300
+ * @example
1301
+ * ```ts
1302
+ * const comparison = await ductape.workflows.compare({
1303
+ * product: 'my-product',
1304
+ * env: 'production',
1305
+ * workflow_ids: ['wf-123', 'wf-456'],
1306
+ * });
1307
+ * ```
1308
+ */
1309
+ async compare(options) {
1310
+ console.log('[WorkflowService] compare ENTRY', { workflow_ids: options.workflow_ids, product: options.product, env: options.env });
1311
+ const apiService = this.ensureApiService();
1312
+ const auth = this.getAuthPayload();
1313
+ const response = await apiService.compareExecutions(options.workflow_ids, options.product, options.env, auth);
1314
+ console.log('[WorkflowService] compare SUCCESS', { workflow_ids: response.workflows });
1315
+ return {
1316
+ workflows: response.workflows,
1317
+ input_diff: response.input_diff,
1318
+ step_diffs: response.step_diffs,
1319
+ outcome_diff: response.outcome_diff,
1320
+ };
1321
+ }
1322
+ // ==================== HELPER METHODS ====================
1323
+ /**
1324
+ * Convert IProductWorkflow to IWorkflowConfig
1325
+ */
1326
+ productWorkflowToConfig(workflow) {
1327
+ return {
1328
+ name: workflow.name,
1329
+ tag: workflow.tag,
1330
+ description: workflow.description,
1331
+ input: workflow.input,
1332
+ output: workflow.output,
1333
+ steps: workflow.steps,
1334
+ signals: workflow.signals,
1335
+ queries: workflow.queries,
1336
+ options: workflow.options,
1337
+ envs: workflow.envs,
1338
+ };
1339
+ }
1340
+ }
1341
+ exports.WorkflowService = WorkflowService;
1342
+ // ==================== WORKFLOW COMPILER ====================
1343
+ /** Symbol to detect workflow input proxy when serializing step input to operator strings */
1344
+ const INPUT_PROXY_SYMBOL = Symbol.for('RecordingContext.inputProxy');
1345
+ /** Symbol to detect step result proxy (values are already operator strings) */
1346
+ const STEP_RESULT_PROXY_SYMBOL = Symbol.for('RecordingContext.stepResultProxy');
1347
+ /** Symbol on step result proxy to get the operator string (for nested result paths) */
1348
+ const STEP_RESULT_REF_STRING = Symbol.for('RecordingContext.stepResultRefString');
1349
+ /**
1350
+ * Create a proxy for ctx.input so that ctx.input.field compiles to $Input{field}.
1351
+ * When the whole proxy is used as a value (e.g. body: ctx.input), it is replaced
1352
+ * with an object of $Input{key} for each key in the workflow input schema.
1353
+ */
1354
+ function createInputProxy(schemaKeys) {
1355
+ const refs = Object.fromEntries(schemaKeys.map((k) => [k, `$Input{${k}}`]));
1356
+ const proxy = new Proxy(refs, {
1357
+ get(target, prop) {
1358
+ if (prop === INPUT_PROXY_SYMBOL)
1359
+ return true;
1360
+ if (typeof prop === 'string' && prop in target)
1361
+ return target[prop];
1362
+ return `$Input{${String(prop)}}`;
1363
+ },
1364
+ });
1365
+ proxy[INPUT_PROXY_SYMBOL] = true;
1366
+ return proxy;
1367
+ }
1368
+ /**
1369
+ * Create a proxy for a step result so that result.field compiles to $Sequence{main}{stepTag}{field}.
1370
+ * Supports nested paths: result.data.nested.foo → $Sequence{main}{stepTag}{data.nested.foo}.
1371
+ * When a property is read, recordUsage(stepTag) is called so depends_on can be inferred.
1372
+ */
1373
+ function createStepResultProxy(workflowTag, stepTag, pathPrefix = '', recordUsage) {
1374
+ const refString = pathPrefix ? `$Sequence{main}{${stepTag}}{${pathPrefix}}` : undefined;
1375
+ return new Proxy({}, {
1376
+ get(_, prop) {
1377
+ if (prop === STEP_RESULT_PROXY_SYMBOL)
1378
+ return true;
1379
+ if (prop === STEP_RESULT_REF_STRING)
1380
+ return refString;
1381
+ // So template literals like `${paymentResult.transactionId}` get the operator string
1382
+ if (prop === Symbol.toPrimitive) {
1383
+ return (hint) => (hint === 'string' && refString ? refString : undefined);
1384
+ }
1385
+ if (prop === 'toString' || prop === 'valueOf') {
1386
+ return () => refString !== null && refString !== void 0 ? refString : '';
1387
+ }
1388
+ if (typeof prop === 'string') {
1389
+ recordUsage === null || recordUsage === void 0 ? void 0 : recordUsage(stepTag);
1390
+ }
1391
+ const fullPath = pathPrefix ? `${pathPrefix}.${String(prop)}` : String(prop);
1392
+ return createStepResultProxy(workflowTag, stepTag, fullPath, recordUsage);
1393
+ },
1394
+ });
1395
+ }
1396
+ /**
1397
+ * Recursively convert recorded step input to operator strings per Ductape operator docs.
1398
+ * - Replaces input-proxy values with { key: '$Input{key}', ... } for all workflow input keys.
1399
+ * - Leaves values that are already operator strings (e.g. from step result proxy) as-is.
1400
+ * - Strings containing operator refs ($Input{...}, $Sequence{main}{...}{...}, $Now) are converted to $Concat([...], "").
1401
+ * - Default delimiter is "" so template literals like `receipts/${ctx.input.orderId}.txt` become receipts/ORD-001.txt not receipts/ ORD-001 .txt.
1402
+ * - Recurses into plain objects and arrays; leaves other primitives unchanged.
1403
+ */
1404
+ const OPERATOR_REF_IN_STRING_REGEX = /(\$Input\{[^}]+\}|\$Sequence\{main\}\{[^}]+\}\{[^}]*\}|\$Now)/g;
1405
+ function convertStringToConcatIfOperatorRefs(str, delimiter = '') {
1406
+ OPERATOR_REF_IN_STRING_REGEX.lastIndex = 0;
1407
+ const tokens = str.split(OPERATOR_REF_IN_STRING_REGEX);
1408
+ const parts = [];
1409
+ for (const t of tokens) {
1410
+ if (!t)
1411
+ continue;
1412
+ const isOp = t.startsWith('$Input{') || t.startsWith('$Sequence{') || t === '$Now';
1413
+ if (isOp) {
1414
+ parts.push(t);
1415
+ }
1416
+ else {
1417
+ const trimmed = t.trim();
1418
+ if (trimmed.length > 0)
1419
+ parts.push(trimmed);
1420
+ }
1421
+ }
1422
+ if (parts.length <= 1)
1423
+ return str;
1424
+ return `$Concat([${parts.map((s) => (s.startsWith('$') ? s : JSON.stringify(s))).join(', ')}], "${delimiter.replace(/"/g, '\\"')}")`;
1425
+ }
1426
+ function convertToOperatorInput(value, inputProxy, schemaKeys) {
1427
+ if (value === null || value === undefined)
1428
+ return value;
1429
+ if (inputProxy && value === inputProxy) {
1430
+ return Object.fromEntries(schemaKeys.map((k) => [k, `$Input{${k}}`]));
1431
+ }
1432
+ const v = value;
1433
+ if (typeof v === 'object' && v !== null && v[INPUT_PROXY_SYMBOL] === true) {
1434
+ return Object.fromEntries(schemaKeys.map((k) => [k, `$Input{${k}}`]));
1435
+ }
1436
+ // Step result proxy (including nested result.data.foo) exposes operator string via STEP_RESULT_REF_STRING
1437
+ if (typeof v === 'object' && v !== null && typeof v[STEP_RESULT_REF_STRING] === 'string') {
1438
+ return v[STEP_RESULT_REF_STRING];
1439
+ }
1440
+ if (Array.isArray(value)) {
1441
+ return value.map((item) => convertToOperatorInput(item, inputProxy, schemaKeys));
1442
+ }
1443
+ if (typeof value === 'object' && value !== null && !(value instanceof Date)) {
1444
+ const out = {};
1445
+ for (const key of Object.keys(value)) {
1446
+ out[key] = convertToOperatorInput(value[key], inputProxy, schemaKeys);
1447
+ }
1448
+ return out;
1449
+ }
1450
+ if (typeof value === 'string') {
1451
+ return convertStringToConcatIfOperatorRefs(value);
1452
+ }
1453
+ return value;
1454
+ }
1455
+ /**
1456
+ * Recording context that captures step definitions during handler execution.
1457
+ * Uses operator strings ($Input{field}, $Sequence{main}{stepTag}{field}) per Ductape operator docs.
1458
+ */
1459
+ /** Build a step condition from a branch override so the step only runs when the overridden step's output matches (e.g. $Step{validate}{valid} == true). */
1460
+ function buildConditionFromOverride(stepTag, override) {
1461
+ if (override === null || override === undefined)
1462
+ return '';
1463
+ if (typeof override !== 'object' || Array.isArray(override)) {
1464
+ return `$Step{${stepTag}}{value} == ${JSON.stringify(override)}`;
1465
+ }
1466
+ const parts = [];
1467
+ for (const [key, val] of Object.entries(override)) {
1468
+ if (typeof val !== 'object' || val === null || Array.isArray(val)) {
1469
+ parts.push(`$Step{${stepTag}}{${key}} == ${JSON.stringify(val)}`);
1470
+ }
1471
+ }
1472
+ return parts.length === 0 ? '' : parts.join(' && ');
1473
+ }
1474
+ /** Build a step condition from a scenario (recordInput) so the step only runs when workflow input matches (e.g. $Input{type} == 'a'). */
1475
+ function buildConditionFromScenario(scenario) {
1476
+ const parts = [];
1477
+ for (const [key, val] of Object.entries(scenario)) {
1478
+ if (val !== undefined && (typeof val !== 'object' || val === null || Array.isArray(val))) {
1479
+ parts.push(`$Input{${key}} == ${JSON.stringify(val)}`);
1480
+ }
1481
+ }
1482
+ return parts.length === 0 ? '' : parts.join(' && ');
1483
+ }
1484
+ /** Create ctx.input that prefers recordInput values (for loops/switch) and falls back to $Input{field} for other keys. */
1485
+ function createHybridInputProxy(recordInput, inputProxy) {
1486
+ const base = recordInput !== null && recordInput !== void 0 ? recordInput : {};
1487
+ if (!inputProxy)
1488
+ return base;
1489
+ return new Proxy(base, {
1490
+ get(target, prop) {
1491
+ if (typeof prop !== 'string')
1492
+ return target[prop];
1493
+ if (prop in target && target[prop] !== undefined) {
1494
+ return target[prop];
1495
+ }
1496
+ return inputProxy[prop];
1497
+ },
1498
+ has(target, prop) {
1499
+ return prop in target || (inputProxy && prop in inputProxy);
1500
+ },
1501
+ });
1502
+ }
1503
+ class RecordingContext {
1504
+ constructor(_input, workflowTag, workflowInputSchema, stepResultOverrides, scenarioCondition, recordInput) {
1505
+ this._steps = [];
1506
+ this._stepOrder = 0;
1507
+ this._currentStepTag = null;
1508
+ /** Step being built for the current ctx.step() call; updated in place by _updateCurrentStep so we emit one step per ctx.step(). */
1509
+ this._pendingStep = null;
1510
+ this._pendingRollback = null;
1511
+ this._inputProxy = null;
1512
+ /** Step tags whose result was read during the current step (for inferring depends_on) */
1513
+ this._stepResultDependencies = new Set();
1514
+ /** When set, the next step we push gets this condition (from a prior step's branch override). */
1515
+ this._pendingConditionFromOverride = null;
1516
+ this._stepResultOverrides = {};
1517
+ /** When set (from recordScenarios), every step we push gets this condition so it only runs when input matches. */
1518
+ this._scenarioCondition = null;
1519
+ this._recordInput = null;
1520
+ this._hybridInput = null;
1521
+ this._workflowTag = workflowTag;
1522
+ this._inputSchemaKeys = workflowInputSchema ? Object.keys(workflowInputSchema) : [];
1523
+ this._stepResultOverrides = stepResultOverrides !== null && stepResultOverrides !== void 0 ? stepResultOverrides : {};
1524
+ this._scenarioCondition = scenarioCondition !== null && scenarioCondition !== void 0 ? scenarioCondition : null;
1525
+ this._recordInput = recordInput !== null && recordInput !== void 0 ? recordInput : null;
1526
+ if (this._inputSchemaKeys.length > 0) {
1527
+ this._inputProxy = createInputProxy(this._inputSchemaKeys);
1528
+ }
1529
+ this._hybridInput = createHybridInputProxy(this._recordInput, this._inputProxy);
1530
+ }
1531
+ // Readonly workflow metadata — prefer recordInput for control flow (loops, switch), fall back to $Input{field}
1532
+ get input() {
1533
+ var _a, _b;
1534
+ return ((_b = (_a = this._hybridInput) !== null && _a !== void 0 ? _a : this._inputProxy) !== null && _b !== void 0 ? _b : {});
1535
+ }
1536
+ get workflow_id() {
1537
+ return `compile-${this._workflowTag}`;
1538
+ }
1539
+ get workflow_tag() {
1540
+ return this._workflowTag;
1541
+ }
1542
+ get env() {
1543
+ return 'compile';
1544
+ }
1545
+ get product() {
1546
+ return 'compile';
1547
+ }
1548
+ get context() {
1549
+ return {};
1550
+ }
1551
+ get state() {
1552
+ return {};
1553
+ }
1554
+ get steps() {
1555
+ return {};
1556
+ }
1557
+ get completed_steps() {
1558
+ return [];
1559
+ }
1560
+ get current_step() {
1561
+ return this._currentStepTag;
1562
+ }
1563
+ /** At record time returns "$Now" so template literals like `at ${ctx.now()}` compile to $Concat(..., "$Now"). */
1564
+ get now() {
1565
+ return '$Now';
1566
+ }
1567
+ /**
1568
+ * Record a step definition
1569
+ */
1570
+ async step(tag, handler, rollback, options) {
1571
+ this._currentStepTag = tag;
1572
+ this._stepOrder++;
1573
+ this._stepResultDependencies = new Set();
1574
+ // Create step placeholder - will be updated in place by component calls (_updateCurrentStep)
1575
+ const step = {
1576
+ tag,
1577
+ name: tag,
1578
+ type: productsBuilder_types_1.WorkflowStepType.ACTION,
1579
+ event: '',
1580
+ input: {},
1581
+ options,
1582
+ };
1583
+ this._pendingStep = step;
1584
+ // Execute handler to capture component calls and step return value
1585
+ let stepReturn;
1586
+ try {
1587
+ stepReturn = await handler();
1588
+ }
1589
+ catch (e) {
1590
+ // Ignore errors during compilation - we're just tracing
1591
+ }
1592
+ this._pendingStep = null;
1593
+ // Parse and store step output in schema (operator strings for downstream $Step{tag}{field} references)
1594
+ const valueToCapture = stepReturn !== undefined && stepReturn !== null && typeof stepReturn === 'object' && !Array.isArray(stepReturn)
1595
+ ? stepReturn.output !== undefined && stepReturn.process_id !== undefined
1596
+ ? stepReturn.output
1597
+ : stepReturn
1598
+ : stepReturn;
1599
+ if (valueToCapture !== undefined && valueToCapture !== null && typeof valueToCapture === 'object' && !Array.isArray(valueToCapture)) {
1600
+ step.output = convertToOperatorInput(valueToCapture, this._inputProxy, this._inputSchemaKeys);
1601
+ }
1602
+ else if (valueToCapture !== undefined && valueToCapture !== null) {
1603
+ step.output = { value: convertToOperatorInput(valueToCapture, this._inputProxy, this._inputSchemaKeys) };
1604
+ }
1605
+ else {
1606
+ step.output = {};
1607
+ }
1608
+ // If rollback was provided, try to capture it
1609
+ if (rollback && this._pendingRollback) {
1610
+ step.rollback = this._pendingRollback;
1611
+ this._pendingRollback = null;
1612
+ }
1613
+ // Always add the step (even when no component was called — e.g. validate-order that only returns)
1614
+ if (!step.event) {
1615
+ step.event = step.tag;
1616
+ }
1617
+ if (this._stepResultDependencies.size > 0) {
1618
+ step.depends_on = Array.from(this._stepResultDependencies);
1619
+ }
1620
+ // Apply conditions: scenario (e.g. $Input{type} == 'a') and/or branch override (e.g. $Step{validate}{valid} == true)
1621
+ const condParts = [];
1622
+ if (this._scenarioCondition)
1623
+ condParts.push(`(${this._scenarioCondition})`);
1624
+ if (this._pendingConditionFromOverride) {
1625
+ condParts.push(`(${this._pendingConditionFromOverride})`);
1626
+ this._pendingConditionFromOverride = null;
1627
+ }
1628
+ if (condParts.length > 0)
1629
+ step.condition = condParts.join(' && ');
1630
+ const overrideForThisStep = this._stepResultOverrides[tag];
1631
+ if (overrideForThisStep !== undefined) {
1632
+ this._pendingConditionFromOverride = buildConditionFromOverride(tag, overrideForThisStep);
1633
+ }
1634
+ this._steps.push(step);
1635
+ this._currentStepTag = null;
1636
+ // When branchOverrides[tag] is set, return it so the handler continues past if (!result.x) return (records both branches)
1637
+ if (overrideForThisStep !== undefined) {
1638
+ return overrideForThisStep;
1639
+ }
1640
+ // Return step-result proxy so result.field compiles to $Sequence{main}{stepTag}{field}
1641
+ const recordUsage = (depTag) => this._stepResultDependencies.add(depTag);
1642
+ return createStepResultProxy(this._workflowTag, step.tag, '', recordUsage);
1643
+ }
1644
+ // ==================== COMPONENT CONTEXTS ====================
1645
+ get action() {
1646
+ return {
1647
+ run: async (options) => {
1648
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.ACTION, options.action, {
1649
+ app: options.app,
1650
+ input: options.input,
1651
+ options: { retries: options.retries, timeout: options.timeout },
1652
+ });
1653
+ return {};
1654
+ },
1655
+ };
1656
+ }
1657
+ get database() {
1658
+ return {
1659
+ execute: async (options) => {
1660
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.DATABASE_ACTION, options.event, {
1661
+ database: options.database,
1662
+ input: options.input,
1663
+ options: { retries: options.retries, timeout: options.timeout },
1664
+ });
1665
+ return {};
1666
+ },
1667
+ query: async (options) => {
1668
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.DATABASE_ACTION, options.event, {
1669
+ database: options.database,
1670
+ input: options.params || {},
1671
+ });
1672
+ return [];
1673
+ },
1674
+ insert: async (options) => {
1675
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.DATABASE_ACTION, options.event, {
1676
+ database: options.database,
1677
+ input: { table: options.table, data: options.data },
1678
+ });
1679
+ return {};
1680
+ },
1681
+ update: async (options) => {
1682
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.DATABASE_ACTION, options.event, {
1683
+ database: options.database,
1684
+ input: { table: options.table, data: options.data, where: options.where },
1685
+ });
1686
+ return {};
1687
+ },
1688
+ delete: async (options) => {
1689
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.DATABASE_ACTION, options.event, {
1690
+ database: options.database,
1691
+ input: { table: options.table, where: options.where },
1692
+ });
1693
+ return true;
1694
+ },
1695
+ };
1696
+ }
1697
+ get graph() {
1698
+ return {
1699
+ execute: async (options) => {
1700
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.GRAPH, options.action, {
1701
+ graph: options.graph,
1702
+ input: options.input,
1703
+ });
1704
+ return {};
1705
+ },
1706
+ createNode: async (options) => {
1707
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.GRAPH, 'createNode', {
1708
+ graph: options.graph,
1709
+ input: { labels: options.labels, properties: options.properties },
1710
+ });
1711
+ return {};
1712
+ },
1713
+ updateNode: async (options) => {
1714
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.GRAPH, 'updateNode', {
1715
+ graph: options.graph,
1716
+ input: { id: options.id, properties: options.properties },
1717
+ });
1718
+ return {};
1719
+ },
1720
+ deleteNode: async (options) => {
1721
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.GRAPH, 'deleteNode', {
1722
+ graph: options.graph,
1723
+ input: { id: options.id },
1724
+ });
1725
+ },
1726
+ createRelationship: async (options) => {
1727
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.GRAPH, 'createRelationship', {
1728
+ graph: options.graph,
1729
+ input: { from: options.from, to: options.to, type: options.type, properties: options.properties },
1730
+ });
1731
+ return {};
1732
+ },
1733
+ deleteRelationship: async (options) => {
1734
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.GRAPH, 'deleteRelationship', {
1735
+ graph: options.graph,
1736
+ input: { id: options.id },
1737
+ });
1738
+ },
1739
+ query: async (options) => {
1740
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.GRAPH, options.action, {
1741
+ graph: options.graph,
1742
+ input: options.params || {},
1743
+ });
1744
+ return [];
1745
+ },
1746
+ };
1747
+ }
1748
+ get notification() {
1749
+ return {
1750
+ send: async (options) => {
1751
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.NOTIFICATION, options.event, {
1752
+ notification: options.notification,
1753
+ input: options.input,
1754
+ options: { retries: options.retries },
1755
+ });
1756
+ },
1757
+ email: async (options) => {
1758
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.NOTIFICATION, options.event, {
1759
+ notification: options.notification,
1760
+ input: { recipients: options.recipients, subject: options.subject, template: options.template },
1761
+ });
1762
+ },
1763
+ push: async (options) => {
1764
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.NOTIFICATION, options.event, {
1765
+ notification: options.notification,
1766
+ input: { tokens: options.tokens, title: options.title, body: options.body, data: options.data },
1767
+ });
1768
+ },
1769
+ sms: async (options) => {
1770
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.NOTIFICATION, options.event, {
1771
+ notification: options.notification,
1772
+ input: { phones: options.phones, message: options.message },
1773
+ });
1774
+ },
1775
+ };
1776
+ }
1777
+ get storage() {
1778
+ return {
1779
+ upload: async (options) => {
1780
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.STORAGE, options.event, {
1781
+ storage: options.storage,
1782
+ input: options.input,
1783
+ options: { retries: options.retries },
1784
+ });
1785
+ return { file_key: '', url: '' };
1786
+ },
1787
+ download: async (options) => {
1788
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.STORAGE, options.event, {
1789
+ storage: options.storage,
1790
+ input: options.input,
1791
+ });
1792
+ return { content: '', content_type: '', size: 0 };
1793
+ },
1794
+ delete: async (options) => {
1795
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.STORAGE, options.event, {
1796
+ storage: options.storage,
1797
+ input: options.input,
1798
+ });
1799
+ },
1800
+ };
1801
+ }
1802
+ /** Ductape primitive: message broker produce. Records a produce step (event = "broker-tag:topic-tag"). */
1803
+ get messaging() {
1804
+ return {
1805
+ produce: async (options) => {
1806
+ const colon = options.event.indexOf(':');
1807
+ const broker = colon >= 0 ? options.event.slice(0, colon) : options.event;
1808
+ const topic = colon >= 0 ? options.event.slice(colon + 1) : options.event;
1809
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.PRODUCE, topic, {
1810
+ broker,
1811
+ input: { message: options.message },
1812
+ });
1813
+ },
1814
+ };
1815
+ }
1816
+ /** @deprecated Prefer ctx.messaging.produce() */
1817
+ get publish() {
1818
+ return {
1819
+ send: async (options) => {
1820
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.PRODUCE, options.event, {
1821
+ broker: options.broker,
1822
+ input: options.input,
1823
+ options: { retries: options.retries },
1824
+ });
1825
+ },
1826
+ };
1827
+ }
1828
+ get feature() {
1829
+ return {
1830
+ run: async (options) => {
1831
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.FEATURE, options.feature, {
1832
+ input: options.input,
1833
+ options: { retries: options.retries, timeout: options.timeout },
1834
+ });
1835
+ return {};
1836
+ },
1837
+ };
1838
+ }
1839
+ get quota() {
1840
+ return {
1841
+ execute: async (options) => {
1842
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.QUOTA, 'execute', {
1843
+ quota: options.quota,
1844
+ input: options.input,
1845
+ options: { timeout: options.timeout },
1846
+ });
1847
+ return {};
1848
+ },
1849
+ };
1850
+ }
1851
+ get fallback() {
1852
+ return {
1853
+ execute: async (options) => {
1854
+ this._updateCurrentStep(productsBuilder_types_1.WorkflowStepType.FALLBACK, 'execute', {
1855
+ fallback: options.fallback,
1856
+ input: options.input,
1857
+ options: { timeout: options.timeout },
1858
+ });
1859
+ return {};
1860
+ },
1861
+ };
1862
+ }
1863
+ get healthcheck() {
1864
+ return {
1865
+ getStatus: async (tag) => {
1866
+ return { status: 'available', lastChecked: new Date().toISOString(), lastLatency: 0 };
1867
+ },
1868
+ };
1869
+ }
1870
+ get transform() {
1871
+ return {
1872
+ size: (obj) => Object.keys(obj).length,
1873
+ length: (arr) => arr.length,
1874
+ parseJson: (str) => JSON.parse(str),
1875
+ stringify: (obj) => JSON.stringify(obj),
1876
+ upper: (str) => str.toUpperCase(),
1877
+ lower: (str) => str.toLowerCase(),
1878
+ trim: (str) => str.trim(),
1879
+ split: (str, separator) => str.split(separator),
1880
+ join: (arr, separator) => arr.join(separator),
1881
+ now: () => Date.now(),
1882
+ formatDate: (date, format) => new Date(date).toISOString(),
1883
+ };
1884
+ }
1885
+ // ==================== DATA REFERENCES ====================
1886
+ variable(app, key) {
1887
+ return `$Variable{${app}}{${key}}`;
1888
+ }
1889
+ constant(app, key) {
1890
+ return `$Constant{${app}}{${key}}`;
1891
+ }
1892
+ token(key) {
1893
+ return `$Secret{${key}}`;
1894
+ }
1895
+ get auth() {
1896
+ return {};
1897
+ }
1898
+ default(value, fallback) {
1899
+ return value !== null && value !== void 0 ? value : fallback;
1900
+ }
1901
+ // ==================== CONTROL FLOW ====================
1902
+ async sleep(duration) {
1903
+ const ms = typeof duration === 'string' ? this._parseDuration(duration) : duration;
1904
+ this._addControlStep(productsBuilder_types_1.WorkflowStepType.SLEEP, 'sleep', { duration: ms });
1905
+ }
1906
+ async waitForSignal(signal, options) {
1907
+ const signals = Array.isArray(signal) ? signal : [signal];
1908
+ const timeout = (options === null || options === void 0 ? void 0 : options.timeout)
1909
+ ? typeof options.timeout === 'string'
1910
+ ? this._parseDuration(options.timeout)
1911
+ : options.timeout
1912
+ : undefined;
1913
+ this._addControlStep(productsBuilder_types_1.WorkflowStepType.WAIT_FOR_SIGNAL, signals[0], {
1914
+ signals,
1915
+ options: timeout ? { timeout } : undefined,
1916
+ });
1917
+ return {};
1918
+ }
1919
+ async checkpoint(name, metadata) {
1920
+ this._addControlStep(productsBuilder_types_1.WorkflowStepType.CHECKPOINT, name, { metadata });
1921
+ }
1922
+ // ==================== STATE MANAGEMENT ====================
1923
+ setState(key, value) {
1924
+ // No-op during compilation
1925
+ }
1926
+ getState(key) {
1927
+ return undefined;
1928
+ }
1929
+ // ==================== LOGGING ====================
1930
+ get log() {
1931
+ return {
1932
+ debug: (message, data) => { },
1933
+ info: (message, data) => { },
1934
+ warn: (message, data) => { },
1935
+ error: (message, data) => { },
1936
+ };
1937
+ }
1938
+ // ==================== CHILD WORKFLOWS ====================
1939
+ async workflow(childId, tag, input, options) {
1940
+ this._addControlStep(productsBuilder_types_1.WorkflowStepType.CHILD_WORKFLOW, 'execute', {
1941
+ workflow: tag,
1942
+ input,
1943
+ options: options
1944
+ ? {
1945
+ timeout: options.timeout
1946
+ ? typeof options.timeout === 'string'
1947
+ ? this._parseDuration(options.timeout)
1948
+ : options.timeout
1949
+ : undefined,
1950
+ retries: options.retries,
1951
+ }
1952
+ : undefined,
1953
+ });
1954
+ return {};
1955
+ }
1956
+ // ==================== ROLLBACK ====================
1957
+ async triggerRollback(reason) {
1958
+ return { success: true, rolled_back_steps: [], reason };
1959
+ }
1960
+ // ==================== INTERNAL HELPERS ====================
1961
+ _updateCurrentStep(type, event, data) {
1962
+ if (!this._currentStepTag)
1963
+ return;
1964
+ // Update the step we're currently building (one step per ctx.step()), so we don't duplicate
1965
+ const step = this._pendingStep && this._pendingStep.tag === this._currentStepTag
1966
+ ? this._pendingStep
1967
+ : this._steps.find((s) => s.tag === this._currentStepTag);
1968
+ if (!step) {
1969
+ const newStep = {
1970
+ tag: this._currentStepTag,
1971
+ type,
1972
+ event,
1973
+ input: data.input || {},
1974
+ };
1975
+ this._steps.push(newStep);
1976
+ this._updateStepProperties(newStep, type, event, data);
1977
+ return;
1978
+ }
1979
+ this._updateStepProperties(step, type, event, data);
1980
+ }
1981
+ _updateStepProperties(step, type, event, data) {
1982
+ // Update step properties
1983
+ step.type = type;
1984
+ step.event = event;
1985
+ if (data.app)
1986
+ step.app = data.app;
1987
+ if (data.database)
1988
+ step.database = data.database;
1989
+ if (data.graph)
1990
+ step.graph = data.graph;
1991
+ if (data.storage)
1992
+ step.storage = data.storage;
1993
+ if (data.notification)
1994
+ step.notification = data.notification;
1995
+ if (data.broker)
1996
+ step.broker = data.broker;
1997
+ if (data.quota)
1998
+ step.quota = data.quota;
1999
+ if (data.fallback)
2000
+ step.fallback = data.fallback;
2001
+ if (data.workflow)
2002
+ step.workflow = data.workflow;
2003
+ if (data.input) {
2004
+ step.input = convertToOperatorInput(data.input, this._inputProxy, this._inputSchemaKeys);
2005
+ }
2006
+ if (data.options)
2007
+ step.options = Object.assign(Object.assign({}, step.options), data.options);
2008
+ }
2009
+ _addControlStep(type, event, data) {
2010
+ const tag = `${type}-${this._stepOrder++}`;
2011
+ const input = convertToOperatorInput(data, this._inputProxy, this._inputSchemaKeys);
2012
+ this._steps.push({
2013
+ tag,
2014
+ type,
2015
+ event,
2016
+ input,
2017
+ });
2018
+ }
2019
+ _parseDuration(duration) {
2020
+ const match = duration.match(/^(\d+)(ms|s|m|h|d)$/);
2021
+ if (!match)
2022
+ return parseInt(duration, 10) || 0;
2023
+ const value = parseInt(match[1], 10);
2024
+ const unit = match[2];
2025
+ switch (unit) {
2026
+ case 'ms':
2027
+ return value;
2028
+ case 's':
2029
+ return value * 1000;
2030
+ case 'm':
2031
+ return value * 60 * 1000;
2032
+ case 'h':
2033
+ return value * 60 * 60 * 1000;
2034
+ case 'd':
2035
+ return value * 24 * 60 * 60 * 1000;
2036
+ default:
2037
+ return value;
2038
+ }
2039
+ }
2040
+ /** Convert a value (e.g. handler return) to operator form for workflow output schema */
2041
+ captureOutput(value) {
2042
+ if (value === undefined || value === null)
2043
+ return {};
2044
+ const converted = convertToOperatorInput(value, this._inputProxy, this._inputSchemaKeys);
2045
+ if (typeof converted === 'object' && converted !== null && !Array.isArray(converted)) {
2046
+ return converted;
2047
+ }
2048
+ return { value: converted };
2049
+ }
2050
+ /** Get collected steps */
2051
+ getSteps() {
2052
+ return this._steps;
2053
+ }
2054
+ }
2055
+ /**
2056
+ * Compiles code-first workflow definitions to JSON schema
2057
+ * Uses runtime handler tracing to capture step definitions
2058
+ */
2059
+ class WorkflowCompiler {
2060
+ constructor(options) {
2061
+ this.options = options;
2062
+ }
2063
+ /**
2064
+ * Compile the workflow definition to JSON schema
2065
+ * Executes the handler with a recording context to capture step definitions
2066
+ */
2067
+ compile() {
2068
+ var _a, _b, _c, _d;
2069
+ const mockInput = ((_a = this.options.recordInput) !== null && _a !== void 0 ? _a : {});
2070
+ const recordingCtx = new RecordingContext(mockInput, this.options.tag, this.options.input, this.options.branchOverrides, undefined, ((_b = this.options.recordInput) !== null && _b !== void 0 ? _b : {}));
2071
+ // Execute handler to trace step definitions
2072
+ try {
2073
+ // Run the handler synchronously to capture all step calls
2074
+ // Note: This won't await async operations, but will capture the step structure
2075
+ const handlerPromise = this.options.handler(recordingCtx);
2076
+ // For synchronous tracing, we don't need to await
2077
+ // The recording context captures calls as they're made
2078
+ if (handlerPromise && typeof handlerPromise.then === 'function') {
2079
+ // Handler is async - we capture what we can synchronously
2080
+ // For full async tracing, use compileAsync()
2081
+ }
2082
+ }
2083
+ catch (e) {
2084
+ // Ignore errors during compilation - we're tracing structure, not executing
2085
+ }
2086
+ return {
2087
+ name: this.options.name,
2088
+ tag: this.options.tag,
2089
+ description: this.options.description,
2090
+ input: (_c = this.options.input) !== null && _c !== void 0 ? _c : {},
2091
+ output: (_d = this.options.output) !== null && _d !== void 0 ? _d : {},
2092
+ steps: recordingCtx.getSteps(),
2093
+ signals: this.options.signals
2094
+ ? Object.fromEntries(Object.entries(this.options.signals).map(([name, config]) => [name, { name, input: config.input }]))
2095
+ : undefined,
2096
+ queries: this.options.queries
2097
+ ? Object.fromEntries(Object.entries(this.options.queries).map(([name, config]) => {
2098
+ var _a;
2099
+ return [
2100
+ name,
2101
+ { name, handler: (_a = config.handler) === null || _a === void 0 ? void 0 : _a.toString() },
2102
+ ];
2103
+ }))
2104
+ : undefined,
2105
+ options: this.options.options,
2106
+ envs: this.options.envs,
2107
+ };
2108
+ }
2109
+ /**
2110
+ * Compile the workflow definition asynchronously
2111
+ * Fully awaits the handler to capture all step definitions.
2112
+ * With recordScenarios, runs the handler once per scenario and merges steps (for switch-style branches).
2113
+ * With recordInput, uses that as ctx.input so loops and control flow see real values.
2114
+ */
2115
+ async compileAsync() {
2116
+ var _a, _b, _c, _d;
2117
+ const scenarios = this.options.recordScenarios && this.options.recordScenarios.length > 0
2118
+ ? this.options.recordScenarios
2119
+ : [(_a = this.options.recordInput) !== null && _a !== void 0 ? _a : {}];
2120
+ const stepsByTag = new Map();
2121
+ const stepOrder = [];
2122
+ let handlerOutput = undefined;
2123
+ let lastCtx = null;
2124
+ for (const scenario of scenarios) {
2125
+ const scenarioObj = typeof scenario === 'object' && scenario !== null ? scenario : {};
2126
+ const scenarioCondition = this.options.recordScenarios && Object.keys(scenarioObj).length > 0
2127
+ ? buildConditionFromScenario(scenarioObj)
2128
+ : null;
2129
+ const recordInput = Object.keys(scenarioObj).length > 0
2130
+ ? scenarioObj
2131
+ : ((_b = this.options.recordInput) !== null && _b !== void 0 ? _b : {});
2132
+ const recordingCtx = new RecordingContext((recordInput !== null && recordInput !== void 0 ? recordInput : {}), this.options.tag, this.options.input, this.options.branchOverrides, scenarioCondition, recordInput);
2133
+ lastCtx = recordingCtx;
2134
+ try {
2135
+ const out = await this.options.handler(recordingCtx);
2136
+ if (out !== undefined && out !== null)
2137
+ handlerOutput = out;
2138
+ }
2139
+ catch (_) { }
2140
+ for (const s of recordingCtx.getSteps()) {
2141
+ const existing = stepsByTag.get(s.tag);
2142
+ if (existing) {
2143
+ const c1 = existing.condition;
2144
+ const c2 = s.condition;
2145
+ if (c1 && c2)
2146
+ existing.condition = `(${c1}) || (${c2})`;
2147
+ else if (c2)
2148
+ existing.condition = c2;
2149
+ }
2150
+ else {
2151
+ stepsByTag.set(s.tag, Object.assign({}, s));
2152
+ stepOrder.push(s.tag);
2153
+ }
2154
+ }
2155
+ }
2156
+ const finalSteps = stepOrder.map((tag) => stepsByTag.get(tag)).filter(Boolean);
2157
+ const output = handlerOutput !== undefined && handlerOutput !== null && lastCtx
2158
+ ? lastCtx.captureOutput(handlerOutput)
2159
+ : ((_c = this.options.output) !== null && _c !== void 0 ? _c : {});
2160
+ return {
2161
+ name: this.options.name,
2162
+ tag: this.options.tag,
2163
+ description: this.options.description,
2164
+ input: (_d = this.options.input) !== null && _d !== void 0 ? _d : {},
2165
+ output: output,
2166
+ steps: finalSteps,
2167
+ signals: this.options.signals
2168
+ ? Object.fromEntries(Object.entries(this.options.signals).map(([name, config]) => [name, { name, input: config.input }]))
2169
+ : undefined,
2170
+ queries: this.options.queries
2171
+ ? Object.fromEntries(Object.entries(this.options.queries).map(([name, config]) => {
2172
+ var _a;
2173
+ return [
2174
+ name,
2175
+ { name, handler: (_a = config.handler) === null || _a === void 0 ? void 0 : _a.toString() },
2176
+ ];
2177
+ }))
2178
+ : undefined,
2179
+ options: this.options.options,
2180
+ envs: this.options.envs,
2181
+ };
2182
+ }
2183
+ }
2184
+ // Export singleton instance for convenience
2185
+ exports.workflowService = new WorkflowService();
2186
+ // Default export
2187
+ exports.default = WorkflowService;
2188
+ //# sourceMappingURL=workflows.service.js.map