@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,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isN8nFormat = isN8nFormat;
4
+ exports.stripN8nPrefix = stripN8nPrefix;
5
+ exports.convertN8nToOcto = convertN8nToOcto;
6
+ exports.analyzeN8nWorkflow = analyzeN8nWorkflow;
7
+ /**
8
+ * n8n workflow JSON format detection and conversion to Octo format.
9
+ */
10
+ const crypto_1 = require("crypto");
11
+ const n8n_node_map_js_1 = require("./n8n-node-map.js");
12
+ // ── Format detection ─────────────────────────────────────
13
+ function isN8nFormat(data) {
14
+ // Feature 1: connections is an object (keyed by node name), not an array
15
+ if (data.connections && typeof data.connections === 'object' && !Array.isArray(data.connections)) {
16
+ const keys = Object.keys(data.connections);
17
+ if (keys.length > 0)
18
+ return true;
19
+ }
20
+ // Feature 2: nodes array contains types with "." prefix (e.g. "n8n-nodes-base.httpRequest")
21
+ if (Array.isArray(data.nodes)) {
22
+ const nodes = data.nodes;
23
+ if (nodes.some(n => typeof n.type === 'string' && n.type.includes('.'))) {
24
+ return true;
25
+ }
26
+ }
27
+ return false;
28
+ }
29
+ // ── Type name conversion ─────────────────────────────────
30
+ function stripN8nPrefix(type) {
31
+ // "n8n-nodes-base.httpRequest" → "httpRequest"
32
+ // "@n8n/n8n-nodes-langchain.agent" → "agent"
33
+ const parts = type.split('.');
34
+ const stripped = parts[parts.length - 1];
35
+ return n8n_node_map_js_1.N8N_NODE_ALIASES[stripped] || n8n_node_map_js_1.N8N_NODE_ALIASES[type] || stripped;
36
+ }
37
+ // ── Core conversion ──────────────────────────────────────
38
+ function convertN8nToOcto(n8nJson) {
39
+ // 1. Build name → id mapping (n8n references nodes by name, Octo by ID)
40
+ const nameToId = new Map();
41
+ // 2. Convert nodes
42
+ const nodes = n8nJson.nodes.map((n8nNode) => {
43
+ const id = n8nNode.id || (0, crypto_1.randomUUID)();
44
+ nameToId.set(n8nNode.name, id);
45
+ return {
46
+ id,
47
+ type: stripN8nPrefix(n8nNode.type),
48
+ name: n8nNode.name,
49
+ position: n8nNode.position,
50
+ parameters: n8nNode.parameters || {},
51
+ disabled: n8nNode.disabled || false,
52
+ continueOnFail: n8nNode.continueOnFail,
53
+ onError: n8nNode.onError,
54
+ typeVersion: n8nNode.typeVersion,
55
+ credentials: n8nNode.credentials,
56
+ notes: n8nNode.notes,
57
+ color: n8nNode.color,
58
+ };
59
+ });
60
+ // 3. Convert connections
61
+ const connections = [];
62
+ for (const [sourceName, sourceConns] of Object.entries(n8nJson.connections)) {
63
+ const sourceId = nameToId.get(sourceName);
64
+ if (!sourceId)
65
+ continue;
66
+ for (const [connType, outputs] of Object.entries(sourceConns)) {
67
+ if (!outputs)
68
+ continue;
69
+ for (let outputIndex = 0; outputIndex < outputs.length; outputIndex++) {
70
+ const targets = outputs[outputIndex] || [];
71
+ for (const target of targets) {
72
+ const targetId = nameToId.get(target.node);
73
+ if (!targetId)
74
+ continue;
75
+ connections.push({
76
+ sourceNodeId: sourceId,
77
+ sourceOutputIndex: outputIndex,
78
+ targetNodeId: targetId,
79
+ targetInputIndex: target.index || 0,
80
+ type: connType || 'main',
81
+ });
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return {
87
+ nodes,
88
+ connections,
89
+ settings: n8nJson.settings,
90
+ pinData: n8nJson.pinData,
91
+ };
92
+ }
93
+ function analyzeN8nWorkflow(n8nJson, registeredTypes) {
94
+ const unknownNodes = [];
95
+ for (const node of n8nJson.nodes) {
96
+ const octoType = stripN8nPrefix(node.type);
97
+ if (!registeredTypes.has(octoType)) {
98
+ unknownNodes.push(`${node.name} (${node.type})`);
99
+ }
100
+ }
101
+ return {
102
+ totalNodes: n8nJson.nodes.length,
103
+ knownNodes: n8nJson.nodes.length - unknownNodes.length,
104
+ unknownNodes,
105
+ };
106
+ }
107
+ //# sourceMappingURL=n8n-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n8n-converter.js","sourceRoot":"","sources":["../../src/utils/n8n-converter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * n8n node name → Octo node name mapping.
3
+ * Handles naming differences between n8n and Octo node types.
4
+ */
5
+ export declare const N8N_NODE_ALIASES: Record<string, string>;
6
+ //# sourceMappingURL=n8n-node-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n8n-node-map.d.ts","sourceRoot":"","sources":["../../src/utils/n8n-node-map.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkDnD,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.N8N_NODE_ALIASES = void 0;
4
+ /**
5
+ * n8n node name → Octo node name mapping.
6
+ * Handles naming differences between n8n and Octo node types.
7
+ */
8
+ exports.N8N_NODE_ALIASES = {
9
+ // Direct mappings (n8n stripped name → Octo name)
10
+ 'manualTrigger': 'manualTrigger',
11
+ 'scheduleTrigger': 'scheduleTrigger',
12
+ 'httpRequest': 'httpRequest',
13
+ 'if': 'if',
14
+ 'switch': 'switch',
15
+ 'code': 'code',
16
+ 'set': 'set',
17
+ 'merge': 'merge',
18
+ 'wait': 'wait',
19
+ 'noOp': 'noOp',
20
+ 'errorTrigger': 'errorTrigger',
21
+ 'respondToWebhook': 'respondToWebhook',
22
+ 'filter': 'filter',
23
+ 'splitInBatches': 'splitInBatches',
24
+ 'splitOut': 'splitOut',
25
+ 'sort': 'sort',
26
+ 'removeDuplicates': 'removeDuplicates',
27
+ 'executeCommand': 'executeCommand',
28
+ 'aggregate': 'aggregate',
29
+ 'compareDatasets': 'compareDatasets',
30
+ 'dateTime': 'dateTime',
31
+ 'crypto': 'crypto',
32
+ 'itemLists': 'itemLists',
33
+ 'stopAndError': 'stopAndError',
34
+ // n8n-specific variations
35
+ 'manualTriggerNode': 'manualTrigger',
36
+ 'n8nTrigger': 'manualTrigger',
37
+ 'webhook': 'webhook',
38
+ 'Start': 'manualTrigger',
39
+ 'start': 'manualTrigger',
40
+ 'Function': 'code',
41
+ 'FunctionItem': 'code',
42
+ 'IF': 'if',
43
+ 'Set': 'set',
44
+ 'Merge': 'merge',
45
+ 'Switch': 'switch',
46
+ 'Wait': 'wait',
47
+ 'NoOp': 'noOp',
48
+ 'HttpRequest': 'httpRequest',
49
+ 'SplitInBatches': 'splitInBatches',
50
+ 'Filter': 'filter',
51
+ 'Sort': 'sort',
52
+ 'RemoveDuplicates': 'removeDuplicates',
53
+ 'ExecuteCommand': 'executeCommand',
54
+ 'ItemLists': 'itemLists',
55
+ 'Crypto': 'crypto',
56
+ 'DateTime': 'dateTime',
57
+ 'StopAndError': 'stopAndError',
58
+ };
59
+ //# sourceMappingURL=n8n-node-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"n8n-node-map.js","sourceRoot":"","sources":["../../src/utils/n8n-node-map.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,gBAAgB,GAA2B;IACtD,kDAAkD;IAClD,eAAe,EAAE,eAAe;IAChC,iBAAiB,EAAE,iBAAiB;IACpC,aAAa,EAAE,aAAa;IAC5B,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,cAAc,EAAE,cAAc;IAC9B,kBAAkB,EAAE,kBAAkB;IACtC,QAAQ,EAAE,QAAQ;IAClB,gBAAgB,EAAE,gBAAgB;IAClC,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,MAAM;IACd,kBAAkB,EAAE,kBAAkB;IACtC,gBAAgB,EAAE,gBAAgB;IAClC,WAAW,EAAE,WAAW;IACxB,iBAAiB,EAAE,iBAAiB;IACpC,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,WAAW;IACxB,cAAc,EAAE,cAAc;IAC9B,0BAA0B;IAC1B,mBAAmB,EAAE,eAAe;IACpC,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,MAAM;IAClB,cAAc,EAAE,MAAM;IACtB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,aAAa,EAAE,aAAa;IAC5B,gBAAgB,EAAE,gBAAgB;IAClC,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,MAAM;IACd,kBAAkB,EAAE,kBAAkB;IACtC,gBAAgB,EAAE,gBAAgB;IAClC,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,UAAU;IACtB,cAAc,EAAE,cAAc;CAC/B,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { IModule, IModuleContext } from '@octo/core';
2
+ import type { Express } from '@octo/core';
3
+ /**
4
+ * Workflow Module — self-built workflow engine inspired by n8n.
5
+ *
6
+ * Provides:
7
+ * - Workflow definition CRUD
8
+ * - n8n-based execution engine (via WorkflowEngineService)
9
+ * - 6 built-in nodes: ManualTrigger, IF, Code, HttpRequest, Set, Merge
10
+ * - Credential CRUD with AES-256-CBC encryption
11
+ * - Cron and Webhook trigger support
12
+ * - Expression resolution ({{ $json.field }})
13
+ * - Execution history persistence
14
+ * - WebSocket push for real-time execution events
15
+ */
16
+ export declare class WorkflowModule implements IModule {
17
+ readonly name = "workflow";
18
+ readonly entities: (typeof import("./entities/workflow-definition.entity.js").WorkflowDefinitionEntity | typeof import("./entities/workflow-execution.entity.js").WorkflowExecutionEntity | typeof import("./entities/credential-definition.entity.js").CredentialDefinitionEntity | typeof import("./entities/ai-workflow-session.entity.js").AiWorkflowSessionEntity | typeof import("./entities/ai-workflow-version.entity.js").AiWorkflowVersionEntity)[];
19
+ initialize(_context: IModuleContext): Promise<void>;
20
+ registerRoutes(app: Express, _context: IModuleContext): void;
21
+ /** Write the default AI system prompt to system_configs (overwrites on every startup). */
22
+ private seedAiSystemPrompt;
23
+ destroy(): Promise<void>;
24
+ /**
25
+ * Register a catch-all webhook route: POST/GET /api/webhooks/*
26
+ */
27
+ private registerWebhookRoute;
28
+ /**
29
+ * Register WebSocket upgrade handler for push events.
30
+ *
31
+ * Clients connect to ws://host/ws/push?userId=<id> to receive
32
+ * real-time execution events (executionStarted, nodeExecuteAfter, etc.).
33
+ *
34
+ * The actual WebSocket upgrade is handled by the HTTP server,
35
+ * so this registers a route that the server startup code can use
36
+ * to wire up the ws library.
37
+ */
38
+ private registerWebSocketHandler;
39
+ }
40
+ //# sourceMappingURL=workflow.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.module.d.ts","sourceRoot":"","sources":["../src/workflow.module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,YAAY,CAAC;AAiC7D;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAe,YAAW,OAAO;IAC5C,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,QAAQ,6aAA0B;IAErC,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+EzD,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAsC5D,0FAA0F;YAC5E,kBAAkB;IAwB1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;;;;;;;;OASG;IACH,OAAO,CAAC,wBAAwB;CAgBjC"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowModule = void 0;
4
+ const core_1 = require("@octo/core");
5
+ const auth_1 = require("@octo/auth");
6
+ const index_js_1 = require("./entities/index.js");
7
+ const node_registry_js_1 = require("./core/node-registry.js");
8
+ const workflow_service_js_1 = require("./services/workflow.service.js");
9
+ const workflow_engine_service_js_1 = require("./services/workflow-engine.service.js");
10
+ const push_service_js_1 = require("./services/push.service.js");
11
+ const workflow_controller_js_1 = require("./controllers/workflow.controller.js");
12
+ const credential_controller_js_1 = require("./controllers/credential.controller.js");
13
+ const workflow_ai_controller_js_1 = require("./controllers/workflow-ai.controller.js");
14
+ const ai_workflow_session_controller_js_1 = require("./controllers/ai-workflow-session.controller.js");
15
+ const ai_workflow_session_service_js_1 = require("./services/ai-workflow-session.service.js");
16
+ const workflow_ai_service_js_1 = require("./services/workflow-ai.service.js");
17
+ const cron_trigger_js_1 = require("./triggers/cron-trigger.js");
18
+ const webhook_trigger_js_1 = require("./triggers/webhook-trigger.js");
19
+ // n8n integration
20
+ const n8n_launcher_js_1 = require("./n8n/launcher/n8n-launcher.js");
21
+ const n8n_proxy_middleware_js_1 = require("./n8n/proxy/n8n-proxy.middleware.js");
22
+ const n8n_user_sync_service_js_1 = require("./n8n/sync/n8n-user-sync.service.js");
23
+ const n8n_session_controller_js_1 = require("./n8n/controllers/n8n-session.controller.js");
24
+ const n8n_execution_watcher_js_1 = require("./n8n/watcher/n8n-execution-watcher.js");
25
+ // Built-in Octo nodes
26
+ const manual_trigger_node_js_1 = require("./nodes/manual-trigger.node.js");
27
+ const if_node_js_1 = require("./nodes/if.node.js");
28
+ const code_node_js_1 = require("./nodes/code.node.js");
29
+ const http_request_node_js_1 = require("./nodes/http-request.node.js");
30
+ const set_node_js_1 = require("./nodes/set.node.js");
31
+ const merge_node_js_1 = require("./nodes/merge.node.js");
32
+ /**
33
+ * Workflow Module — self-built workflow engine inspired by n8n.
34
+ *
35
+ * Provides:
36
+ * - Workflow definition CRUD
37
+ * - n8n-based execution engine (via WorkflowEngineService)
38
+ * - 6 built-in nodes: ManualTrigger, IF, Code, HttpRequest, Set, Merge
39
+ * - Credential CRUD with AES-256-CBC encryption
40
+ * - Cron and Webhook trigger support
41
+ * - Expression resolution ({{ $json.field }})
42
+ * - Execution history persistence
43
+ * - WebSocket push for real-time execution events
44
+ */
45
+ class WorkflowModule {
46
+ name = 'workflow';
47
+ entities = [...index_js_1.WORKFLOW_ENTITIES];
48
+ async initialize(_context) {
49
+ const logger = core_1.Container.get(core_1.LoggerService);
50
+ // Initialize WorkflowService (needs repository access)
51
+ const workflowService = core_1.Container.get(workflow_service_js_1.WorkflowService);
52
+ workflowService.initialize();
53
+ // Initialize WorkflowEngineService (wraps executor + push)
54
+ const engineService = core_1.Container.get(workflow_engine_service_js_1.WorkflowEngineService);
55
+ engineService.initialize();
56
+ // Initialize AI workflow session service
57
+ const aiSessionService = core_1.Container.get(ai_workflow_session_service_js_1.AiWorkflowSessionService);
58
+ aiSessionService.initialize();
59
+ // Seed AI system prompt into system_configs table (overwrite on every startup)
60
+ await this.seedAiSystemPrompt(logger);
61
+ // Register built-in Octo nodes
62
+ const registry = core_1.Container.get(node_registry_js_1.NodeRegistry);
63
+ registry.registerMany([
64
+ new manual_trigger_node_js_1.ManualTriggerNode(),
65
+ new if_node_js_1.IfNode(),
66
+ new code_node_js_1.CodeNode(),
67
+ new http_request_node_js_1.HttpRequestNode(),
68
+ new set_node_js_1.SetNode(),
69
+ new merge_node_js_1.MergeNode(),
70
+ ]);
71
+ logger.info(`[WorkflowModule] ${registry.size} built-in nodes registered`);
72
+ // --- n8n embedded instance ---
73
+ const n8nEnabled = process.env.N8N_ENABLED !== 'false';
74
+ if (n8nEnabled) {
75
+ const n8nLauncher = core_1.Container.get(n8n_launcher_js_1.N8nLauncher);
76
+ const n8nPort = Number(process.env.N8N_PORT) || 5678;
77
+ const n8nDbPath = process.env.N8N_DB_PATH || './data/n8n.db';
78
+ const n8nEncryptionKey = process.env.N8N_ENCRYPTION_KEY || 'octo-n8n-default-key';
79
+ const webhookUrl = process.env.WEBHOOK_URL || `http://127.0.0.1:${Number(process.env.PORT) || 9988}/webhooks/`;
80
+ try {
81
+ await n8nLauncher.start({
82
+ port: n8nPort,
83
+ dbPath: n8nDbPath,
84
+ webhookUrl,
85
+ encryptionKey: n8nEncryptionKey,
86
+ n8nUserDataDir: process.env.N8N_USER_DATA_DIR || './data/n8n',
87
+ });
88
+ logger.info(`[WorkflowModule] n8n started on port ${n8nPort}`);
89
+ // Configure user sync service and set up n8n owner account
90
+ const userSync = core_1.Container.get(n8n_user_sync_service_js_1.N8nUserSyncService);
91
+ userSync.setApiUrl(`http://127.0.0.1:${n8nPort}`);
92
+ await userSync.ensureOwnerSetup();
93
+ // Start n8n execution watcher for notification integration
94
+ const watcher = core_1.Container.get(n8n_execution_watcher_js_1.N8nExecutionWatcher);
95
+ watcher.setApiUrl(`http://127.0.0.1:${n8nPort}`);
96
+ watcher.start();
97
+ logger.info('[WorkflowModule] n8n execution watcher started');
98
+ }
99
+ catch (err) {
100
+ logger.error(`[WorkflowModule] Failed to start n8n: ${err}`);
101
+ }
102
+ }
103
+ else {
104
+ logger.info('[WorkflowModule] n8n disabled (N8N_ENABLED=false)');
105
+ }
106
+ // Initialize trigger services
107
+ const cronTrigger = core_1.Container.get(cron_trigger_js_1.CronTriggerService);
108
+ cronTrigger.initialize();
109
+ await cronTrigger.startAll();
110
+ logger.info(`[WorkflowModule] Cron triggers loaded (${cronTrigger.activeCount} active)`);
111
+ // Log PushService status
112
+ const pushService = core_1.Container.get(push_service_js_1.PushService);
113
+ logger.info(`[WorkflowModule] PushService ready (${pushService.connectionCount} connections)`);
114
+ logger.info('[WorkflowModule] initialized');
115
+ }
116
+ registerRoutes(app, _context) {
117
+ const workflowCtrl = new workflow_controller_js_1.WorkflowController();
118
+ const credentialCtrl = new credential_controller_js_1.CredentialController();
119
+ const workflowAiCtrl = new workflow_ai_controller_js_1.WorkflowAiController();
120
+ const aiSessionCtrl = new ai_workflow_session_controller_js_1.AiWorkflowSessionController();
121
+ (0, core_1.registerControllers)(app, [workflowCtrl, credentialCtrl, workflowAiCtrl, aiSessionCtrl]);
122
+ // N8nSessionController requires auth — register manually
123
+ const auth = (0, auth_1.authMiddleware)();
124
+ const n8nSessionCtrl = new n8n_session_controller_js_1.N8nSessionController();
125
+ app.post('/api/n8n/session', auth, (0, core_1.asyncHandler)(n8nSessionCtrl.createSession.bind(n8nSessionCtrl)));
126
+ // Set up n8n reverse proxy with auth (if enabled)
127
+ const n8nEnabled = process.env.N8N_ENABLED !== 'false';
128
+ if (n8nEnabled) {
129
+ const n8nPort = Number(process.env.N8N_PORT) || 5678;
130
+ (0, n8n_proxy_middleware_js_1.setupN8nProxy)(app, n8nPort, auth);
131
+ }
132
+ // Register top-level node-types route (alias for /api/workflows/node-types)
133
+ app.get('/api/node-types', (0, core_1.asyncHandler)(async (_req, res) => {
134
+ const registry = core_1.Container.get(node_registry_js_1.NodeRegistry);
135
+ const descriptions = registry.getAllDescriptions();
136
+ res.json({ success: true, data: descriptions });
137
+ }));
138
+ // Register webhook catch-all route
139
+ this.registerWebhookRoute(app);
140
+ // Register WebSocket upgrade handler
141
+ this.registerWebSocketHandler(app);
142
+ const logger = core_1.Container.get(core_1.LoggerService);
143
+ logger.info('[WorkflowModule] routes registered');
144
+ }
145
+ /** Write the default AI system prompt to system_configs (overwrites on every startup). */
146
+ async seedAiSystemPrompt(logger) {
147
+ const key = 'workflow.ai.systemPrompt';
148
+ const desc = 'AI workflow designer system prompt';
149
+ try {
150
+ const ds = core_1.Container.get(core_1.DatabaseService).getDataSource();
151
+ const prompt = workflow_ai_service_js_1.WorkflowAiService.DEFAULT_SYSTEM_PROMPT;
152
+ const rows = await ds.query('SELECT id FROM system_configs WHERE key = ?', [key]);
153
+ if (rows.length > 0) {
154
+ await ds.query(`UPDATE system_configs SET value = ?, description = ?, "updatedAt" = datetime('now') WHERE key = ?`, [prompt, desc, key]);
155
+ }
156
+ else {
157
+ await ds.query(`INSERT INTO system_configs (key, value, description, "createdAt", "updatedAt") VALUES (?, ?, ?, datetime('now'), datetime('now'))`, [key, prompt, desc]);
158
+ }
159
+ logger.info('[WorkflowModule] AI system prompt seeded to system_configs');
160
+ }
161
+ catch (err) {
162
+ logger.warn(`[WorkflowModule] Failed to seed AI system prompt: ${err}`);
163
+ }
164
+ }
165
+ async destroy() {
166
+ const logger = core_1.Container.get(core_1.LoggerService);
167
+ // Stop n8n execution watcher
168
+ const watcher = core_1.Container.get(n8n_execution_watcher_js_1.N8nExecutionWatcher);
169
+ watcher.stop();
170
+ // Stop n8n subprocess
171
+ const n8nLauncher = core_1.Container.get(n8n_launcher_js_1.N8nLauncher);
172
+ if (n8nLauncher.isRunning()) {
173
+ await n8nLauncher.stop();
174
+ logger.info('[WorkflowModule] n8n stopped');
175
+ }
176
+ // Stop all cron triggers
177
+ const cronTrigger = core_1.Container.get(cron_trigger_js_1.CronTriggerService);
178
+ cronTrigger.stopAll();
179
+ // Close all WebSocket connections
180
+ const pushService = core_1.Container.get(push_service_js_1.PushService);
181
+ pushService.closeAll();
182
+ logger.info('[WorkflowModule] destroyed');
183
+ }
184
+ /**
185
+ * Register a catch-all webhook route: POST/GET /api/webhooks/*
186
+ */
187
+ registerWebhookRoute(app) {
188
+ const handler = (0, core_1.asyncHandler)(async (req, res) => {
189
+ const webhookService = core_1.Container.get(webhook_trigger_js_1.WebhookTriggerService);
190
+ // Extract the webhook path (everything after /api/webhooks)
191
+ const webhookPath = req.params[0] || '/';
192
+ const method = req.method;
193
+ const body = (req.body ?? {});
194
+ const headers = req.headers;
195
+ const query = (req.query ?? {});
196
+ const result = await webhookService.handleWebhook(webhookPath, method, body, headers, query);
197
+ if (!result.executed) {
198
+ res.status(404).json({ success: false, error: 'Webhook not found' });
199
+ return;
200
+ }
201
+ res.json({
202
+ success: true,
203
+ data: {
204
+ workflowId: result.workflowId,
205
+ executionId: result.executionId,
206
+ },
207
+ });
208
+ });
209
+ // Support all common HTTP methods for webhooks
210
+ app.all('/api/webhooks/*', handler);
211
+ }
212
+ /**
213
+ * Register WebSocket upgrade handler for push events.
214
+ *
215
+ * Clients connect to ws://host/ws/push?userId=<id> to receive
216
+ * real-time execution events (executionStarted, nodeExecuteAfter, etc.).
217
+ *
218
+ * The actual WebSocket upgrade is handled by the HTTP server,
219
+ * so this registers a route that the server startup code can use
220
+ * to wire up the ws library.
221
+ */
222
+ registerWebSocketHandler(app) {
223
+ // Express doesn't natively support WebSocket upgrades.
224
+ // The actual upgrade is handled in the server app startup (apps/server).
225
+ // Here we expose a REST endpoint for clients to discover the WS path
226
+ // and for health checks.
227
+ app.get('/api/ws/push/health', (_req, res) => {
228
+ const pushService = core_1.Container.get(push_service_js_1.PushService);
229
+ res.json({
230
+ success: true,
231
+ data: {
232
+ connections: pushService.connectionCount,
233
+ path: '/ws/push',
234
+ },
235
+ });
236
+ });
237
+ }
238
+ }
239
+ exports.WorkflowModule = WorkflowModule;
240
+ //# sourceMappingURL=workflow.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.module.js","sourceRoot":"","sources":["../src/workflow.module.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "@octo-cyber/workflow",
3
+ "version": "0.5.0",
4
+ "description": "Octo workflow engine — stack-based executor + nodes + triggers (inspired by n8n)",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./web": {
14
+ "types": "./web/index.ts",
15
+ "import": "./web/index.ts",
16
+ "default": "./web/index.ts"
17
+ },
18
+ "./web/pages/*": {
19
+ "types": "./web/pages/*.tsx",
20
+ "import": "./web/pages/*.tsx",
21
+ "default": "./web/pages/*.tsx"
22
+ }
23
+ },
24
+ "dependencies": {
25
+ "axios": "^1.13.6",
26
+ "cron": "^3.3.0",
27
+ "express": "^4.21.0",
28
+ "form-data": "^4.0.5",
29
+ "http-proxy-middleware": "^3.0.5",
30
+ "jmespath": "^0.16.0",
31
+ "lodash": "^4.17.23",
32
+ "luxon": "^3.7.2",
33
+ "p-cancelable": "^4.0.1",
34
+ "tsyringe": "^4.10.0",
35
+ "ws": "^8.18.0",
36
+ "zod": "^3.24.0",
37
+ "@octo-cyber/ai": "^0.5.0",
38
+ "@octo-cyber/core": "^0.5.0",
39
+ "@octo-cyber/task": "^0.5.0",
40
+ "@octo-cyber/auth": "^0.5.0"
41
+ },
42
+ "peerDependencies": {
43
+ "@xyflow/react": "^12.0.0",
44
+ "react": "^19.0.0",
45
+ "react-dom": "^19.0.0",
46
+ "next": "^16.0.0",
47
+ "next-intl": "^4.0.0",
48
+ "lucide-react": ">=0.400.0",
49
+ "@octo-cyber/ui": "^0.5.0"
50
+ },
51
+ "peerDependenciesMeta": {
52
+ "@octo-cyber/ui": {
53
+ "optional": true
54
+ },
55
+ "@xyflow/react": {
56
+ "optional": true
57
+ },
58
+ "react": {
59
+ "optional": true
60
+ },
61
+ "react-dom": {
62
+ "optional": true
63
+ },
64
+ "next": {
65
+ "optional": true
66
+ },
67
+ "next-intl": {
68
+ "optional": true
69
+ },
70
+ "lucide-react": {
71
+ "optional": true
72
+ }
73
+ },
74
+ "devDependencies": {
75
+ "@types/express": "^5.0.0",
76
+ "@types/react": "^19",
77
+ "@types/react-dom": "^19",
78
+ "@types/jmespath": "^0.15.2",
79
+ "@types/lodash": "^4.17.24",
80
+ "@types/luxon": "^3.7.1",
81
+ "@types/node": "^22.0.0",
82
+ "@types/ws": "^8.5.0",
83
+ "typescript": "^5.8.0",
84
+ "vitest": "^3.0.0"
85
+ },
86
+ "files": [
87
+ "dist",
88
+ "web"
89
+ ],
90
+ "license": "MIT",
91
+ "scripts": {
92
+ "build": "tsc -p tsconfig.n8n.json && cp src/n8n/nodes/package.json dist/n8n/nodes/package.json && cp src/n8n/nodes/*.svg dist/n8n/nodes/ 2>/dev/null; tsc -p tsconfig.build.json",
93
+ "dev": "tsc -p tsconfig.build.json --watch",
94
+ "test": "vitest run",
95
+ "typecheck": "tsc --noEmit"
96
+ }
97
+ }