ts-workflow-engine-lite 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +352 -0
  3. package/dist/src/api/ConsoleWebSocketManager.d.ts +57 -0
  4. package/dist/src/api/ConsoleWebSocketManager.js +206 -0
  5. package/dist/src/api/ConsoleWebSocketManager.js.map +1 -0
  6. package/dist/src/api/ErrorHandler.d.ts +52 -0
  7. package/dist/src/api/ErrorHandler.js +115 -0
  8. package/dist/src/api/ErrorHandler.js.map +1 -0
  9. package/dist/src/api/EventHistory.d.ts +73 -0
  10. package/dist/src/api/EventHistory.js +309 -0
  11. package/dist/src/api/EventHistory.js.map +1 -0
  12. package/dist/src/api/WebhookManager.d.ts +67 -0
  13. package/dist/src/api/WebhookManager.js +568 -0
  14. package/dist/src/api/WebhookManager.js.map +1 -0
  15. package/dist/src/api/docsPage.d.ts +1 -0
  16. package/dist/src/api/docsPage.js +321 -0
  17. package/dist/src/api/docsPage.js.map +1 -0
  18. package/dist/src/api/index.d.ts +8 -0
  19. package/dist/src/api/index.js +8 -0
  20. package/dist/src/api/index.js.map +1 -0
  21. package/dist/src/api/middleware/auth.d.ts +19 -0
  22. package/dist/src/api/middleware/auth.js +122 -0
  23. package/dist/src/api/middleware/auth.js.map +1 -0
  24. package/dist/src/api/middleware/index.d.ts +3 -0
  25. package/dist/src/api/middleware/index.js +3 -0
  26. package/dist/src/api/middleware/index.js.map +1 -0
  27. package/dist/src/api/middleware/rateLimit.d.ts +6 -0
  28. package/dist/src/api/middleware/rateLimit.js +69 -0
  29. package/dist/src/api/middleware/rateLimit.js.map +1 -0
  30. package/dist/src/api/middleware/rateLimitStore.d.ts +14 -0
  31. package/dist/src/api/middleware/rateLimitStore.js +44 -0
  32. package/dist/src/api/middleware/rateLimitStore.js.map +1 -0
  33. package/dist/src/api/middleware/rbac.d.ts +12 -0
  34. package/dist/src/api/middleware/rbac.js +120 -0
  35. package/dist/src/api/middleware/rbac.js.map +1 -0
  36. package/dist/src/api/openapi.d.ts +1917 -0
  37. package/dist/src/api/openapi.js +1758 -0
  38. package/dist/src/api/openapi.js.map +1 -0
  39. package/dist/src/api/playgroundPage.d.ts +1 -0
  40. package/dist/src/api/playgroundPage.js +765 -0
  41. package/dist/src/api/playgroundPage.js.map +1 -0
  42. package/dist/src/api/response.d.ts +22 -0
  43. package/dist/src/api/response.js +119 -0
  44. package/dist/src/api/response.js.map +1 -0
  45. package/dist/src/api/router.d.ts +17 -0
  46. package/dist/src/api/router.js +94 -0
  47. package/dist/src/api/router.js.map +1 -0
  48. package/dist/src/api/routes/analytics.d.ts +10 -0
  49. package/dist/src/api/routes/analytics.js +144 -0
  50. package/dist/src/api/routes/analytics.js.map +1 -0
  51. package/dist/src/api/routes/dlq.d.ts +3 -0
  52. package/dist/src/api/routes/dlq.js +248 -0
  53. package/dist/src/api/routes/dlq.js.map +1 -0
  54. package/dist/src/api/routes/eventHistory.d.ts +3 -0
  55. package/dist/src/api/routes/eventHistory.js +48 -0
  56. package/dist/src/api/routes/eventHistory.js.map +1 -0
  57. package/dist/src/api/routes/events.d.ts +3 -0
  58. package/dist/src/api/routes/events.js +205 -0
  59. package/dist/src/api/routes/events.js.map +1 -0
  60. package/dist/src/api/routes/functions.d.ts +3 -0
  61. package/dist/src/api/routes/functions.js +85 -0
  62. package/dist/src/api/routes/functions.js.map +1 -0
  63. package/dist/src/api/routes/instances.d.ts +3 -0
  64. package/dist/src/api/routes/instances.js +790 -0
  65. package/dist/src/api/routes/instances.js.map +1 -0
  66. package/dist/src/api/routes/templates.d.ts +3 -0
  67. package/dist/src/api/routes/templates.js +195 -0
  68. package/dist/src/api/routes/templates.js.map +1 -0
  69. package/dist/src/api/routes/webhooks.d.ts +3 -0
  70. package/dist/src/api/routes/webhooks.js +263 -0
  71. package/dist/src/api/routes/webhooks.js.map +1 -0
  72. package/dist/src/api/routes/workflows/analysis.d.ts +2 -0
  73. package/dist/src/api/routes/workflows/analysis.js +112 -0
  74. package/dist/src/api/routes/workflows/analysis.js.map +1 -0
  75. package/dist/src/api/routes/workflows/crud.d.ts +2 -0
  76. package/dist/src/api/routes/workflows/crud.js +140 -0
  77. package/dist/src/api/routes/workflows/crud.js.map +1 -0
  78. package/dist/src/api/routes/workflows/execution.d.ts +2 -0
  79. package/dist/src/api/routes/workflows/execution.js +204 -0
  80. package/dist/src/api/routes/workflows/execution.js.map +1 -0
  81. package/dist/src/api/routes/workflows/graph.d.ts +2 -0
  82. package/dist/src/api/routes/workflows/graph.js +51 -0
  83. package/dist/src/api/routes/workflows/graph.js.map +1 -0
  84. package/dist/src/api/routes/workflows/import.d.ts +2 -0
  85. package/dist/src/api/routes/workflows/import.js +238 -0
  86. package/dist/src/api/routes/workflows/import.js.map +1 -0
  87. package/dist/src/api/routes/workflows/index.d.ts +3 -0
  88. package/dist/src/api/routes/workflows/index.js +18 -0
  89. package/dist/src/api/routes/workflows/index.js.map +1 -0
  90. package/dist/src/api/routes/workflows/shared.d.ts +64 -0
  91. package/dist/src/api/routes/workflows/shared.js +304 -0
  92. package/dist/src/api/routes/workflows/shared.js.map +1 -0
  93. package/dist/src/api/routes/workflows/variables.d.ts +2 -0
  94. package/dist/src/api/routes/workflows/variables.js +34 -0
  95. package/dist/src/api/routes/workflows/variables.js.map +1 -0
  96. package/dist/src/api/routes/workflows/versioning.d.ts +2 -0
  97. package/dist/src/api/routes/workflows/versioning.js +235 -0
  98. package/dist/src/api/routes/workflows/versioning.js.map +1 -0
  99. package/dist/src/api/server.d.ts +13 -0
  100. package/dist/src/api/server.js +311 -0
  101. package/dist/src/api/server.js.map +1 -0
  102. package/dist/src/api/services/InstanceApplicationService.d.ts +74 -0
  103. package/dist/src/api/services/InstanceApplicationService.js +215 -0
  104. package/dist/src/api/services/InstanceApplicationService.js.map +1 -0
  105. package/dist/src/api/services/WorkflowApplicationService.d.ts +92 -0
  106. package/dist/src/api/services/WorkflowApplicationService.js +282 -0
  107. package/dist/src/api/services/WorkflowApplicationService.js.map +1 -0
  108. package/dist/src/api/services/index.d.ts +4 -0
  109. package/dist/src/api/services/index.js +3 -0
  110. package/dist/src/api/services/index.js.map +1 -0
  111. package/dist/src/api/types.d.ts +118 -0
  112. package/dist/src/api/types.js +2 -0
  113. package/dist/src/api/types.js.map +1 -0
  114. package/dist/src/api/utils/IdempotencyStore.d.ts +36 -0
  115. package/dist/src/api/utils/IdempotencyStore.js +121 -0
  116. package/dist/src/api/utils/IdempotencyStore.js.map +1 -0
  117. package/dist/src/api/utils/authConfig.d.ts +2 -0
  118. package/dist/src/api/utils/authConfig.js +25 -0
  119. package/dist/src/api/utils/authConfig.js.map +1 -0
  120. package/dist/src/api/utils/requestContext.d.ts +14 -0
  121. package/dist/src/api/utils/requestContext.js +31 -0
  122. package/dist/src/api/utils/requestContext.js.map +1 -0
  123. package/dist/src/api/utils/routeHelper.d.ts +25 -0
  124. package/dist/src/api/utils/routeHelper.js +30 -0
  125. package/dist/src/api/utils/routeHelper.js.map +1 -0
  126. package/dist/src/api/welcomePage.d.ts +1 -0
  127. package/dist/src/api/welcomePage.js +259 -0
  128. package/dist/src/api/welcomePage.js.map +1 -0
  129. package/dist/src/bootstrap.d.ts +20 -0
  130. package/dist/src/bootstrap.js +128 -0
  131. package/dist/src/bootstrap.js.map +1 -0
  132. package/dist/src/cli.d.ts +2 -0
  133. package/dist/src/cli.js +32 -0
  134. package/dist/src/cli.js.map +1 -0
  135. package/dist/src/config/AppConfig.d.ts +102 -0
  136. package/dist/src/config/AppConfig.js +452 -0
  137. package/dist/src/config/AppConfig.js.map +1 -0
  138. package/dist/src/config/redis.config.d.ts +6 -0
  139. package/dist/src/config/redis.config.js +9 -0
  140. package/dist/src/config/redis.config.js.map +1 -0
  141. package/dist/src/container.d.ts +29 -0
  142. package/dist/src/container.js +62 -0
  143. package/dist/src/container.js.map +1 -0
  144. package/dist/src/debug/BreakpointManager.d.ts +17 -0
  145. package/dist/src/debug/BreakpointManager.js +59 -0
  146. package/dist/src/debug/BreakpointManager.js.map +1 -0
  147. package/dist/src/debug/WorkflowDebugger.d.ts +34 -0
  148. package/dist/src/debug/WorkflowDebugger.js +117 -0
  149. package/dist/src/debug/WorkflowDebugger.js.map +1 -0
  150. package/dist/src/debug/index.d.ts +2 -0
  151. package/dist/src/debug/index.js +3 -0
  152. package/dist/src/debug/index.js.map +1 -0
  153. package/dist/src/demo/demoWorkflow.d.ts +3 -0
  154. package/dist/src/demo/demoWorkflow.js +82 -0
  155. package/dist/src/demo/demoWorkflow.js.map +1 -0
  156. package/dist/src/demo/exampleWorkflow.d.ts +36 -0
  157. package/dist/src/demo/exampleWorkflow.js +184 -0
  158. package/dist/src/demo/exampleWorkflow.js.map +1 -0
  159. package/dist/src/demo/index.d.ts +2 -0
  160. package/dist/src/demo/index.js +3 -0
  161. package/dist/src/demo/index.js.map +1 -0
  162. package/dist/src/dlq/DeadLetterQueue.d.ts +62 -0
  163. package/dist/src/dlq/DeadLetterQueue.js +342 -0
  164. package/dist/src/dlq/DeadLetterQueue.js.map +1 -0
  165. package/dist/src/dlq/index.d.ts +2 -0
  166. package/dist/src/dlq/index.js +2 -0
  167. package/dist/src/dlq/index.js.map +1 -0
  168. package/dist/src/dsl/DSLParser.d.ts +7 -0
  169. package/dist/src/dsl/DSLParser.js +252 -0
  170. package/dist/src/dsl/DSLParser.js.map +1 -0
  171. package/dist/src/dsl/WorkflowDSL.d.ts +40 -0
  172. package/dist/src/dsl/WorkflowDSL.js +2 -0
  173. package/dist/src/dsl/WorkflowDSL.js.map +1 -0
  174. package/dist/src/engine/CanaryReleaseManager.d.ts +39 -0
  175. package/dist/src/engine/CanaryReleaseManager.js +192 -0
  176. package/dist/src/engine/CanaryReleaseManager.js.map +1 -0
  177. package/dist/src/engine/ConcurrencyControl.d.ts +38 -0
  178. package/dist/src/engine/ConcurrencyControl.js +181 -0
  179. package/dist/src/engine/ConcurrencyControl.js.map +1 -0
  180. package/dist/src/engine/ContinueAsNewManager.d.ts +18 -0
  181. package/dist/src/engine/ContinueAsNewManager.js +29 -0
  182. package/dist/src/engine/ContinueAsNewManager.js.map +1 -0
  183. package/dist/src/engine/DataValidator.d.ts +15 -0
  184. package/dist/src/engine/DataValidator.js +121 -0
  185. package/dist/src/engine/DataValidator.js.map +1 -0
  186. package/dist/src/engine/DryRunExecutor.d.ts +48 -0
  187. package/dist/src/engine/DryRunExecutor.js +256 -0
  188. package/dist/src/engine/DryRunExecutor.js.map +1 -0
  189. package/dist/src/engine/ExecutionOrchestrator.d.ts +19 -0
  190. package/dist/src/engine/ExecutionOrchestrator.js +579 -0
  191. package/dist/src/engine/ExecutionOrchestrator.js.map +1 -0
  192. package/dist/src/engine/ExpressionEvaluator.d.ts +44 -0
  193. package/dist/src/engine/ExpressionEvaluator.js +1046 -0
  194. package/dist/src/engine/ExpressionEvaluator.js.map +1 -0
  195. package/dist/src/engine/HeartbeatManager.d.ts +42 -0
  196. package/dist/src/engine/HeartbeatManager.js +209 -0
  197. package/dist/src/engine/HeartbeatManager.js.map +1 -0
  198. package/dist/src/engine/InstanceManager.d.ts +21 -0
  199. package/dist/src/engine/InstanceManager.js +165 -0
  200. package/dist/src/engine/InstanceManager.js.map +1 -0
  201. package/dist/src/engine/InstanceSearch.d.ts +30 -0
  202. package/dist/src/engine/InstanceSearch.js +119 -0
  203. package/dist/src/engine/InstanceSearch.js.map +1 -0
  204. package/dist/src/engine/LifecycleManager.d.ts +18 -0
  205. package/dist/src/engine/LifecycleManager.js +82 -0
  206. package/dist/src/engine/LifecycleManager.js.map +1 -0
  207. package/dist/src/engine/ParallelExecutor.d.ts +26 -0
  208. package/dist/src/engine/ParallelExecutor.js +138 -0
  209. package/dist/src/engine/ParallelExecutor.js.map +1 -0
  210. package/dist/src/engine/SandboxEvaluator.d.ts +18 -0
  211. package/dist/src/engine/SandboxEvaluator.js +200 -0
  212. package/dist/src/engine/SandboxEvaluator.js.map +1 -0
  213. package/dist/src/engine/SchemaValidator.d.ts +30 -0
  214. package/dist/src/engine/SchemaValidator.js +630 -0
  215. package/dist/src/engine/SchemaValidator.js.map +1 -0
  216. package/dist/src/engine/SearchAttributeManager.d.ts +48 -0
  217. package/dist/src/engine/SearchAttributeManager.js +119 -0
  218. package/dist/src/engine/SearchAttributeManager.js.map +1 -0
  219. package/dist/src/engine/StateMachine.d.ts +13 -0
  220. package/dist/src/engine/StateMachine.js +66 -0
  221. package/dist/src/engine/StateMachine.js.map +1 -0
  222. package/dist/src/engine/StickyExecutionManager.d.ts +34 -0
  223. package/dist/src/engine/StickyExecutionManager.js +163 -0
  224. package/dist/src/engine/StickyExecutionManager.js.map +1 -0
  225. package/dist/src/engine/SubworkflowExecutor.d.ts +17 -0
  226. package/dist/src/engine/SubworkflowExecutor.js +157 -0
  227. package/dist/src/engine/SubworkflowExecutor.js.map +1 -0
  228. package/dist/src/engine/TaskExecutor.d.ts +12 -0
  229. package/dist/src/engine/TaskExecutor.js +124 -0
  230. package/dist/src/engine/TaskExecutor.js.map +1 -0
  231. package/dist/src/engine/TaskQueueManager.d.ts +42 -0
  232. package/dist/src/engine/TaskQueueManager.js +175 -0
  233. package/dist/src/engine/TaskQueueManager.js.map +1 -0
  234. package/dist/src/engine/WorkflowEngine.d.ts +117 -0
  235. package/dist/src/engine/WorkflowEngine.js +443 -0
  236. package/dist/src/engine/WorkflowEngine.js.map +1 -0
  237. package/dist/src/engine/WorkflowInstanceControl.d.ts +21 -0
  238. package/dist/src/engine/WorkflowInstanceControl.js +306 -0
  239. package/dist/src/engine/WorkflowInstanceControl.js.map +1 -0
  240. package/dist/src/engine/WorkflowPersistenceCoordinator.d.ts +12 -0
  241. package/dist/src/engine/WorkflowPersistenceCoordinator.js +93 -0
  242. package/dist/src/engine/WorkflowPersistenceCoordinator.js.map +1 -0
  243. package/dist/src/engine/WorkflowRegistry.d.ts +38 -0
  244. package/dist/src/engine/WorkflowRegistry.js +130 -0
  245. package/dist/src/engine/WorkflowRegistry.js.map +1 -0
  246. package/dist/src/engine/WorkflowVersionManager.d.ts +24 -0
  247. package/dist/src/engine/WorkflowVersionManager.js +121 -0
  248. package/dist/src/engine/WorkflowVersionManager.js.map +1 -0
  249. package/dist/src/engine/createEngine.d.ts +8 -0
  250. package/dist/src/engine/createEngine.js +21 -0
  251. package/dist/src/engine/createEngine.js.map +1 -0
  252. package/dist/src/engine/errors.d.ts +18 -0
  253. package/dist/src/engine/errors.js +37 -0
  254. package/dist/src/engine/errors.js.map +1 -0
  255. package/dist/src/engine/executors/ApprovalNodeExecutor.d.ts +12 -0
  256. package/dist/src/engine/executors/ApprovalNodeExecutor.js +68 -0
  257. package/dist/src/engine/executors/ApprovalNodeExecutor.js.map +1 -0
  258. package/dist/src/engine/executors/ConditionNodeExecutor.d.ts +16 -0
  259. package/dist/src/engine/executors/ConditionNodeExecutor.js +63 -0
  260. package/dist/src/engine/executors/ConditionNodeExecutor.js.map +1 -0
  261. package/dist/src/engine/executors/HttpNodeExecutor.d.ts +27 -0
  262. package/dist/src/engine/executors/HttpNodeExecutor.js +179 -0
  263. package/dist/src/engine/executors/HttpNodeExecutor.js.map +1 -0
  264. package/dist/src/engine/executors/JoinNodeExecutor.d.ts +13 -0
  265. package/dist/src/engine/executors/JoinNodeExecutor.js +37 -0
  266. package/dist/src/engine/executors/JoinNodeExecutor.js.map +1 -0
  267. package/dist/src/engine/executors/LoopNodeExecutor.d.ts +20 -0
  268. package/dist/src/engine/executors/LoopNodeExecutor.js +165 -0
  269. package/dist/src/engine/executors/LoopNodeExecutor.js.map +1 -0
  270. package/dist/src/engine/executors/NotificationNodeExecutor.d.ts +8 -0
  271. package/dist/src/engine/executors/NotificationNodeExecutor.js +33 -0
  272. package/dist/src/engine/executors/NotificationNodeExecutor.js.map +1 -0
  273. package/dist/src/engine/executors/QueueNodeExecutor.d.ts +23 -0
  274. package/dist/src/engine/executors/QueueNodeExecutor.js +87 -0
  275. package/dist/src/engine/executors/QueueNodeExecutor.js.map +1 -0
  276. package/dist/src/engine/executors/RouterNodeExecutor.d.ts +20 -0
  277. package/dist/src/engine/executors/RouterNodeExecutor.js +82 -0
  278. package/dist/src/engine/executors/RouterNodeExecutor.js.map +1 -0
  279. package/dist/src/engine/executors/SqlNodeExecutor.d.ts +27 -0
  280. package/dist/src/engine/executors/SqlNodeExecutor.js +74 -0
  281. package/dist/src/engine/executors/SqlNodeExecutor.js.map +1 -0
  282. package/dist/src/engine/executors/TransformNodeExecutor.d.ts +9 -0
  283. package/dist/src/engine/executors/TransformNodeExecutor.js +44 -0
  284. package/dist/src/engine/executors/TransformNodeExecutor.js.map +1 -0
  285. package/dist/src/engine/functions/collectionFunctions.d.ts +2 -0
  286. package/dist/src/engine/functions/collectionFunctions.js +129 -0
  287. package/dist/src/engine/functions/collectionFunctions.js.map +1 -0
  288. package/dist/src/engine/functions/customFunctions.d.ts +11 -0
  289. package/dist/src/engine/functions/customFunctions.js +42 -0
  290. package/dist/src/engine/functions/customFunctions.js.map +1 -0
  291. package/dist/src/engine/functions/dateFunctions.d.ts +2 -0
  292. package/dist/src/engine/functions/dateFunctions.js +71 -0
  293. package/dist/src/engine/functions/dateFunctions.js.map +1 -0
  294. package/dist/src/engine/functions/index.d.ts +14 -0
  295. package/dist/src/engine/functions/index.js +35 -0
  296. package/dist/src/engine/functions/index.js.map +1 -0
  297. package/dist/src/engine/functions/stringFunctions.d.ts +2 -0
  298. package/dist/src/engine/functions/stringFunctions.js +66 -0
  299. package/dist/src/engine/functions/stringFunctions.js.map +1 -0
  300. package/dist/src/engine/functions/typeFunctions.d.ts +2 -0
  301. package/dist/src/engine/functions/typeFunctions.js +70 -0
  302. package/dist/src/engine/functions/typeFunctions.js.map +1 -0
  303. package/dist/src/engine/functions/types.d.ts +6 -0
  304. package/dist/src/engine/functions/types.js +2 -0
  305. package/dist/src/engine/functions/types.js.map +1 -0
  306. package/dist/src/engine/index.d.ts +21 -0
  307. package/dist/src/engine/index.js +18 -0
  308. package/dist/src/engine/index.js.map +1 -0
  309. package/dist/src/engine/nodeDispatch/controlNodes.d.ts +2 -0
  310. package/dist/src/engine/nodeDispatch/controlNodes.js +208 -0
  311. package/dist/src/engine/nodeDispatch/controlNodes.js.map +1 -0
  312. package/dist/src/engine/nodeDispatch/helpers.d.ts +27 -0
  313. package/dist/src/engine/nodeDispatch/helpers.js +185 -0
  314. package/dist/src/engine/nodeDispatch/helpers.js.map +1 -0
  315. package/dist/src/engine/nodeDispatch/ioNodes.d.ts +2 -0
  316. package/dist/src/engine/nodeDispatch/ioNodes.js +89 -0
  317. package/dist/src/engine/nodeDispatch/ioNodes.js.map +1 -0
  318. package/dist/src/engine/nodeDispatch/types.d.ts +13 -0
  319. package/dist/src/engine/nodeDispatch/types.js +2 -0
  320. package/dist/src/engine/nodeDispatch/types.js.map +1 -0
  321. package/dist/src/engine/nodeDispatch/workflowNodes.d.ts +2 -0
  322. package/dist/src/engine/nodeDispatch/workflowNodes.js +33 -0
  323. package/dist/src/engine/nodeDispatch/workflowNodes.js.map +1 -0
  324. package/dist/src/engine/worker/ActionSandboxMessage.d.ts +29 -0
  325. package/dist/src/engine/worker/ActionSandboxMessage.js +7 -0
  326. package/dist/src/engine/worker/ActionSandboxMessage.js.map +1 -0
  327. package/dist/src/engine/worker/ActionSandboxPool.d.ts +34 -0
  328. package/dist/src/engine/worker/ActionSandboxPool.js +204 -0
  329. package/dist/src/engine/worker/ActionSandboxPool.js.map +1 -0
  330. package/dist/src/engine/worker/ActionSandboxWorker.d.ts +1 -0
  331. package/dist/src/engine/worker/ActionSandboxWorker.js +25 -0
  332. package/dist/src/engine/worker/ActionSandboxWorker.js.map +1 -0
  333. package/dist/src/engine/worker/WorkerMessage.d.ts +35 -0
  334. package/dist/src/engine/worker/WorkerMessage.js +7 -0
  335. package/dist/src/engine/worker/WorkerMessage.js.map +1 -0
  336. package/dist/src/engine/worker/WorkerPool.d.ts +42 -0
  337. package/dist/src/engine/worker/WorkerPool.js +273 -0
  338. package/dist/src/engine/worker/WorkerPool.js.map +1 -0
  339. package/dist/src/engine/worker/WorkerProcess.d.ts +1 -0
  340. package/dist/src/engine/worker/WorkerProcess.js +76 -0
  341. package/dist/src/engine/worker/WorkerProcess.js.map +1 -0
  342. package/dist/src/event/EventBus.d.ts +11 -0
  343. package/dist/src/event/EventBus.js +44 -0
  344. package/dist/src/event/EventBus.js.map +1 -0
  345. package/dist/src/event/EventCoordinator.d.ts +26 -0
  346. package/dist/src/event/EventCoordinator.js +205 -0
  347. package/dist/src/event/EventCoordinator.js.map +1 -0
  348. package/dist/src/event/EventDeduplicator.d.ts +31 -0
  349. package/dist/src/event/EventDeduplicator.js +100 -0
  350. package/dist/src/event/EventDeduplicator.js.map +1 -0
  351. package/dist/src/event/HookManager.d.ts +31 -0
  352. package/dist/src/event/HookManager.js +88 -0
  353. package/dist/src/event/HookManager.js.map +1 -0
  354. package/dist/src/event/MessageBus.d.ts +39 -0
  355. package/dist/src/event/MessageBus.js +131 -0
  356. package/dist/src/event/MessageBus.js.map +1 -0
  357. package/dist/src/event/index.d.ts +3 -0
  358. package/dist/src/event/index.js +4 -0
  359. package/dist/src/event/index.js.map +1 -0
  360. package/dist/src/index.d.ts +40 -0
  361. package/dist/src/index.js +33 -0
  362. package/dist/src/index.js.map +1 -0
  363. package/dist/src/lifecycle.d.ts +17 -0
  364. package/dist/src/lifecycle.js +84 -0
  365. package/dist/src/lifecycle.js.map +1 -0
  366. package/dist/src/metrics/AnalyticsCollector.d.ts +57 -0
  367. package/dist/src/metrics/AnalyticsCollector.js +140 -0
  368. package/dist/src/metrics/AnalyticsCollector.js.map +1 -0
  369. package/dist/src/metrics/AnomalyDetector.d.ts +21 -0
  370. package/dist/src/metrics/AnomalyDetector.js +120 -0
  371. package/dist/src/metrics/AnomalyDetector.js.map +1 -0
  372. package/dist/src/metrics/MetricsAggregator.d.ts +43 -0
  373. package/dist/src/metrics/MetricsAggregator.js +243 -0
  374. package/dist/src/metrics/MetricsAggregator.js.map +1 -0
  375. package/dist/src/metrics/SlaMonitor.d.ts +48 -0
  376. package/dist/src/metrics/SlaMonitor.js +130 -0
  377. package/dist/src/metrics/SlaMonitor.js.map +1 -0
  378. package/dist/src/metrics/index.d.ts +75 -0
  379. package/dist/src/metrics/index.js +293 -0
  380. package/dist/src/metrics/index.js.map +1 -0
  381. package/dist/src/model/Instance.d.ts +38 -0
  382. package/dist/src/model/Instance.js +12 -0
  383. package/dist/src/model/Instance.js.map +1 -0
  384. package/dist/src/model/RetryPolicy.d.ts +11 -0
  385. package/dist/src/model/RetryPolicy.js +30 -0
  386. package/dist/src/model/RetryPolicy.js.map +1 -0
  387. package/dist/src/model/Schedule.d.ts +34 -0
  388. package/dist/src/model/Schedule.js +50 -0
  389. package/dist/src/model/Schedule.js.map +1 -0
  390. package/dist/src/model/Workflow.d.ts +73 -0
  391. package/dist/src/model/Workflow.js +2 -0
  392. package/dist/src/model/Workflow.js.map +1 -0
  393. package/dist/src/model/WorkflowGraph.d.ts +32 -0
  394. package/dist/src/model/WorkflowGraph.js +267 -0
  395. package/dist/src/model/WorkflowGraph.js.map +1 -0
  396. package/dist/src/model/WorkflowSchema.d.ts +154 -0
  397. package/dist/src/model/WorkflowSchema.js +233 -0
  398. package/dist/src/model/WorkflowSchema.js.map +1 -0
  399. package/dist/src/model/WorkflowVariables.d.ts +15 -0
  400. package/dist/src/model/WorkflowVariables.js +77 -0
  401. package/dist/src/model/WorkflowVariables.js.map +1 -0
  402. package/dist/src/notification/NotificationChannel.d.ts +19 -0
  403. package/dist/src/notification/NotificationChannel.js +2 -0
  404. package/dist/src/notification/NotificationChannel.js.map +1 -0
  405. package/dist/src/notification/NotificationManager.d.ts +20 -0
  406. package/dist/src/notification/NotificationManager.js +59 -0
  407. package/dist/src/notification/NotificationManager.js.map +1 -0
  408. package/dist/src/notification/channels/DingtalkChannel.d.ts +7 -0
  409. package/dist/src/notification/channels/DingtalkChannel.js +18 -0
  410. package/dist/src/notification/channels/DingtalkChannel.js.map +1 -0
  411. package/dist/src/notification/channels/EmailChannel.d.ts +21 -0
  412. package/dist/src/notification/channels/EmailChannel.js +32 -0
  413. package/dist/src/notification/channels/EmailChannel.js.map +1 -0
  414. package/dist/src/notification/channels/FeishuChannel.d.ts +7 -0
  415. package/dist/src/notification/channels/FeishuChannel.js +18 -0
  416. package/dist/src/notification/channels/FeishuChannel.js.map +1 -0
  417. package/dist/src/notification/channels/SlackChannel.d.ts +7 -0
  418. package/dist/src/notification/channels/SlackChannel.js +18 -0
  419. package/dist/src/notification/channels/SlackChannel.js.map +1 -0
  420. package/dist/src/notification/channels/SmsChannel.d.ts +24 -0
  421. package/dist/src/notification/channels/SmsChannel.js +37 -0
  422. package/dist/src/notification/channels/SmsChannel.js.map +1 -0
  423. package/dist/src/notification/channels/WebhookChannel.d.ts +17 -0
  424. package/dist/src/notification/channels/WebhookChannel.js +61 -0
  425. package/dist/src/notification/channels/WebhookChannel.js.map +1 -0
  426. package/dist/src/notification/index.d.ts +24 -0
  427. package/dist/src/notification/index.js +61 -0
  428. package/dist/src/notification/index.js.map +1 -0
  429. package/dist/src/scheduler/CronScheduler.d.ts +20 -0
  430. package/dist/src/scheduler/CronScheduler.js +82 -0
  431. package/dist/src/scheduler/CronScheduler.js.map +1 -0
  432. package/dist/src/scheduler/EnhancedCronScheduler.d.ts +27 -0
  433. package/dist/src/scheduler/EnhancedCronScheduler.js +177 -0
  434. package/dist/src/scheduler/EnhancedCronScheduler.js.map +1 -0
  435. package/dist/src/storage/ArchiveManager.d.ts +21 -0
  436. package/dist/src/storage/ArchiveManager.js +140 -0
  437. package/dist/src/storage/ArchiveManager.js.map +1 -0
  438. package/dist/src/storage/LocalFileStorage.d.ts +64 -0
  439. package/dist/src/storage/LocalFileStorage.js +470 -0
  440. package/dist/src/storage/LocalFileStorage.js.map +1 -0
  441. package/dist/src/storage/MemoryStorage.d.ts +65 -0
  442. package/dist/src/storage/MemoryStorage.js +422 -0
  443. package/dist/src/storage/MemoryStorage.js.map +1 -0
  444. package/dist/src/storage/StorageProvider.d.ts +223 -0
  445. package/dist/src/storage/StorageProvider.js +2 -0
  446. package/dist/src/storage/StorageProvider.js.map +1 -0
  447. package/dist/src/storage/builtin-adapters.d.ts +1 -0
  448. package/dist/src/storage/builtin-adapters.js +20 -0
  449. package/dist/src/storage/builtin-adapters.js.map +1 -0
  450. package/dist/src/storage/index.d.ts +17 -0
  451. package/dist/src/storage/index.js +52 -0
  452. package/dist/src/storage/index.js.map +1 -0
  453. package/dist/src/storage/registry.d.ts +6 -0
  454. package/dist/src/storage/registry.js +23 -0
  455. package/dist/src/storage/registry.js.map +1 -0
  456. package/dist/src/telemetry/index.d.ts +53 -0
  457. package/dist/src/telemetry/index.js +73 -0
  458. package/dist/src/telemetry/index.js.map +1 -0
  459. package/dist/src/telemetry/spanRegistry.d.ts +9 -0
  460. package/dist/src/telemetry/spanRegistry.js +14 -0
  461. package/dist/src/telemetry/spanRegistry.js.map +1 -0
  462. package/dist/src/templates/AutoExtract.d.ts +2 -0
  463. package/dist/src/templates/AutoExtract.js +124 -0
  464. package/dist/src/templates/AutoExtract.js.map +1 -0
  465. package/dist/src/templates/TemplateGallery.d.ts +54 -0
  466. package/dist/src/templates/TemplateGallery.js +139 -0
  467. package/dist/src/templates/TemplateGallery.js.map +1 -0
  468. package/dist/src/templates/TemplateRegistry.d.ts +16 -0
  469. package/dist/src/templates/TemplateRegistry.js +92 -0
  470. package/dist/src/templates/TemplateRegistry.js.map +1 -0
  471. package/dist/src/templates/WorkflowTemplate.d.ts +24 -0
  472. package/dist/src/templates/WorkflowTemplate.js +2 -0
  473. package/dist/src/templates/WorkflowTemplate.js.map +1 -0
  474. package/dist/src/templates/builtin/HttpCallbackTemplate.d.ts +2 -0
  475. package/dist/src/templates/builtin/HttpCallbackTemplate.js +47 -0
  476. package/dist/src/templates/builtin/HttpCallbackTemplate.js.map +1 -0
  477. package/dist/src/templates/builtin/index.d.ts +3 -0
  478. package/dist/src/templates/builtin/index.js +11 -0
  479. package/dist/src/templates/builtin/index.js.map +1 -0
  480. package/dist/src/templates/index.d.ts +3 -0
  481. package/dist/src/templates/index.js +3 -0
  482. package/dist/src/templates/index.js.map +1 -0
  483. package/dist/src/testing/MutationTester.d.ts +27 -0
  484. package/dist/src/testing/MutationTester.js +157 -0
  485. package/dist/src/testing/MutationTester.js.map +1 -0
  486. package/dist/src/testing/TestGenerator.d.ts +31 -0
  487. package/dist/src/testing/TestGenerator.js +345 -0
  488. package/dist/src/testing/TestGenerator.js.map +1 -0
  489. package/dist/src/testing/index.d.ts +2 -0
  490. package/dist/src/testing/index.js +3 -0
  491. package/dist/src/testing/index.js.map +1 -0
  492. package/dist/src/testing/testWorkflow.d.ts +51 -0
  493. package/dist/src/testing/testWorkflow.js +167 -0
  494. package/dist/src/testing/testWorkflow.js.map +1 -0
  495. package/dist/src/utils/AuditLogger.d.ts +36 -0
  496. package/dist/src/utils/AuditLogger.js +148 -0
  497. package/dist/src/utils/AuditLogger.js.map +1 -0
  498. package/dist/src/utils/BoundedMap.d.ts +34 -0
  499. package/dist/src/utils/BoundedMap.js +125 -0
  500. package/dist/src/utils/BoundedMap.js.map +1 -0
  501. package/dist/src/utils/LeaseStore.d.ts +7 -0
  502. package/dist/src/utils/LeaseStore.js +102 -0
  503. package/dist/src/utils/LeaseStore.js.map +1 -0
  504. package/dist/src/utils/Logger.d.ts +26 -0
  505. package/dist/src/utils/Logger.js +279 -0
  506. package/dist/src/utils/Logger.js.map +1 -0
  507. package/dist/src/utils/SecretManager.d.ts +41 -0
  508. package/dist/src/utils/SecretManager.js +139 -0
  509. package/dist/src/utils/SecretManager.js.map +1 -0
  510. package/dist/src/utils/StructuredLogger.d.ts +45 -0
  511. package/dist/src/utils/StructuredLogger.js +118 -0
  512. package/dist/src/utils/StructuredLogger.js.map +1 -0
  513. package/dist/src/utils/concurrency.d.ts +3 -0
  514. package/dist/src/utils/concurrency.js +22 -0
  515. package/dist/src/utils/concurrency.js.map +1 -0
  516. package/dist/src/utils/env.d.ts +5 -0
  517. package/dist/src/utils/env.js +15 -0
  518. package/dist/src/utils/env.js.map +1 -0
  519. package/dist/src/utils/index.d.ts +5 -0
  520. package/dist/src/utils/index.js +4 -0
  521. package/dist/src/utils/index.js.map +1 -0
  522. package/dist/src/utils/secrets.d.ts +5 -0
  523. package/dist/src/utils/secrets.js +27 -0
  524. package/dist/src/utils/secrets.js.map +1 -0
  525. package/package.json +159 -0
