@octo-cyber/workflow 0.5.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 (297) hide show
  1. package/dist/controllers/ai-workflow-session.controller.d.ts +19 -0
  2. package/dist/controllers/ai-workflow-session.controller.d.ts.map +1 -0
  3. package/dist/controllers/ai-workflow-session.controller.js +135 -0
  4. package/dist/controllers/ai-workflow-session.controller.js.map +1 -0
  5. package/dist/controllers/credential.controller.d.ts +68 -0
  6. package/dist/controllers/credential.controller.d.ts.map +1 -0
  7. package/dist/controllers/credential.controller.js +303 -0
  8. package/dist/controllers/credential.controller.js.map +1 -0
  9. package/dist/controllers/index.d.ts +3 -0
  10. package/dist/controllers/index.d.ts.map +1 -0
  11. package/dist/controllers/index.js +8 -0
  12. package/dist/controllers/index.js.map +1 -0
  13. package/dist/controllers/workflow-ai.controller.d.ts +23 -0
  14. package/dist/controllers/workflow-ai.controller.d.ts.map +1 -0
  15. package/dist/controllers/workflow-ai.controller.js +164 -0
  16. package/dist/controllers/workflow-ai.controller.js.map +1 -0
  17. package/dist/controllers/workflow.controller.d.ts +66 -0
  18. package/dist/controllers/workflow.controller.d.ts.map +1 -0
  19. package/dist/controllers/workflow.controller.js +239 -0
  20. package/dist/controllers/workflow.controller.js.map +1 -0
  21. package/dist/core/expression-resolver.d.ts +49 -0
  22. package/dist/core/expression-resolver.d.ts.map +1 -0
  23. package/dist/core/expression-resolver.js +113 -0
  24. package/dist/core/expression-resolver.js.map +1 -0
  25. package/dist/core/node-registry.d.ts +24 -0
  26. package/dist/core/node-registry.d.ts.map +1 -0
  27. package/dist/core/node-registry.js +62 -0
  28. package/dist/core/node-registry.js.map +1 -0
  29. package/dist/core/workflow-executor.d.ts +50 -0
  30. package/dist/core/workflow-executor.d.ts.map +1 -0
  31. package/dist/core/workflow-executor.js +458 -0
  32. package/dist/core/workflow-executor.js.map +1 -0
  33. package/dist/entities/ai-workflow-session.entity.d.ts +17 -0
  34. package/dist/entities/ai-workflow-session.entity.d.ts.map +1 -0
  35. package/dist/entities/ai-workflow-session.entity.js +70 -0
  36. package/dist/entities/ai-workflow-session.entity.js.map +1 -0
  37. package/dist/entities/ai-workflow-version.entity.d.ts +18 -0
  38. package/dist/entities/ai-workflow-version.entity.d.ts.map +1 -0
  39. package/dist/entities/ai-workflow-version.entity.js +71 -0
  40. package/dist/entities/ai-workflow-version.entity.js.map +1 -0
  41. package/dist/entities/credential-definition.entity.d.ts +17 -0
  42. package/dist/entities/credential-definition.entity.d.ts.map +1 -0
  43. package/dist/entities/credential-definition.entity.js +66 -0
  44. package/dist/entities/credential-definition.entity.js.map +1 -0
  45. package/dist/entities/index.d.ts +9 -0
  46. package/dist/entities/index.d.ts.map +1 -0
  47. package/dist/entities/index.js +22 -0
  48. package/dist/entities/index.js.map +1 -0
  49. package/dist/entities/workflow-definition.entity.d.ts +20 -0
  50. package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
  51. package/dist/entities/workflow-definition.entity.js +85 -0
  52. package/dist/entities/workflow-definition.entity.js.map +1 -0
  53. package/dist/entities/workflow-execution.entity.d.ts +26 -0
  54. package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
  55. package/dist/entities/workflow-execution.entity.js +99 -0
  56. package/dist/entities/workflow-execution.entity.js.map +1 -0
  57. package/dist/index.d.ts +52 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +96 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/n8n/cipher/cipher.d.ts +11 -0
  62. package/dist/n8n/cipher/cipher.d.ts.map +1 -0
  63. package/dist/n8n/cipher/cipher.js +54 -0
  64. package/dist/n8n/cipher/cipher.js.map +1 -0
  65. package/dist/n8n/controllers/n8n-session.controller.d.ts +20 -0
  66. package/dist/n8n/controllers/n8n-session.controller.d.ts.map +1 -0
  67. package/dist/n8n/controllers/n8n-session.controller.js +84 -0
  68. package/dist/n8n/controllers/n8n-session.controller.js.map +1 -0
  69. package/dist/n8n/index.d.ts +8 -0
  70. package/dist/n8n/index.d.ts.map +1 -0
  71. package/dist/n8n/index.js +14 -0
  72. package/dist/n8n/index.js.map +1 -0
  73. package/dist/n8n/launcher/n8n-launcher.d.ts +41 -0
  74. package/dist/n8n/launcher/n8n-launcher.d.ts.map +1 -0
  75. package/dist/n8n/launcher/n8n-launcher.js +186 -0
  76. package/dist/n8n/launcher/n8n-launcher.js.map +1 -0
  77. package/dist/n8n/nodes/OctoClaudeCliTool.node.d.ts +13 -0
  78. package/dist/n8n/nodes/OctoClaudeCliTool.node.d.ts.map +1 -0
  79. package/dist/n8n/nodes/OctoClaudeCliTool.node.js +103 -0
  80. package/dist/n8n/nodes/OctoClaudeCliTool.node.js.map +1 -0
  81. package/dist/n8n/nodes/OctoCliChatModel.node.d.ts +14 -0
  82. package/dist/n8n/nodes/OctoCliChatModel.node.d.ts.map +1 -0
  83. package/dist/n8n/nodes/OctoCliChatModel.node.js +431 -0
  84. package/dist/n8n/nodes/OctoCliChatModel.node.js.map +1 -0
  85. package/dist/n8n/nodes/OctoCodexCliTool.node.d.ts +13 -0
  86. package/dist/n8n/nodes/OctoCodexCliTool.node.d.ts.map +1 -0
  87. package/dist/n8n/nodes/OctoCodexCliTool.node.js +100 -0
  88. package/dist/n8n/nodes/OctoCodexCliTool.node.js.map +1 -0
  89. package/dist/n8n/nodes/OctoGeminiCliTool.node.d.ts +13 -0
  90. package/dist/n8n/nodes/OctoGeminiCliTool.node.d.ts.map +1 -0
  91. package/dist/n8n/nodes/OctoGeminiCliTool.node.js +91 -0
  92. package/dist/n8n/nodes/OctoGeminiCliTool.node.js.map +1 -0
  93. package/dist/n8n/nodes/OctoKnowledge.node.d.ts +6 -0
  94. package/dist/n8n/nodes/OctoKnowledge.node.d.ts.map +1 -0
  95. package/dist/n8n/nodes/OctoKnowledge.node.js +95 -0
  96. package/dist/n8n/nodes/OctoKnowledge.node.js.map +1 -0
  97. package/dist/n8n/nodes/OctoNotification.node.d.ts +6 -0
  98. package/dist/n8n/nodes/OctoNotification.node.d.ts.map +1 -0
  99. package/dist/n8n/nodes/OctoNotification.node.js +72 -0
  100. package/dist/n8n/nodes/OctoNotification.node.js.map +1 -0
  101. package/dist/n8n/nodes/OctoSyncBridge.node.d.ts +6 -0
  102. package/dist/n8n/nodes/OctoSyncBridge.node.d.ts.map +1 -0
  103. package/dist/n8n/nodes/OctoSyncBridge.node.js +60 -0
  104. package/dist/n8n/nodes/OctoSyncBridge.node.js.map +1 -0
  105. package/dist/n8n/nodes/n8n-node-types.d.ts +111 -0
  106. package/dist/n8n/nodes/n8n-node-types.d.ts.map +1 -0
  107. package/dist/n8n/nodes/n8n-node-types.js +30 -0
  108. package/dist/n8n/nodes/n8n-node-types.js.map +1 -0
  109. package/dist/n8n/nodes/octo-cli-chat-model.svg +23 -0
  110. package/dist/n8n/nodes/package.json +16 -0
  111. package/dist/n8n/proxy/css-injector.d.ts +3 -0
  112. package/dist/n8n/proxy/css-injector.d.ts.map +1 -0
  113. package/dist/n8n/proxy/css-injector.js +62 -0
  114. package/dist/n8n/proxy/css-injector.js.map +1 -0
  115. package/dist/n8n/proxy/n8n-proxy.middleware.d.ts +12 -0
  116. package/dist/n8n/proxy/n8n-proxy.middleware.d.ts.map +1 -0
  117. package/dist/n8n/proxy/n8n-proxy.middleware.js +131 -0
  118. package/dist/n8n/proxy/n8n-proxy.middleware.js.map +1 -0
  119. package/dist/n8n/proxy/n8n-theme.css +45 -0
  120. package/dist/n8n/sync/n8n-user-sync.service.d.ts +75 -0
  121. package/dist/n8n/sync/n8n-user-sync.service.d.ts.map +1 -0
  122. package/dist/n8n/sync/n8n-user-sync.service.js +286 -0
  123. package/dist/n8n/sync/n8n-user-sync.service.js.map +1 -0
  124. package/dist/n8n/watcher/n8n-execution-watcher.d.ts +39 -0
  125. package/dist/n8n/watcher/n8n-execution-watcher.d.ts.map +1 -0
  126. package/dist/n8n/watcher/n8n-execution-watcher.js +110 -0
  127. package/dist/n8n/watcher/n8n-execution-watcher.js.map +1 -0
  128. package/dist/nodes/code.node.d.ts +24 -0
  129. package/dist/nodes/code.node.d.ts.map +1 -0
  130. package/dist/nodes/code.node.js +150 -0
  131. package/dist/nodes/code.node.js.map +1 -0
  132. package/dist/nodes/error-trigger.node.d.ts +15 -0
  133. package/dist/nodes/error-trigger.node.d.ts.map +1 -0
  134. package/dist/nodes/error-trigger.node.js +53 -0
  135. package/dist/nodes/error-trigger.node.js.map +1 -0
  136. package/dist/nodes/execute-command.node.d.ts +9 -0
  137. package/dist/nodes/execute-command.node.d.ts.map +1 -0
  138. package/dist/nodes/execute-command.node.js +81 -0
  139. package/dist/nodes/execute-command.node.js.map +1 -0
  140. package/dist/nodes/filter.node.d.ts +10 -0
  141. package/dist/nodes/filter.node.d.ts.map +1 -0
  142. package/dist/nodes/filter.node.js +95 -0
  143. package/dist/nodes/filter.node.js.map +1 -0
  144. package/dist/nodes/http-request.node.d.ts +11 -0
  145. package/dist/nodes/http-request.node.d.ts.map +1 -0
  146. package/dist/nodes/http-request.node.js +139 -0
  147. package/dist/nodes/http-request.node.js.map +1 -0
  148. package/dist/nodes/if.node.d.ts +13 -0
  149. package/dist/nodes/if.node.d.ts.map +1 -0
  150. package/dist/nodes/if.node.js +137 -0
  151. package/dist/nodes/if.node.js.map +1 -0
  152. package/dist/nodes/index.d.ts +12 -0
  153. package/dist/nodes/index.d.ts.map +1 -0
  154. package/dist/nodes/index.js +26 -0
  155. package/dist/nodes/index.js.map +1 -0
  156. package/dist/nodes/manual-trigger.node.d.ts +10 -0
  157. package/dist/nodes/manual-trigger.node.d.ts.map +1 -0
  158. package/dist/nodes/manual-trigger.node.js +36 -0
  159. package/dist/nodes/manual-trigger.node.js.map +1 -0
  160. package/dist/nodes/merge.node.d.ts +15 -0
  161. package/dist/nodes/merge.node.d.ts.map +1 -0
  162. package/dist/nodes/merge.node.js +99 -0
  163. package/dist/nodes/merge.node.js.map +1 -0
  164. package/dist/nodes/noop.node.d.ts +12 -0
  165. package/dist/nodes/noop.node.d.ts.map +1 -0
  166. package/dist/nodes/noop.node.js +32 -0
  167. package/dist/nodes/noop.node.js.map +1 -0
  168. package/dist/nodes/placeholder.node.d.ts +10 -0
  169. package/dist/nodes/placeholder.node.d.ts.map +1 -0
  170. package/dist/nodes/placeholder.node.js +50 -0
  171. package/dist/nodes/placeholder.node.js.map +1 -0
  172. package/dist/nodes/remove-duplicates.node.d.ts +9 -0
  173. package/dist/nodes/remove-duplicates.node.d.ts.map +1 -0
  174. package/dist/nodes/remove-duplicates.node.js +68 -0
  175. package/dist/nodes/remove-duplicates.node.js.map +1 -0
  176. package/dist/nodes/respond-to-webhook.node.d.ts +14 -0
  177. package/dist/nodes/respond-to-webhook.node.d.ts.map +1 -0
  178. package/dist/nodes/respond-to-webhook.node.js +116 -0
  179. package/dist/nodes/respond-to-webhook.node.js.map +1 -0
  180. package/dist/nodes/schedule-trigger.node.d.ts +9 -0
  181. package/dist/nodes/schedule-trigger.node.d.ts.map +1 -0
  182. package/dist/nodes/schedule-trigger.node.js +67 -0
  183. package/dist/nodes/schedule-trigger.node.js.map +1 -0
  184. package/dist/nodes/set.node.d.ts +12 -0
  185. package/dist/nodes/set.node.d.ts.map +1 -0
  186. package/dist/nodes/set.node.js +81 -0
  187. package/dist/nodes/set.node.js.map +1 -0
  188. package/dist/nodes/sort.node.d.ts +9 -0
  189. package/dist/nodes/sort.node.d.ts.map +1 -0
  190. package/dist/nodes/sort.node.js +61 -0
  191. package/dist/nodes/sort.node.js.map +1 -0
  192. package/dist/nodes/split-in-batches.node.d.ts +9 -0
  193. package/dist/nodes/split-in-batches.node.d.ts.map +1 -0
  194. package/dist/nodes/split-in-batches.node.js +53 -0
  195. package/dist/nodes/split-in-batches.node.js.map +1 -0
  196. package/dist/nodes/split-out.node.d.ts +9 -0
  197. package/dist/nodes/split-out.node.d.ts.map +1 -0
  198. package/dist/nodes/split-out.node.js +76 -0
  199. package/dist/nodes/split-out.node.js.map +1 -0
  200. package/dist/nodes/switch.node.d.ts +16 -0
  201. package/dist/nodes/switch.node.d.ts.map +1 -0
  202. package/dist/nodes/switch.node.js +156 -0
  203. package/dist/nodes/switch.node.js.map +1 -0
  204. package/dist/nodes/wait.node.d.ts +12 -0
  205. package/dist/nodes/wait.node.d.ts.map +1 -0
  206. package/dist/nodes/wait.node.js +81 -0
  207. package/dist/nodes/wait.node.js.map +1 -0
  208. package/dist/nodes/webhook.node.d.ts +9 -0
  209. package/dist/nodes/webhook.node.d.ts.map +1 -0
  210. package/dist/nodes/webhook.node.js +69 -0
  211. package/dist/nodes/webhook.node.js.map +1 -0
  212. package/dist/services/ai-workflow-session.service.d.ts +31 -0
  213. package/dist/services/ai-workflow-session.service.d.ts.map +1 -0
  214. package/dist/services/ai-workflow-session.service.js +118 -0
  215. package/dist/services/ai-workflow-session.service.js.map +1 -0
  216. package/dist/services/credential.service.d.ts +57 -0
  217. package/dist/services/credential.service.d.ts.map +1 -0
  218. package/dist/services/credential.service.js +155 -0
  219. package/dist/services/credential.service.js.map +1 -0
  220. package/dist/services/index.d.ts +10 -0
  221. package/dist/services/index.d.ts.map +1 -0
  222. package/dist/services/index.js +14 -0
  223. package/dist/services/index.js.map +1 -0
  224. package/dist/services/push.service.d.ts +60 -0
  225. package/dist/services/push.service.d.ts.map +1 -0
  226. package/dist/services/push.service.js +121 -0
  227. package/dist/services/push.service.js.map +1 -0
  228. package/dist/services/workflow-ai.service.d.ts +61 -0
  229. package/dist/services/workflow-ai.service.d.ts.map +1 -0
  230. package/dist/services/workflow-ai.service.js +219 -0
  231. package/dist/services/workflow-ai.service.js.map +1 -0
  232. package/dist/services/workflow-context.service.d.ts +32 -0
  233. package/dist/services/workflow-context.service.d.ts.map +1 -0
  234. package/dist/services/workflow-context.service.js +155 -0
  235. package/dist/services/workflow-context.service.js.map +1 -0
  236. package/dist/services/workflow-engine.service.d.ts +90 -0
  237. package/dist/services/workflow-engine.service.d.ts.map +1 -0
  238. package/dist/services/workflow-engine.service.js +305 -0
  239. package/dist/services/workflow-engine.service.js.map +1 -0
  240. package/dist/services/workflow.service.d.ts +84 -0
  241. package/dist/services/workflow.service.d.ts.map +1 -0
  242. package/dist/services/workflow.service.js +241 -0
  243. package/dist/services/workflow.service.js.map +1 -0
  244. package/dist/triggers/cron-trigger.d.ts +39 -0
  245. package/dist/triggers/cron-trigger.d.ts.map +1 -0
  246. package/dist/triggers/cron-trigger.js +137 -0
  247. package/dist/triggers/cron-trigger.js.map +1 -0
  248. package/dist/triggers/index.d.ts +3 -0
  249. package/dist/triggers/index.d.ts.map +1 -0
  250. package/dist/triggers/index.js +8 -0
  251. package/dist/triggers/index.js.map +1 -0
  252. package/dist/triggers/webhook-trigger.d.ts +51 -0
  253. package/dist/triggers/webhook-trigger.d.ts.map +1 -0
  254. package/dist/triggers/webhook-trigger.js +122 -0
  255. package/dist/triggers/webhook-trigger.js.map +1 -0
  256. package/dist/types/index.d.ts +5 -0
  257. package/dist/types/index.d.ts.map +1 -0
  258. package/dist/types/index.js +8 -0
  259. package/dist/types/index.js.map +1 -0
  260. package/dist/types/node.types.d.ts +313 -0
  261. package/dist/types/node.types.d.ts.map +1 -0
  262. package/dist/types/node.types.js +23 -0
  263. package/dist/types/node.types.js.map +1 -0
  264. package/dist/types/workflow.types.d.ts +153 -0
  265. package/dist/types/workflow.types.d.ts.map +1 -0
  266. package/dist/types/workflow.types.js +44 -0
  267. package/dist/types/workflow.types.js.map +1 -0
  268. package/dist/utils/n8n-converter.d.ts +52 -0
  269. package/dist/utils/n8n-converter.d.ts.map +1 -0
  270. package/dist/utils/n8n-converter.js +107 -0
  271. package/dist/utils/n8n-converter.js.map +1 -0
  272. package/dist/utils/n8n-node-map.d.ts +6 -0
  273. package/dist/utils/n8n-node-map.d.ts.map +1 -0
  274. package/dist/utils/n8n-node-map.js +59 -0
  275. package/dist/utils/n8n-node-map.js.map +1 -0
  276. package/dist/workflow.module.d.ts +40 -0
  277. package/dist/workflow.module.d.ts.map +1 -0
  278. package/dist/workflow.module.js +240 -0
  279. package/dist/workflow.module.js.map +1 -0
  280. package/package.json +97 -0
  281. package/web/components/ChatPanel.tsx +344 -0
  282. package/web/components/N8nIframe.tsx +119 -0
  283. package/web/components/SessionPanel.tsx +301 -0
  284. package/web/components/ToolPanel.tsx +404 -0
  285. package/web/components/WorkflowDiff.tsx +161 -0
  286. package/web/components/WorkflowGraph.tsx +158 -0
  287. package/web/components/WorkflowPreviewPanel.tsx +186 -0
  288. package/web/hooks/use-n8n-session.ts +46 -0
  289. package/web/index.ts +29 -0
  290. package/web/manifest.ts +16 -0
  291. package/web/messages/en-US.json +94 -0
  292. package/web/messages/zh-CN.json +94 -0
  293. package/web/pages/AiDesignPage.tsx +215 -0
  294. package/web/pages/CredentialsPage.tsx +7 -0
  295. package/web/pages/ExecutionsPage.tsx +7 -0
  296. package/web/pages/WorkflowsPage.tsx +7 -0
  297. package/web/services/workflow-ai-service.ts +173 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-resolver.js","sourceRoot":"","sources":["../../src/core/expression-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { INodeType, INodeTypeDescription } from '../types/index.js';
