@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.
- package/dist/controllers/ai-workflow-session.controller.d.ts +19 -0
- package/dist/controllers/ai-workflow-session.controller.d.ts.map +1 -0
- package/dist/controllers/ai-workflow-session.controller.js +135 -0
- package/dist/controllers/ai-workflow-session.controller.js.map +1 -0
- package/dist/controllers/credential.controller.d.ts +68 -0
- package/dist/controllers/credential.controller.d.ts.map +1 -0
- package/dist/controllers/credential.controller.js +303 -0
- package/dist/controllers/credential.controller.js.map +1 -0
- package/dist/controllers/index.d.ts +3 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/index.js +8 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/controllers/workflow-ai.controller.d.ts +23 -0
- package/dist/controllers/workflow-ai.controller.d.ts.map +1 -0
- package/dist/controllers/workflow-ai.controller.js +164 -0
- package/dist/controllers/workflow-ai.controller.js.map +1 -0
- package/dist/controllers/workflow.controller.d.ts +66 -0
- package/dist/controllers/workflow.controller.d.ts.map +1 -0
- package/dist/controllers/workflow.controller.js +239 -0
- package/dist/controllers/workflow.controller.js.map +1 -0
- package/dist/core/expression-resolver.d.ts +49 -0
- package/dist/core/expression-resolver.d.ts.map +1 -0
- package/dist/core/expression-resolver.js +113 -0
- package/dist/core/expression-resolver.js.map +1 -0
- package/dist/core/node-registry.d.ts +24 -0
- package/dist/core/node-registry.d.ts.map +1 -0
- package/dist/core/node-registry.js +62 -0
- package/dist/core/node-registry.js.map +1 -0
- package/dist/core/workflow-executor.d.ts +50 -0
- package/dist/core/workflow-executor.d.ts.map +1 -0
- package/dist/core/workflow-executor.js +458 -0
- package/dist/core/workflow-executor.js.map +1 -0
- package/dist/entities/ai-workflow-session.entity.d.ts +17 -0
- package/dist/entities/ai-workflow-session.entity.d.ts.map +1 -0
- package/dist/entities/ai-workflow-session.entity.js +70 -0
- package/dist/entities/ai-workflow-session.entity.js.map +1 -0
- package/dist/entities/ai-workflow-version.entity.d.ts +18 -0
- package/dist/entities/ai-workflow-version.entity.d.ts.map +1 -0
- package/dist/entities/ai-workflow-version.entity.js +71 -0
- package/dist/entities/ai-workflow-version.entity.js.map +1 -0
- package/dist/entities/credential-definition.entity.d.ts +17 -0
- package/dist/entities/credential-definition.entity.d.ts.map +1 -0
- package/dist/entities/credential-definition.entity.js +66 -0
- package/dist/entities/credential-definition.entity.js.map +1 -0
- package/dist/entities/index.d.ts +9 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +22 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/workflow-definition.entity.d.ts +20 -0
- package/dist/entities/workflow-definition.entity.d.ts.map +1 -0
- package/dist/entities/workflow-definition.entity.js +85 -0
- package/dist/entities/workflow-definition.entity.js.map +1 -0
- package/dist/entities/workflow-execution.entity.d.ts +26 -0
- package/dist/entities/workflow-execution.entity.d.ts.map +1 -0
- package/dist/entities/workflow-execution.entity.js +99 -0
- package/dist/entities/workflow-execution.entity.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +96 -0
- package/dist/index.js.map +1 -0
- package/dist/n8n/cipher/cipher.d.ts +11 -0
- package/dist/n8n/cipher/cipher.d.ts.map +1 -0
- package/dist/n8n/cipher/cipher.js +54 -0
- package/dist/n8n/cipher/cipher.js.map +1 -0
- package/dist/n8n/controllers/n8n-session.controller.d.ts +20 -0
- package/dist/n8n/controllers/n8n-session.controller.d.ts.map +1 -0
- package/dist/n8n/controllers/n8n-session.controller.js +84 -0
- package/dist/n8n/controllers/n8n-session.controller.js.map +1 -0
- package/dist/n8n/index.d.ts +8 -0
- package/dist/n8n/index.d.ts.map +1 -0
- package/dist/n8n/index.js +14 -0
- package/dist/n8n/index.js.map +1 -0
- package/dist/n8n/launcher/n8n-launcher.d.ts +41 -0
- package/dist/n8n/launcher/n8n-launcher.d.ts.map +1 -0
- package/dist/n8n/launcher/n8n-launcher.js +186 -0
- package/dist/n8n/launcher/n8n-launcher.js.map +1 -0
- package/dist/n8n/nodes/OctoClaudeCliTool.node.d.ts +13 -0
- package/dist/n8n/nodes/OctoClaudeCliTool.node.d.ts.map +1 -0
- package/dist/n8n/nodes/OctoClaudeCliTool.node.js +103 -0
- package/dist/n8n/nodes/OctoClaudeCliTool.node.js.map +1 -0
- package/dist/n8n/nodes/OctoCliChatModel.node.d.ts +14 -0
- package/dist/n8n/nodes/OctoCliChatModel.node.d.ts.map +1 -0
- package/dist/n8n/nodes/OctoCliChatModel.node.js +431 -0
- package/dist/n8n/nodes/OctoCliChatModel.node.js.map +1 -0
- package/dist/n8n/nodes/OctoCodexCliTool.node.d.ts +13 -0
- package/dist/n8n/nodes/OctoCodexCliTool.node.d.ts.map +1 -0
- package/dist/n8n/nodes/OctoCodexCliTool.node.js +100 -0
- package/dist/n8n/nodes/OctoCodexCliTool.node.js.map +1 -0
- package/dist/n8n/nodes/OctoGeminiCliTool.node.d.ts +13 -0
- package/dist/n8n/nodes/OctoGeminiCliTool.node.d.ts.map +1 -0
- package/dist/n8n/nodes/OctoGeminiCliTool.node.js +91 -0
- package/dist/n8n/nodes/OctoGeminiCliTool.node.js.map +1 -0
- package/dist/n8n/nodes/OctoKnowledge.node.d.ts +6 -0
- package/dist/n8n/nodes/OctoKnowledge.node.d.ts.map +1 -0
- package/dist/n8n/nodes/OctoKnowledge.node.js +95 -0
- package/dist/n8n/nodes/OctoKnowledge.node.js.map +1 -0
- package/dist/n8n/nodes/OctoNotification.node.d.ts +6 -0
- package/dist/n8n/nodes/OctoNotification.node.d.ts.map +1 -0
- package/dist/n8n/nodes/OctoNotification.node.js +72 -0
- package/dist/n8n/nodes/OctoNotification.node.js.map +1 -0
- package/dist/n8n/nodes/OctoSyncBridge.node.d.ts +6 -0
- package/dist/n8n/nodes/OctoSyncBridge.node.d.ts.map +1 -0
- package/dist/n8n/nodes/OctoSyncBridge.node.js +60 -0
- package/dist/n8n/nodes/OctoSyncBridge.node.js.map +1 -0
- package/dist/n8n/nodes/n8n-node-types.d.ts +111 -0
- package/dist/n8n/nodes/n8n-node-types.d.ts.map +1 -0
- package/dist/n8n/nodes/n8n-node-types.js +30 -0
- package/dist/n8n/nodes/n8n-node-types.js.map +1 -0
- package/dist/n8n/nodes/octo-cli-chat-model.svg +23 -0
- package/dist/n8n/nodes/package.json +16 -0
- package/dist/n8n/proxy/css-injector.d.ts +3 -0
- package/dist/n8n/proxy/css-injector.d.ts.map +1 -0
- package/dist/n8n/proxy/css-injector.js +62 -0
- package/dist/n8n/proxy/css-injector.js.map +1 -0
- package/dist/n8n/proxy/n8n-proxy.middleware.d.ts +12 -0
- package/dist/n8n/proxy/n8n-proxy.middleware.d.ts.map +1 -0
- package/dist/n8n/proxy/n8n-proxy.middleware.js +131 -0
- package/dist/n8n/proxy/n8n-proxy.middleware.js.map +1 -0
- package/dist/n8n/proxy/n8n-theme.css +45 -0
- package/dist/n8n/sync/n8n-user-sync.service.d.ts +75 -0
- package/dist/n8n/sync/n8n-user-sync.service.d.ts.map +1 -0
- package/dist/n8n/sync/n8n-user-sync.service.js +286 -0
- package/dist/n8n/sync/n8n-user-sync.service.js.map +1 -0
- package/dist/n8n/watcher/n8n-execution-watcher.d.ts +39 -0
- package/dist/n8n/watcher/n8n-execution-watcher.d.ts.map +1 -0
- package/dist/n8n/watcher/n8n-execution-watcher.js +110 -0
- package/dist/n8n/watcher/n8n-execution-watcher.js.map +1 -0
- package/dist/nodes/code.node.d.ts +24 -0
- package/dist/nodes/code.node.d.ts.map +1 -0
- package/dist/nodes/code.node.js +150 -0
- package/dist/nodes/code.node.js.map +1 -0
- package/dist/nodes/error-trigger.node.d.ts +15 -0
- package/dist/nodes/error-trigger.node.d.ts.map +1 -0
- package/dist/nodes/error-trigger.node.js +53 -0
- package/dist/nodes/error-trigger.node.js.map +1 -0
- package/dist/nodes/execute-command.node.d.ts +9 -0
- package/dist/nodes/execute-command.node.d.ts.map +1 -0
- package/dist/nodes/execute-command.node.js +81 -0
- package/dist/nodes/execute-command.node.js.map +1 -0
- package/dist/nodes/filter.node.d.ts +10 -0
- package/dist/nodes/filter.node.d.ts.map +1 -0
- package/dist/nodes/filter.node.js +95 -0
- package/dist/nodes/filter.node.js.map +1 -0
- package/dist/nodes/http-request.node.d.ts +11 -0
- package/dist/nodes/http-request.node.d.ts.map +1 -0
- package/dist/nodes/http-request.node.js +139 -0
- package/dist/nodes/http-request.node.js.map +1 -0
- package/dist/nodes/if.node.d.ts +13 -0
- package/dist/nodes/if.node.d.ts.map +1 -0
- package/dist/nodes/if.node.js +137 -0
- package/dist/nodes/if.node.js.map +1 -0
- package/dist/nodes/index.d.ts +12 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +26 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/nodes/manual-trigger.node.d.ts +10 -0
- package/dist/nodes/manual-trigger.node.d.ts.map +1 -0
- package/dist/nodes/manual-trigger.node.js +36 -0
- package/dist/nodes/manual-trigger.node.js.map +1 -0
- package/dist/nodes/merge.node.d.ts +15 -0
- package/dist/nodes/merge.node.d.ts.map +1 -0
- package/dist/nodes/merge.node.js +99 -0
- package/dist/nodes/merge.node.js.map +1 -0
- package/dist/nodes/noop.node.d.ts +12 -0
- package/dist/nodes/noop.node.d.ts.map +1 -0
- package/dist/nodes/noop.node.js +32 -0
- package/dist/nodes/noop.node.js.map +1 -0
- package/dist/nodes/placeholder.node.d.ts +10 -0
- package/dist/nodes/placeholder.node.d.ts.map +1 -0
- package/dist/nodes/placeholder.node.js +50 -0
- package/dist/nodes/placeholder.node.js.map +1 -0
- package/dist/nodes/remove-duplicates.node.d.ts +9 -0
- package/dist/nodes/remove-duplicates.node.d.ts.map +1 -0
- package/dist/nodes/remove-duplicates.node.js +68 -0
- package/dist/nodes/remove-duplicates.node.js.map +1 -0
- package/dist/nodes/respond-to-webhook.node.d.ts +14 -0
- package/dist/nodes/respond-to-webhook.node.d.ts.map +1 -0
- package/dist/nodes/respond-to-webhook.node.js +116 -0
- package/dist/nodes/respond-to-webhook.node.js.map +1 -0
- package/dist/nodes/schedule-trigger.node.d.ts +9 -0
- package/dist/nodes/schedule-trigger.node.d.ts.map +1 -0
- package/dist/nodes/schedule-trigger.node.js +67 -0
- package/dist/nodes/schedule-trigger.node.js.map +1 -0
- package/dist/nodes/set.node.d.ts +12 -0
- package/dist/nodes/set.node.d.ts.map +1 -0
- package/dist/nodes/set.node.js +81 -0
- package/dist/nodes/set.node.js.map +1 -0
- package/dist/nodes/sort.node.d.ts +9 -0
- package/dist/nodes/sort.node.d.ts.map +1 -0
- package/dist/nodes/sort.node.js +61 -0
- package/dist/nodes/sort.node.js.map +1 -0
- package/dist/nodes/split-in-batches.node.d.ts +9 -0
- package/dist/nodes/split-in-batches.node.d.ts.map +1 -0
- package/dist/nodes/split-in-batches.node.js +53 -0
- package/dist/nodes/split-in-batches.node.js.map +1 -0
- package/dist/nodes/split-out.node.d.ts +9 -0
- package/dist/nodes/split-out.node.d.ts.map +1 -0
- package/dist/nodes/split-out.node.js +76 -0
- package/dist/nodes/split-out.node.js.map +1 -0
- package/dist/nodes/switch.node.d.ts +16 -0
- package/dist/nodes/switch.node.d.ts.map +1 -0
- package/dist/nodes/switch.node.js +156 -0
- package/dist/nodes/switch.node.js.map +1 -0
- package/dist/nodes/wait.node.d.ts +12 -0
- package/dist/nodes/wait.node.d.ts.map +1 -0
- package/dist/nodes/wait.node.js +81 -0
- package/dist/nodes/wait.node.js.map +1 -0
- package/dist/nodes/webhook.node.d.ts +9 -0
- package/dist/nodes/webhook.node.d.ts.map +1 -0
- package/dist/nodes/webhook.node.js +69 -0
- package/dist/nodes/webhook.node.js.map +1 -0
- package/dist/services/ai-workflow-session.service.d.ts +31 -0
- package/dist/services/ai-workflow-session.service.d.ts.map +1 -0
- package/dist/services/ai-workflow-session.service.js +118 -0
- package/dist/services/ai-workflow-session.service.js.map +1 -0
- package/dist/services/credential.service.d.ts +57 -0
- package/dist/services/credential.service.d.ts.map +1 -0
- package/dist/services/credential.service.js +155 -0
- package/dist/services/credential.service.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +14 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/push.service.d.ts +60 -0
- package/dist/services/push.service.d.ts.map +1 -0
- package/dist/services/push.service.js +121 -0
- package/dist/services/push.service.js.map +1 -0
- package/dist/services/workflow-ai.service.d.ts +61 -0
- package/dist/services/workflow-ai.service.d.ts.map +1 -0
- package/dist/services/workflow-ai.service.js +219 -0
- package/dist/services/workflow-ai.service.js.map +1 -0
- package/dist/services/workflow-context.service.d.ts +32 -0
- package/dist/services/workflow-context.service.d.ts.map +1 -0
- package/dist/services/workflow-context.service.js +155 -0
- package/dist/services/workflow-context.service.js.map +1 -0
- package/dist/services/workflow-engine.service.d.ts +90 -0
- package/dist/services/workflow-engine.service.d.ts.map +1 -0
- package/dist/services/workflow-engine.service.js +305 -0
- package/dist/services/workflow-engine.service.js.map +1 -0
- package/dist/services/workflow.service.d.ts +84 -0
- package/dist/services/workflow.service.d.ts.map +1 -0
- package/dist/services/workflow.service.js +241 -0
- package/dist/services/workflow.service.js.map +1 -0
- package/dist/triggers/cron-trigger.d.ts +39 -0
- package/dist/triggers/cron-trigger.d.ts.map +1 -0
- package/dist/triggers/cron-trigger.js +137 -0
- package/dist/triggers/cron-trigger.js.map +1 -0
- package/dist/triggers/index.d.ts +3 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +8 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +51 -0
- package/dist/triggers/webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/webhook-trigger.js +122 -0
- package/dist/triggers/webhook-trigger.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/node.types.d.ts +313 -0
- package/dist/types/node.types.d.ts.map +1 -0
- package/dist/types/node.types.js +23 -0
- package/dist/types/node.types.js.map +1 -0
- package/dist/types/workflow.types.d.ts +153 -0
- package/dist/types/workflow.types.d.ts.map +1 -0
- package/dist/types/workflow.types.js +44 -0
- package/dist/types/workflow.types.js.map +1 -0
- package/dist/utils/n8n-converter.d.ts +52 -0
- package/dist/utils/n8n-converter.d.ts.map +1 -0
- package/dist/utils/n8n-converter.js +107 -0
- package/dist/utils/n8n-converter.js.map +1 -0
- package/dist/utils/n8n-node-map.d.ts +6 -0
- package/dist/utils/n8n-node-map.d.ts.map +1 -0
- package/dist/utils/n8n-node-map.js +59 -0
- package/dist/utils/n8n-node-map.js.map +1 -0
- package/dist/workflow.module.d.ts +40 -0
- package/dist/workflow.module.d.ts.map +1 -0
- package/dist/workflow.module.js +240 -0
- package/dist/workflow.module.js.map +1 -0
- package/package.json +97 -0
- package/web/components/ChatPanel.tsx +344 -0
- package/web/components/N8nIframe.tsx +119 -0
- package/web/components/SessionPanel.tsx +301 -0
- package/web/components/ToolPanel.tsx +404 -0
- package/web/components/WorkflowDiff.tsx +161 -0
- package/web/components/WorkflowGraph.tsx +158 -0
- package/web/components/WorkflowPreviewPanel.tsx +186 -0
- package/web/hooks/use-n8n-session.ts +46 -0
- package/web/index.ts +29 -0
- package/web/manifest.ts +16 -0
- package/web/messages/en-US.json +94 -0
- package/web/messages/zh-CN.json +94 -0
- package/web/pages/AiDesignPage.tsx +215 -0
- package/web/pages/CredentialsPage.tsx +7 -0
- package/web/pages/ExecutionsPage.tsx +7 -0
- package/web/pages/WorkflowsPage.tsx +7 -0
- 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 @@
|
|
|
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
|
+
}
|