@@ -0,0 +1,119 @@
1
+ import { getNestedValue } from "./ExpressionEvaluator.js";
2
+ const MAX_PAGE_SIZE = 100;
3
+ const DEFAULT_PAGE_SIZE = 20;
4
+ function normalize(value) {
5
+ if (value instanceof Date)
6
+ return value.getTime();
7
+ return value;
8
+ }
9
+ function normalizeAgainst(filterValue, fieldValue) {
10
+ if (fieldValue instanceof Date &&
11
+ (typeof filterValue === "string" || typeof filterValue === "number")) {
12
+ return new Date(filterValue).getTime();
13
+ }
14
+ return filterValue;
15
+ }
16
+ function compareValues(a, b) {
17
+ const na = normalize(a);
18
+ const nb = normalize(b);
19
+ if (na === nb)
20
+ return 0;
21
+ if (na === undefined || na === null)
22
+ return -1;
23
+ if (nb === undefined || nb === null)
24
+ return 1;
25
+ if (typeof na === "string" && typeof nb === "string") {
26
+ return na.localeCompare(nb);
27
+ }
28
+ if ((typeof na === "number" ||
29
+ typeof na === "bigint" ||
30
+ typeof na === "boolean") &&
31
+ (typeof nb === "number" ||
32
+ typeof nb === "bigint" ||
33
+ typeof nb === "boolean")) {
34
+ const left = na;
35
+ const right = nb;
36
+ return left > right ? 1 : -1;
37
+ }
38
+ return String(na).localeCompare(String(nb));
39
+ }
40
+ function matchesFilter(instance, filter) {
41
+ const raw = getNestedValue(instance, filter.field);
42
+ const fieldValue = normalize(raw);
43
+ switch (filter.operator) {
44
+ case "eq":
45
+ return fieldValue === normalize(normalizeAgainst(filter.value, raw));
46
+ case "ne":
47
+ return fieldValue !== normalize(normalizeAgainst(filter.value, raw));
48
+ case "in":
49
+ return (Array.isArray(filter.value) &&
50
+ filter.value.some((v) => fieldValue === normalize(normalizeAgainst(v, raw))));
51
+ case "gt":
52
+ case "gte":
53
+ case "lt":
54
+ case "lte": {
55
+ if (raw === undefined || raw === null)
56
+ return false;
57
+ const target = normalize(normalizeAgainst(filter.value, raw));
58
+ const cmp = compareValues(raw, target);
59
+ if (filter.operator === "gt")
60
+ return cmp > 0;
61
+ if (filter.operator === "gte")
62
+ return cmp >= 0;
63
+ if (filter.operator === "lt")
64
+ return cmp < 0;
65
+ return cmp <= 0;
66
+ }
67
+ case "between": {
68
+ if (!Array.isArray(filter.value) || filter.value.length !== 2) {
69
+ throw new Error(`between operator requires a [min, max] array for field ${filter.field}`);
70
+ }
71
+ if (raw === undefined || raw === null)
72
+ return false;
73
+ const min = normalize(normalizeAgainst(filter.value[0], raw));
74
+ const max = normalize(normalizeAgainst(filter.value[1], raw));
75
+ return compareValues(raw, min) >= 0 && compareValues(raw, max) <= 0;
76
+ }
77
+ case "contains":
78
+ return String(raw ?? "").includes(String(filter.value));
79
+ default:
80
+ throw new Error(`Unsupported operator: ${String(filter.operator)}`);
81
+ }
82
+ }
83
+ export function searchInstances(instances, query) {
84
+ let filtered = instances;
85
+ for (const filter of query.filters ?? []) {
86
+ filtered = filtered.filter((instance) => matchesFilter(instance, filter));
87
+ }
88
+ const byStatus = {};
89
+ const byWorkflow = {};
90
+ for (const instance of filtered) {
91
+ byStatus[instance.status] = (byStatus[instance.status] ?? 0) + 1;
92
+ byWorkflow[instance.workflowId] =
93
+ (byWorkflow[instance.workflowId] ?? 0) + 1;
94
+ }
95
+ if (query.sort?.length) {
96
+ const sortSpecs = query.sort;
97
+ filtered = [...filtered].sort((a, b) => {
98
+ for (const spec of sortSpecs) {
99
+ const av = getNestedValue(a, spec.field);
100
+ const bv = getNestedValue(b, spec.field);
101
+ const cmp = compareValues(av, bv);
102
+ if (cmp !== 0)
103
+ return spec.order === "desc" ? -cmp : cmp;
104
+ }
105
+ return 0;
106
+ });
107
+ }
108
+ const page = Math.max(1, query.page ?? 1);
109
+ const pageSize = Math.min(MAX_PAGE_SIZE, Math.max(1, query.pageSize ?? DEFAULT_PAGE_SIZE));
110
+ const totalCount = filtered.length;
111
+ const totalPages = Math.ceil(totalCount / pageSize) || 0;
112
+ const start = (page - 1) * pageSize;
113
+ return {
114
+ instances: filtered.slice(start, start + pageSize),
115
+ pagination: { page, pageSize, totalCount, totalPages },
116
+ aggregations: { byStatus, byWorkflow },
117
+ };
118
+ }
119
+ //# sourceMappingURL=InstanceSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceSearch.js","sourceRoot":"","sources":["../../../src/engine/InstanceSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { WorkflowInstance } from "../model/Instance.js";
2
+ import type { StorageProvider } from "../storage/StorageProvider.js";
3
+ export declare class LifecycleManager {
4
+ private storage;
5
+ private config;
6
+ private cleanupInterval?;
7
+ private lastEventCleanup;
8
+ constructor(storage: StorageProvider | undefined, config: {
9
+ instanceTtlHours: number;
10
+ cleanupIntervalMs: number;
11
+ eventRetentionDays?: number;
12
+ });
13
+ private toEpochMs;
14
+ start(getInstances: () => Map<string, WorkflowInstance>): void;
15
+ cleanupStaleInstances(instances: Map<string, WorkflowInstance>): number;
16
+ private cleanupStorageResources;
17
+ destroy(): void;
18
+ }
@@ -0,0 +1,82 @@
1
+ import { errorStack, Logger } from "../utils/Logger.js";
2
+ import { searchAttributeManager } from "./SearchAttributeManager.js";
3
+ export class LifecycleManager {
4
+ storage;
5
+ config;
6
+ cleanupInterval;
7
+ lastEventCleanup = Date.now();
8
+ constructor(storage, config) {
9
+ this.storage = storage;
10
+ this.config = config;
11
+ }
12
+ toEpochMs(value) {
13
+ if (value instanceof Date) {
14
+ return value.getTime();
15
+ }
16
+ if (typeof value === "number" && Number.isFinite(value)) {
17
+ return value;
18
+ }
19
+ if (typeof value === "string") {
20
+ const parsed = Date.parse(value);
21
+ if (!Number.isNaN(parsed)) {
22
+ return parsed;
23
+ }
24
+ }
25
+ return 0;
26
+ }
27
+ start(getInstances) {
28
+ this.cleanupInterval = setInterval(() => {
29
+ this.cleanupStaleInstances(getInstances());
30
+ this.cleanupStorageResources();
31
+ }, this.config.cleanupIntervalMs);
32
+ this.cleanupInterval.unref?.();
33
+ Logger.debug("system", "lifecycle", `Instance cleanup scheduled every ${this.config.cleanupIntervalMs}ms`);
34
+ }
35
+ cleanupStaleInstances(instances) {
36
+ const threshold = Date.now() - this.config.instanceTtlHours * 60 * 60 * 1000;
37
+ let cleaned = 0;
38
+ for (const [id, instance] of instances) {
39
+ const isCompleted = instance.status === "completed" || instance.status === "failed";
40
+ const isStale = this.toEpochMs(instance.updatedAt) < threshold;
41
+ if (isCompleted && isStale) {
42
+ instances.delete(id);
43
+ searchAttributeManager.removeIndex(id);
44
+ if (typeof this.storage?.deleteInstance === "function") {
45
+ void this.storage.deleteInstance(id).catch((error) => {
46
+ Logger.error("system", "cleanup", `Failed to delete stale instance ${id} from storage`, errorStack(error));
47
+ });
48
+ }
49
+ cleaned++;
50
+ Logger.debug("system", "cleanup", `Cleaned up stale instance ${id}`);
51
+ }
52
+ }
53
+ if (cleaned > 0) {
54
+ Logger.info("system", "cleanup", `Cleaned up ${cleaned} stale instances`);
55
+ }
56
+ return cleaned;
57
+ }
58
+ async cleanupStorageResources() {
59
+ if (!this.storage)
60
+ return;
61
+ try {
62
+ await this.storage.cleanupExpiredHeartbeats?.();
63
+ const sixHoursMs = 6 * 60 * 60 * 1000;
64
+ if (Date.now() - this.lastEventCleanup > sixHoursMs) {
65
+ const retentionDays = this.config.eventRetentionDays ?? 90;
66
+ await this.storage.cleanupStaleEvents?.(retentionDays);
67
+ this.lastEventCleanup = Date.now();
68
+ }
69
+ }
70
+ catch (error) {
71
+ Logger.error("system", "cleanup", "Failed to clean up storage resources", errorStack(error));
72
+ }
73
+ }
74
+ destroy() {
75
+ if (this.cleanupInterval) {
76
+ clearInterval(this.cleanupInterval);
77
+ this.cleanupInterval = undefined;
78
+ }
79
+ Logger.debug("system", "lifecycle", "LifecycleManager destroyed");
80
+ }
81
+ }
82
+ //# sourceMappingURL=LifecycleManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LifecycleManager.js","sourceRoot":"","sources":["../../../src/engine/LifecycleManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { WorkflowInstance } from "../model/Instance.js";
2
+ import type { TaskNode, WorkflowDefinition } from "../model/Workflow.js";
3
+ export interface NodeExecutionResult {
4
+ nodeId: string;
5
+ success: boolean;
6
+ nextNodes: string[];
7
+ error?: Error;
8
+ duration: number;
9
+ }
10
+ export interface ParallelExecutionResult {
11
+ allSucceeded: boolean;
12
+ results: NodeExecutionResult[];
13
+ nextNodes: string[];
14
+ errors: Error[];
15
+ }
16
+ export declare class ParallelExecutor {
17
+ private executeNode;
18
+ constructor(executeNode: (node: TaskNode, instance: WorkflowInstance) => Promise<string[]>);
19
+ executeParallel(nodeIds: string[], workflow: WorkflowDefinition, instance: WorkflowInstance): Promise<ParallelExecutionResult>;
20
+ private executeSingleNode;
21
+ handlePartialFailure(result: ParallelExecutionResult, strategy?: "fail-fast" | "continue" | "ignore-errors"): {
22
+ shouldContinue: boolean;
23
+ nextNodes: string[];
24
+ };
25
+ }
26
+ export declare function mergeParallelResults(instance: WorkflowInstance, results: NodeExecutionResult[]): void;
@@ -0,0 +1,138 @@
1
+ import { Logger } from "../utils/Logger.js";
2
+ export class ParallelExecutor {
3
+ executeNode;
4
+ constructor(executeNode) {
5
+ this.executeNode = executeNode;
6
+ }
7
+ async executeParallel(nodeIds, workflow, instance) {
8
+ if (nodeIds.length === 0) {
9
+ return {
10
+ allSucceeded: true,
11
+ results: [],
12
+ nextNodes: [],
13
+ errors: [],
14
+ };
15
+ }
16
+ if (nodeIds.length === 1) {
17
+ const result = await this.executeSingleNode(nodeIds[0], workflow, instance);
18
+ return {
19
+ allSucceeded: result.success,
20
+ results: [result],
21
+ nextNodes: result.nextNodes,
22
+ errors: result.error ? [result.error] : [],
23
+ };
24
+ }
25
+ Logger.info(instance.instanceId, "parallel", `Executing ${nodeIds.length} nodes in parallel: ${nodeIds.join(", ")}`);
26
+ const promises = nodeIds.map((nodeId) => this.executeSingleNode(nodeId, workflow, instance));
27
+ const results = await Promise.allSettled(promises);
28
+ const executionResults = [];
29
+ const nextNodesSet = new Set();
30
+ const errors = [];
31
+ for (let i = 0; i < results.length; i++) {
32
+ const result = results[i];
33
+ const nodeId = nodeIds[i];
34
+ if (result.status === "fulfilled") {
35
+ executionResults.push(result.value);
36
+ if (result.value.success) {
37
+ result.value.nextNodes.forEach((n) => {
38
+ nextNodesSet.add(n);
39
+ });
40
+ }
41
+ else if (result.value.error) {
42
+ errors.push(result.value.error);
43
+ }
44
+ }
45
+ else {
46
+ const error = result.reason instanceof Error
47
+ ? result.reason
48
+ : new Error(String(result.reason));
49
+ errors.push(error);
50
+ executionResults.push({
51
+ nodeId,
52
+ success: false,
53
+ nextNodes: [],
54
+ error,
55
+ duration: 0,
56
+ });
57
+ }
58
+ }
59
+ const allSucceeded = errors.length === 0;
60
+ Logger.info(instance.instanceId, "parallel", `Parallel execution completed: ${executionResults.filter((r) => r.success).length}/${nodeIds.length} succeeded`);
61
+ return {
62
+ allSucceeded,
63
+ results: executionResults,
64
+ nextNodes: Array.from(nextNodesSet),
65
+ errors,
66
+ };
67
+ }
68
+ async executeSingleNode(nodeId, workflow, instance) {
69
+ const node = workflow.nodes[nodeId];
70
+ if (!node) {
71
+ return {
72
+ nodeId,
73
+ success: false,
74
+ nextNodes: [],
75
+ error: new Error(`Node not found: ${nodeId}`),
76
+ duration: 0,
77
+ };
78
+ }
79
+ const startTime = Date.now();
80
+ try {
81
+ const nextNodes = await this.executeNode(node, instance);
82
+ return {
83
+ nodeId,
84
+ success: true,
85
+ nextNodes,
86
+ duration: Date.now() - startTime,
87
+ };
88
+ }
89
+ catch (error) {
90
+ return {
91
+ nodeId,
92
+ success: false,
93
+ nextNodes: [],
94
+ error: error instanceof Error ? error : new Error(String(error)),
95
+ duration: Date.now() - startTime,
96
+ };
97
+ }
98
+ }
99
+ handlePartialFailure(result, strategy = "continue") {
100
+ switch (strategy) {
101
+ case "fail-fast":
102
+ return {
103
+ shouldContinue: result.allSucceeded,
104
+ nextNodes: result.allSucceeded ? result.nextNodes : [],
105
+ };
106
+ case "continue": {
107
+ const hasSuccess = result.results.some((r) => r.success);
108
+ return {
109
+ shouldContinue: hasSuccess,
110
+ nextNodes: result.nextNodes,
111
+ };
112
+ }
113
+ case "ignore-errors":
114
+ return {
115
+ shouldContinue: true,
116
+ nextNodes: result.nextNodes,
117
+ };
118
+ default:
119
+ return {
120
+ shouldContinue: result.allSucceeded,
121
+ nextNodes: result.nextNodes,
122
+ };
123
+ }
124
+ }
125
+ }
126
+ export function mergeParallelResults(instance, results) {
127
+ if (!instance.context.__parallelResults) {
128
+ instance.context.__parallelResults = {};
129
+ }
130
+ for (const result of results) {
131
+ instance.context.__parallelResults[result.nodeId] = {
132
+ success: result.success,
133
+ duration: result.duration,
134
+ error: result.error?.message,
135
+ };
136
+ }
137
+ }
138
+ //# sourceMappingURL=ParallelExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParallelExecutor.js","sourceRoot":"","sources":["../../../src/engine/ParallelExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ interface SandboxOptions {
2
+ timeoutMs?: number;
3
+ extraContext?: Record<string, unknown>;
4
+ }
5
+ export declare function runInVmSandbox(expression: string, context?: Record<string, unknown>, options?: SandboxOptions): unknown;
6
+ export declare function evaluateSandboxed(expression: string, context?: Record<string, unknown>, options?: SandboxOptions): unknown;
7
+ export interface ActionSandboxIsolationConfig {
8
+ minWorkers: number;
9
+ maxWorkers: number;
10
+ taskTimeoutMs: number;
11
+ idleTimeoutMs: number;
12
+ }
13
+ export declare function configureActionSandboxIsolation(config: ActionSandboxIsolationConfig): void;
14
+ export declare function shutdownActionSandboxIsolation(): Promise<void>;
15
+ export declare function evaluateActionSandboxed(expression: string, context?: Record<string, unknown>, options?: SandboxOptions): Promise<unknown>;
16
+ export declare function evaluateConditionSandboxed(expression: string, context?: Record<string, unknown>): boolean;
17
+ export declare function isSandboxAvailable(): boolean;
18
+ export {};
@@ -0,0 +1,200 @@
1
+ import vm from "node:vm";
2
+ import { Logger } from "../utils/Logger.js";
3
+ function createSandboxContext() {
4
+ const safeJSON = Object.freeze({
5
+ parse: (s) => JSON.parse(s),
6
+ stringify: (v, r, s) => JSON.stringify(v, r, s),
7
+ });
8
+ const safeMath = Object.freeze(Object.fromEntries(Object.getOwnPropertyNames(Math)
9
+ .filter((k) => typeof Math[k] === "function" || typeof Math[k] === "number")
10
+ .map((k) => [k, Math[k]])));
11
+ return Object.freeze({
12
+ Math: safeMath,
13
+ JSON: safeJSON,
14
+ parseInt,
15
+ parseFloat,
16
+ isNaN,
17
+ isFinite,
18
+ Number,
19
+ String,
20
+ Boolean,
21
+ UTC: Date.UTC,
22
+ now: Date.now,
23
+ parse: Date.parse,
24
+ Error,
25
+ TypeError,
26
+ RangeError,
27
+ ReferenceError,
28
+ SyntaxError,
29
+ ObjectKeys: (o) => Object.keys(o),
30
+ ObjectValues: (o) => Object.values(o),
31
+ ObjectEntries: (o) => Object.entries(o),
32
+ ArrayIsArray: Array.isArray,
33
+ DateNow: () => Date.now(),
34
+ undefined: undefined,
35
+ NaN: Number.NaN,
36
+ Infinity: Number.POSITIVE_INFINITY,
37
+ });
38
+ }
39
+ function deepFreeze(obj) {
40
+ Object.freeze(obj);
41
+ for (const val of Object.values(obj)) {
42
+ if (val && typeof val === "object" && !Object.isFrozen(val)) {
43
+ try {
44
+ deepFreeze(val);
45
+ }
46
+ catch {
47
+ }
48
+ }
49
+ }
50
+ return obj;
51
+ }
52
+ function cloneForSandbox(value) {
53
+ if (value === null || typeof value !== "object")
54
+ return value;
55
+ if (Array.isArray(value)) {
56
+ return value.map((item) => cloneForSandbox(item));
57
+ }
58
+ if (value instanceof Date || typeof value === "function")
59
+ return value;
60
+ const out = {};
61
+ for (const [key, val] of Object.entries(value)) {
62
+ out[key] = cloneForSandbox(val);
63
+ }
64
+ return out;
65
+ }
66
+ const BLOCKED_PATTERNS = [
67
+ /\brequire\s*\(/,
68
+ /\bprocess\s*\./,
69
+ /\bglobalThis\b/,
70
+ /\b__proto__\b/,
71
+ /\bprototype\s*\[/,
72
+ /\beval\s*\(/,
73
+ /\bnew\s+Function\s*\(/,
74
+ /\bimport\s*\(/,
75
+ /\bexports\b/,
76
+ /\bmodule\b/,
77
+ /\bexec\b/,
78
+ /\bspawn\b/,
79
+ /\bchild_process\b/,
80
+ /\bfs\b/,
81
+ /\bos\b/,
82
+ /\bpath\b/,
83
+ /\bnet\b/,
84
+ /\bhttp\b/,
85
+ /\bhttps\b/,
86
+ /\bfetch\b/,
87
+ /\bXMLHttpRequest\b/,
88
+ /\bconstructor\b/,
89
+ /\b__defineGetter__\b/,
90
+ /\b__defineSetter__\b/,
91
+ /\b__lookupGetter__\b/,
92
+ /\b__lookupSetter__\b/,
93
+ /\bProxy\b/,
94
+ /\bReflect\b/,
95
+ /\bWeakRef\b/,
96
+ /\bFinalizationRegistry\b/,
97
+ ];
98
+ function containsBlockedPatterns(expression) {
99
+ for (const pattern of BLOCKED_PATTERNS) {
100
+ if (pattern.test(expression)) {
101
+ return `Expression contains blocked pattern: ${pattern.source}`;
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ export function runInVmSandbox(expression, context = {}, options = {}) {
107
+ const timeoutMs = options.timeoutMs || 100;
108
+ const blockedReason = containsBlockedPatterns(expression);
109
+ if (blockedReason) {
110
+ Logger.warn("system", "sandbox", "Blocked expression", {
111
+ expression: expression.substring(0, 100),
112
+ reason: blockedReason,
113
+ });
114
+ throw new Error(blockedReason);
115
+ }
116
+ const sandbox = deepFreeze({
117
+ ...createSandboxContext(),
118
+ ...cloneForSandbox(context),
119
+ ...cloneForSandbox(options.extraContext ?? {}),
120
+ });
121
+ try {
122
+ const vmContext = vm.createContext(sandbox);
123
+ const script = new vm.Script(`(${expression})`, {
124
+ filename: "sandboxed-expression.vm",
125
+ });
126
+ const result = script.runInContext(vmContext, {
127
+ timeout: timeoutMs,
128
+ displayErrors: false,
129
+ });
130
+ return result;
131
+ }
132
+ catch (err) {
133
+ if ((err instanceof Error ? err.message : String(err))?.includes("timed out")) {
134
+ Logger.warn("system", "sandbox", "Expression evaluation timed out", {
135
+ expression: expression.substring(0, 100),
136
+ timeoutMs,
137
+ });
138
+ throw new Error(`Expression evaluation timed out after ${timeoutMs}ms`, {
139
+ cause: err,
140
+ });
141
+ }
142
+ Logger.debug("system", "sandbox", "Expression evaluation failed", {
143
+ expression: expression.substring(0, 100),
144
+ error: err instanceof Error ? err.message : String(err),
145
+ });
146
+ throw err;
147
+ }
148
+ }
149
+ export function evaluateSandboxed(expression, context = {}, options = {}) {
150
+ return runInVmSandbox(expression, context, options);
151
+ }
152
+ let actionSandboxPool;
153
+ let actionSandboxConfig;
154
+ export function configureActionSandboxIsolation(config) {
155
+ actionSandboxConfig = config;
156
+ }
157
+ export async function shutdownActionSandboxIsolation() {
158
+ if (actionSandboxPool) {
159
+ await actionSandboxPool.shutdown();
160
+ actionSandboxPool = undefined;
161
+ }
162
+ actionSandboxConfig = undefined;
163
+ }
164
+ export async function evaluateActionSandboxed(expression, context = {}, options = {}) {
165
+ if (!actionSandboxConfig) {
166
+ return runInVmSandbox(expression, context, {
167
+ ...options,
168
+ timeoutMs: options.timeoutMs ?? 5_000,
169
+ });
170
+ }
171
+ if (!actionSandboxPool) {
172
+ const { ActionSandboxPool } = await import("./worker/ActionSandboxPool.js");
173
+ actionSandboxPool = new ActionSandboxPool({
174
+ minWorkers: actionSandboxConfig.minWorkers,
175
+ maxWorkers: actionSandboxConfig.maxWorkers,
176
+ taskTimeoutMs: options.timeoutMs ?? actionSandboxConfig.taskTimeoutMs,
177
+ idleTimeoutMs: actionSandboxConfig.idleTimeoutMs,
178
+ });
179
+ }
180
+ return actionSandboxPool.evaluate(expression, cloneForSandbox(context));
181
+ }
182
+ export function evaluateConditionSandboxed(expression, context = {}) {
183
+ try {
184
+ const result = evaluateSandboxed(expression, context);
185
+ return Boolean(result);
186
+ }
187
+ catch (err) {
188
+ Logger.error("system", "sandbox", `Error evaluating condition: ${expression}`, err instanceof Error ? err.message : String(err));
189
+ return false;
190
+ }
191
+ }
192
+ export function isSandboxAvailable() {
193
+ try {
194
+ return typeof vm.createContext === "function";
195
+ }
196
+ catch {
197
+ return false;
198
+ }
199
+ }
200
+ //# sourceMappingURL=SandboxEvaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxEvaluator.js","sourceRoot":"","sources":["../../../src/engine/SandboxEvaluator.ts"],"names":[],"mappings":"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"}