2
+ /**
3
+ * Node Registry — manages available node types.
4
+ * Nodes are registered at startup and looked up by name during execution.
5
+ */
6
+ export declare class NodeRegistry {
7
+ private readonly nodes;
8
+ private logger;
9
+ /** Register a node type. */
10
+ register(nodeType: INodeType): void;
11
+ /** Register multiple node types at once. */
12
+ registerMany(nodeTypes: INodeType[]): void;
13
+ /** Get a node type by name. */
14
+ get(name: string): INodeType | undefined;
15
+ /** Get a node type by name, throw if not found. */
16
+ getOrThrow(name: string): INodeType;
17
+ /** Get all registered node type descriptions (for the editor panel). */
18
+ getAllDescriptions(): INodeTypeDescription[];
19
+ /** Check if a node type exists. */
20
+ has(name: string): boolean;
21
+ /** Get count of registered node types. */
22
+ get size(): number;
23
+ }
24
+ //# sourceMappingURL=node-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-registry.d.ts","sourceRoot":"","sources":["../../src/core/node-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzE;;;GAGG;AACH,qBACa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,MAAM,CAAsD;IAEpE,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IASnC,4CAA4C;IAC5C,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI;IAM1C,+BAA+B;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIxC,mDAAmD;IACnD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAQnC,wEAAwE;IACxE,kBAAkB,IAAI,oBAAoB,EAAE;IAI5C,mCAAmC;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,0CAA0C;IAC1C,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.NodeRegistry = void 0;
10
+ const core_1 = require("@octo/core");
11
+ /**
12
+ * Node Registry — manages available node types.
13
+ * Nodes are registered at startup and looked up by name during execution.
14
+ */
15
+ let NodeRegistry = class NodeRegistry {
16
+ nodes = new Map();
17
+ logger = core_1.Container.get(core_1.LoggerService).child('NodeRegistry');
18
+ /** Register a node type. */
19
+ register(nodeType) {
20
+ const name = nodeType.description.name;
21
+ if (this.nodes.has(name)) {
22
+ this.logger.warn(`Node type '${name}' is already registered, overwriting`);
23
+ }
24
+ this.nodes.set(name, nodeType);
25
+ this.logger.debug(`Registered node type: ${name}`);
26
+ }
27
+ /** Register multiple node types at once. */
28
+ registerMany(nodeTypes) {
29
+ for (const nt of nodeTypes) {
30
+ this.register(nt);
31
+ }
32
+ }
33
+ /** Get a node type by name. */
34
+ get(name) {
35
+ return this.nodes.get(name);
36
+ }
37
+ /** Get a node type by name, throw if not found. */
38
+ getOrThrow(name) {
39
+ const node = this.nodes.get(name);
40
+ if (!node) {
41
+ throw new Error(`Node type '${name}' is not registered`);
42
+ }
43
+ return node;
44
+ }
45
+ /** Get all registered node type descriptions (for the editor panel). */
46
+ getAllDescriptions() {
47
+ return Array.from(this.nodes.values()).map((n) => n.description);
48
+ }
49
+ /** Check if a node type exists. */
50
+ has(name) {
51
+ return this.nodes.has(name);
52
+ }
53
+ /** Get count of registered node types. */
54
+ get size() {
55
+ return this.nodes.size;
56
+ }
57
+ };
58
+ exports.NodeRegistry = NodeRegistry;
59
+ exports.NodeRegistry = NodeRegistry = __decorate([
60
+ (0, core_1.Service)()
61
+ ], NodeRegistry);
62
+ //# sourceMappingURL=node-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-registry.js","sourceRoot":"","sources":["../../src/core/node-registry.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qCAA+D;AAG/D;;;GAGG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAY;IACN,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC9C,MAAM,GAAG,gBAAS,CAAC,GAAG,CAAC,oBAAa,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAEpE,4BAA4B;IAC5B,QAAQ,CAAC,QAAmB;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,sCAAsC,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,4CAA4C;IAC5C,YAAY,CAAC,SAAsB;QACjC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,mDAAmD;IACnD,UAAU,CAAC,IAAY;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,qBAAqB,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,kBAAkB;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,mCAAmC;IACnC,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,0CAA0C;IAC1C,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF,CAAA;AAjDY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,cAAO,GAAE;GACG,YAAY,CAiDxB"}
@@ -0,0 +1,50 @@
1
+ import type { INodeExecutionData, IWorkflowDefinition, IWorkflowExecutionResult } from '../types/index.js';
2
+ /**
3
+ * Workflow Executor — n8n-style stack-based execution engine.
4
+ *
5
+ * Execution strategy:
6
+ * 1. Find start nodes (triggers or nodes with no incoming connections)
7
+ * 2. Push start nodes onto the execution stack
8
+ * 3. While stack is not empty:
9
+ * a. Pop a node from the stack
10
+ * b. Execute the node
11
+ * c. Push downstream nodes onto the stack with output data
12
+ * 4. Collect all node results
13
+ *
14
+ * This approach (vs topological sort) supports:
15
+ * - Dynamic branching (IF/Switch nodes)
16
+ * - Error output routing
17
+ * - Retry on failure
18
+ * - Pin data (skip execution, use fixed data)
19
+ * - Partial execution (execute from specific node)
20
+ * - Wait/pause/resume
21
+ */
22
+ export declare class WorkflowExecutor {
23
+ private logger;
24
+ private nodeRegistry;
25
+ /**
26
+ * Execute a workflow definition.
27
+ */
28
+ execute(definition: IWorkflowDefinition, triggerData?: INodeExecutionData[], variables?: Record<string, unknown>, options?: {
29
+ destinationNode?: string;
30
+ abortSignal?: AbortSignal;
31
+ mode?: string;
32
+ }): Promise<IWorkflowExecutionResult>;
33
+ /**
34
+ * Find start nodes — nodes with no incoming main connections.
35
+ */
36
+ private findStartNodes;
37
+ /**
38
+ * Push downstream nodes onto the execution stack.
39
+ */
40
+ private addDownstreamNodesToStack;
41
+ /**
42
+ * Flatten task data connections into a single array of items.
43
+ */
44
+ private flattenInputData;
45
+ /**
46
+ * Build the execution context for a node.
47
+ */
48
+ private buildContext;
49
+ }
50
+ //# sourceMappingURL=workflow-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../src/core/workflow-executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,kBAAkB,EAGlB,mBAAmB,EAEnB,wBAAwB,EAYzB,MAAM,mBAAmB,CAAC;AAM3B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA0D;IACxE,OAAO,CAAC,YAAY,CAA+B;IAEnD;;OAEG;IACG,OAAO,CACX,UAAU,EAAE,mBAAmB,EAC/B,WAAW,CAAC,EAAE,kBAAkB,EAAE,EAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GACA,OAAO,CAAC,wBAAwB,CAAC;IA4RpC;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0EjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,YAAY;CAgGrB"}
@@ -0,0 +1,458 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowExecutor = void 0;
4
+ const core_1 = require("@octo/core");
5
+ const index_js_1 = require("../types/index.js");
6
+ const node_registry_js_1 = require("./node-registry.js");
7
+ const expression_resolver_js_1 = require("./expression-resolver.js");
8
+ /**
9
+ * Workflow Executor — n8n-style stack-based execution engine.
10
+ *
11
+ * Execution strategy:
12
+ * 1. Find start nodes (triggers or nodes with no incoming connections)
13
+ * 2. Push start nodes onto the execution stack
14
+ * 3. While stack is not empty:
15
+ * a. Pop a node from the stack
16
+ * b. Execute the node
17
+ * c. Push downstream nodes onto the stack with output data
18
+ * 4. Collect all node results
19
+ *
20
+ * This approach (vs topological sort) supports:
21
+ * - Dynamic branching (IF/Switch nodes)
22
+ * - Error output routing
23
+ * - Retry on failure
24
+ * - Pin data (skip execution, use fixed data)
25
+ * - Partial execution (execute from specific node)
26
+ * - Wait/pause/resume
27
+ */
28
+ class WorkflowExecutor {
29
+ logger = core_1.Container.get(core_1.LoggerService).child('WorkflowExecutor');
30
+ nodeRegistry = core_1.Container.get(node_registry_js_1.NodeRegistry);
31
+ /**
32
+ * Execute a workflow definition.
33
+ */
34
+ async execute(definition, triggerData, variables, options) {
35
+ const startedAt = new Date();
36
+ const mode = (options?.mode ?? 'manual');
37
+ const nodeResults = new Map();
38
+ // Build connection indexes for efficient lookup
39
+ const { bySource, byDestination } = (0, index_js_1.buildConnectionIndexes)(definition.connections);
40
+ // Build node map for quick access
41
+ const nodeMap = new Map();
42
+ for (const node of definition.nodes) {
43
+ nodeMap.set(node.id, node);
44
+ }
45
+ // Initialize run execution data (n8n-style)
46
+ const runData = {};
47
+ const runExecutionData = {
48
+ startData: options?.destinationNode
49
+ ? { destinationNode: options.destinationNode }
50
+ : undefined,
51
+ resultData: {
52
+ runData,
53
+ pinData: definition.pinData,
54
+ },
55
+ executionData: {
56
+ nodeExecutionStack: [],
57
+ waitingExecution: {},
58
+ waitingExecutionSource: {},
59
+ },
60
+ };
61
+ // Track node outputs for expression resolution
62
+ const nodeOutputsForExpr = {};
63
+ let status = 'running';
64
+ let executionError;
65
+ try {
66
+ // Find start nodes and push to stack
67
+ const startNodes = this.findStartNodes(definition.nodes, byDestination);
68
+ this.logger.info(`Executing workflow with ${definition.nodes.length} nodes, ${startNodes.length} start node(s)`);
69
+ for (const startNode of startNodes) {
70
+ const initialData = {
71
+ main: [triggerData && triggerData.length > 0 ? triggerData : [{ json: {} }]],
72
+ };
73
+ runExecutionData.executionData.nodeExecutionStack.push({
74
+ node: startNode,
75
+ data: initialData,
76
+ source: null,
77
+ });
78
+ }
79
+ // Dead loop detection
80
+ let lastExecutionTry = '';
81
+ let maxIterations = definition.nodes.length * 10; // safety limit
82
+ // ── Main execution loop (n8n-style) ──
83
+ while (runExecutionData.executionData.nodeExecutionStack.length > 0) {
84
+ // Check abort signal
85
+ if (options?.abortSignal?.aborted) {
86
+ status = 'canceled';
87
+ break;
88
+ }
89
+ // Safety: prevent infinite loops
90
+ if (--maxIterations <= 0) {
91
+ throw new Error('Workflow execution exceeded maximum iterations — possible infinite loop');
92
+ }
93
+ // Pop next node from stack
94
+ const executeData = runExecutionData.executionData.nodeExecutionStack.shift();
95
+ const executionNode = executeData.node;
96
+ // Dead loop detection
97
+ const runIndex = runData[executionNode.name]?.length ?? 0;
98
+ const currentExecutionTry = `${executionNode.name}:${runIndex}`;
99
+ if (currentExecutionTry === lastExecutionTry) {
100
+ throw new Error(`Stopped execution: endless loop detected at node '${executionNode.name}'`);
101
+ }
102
+ lastExecutionTry = currentExecutionTry;
103
+ // Skip disabled nodes — pass through input data
104
+ if (executionNode.disabled) {
105
+ nodeResults.set(executionNode.id, {
106
+ nodeId: executionNode.id,
107
+ nodeName: executionNode.name,
108
+ nodeType: executionNode.type,
109
+ status: 'skipped',
110
+ startTime: Date.now(),
111
+ endTime: Date.now(),
112
+ });
113
+ // Pass through: forward main input[0] to all downstream
114
+ const passData = executeData.data.main?.[0] ?? [];
115
+ this.addDownstreamNodesToStack(executionNode, { main: [passData] }, bySource, nodeMap, runExecutionData);
116
+ continue;
117
+ }
118
+ // Check destination node filter
119
+ if (runExecutionData.startData?.destinationNode &&
120
+ runExecutionData.startData.destinationNode === executionNode.name) {
121
+ // Reached destination — execute this node but don't push downstream
122
+ }
123
+ const nodeStart = Date.now();
124
+ let nodeSuccessData = null;
125
+ let nodeError;
126
+ // Check for pin data
127
+ const pinData = runExecutionData.resultData.pinData;
128
+ if (pinData && pinData[executionNode.name] !== undefined) {
129
+ nodeSuccessData = [pinData[executionNode.name]];
130
+ this.logger.debug(`Node '${executionNode.name}' using pin data`);
131
+ }
132
+ else {
133
+ // Execute the node with retry logic
134
+ const maxTries = executionNode.retryOnFail ? Math.min(5, Math.max(2, executionNode.maxTries ?? 3)) : 1;
135
+ const waitBetweenTries = executionNode.retryOnFail ? Math.min(5000, Math.max(0, executionNode.waitBetweenTries ?? 1000)) : 0;
136
+ for (let tryIndex = 0; tryIndex < maxTries; tryIndex++) {
137
+ try {
138
+ if (tryIndex > 0 && waitBetweenTries > 0) {
139
+ await new Promise((resolve) => setTimeout(resolve, waitBetweenTries));
140
+ }
141
+ const nodeType = this.nodeRegistry.getOrThrow(executionNode.type);
142
+ // Gather input data from executeData
143
+ const inputData = this.flattenInputData(executeData.data);
144
+ // Build context
145
+ const context = this.buildContext(executionNode, inputData, executeData.data, nodeOutputsForExpr, variables);
146
+ // Execute
147
+ nodeSuccessData = await nodeType.execute(context);
148
+ nodeError = undefined;
149
+ break; // success, exit retry loop
150
+ }
151
+ catch (error) {
152
+ nodeError = error instanceof Error ? error.message : String(error);
153
+ this.logger.error(`Node '${executionNode.name}' attempt ${tryIndex + 1}/${maxTries} failed: ${nodeError}`);
154
+ }
155
+ }
156
+ }
157
+ // Record task data (n8n style)
158
+ const taskData = {
159
+ startTime: nodeStart,
160
+ executionTime: Date.now() - nodeStart,
161
+ executionStatus: nodeError ? 'error' : 'success',
162
+ };
163
+ if (nodeError) {
164
+ taskData.error = { message: nodeError };
165
+ // Handle error based on node configuration
166
+ const shouldContinue = executionNode.continueOnFail ||
167
+ executionNode.onError === 'continueRegularOutput' ||
168
+ executionNode.onError === 'continueErrorOutput';
169
+ if (shouldContinue) {
170
+ // Continue with error — pass input data through
171
+ const passData = executeData.data.main?.[0] ?? [];
172
+ if (executionNode.onError === 'continueErrorOutput') {
173
+ // Route to error output (last output)
174
+ const nodeType = this.nodeRegistry.get(executionNode.type);
175
+ const outputs = nodeType?.description.outputs ?? [];
176
+ const errorItems = passData.map((item) => ({
177
+ json: { ...item.json, error: nodeError },
178
+ }));
179
+ nodeSuccessData = [];
180
+ for (let i = 0; i < outputs.length - 1; i++) {
181
+ nodeSuccessData.push([]);
182
+ }
183
+ nodeSuccessData.push(errorItems);
184
+ }
185
+ else {
186
+ // Continue on regular output with error info
187
+ nodeSuccessData = [passData.map((item) => ({
188
+ json: { ...item.json, error: nodeError },
189
+ }))];
190
+ }
191
+ }
192
+ else {
193
+ // Stop execution
194
+ nodeResults.set(executionNode.id, {
195
+ nodeId: executionNode.id,
196
+ nodeName: executionNode.name,
197
+ nodeType: executionNode.type,
198
+ status: 'error',
199
+ error: nodeError,
200
+ startTime: nodeStart,
201
+ endTime: Date.now(),
202
+ });
203
+ if (!runData[executionNode.name])
204
+ runData[executionNode.name] = [];
205
+ runData[executionNode.name].push(taskData);
206
+ runExecutionData.resultData.lastNodeExecuted = executionNode.name;
207
+ status = 'failed';
208
+ executionError = `Node '${executionNode.name}' failed: ${nodeError}`;
209
+ break;
210
+ }
211
+ }
212
+ // Record success
213
+ if (nodeSuccessData) {
214
+ taskData.data = { main: nodeSuccessData };
215
+ // Store for expression resolution
216
+ if (nodeSuccessData[0]?.[0]) {
217
+ nodeOutputsForExpr[executionNode.name] = { json: nodeSuccessData[0][0].json };
218
+ }
219
+ nodeResults.set(executionNode.id, {
220
+ nodeId: executionNode.id,
221
+ nodeName: executionNode.name,
222
+ nodeType: executionNode.type,
223
+ status: nodeError ? 'error' : 'success',
224
+ data: nodeSuccessData,
225
+ error: nodeError,
226
+ startTime: nodeStart,
227
+ endTime: Date.now(),
228
+ });
229
+ }
230
+ if (!runData[executionNode.name])
231
+ runData[executionNode.name] = [];
232
+ runData[executionNode.name].push(taskData);
233
+ runExecutionData.resultData.lastNodeExecuted = executionNode.name;
234
+ this.logger.debug(`Node '${executionNode.name}' executed (${Date.now() - nodeStart}ms)`);
235
+ // Push downstream nodes to stack
236
+ if (nodeSuccessData &&
237
+ !(runExecutionData.startData?.destinationNode &&
238
+ runExecutionData.startData.destinationNode === executionNode.name)) {
239
+ this.addDownstreamNodesToStack(executionNode, { main: nodeSuccessData }, bySource, nodeMap, runExecutionData);
240
+ }
241
+ }
242
+ if (status === 'running') {
243
+ status = 'completed';
244
+ }
245
+ }
246
+ catch (error) {
247
+ status = 'failed';
248
+ executionError = error instanceof Error ? error.message : String(error);
249
+ this.logger.error(`Workflow execution failed: ${executionError}`);
250
+ }
251
+ return {
252
+ status,
253
+ mode,
254
+ startedAt,
255
+ completedAt: new Date(),
256
+ nodeResults,
257
+ runData,
258
+ error: executionError,
259
+ };
260
+ }
261
+ /**
262
+ * Find start nodes — nodes with no incoming main connections.
263
+ */
264
+ findStartNodes(nodes, byDestination) {
265
+ const startNodes = [];
266
+ for (const node of nodes) {
267
+ if (node.disabled)
268
+ continue;
269
+ const incomingMain = byDestination[node.id]?.main;
270
+ const hasIncoming = incomingMain && incomingMain.some((conns) => conns.length > 0);
271
+ if (!hasIncoming) {
272
+ startNodes.push(node);
273
+ }
274
+ }
275
+ // If no start nodes found, use the first non-disabled node
276
+ if (startNodes.length === 0 && nodes.length > 0) {
277
+ const firstActive = nodes.find((n) => !n.disabled);
278
+ if (firstActive)
279
+ startNodes.push(firstActive);
280
+ }
281
+ return startNodes;
282
+ }
283
+ /**
284
+ * Push downstream nodes onto the execution stack.
285
+ */
286
+ addDownstreamNodesToStack(executionNode, outputData, bySource, nodeMap, runExecutionData) {
287
+ const sourceConnections = bySource[executionNode.id];
288
+ if (!sourceConnections)
289
+ return;
290
+ for (const [connType, outputGroups] of Object.entries(sourceConnections)) {
291
+ for (let outputIndex = 0; outputIndex < outputGroups.length; outputIndex++) {
292
+ const connections = outputGroups[outputIndex];
293
+ const outputItems = outputData[connType]?.[outputIndex];
294
+ // Skip if no output data for this index
295
+ if (!outputItems || outputItems.length === 0)
296
+ continue;
297
+ for (const conn of connections) {
298
+ const targetNode = nodeMap.get(conn.node);
299
+ if (!targetNode)
300
+ continue;
301
+ // Build input data for the target node
302
+ const targetData = { main: [] };
303
+ // Ensure the array is large enough
304
+ while (targetData.main.length <= conn.index) {
305
+ targetData.main.push(null);
306
+ }
307
+ targetData.main[conn.index] = outputItems;
308
+ // Check if this target is already in the stack (merge inputs)
309
+ const existingEntry = runExecutionData.executionData.nodeExecutionStack.find((entry) => entry.node.id === targetNode.id);
310
+ if (existingEntry) {
311
+ // Merge data into existing entry
312
+ if (!existingEntry.data.main)
313
+ existingEntry.data.main = [];
314
+ while (existingEntry.data.main.length <= conn.index) {
315
+ existingEntry.data.main.push(null);
316
+ }
317
+ if (existingEntry.data.main[conn.index]) {
318
+ // Append items
319
+ existingEntry.data.main[conn.index] = [
320
+ ...existingEntry.data.main[conn.index],
321
+ ...outputItems,
322
+ ];
323
+ }
324
+ else {
325
+ existingEntry.data.main[conn.index] = outputItems;
326
+ }
327
+ }
328
+ else {
329
+ // Build source info
330
+ const source = {
331
+ main: [],
332
+ };
333
+ while (source.main.length <= conn.index) {
334
+ source.main.push(null);
335
+ }
336
+ source.main[conn.index] = {
337
+ previousNode: executionNode.id,
338
+ previousNodeOutput: outputIndex,
339
+ };
340
+ runExecutionData.executionData.nodeExecutionStack.push({
341
+ node: targetNode,
342
+ data: targetData,
343
+ source,
344
+ });
345
+ }
346
+ }
347
+ }
348
+ }
349
+ }
350
+ /**
351
+ * Flatten task data connections into a single array of items.
352
+ */
353
+ flattenInputData(data) {
354
+ const items = [];
355
+ const mainInputs = data.main;
356
+ if (mainInputs) {
357
+ for (const input of mainInputs) {
358
+ if (input) {
359
+ items.push(...input);
360
+ }
361
+ }
362
+ }
363
+ return items;
364
+ }
365
+ /**
366
+ * Build the execution context for a node.
367
+ */
368
+ buildContext(node, inputData, taskDataConnections, nodeOutputsForExpr, variables) {
369
+ const self = this;
370
+ const expressionContext = {
371
+ currentItem: inputData[0] ? { json: inputData[0].json } : undefined,
372
+ inputData: inputData.map((item) => ({ json: item.json })),
373
+ nodeOutputs: nodeOutputsForExpr,
374
+ variables,
375
+ };
376
+ return {
377
+ getParam(name) {
378
+ const raw = node.parameters[name];
379
+ return expression_resolver_js_1.ExpressionResolver.resolve(raw, expressionContext);
380
+ },
381
+ getInputData(inputIndex) {
382
+ if (inputIndex !== undefined) {
383
+ return taskDataConnections.main?.[inputIndex] ?? [];
384
+ }
385
+ return inputData;
386
+ },
387
+ logger: {
388
+ info: (msg) => self.logger.info(`[${node.name}] ${msg}`),
389
+ warn: (msg) => self.logger.warn(`[${node.name}] ${msg}`),
390
+ error: (msg) => self.logger.error(`[${node.name}] ${msg}`),
391
+ debug: (msg) => self.logger.debug(`[${node.name}] ${msg}`),
392
+ },
393
+ resolveExpression(expression, itemIndex) {
394
+ const ctx = { ...expressionContext };
395
+ if (itemIndex !== undefined && inputData[itemIndex]) {
396
+ ctx.currentItem = { json: inputData[itemIndex].json };
397
+ ctx.itemIndex = itemIndex;
398
+ }
399
+ return expression_resolver_js_1.ExpressionResolver.resolveString(expression, ctx);
400
+ },
401
+ getWorkflowVariable(name) {
402
+ return variables?.[name];
403
+ },
404
+ helpers: {
405
+ async httpRequest(options) {
406
+ const url = new URL(options.url);
407
+ if (options.qs) {
408
+ for (const [k, v] of Object.entries(options.qs)) {
409
+ url.searchParams.set(k, v);
410
+ }
411
+ }
412
+ const response = await fetch(url.toString(), {
413
+ method: options.method,
414
+ headers: {
415
+ 'Content-Type': 'application/json',
416
+ ...(options.headers ?? {}),
417
+ },
418
+ body: options.body ? JSON.stringify(options.body) : undefined,
419
+ signal: options.timeout
420
+ ? AbortSignal.timeout(options.timeout)
421
+ : undefined,
422
+ });
423
+ const contentType = response.headers.get('content-type') ?? '';
424
+ if (contentType.includes('application/json')) {
425
+ return response.json();
426
+ }
427
+ return response.text();
428
+ },
429
+ async executeWorkflow(_workflowId, items) {
430
+ // TODO(TASK-future): Implement sub-workflow execution via WorkflowEngineService
431
+ return items;
432
+ },
433
+ },
434
+ getNode() {
435
+ return {
436
+ id: node.id,
437
+ name: node.name,
438
+ type: node.type,
439
+ parameters: node.parameters,
440
+ };
441
+ },
442
+ getWorkflowStaticData(_type) {
443
+ return {};
444
+ },
445
+ getExecutionId() {
446
+ return '';
447
+ },
448
+ getWorkflow() {
449
+ return { id: '', name: '', active: false };
450
+ },
451
+ getMode() {
452
+ return 'manual';
453
+ },
454
+ };
455
+ }
456
+ }
457
+ exports.WorkflowExecutor = WorkflowExecutor;
458
+ //# sourceMappingURL=workflow-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-executor.js","sourceRoot":"","sources":["../../src/core/workflow-executor.ts"],"names":[],"mappings":"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"}