@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 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-node-types.js","sourceRoot":"","sources":["../../../src/n8n/nodes/n8n-node-types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA0BH,mEAAmE;AAEnE;;;GAGG;AACU,QAAA,mBAAmB,GAAG;IACjC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,SAAS;IACjB,eAAe,EAAE,kBAAkB;IACnC,QAAQ,EAAE,WAAW;IACrB,cAAc,EAAE,iBAAiB;IACjC,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,aAAa;IACzB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,cAAc,EAAE,iBAAiB;CACzB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" fill="none">
|
|
2
|
+
<!-- Octopus body (head) -->
|
|
3
|
+
<ellipse cx="30" cy="22" rx="16" ry="14" fill="#4F46E5"/>
|
|
4
|
+
<!-- Eye left -->
|
|
5
|
+
<circle cx="24" cy="20" r="3.5" fill="white"/>
|
|
6
|
+
<circle cx="25" cy="19.5" r="1.5" fill="#1E1B4B"/>
|
|
7
|
+
<!-- Eye right -->
|
|
8
|
+
<circle cx="36" cy="20" r="3.5" fill="white"/>
|
|
9
|
+
<circle cx="37" cy="19.5" r="1.5" fill="#1E1B4B"/>
|
|
10
|
+
<!-- Tentacles -->
|
|
11
|
+
<path d="M18 32 C16 38, 12 42, 10 44" stroke="#4F46E5" stroke-width="3" stroke-linecap="round" fill="none"/>
|
|
12
|
+
<path d="M22 34 C21 40, 18 46, 16 48" stroke="#4F46E5" stroke-width="3" stroke-linecap="round" fill="none"/>
|
|
13
|
+
<path d="M30 35 C30 42, 30 48, 30 50" stroke="#4F46E5" stroke-width="3" stroke-linecap="round" fill="none"/>
|
|
14
|
+
<path d="M38 34 C39 40, 42 46, 44 48" stroke="#4F46E5" stroke-width="3" stroke-linecap="round" fill="none"/>
|
|
15
|
+
<path d="M42 32 C44 38, 48 42, 50 44" stroke="#4F46E5" stroke-width="3" stroke-linecap="round" fill="none"/>
|
|
16
|
+
<!-- Chat bubble (AI indicator) -->
|
|
17
|
+
<rect x="38" y="4" width="18" height="13" rx="4" fill="#06B6D4"/>
|
|
18
|
+
<polygon points="40,17 44,17 38,22" fill="#06B6D4"/>
|
|
19
|
+
<!-- AI dots in bubble -->
|
|
20
|
+
<circle cx="43" cy="10.5" r="1.5" fill="white"/>
|
|
21
|
+
<circle cx="47" cy="10.5" r="1.5" fill="white"/>
|
|
22
|
+
<circle cx="51" cy="10.5" r="1.5" fill="white"/>
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-octo",
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Octo custom nodes for n8n",
|
|
5
|
+
"n8n": {
|
|
6
|
+
"nodes": [
|
|
7
|
+
"OctoCliChatModel.node.js",
|
|
8
|
+
"OctoClaudeCliTool.node.js",
|
|
9
|
+
"OctoGeminiCliTool.node.js",
|
|
10
|
+
"OctoCodexCliTool.node.js",
|
|
11
|
+
"OctoKnowledge.node.js",
|
|
12
|
+
"OctoNotification.node.js",
|
|
13
|
+
"OctoSyncBridge.node.js"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-injector.d.ts","sourceRoot":"","sources":["../../../src/n8n/proxy/css-injector.ts"],"names":[],"mappings":"AAoDA,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getN8nThemeCSS = getN8nThemeCSS;
|
|
4
|
+
exports.getN8nThemeStyleTag = getN8nThemeStyleTag;
|
|
5
|
+
/**
|
|
6
|
+
* Octo theme CSS for n8n injection.
|
|
7
|
+
* Inlined to avoid file-reading issues with tsx/esbuild module caching.
|
|
8
|
+
*/
|
|
9
|
+
const N8N_THEME_CSS = `
|
|
10
|
+
/* Octo theme override for embedded n8n 2.x */
|
|
11
|
+
|
|
12
|
+
/* Force n8n app to fill iframe viewport height */
|
|
13
|
+
html, body {
|
|
14
|
+
height: 100% !important;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
#app {
|
|
18
|
+
height: 100% !important;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.app-grid {
|
|
22
|
+
height: 100% !important;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Keep n8n sidebar in collapsed mode (icon strip) */
|
|
26
|
+
#side-menu {
|
|
27
|
+
width: 42px !important;
|
|
28
|
+
min-width: 42px !important;
|
|
29
|
+
max-width: 42px !important;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Hide resize handle to prevent expanding */
|
|
33
|
+
#side-menu [class*="resizer"] {
|
|
34
|
+
display: none !important;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Hide banners / notification bars */
|
|
38
|
+
#banners {
|
|
39
|
+
display: none !important;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Neutral color scheme matching Octo */
|
|
43
|
+
:root {
|
|
44
|
+
--color-primary: hsl(240 5.9% 10%);
|
|
45
|
+
--color-primary-tint-1: hsl(240 4.8% 95.9%);
|
|
46
|
+
--color-primary-tint-2: hsl(240 5.9% 90%);
|
|
47
|
+
--color-text-dark: hsl(240 10% 3.9%);
|
|
48
|
+
--color-text-base: hsl(240 3.8% 46.1%);
|
|
49
|
+
--color-text-light: hsl(240 5% 64.9%);
|
|
50
|
+
--color-background: hsl(0 0% 100%);
|
|
51
|
+
--color-canvas-background: hsl(0 0% 98%);
|
|
52
|
+
--color-foreground-xlight: hsl(240 4.8% 95.9%);
|
|
53
|
+
--border-color-base: hsl(240 5.9% 90%);
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
function getN8nThemeCSS() {
|
|
57
|
+
return N8N_THEME_CSS;
|
|
58
|
+
}
|
|
59
|
+
function getN8nThemeStyleTag() {
|
|
60
|
+
return `<style id="octo-n8n-theme">${N8N_THEME_CSS}</style>`;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=css-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-injector.js","sourceRoot":"","sources":["../../../src/n8n/proxy/css-injector.ts"],"names":[],"mappings":";;AAoDA,wCAEC;AAED,kDAEC;AA1DD;;;GAGG;AACH,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CrB,CAAC;AAEF,SAAgB,cAAc;IAC5B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,8BAA8B,aAAa,UAAU,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Express, RequestHandler } from 'express';
|
|
2
|
+
/**
|
|
3
|
+
* Set up reverse-proxy routes from the Octo Express server to the
|
|
4
|
+
* embedded n8n instance running on 127.0.0.1.
|
|
5
|
+
*
|
|
6
|
+
* Routes:
|
|
7
|
+
* /n8n/api/* → n8n /api/* (authenticated)
|
|
8
|
+
* /n8n/* → n8n /* (authenticated, WebSocket enabled, CSS injected)
|
|
9
|
+
* /webhooks/* → n8n /webhook/* (NO auth — external webhook callers)
|
|
10
|
+
*/
|
|
11
|
+
export declare function setupN8nProxy(app: Express, n8nPort: number, authMiddleware?: RequestHandler): void;
|
|
12
|
+
//# sourceMappingURL=n8n-proxy.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-proxy.middleware.d.ts","sourceRoot":"","sources":["../../../src/n8n/proxy/n8n-proxy.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,cAAc,EAAE,MAAM,SAAS,CAAC;AA4BhE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,GAC9B,IAAI,CA8HN"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setupN8nProxy = setupN8nProxy;
|
|
4
|
+
const http_proxy_middleware_1 = require("http-proxy-middleware");
|
|
5
|
+
const css_injector_js_1 = require("./css-injector.js");
|
|
6
|
+
/**
|
|
7
|
+
* Fix proxy request path after Express mount-path stripping.
|
|
8
|
+
*
|
|
9
|
+
* Express `app.use('/mount', handler)` strips the mount prefix from
|
|
10
|
+
* `req.url`, which breaks `pathRewrite` regex patterns. This helper
|
|
11
|
+
* uses `req.originalUrl` (which preserves the full path) to rebuild
|
|
12
|
+
* the correct target path for n8n.
|
|
13
|
+
*/
|
|
14
|
+
function rewriteProxyPath(proxyReq, req, from, to) {
|
|
15
|
+
const originalUrl = req.originalUrl ?? req.url ?? '/';
|
|
16
|
+
proxyReq.path = originalUrl.replace(from, to);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Set up reverse-proxy routes from the Octo Express server to the
|
|
20
|
+
* embedded n8n instance running on 127.0.0.1.
|
|
21
|
+
*
|
|
22
|
+
* Routes:
|
|
23
|
+
* /n8n/api/* → n8n /api/* (authenticated)
|
|
24
|
+
* /n8n/* → n8n /* (authenticated, WebSocket enabled, CSS injected)
|
|
25
|
+
* /webhooks/* → n8n /webhook/* (NO auth — external webhook callers)
|
|
26
|
+
*/
|
|
27
|
+
function setupN8nProxy(app, n8nPort, authMiddleware) {
|
|
28
|
+
const n8nTarget = `http://127.0.0.1:${n8nPort}`;
|
|
29
|
+
// --- /n8n/api/* → n8n /api/* (with optional auth) ---
|
|
30
|
+
const apiProxyMiddleware = (0, http_proxy_middleware_1.createProxyMiddleware)({
|
|
31
|
+
target: n8nTarget,
|
|
32
|
+
changeOrigin: true,
|
|
33
|
+
on: {
|
|
34
|
+
proxyReq(proxyReq, req) {
|
|
35
|
+
(0, http_proxy_middleware_1.fixRequestBody)(proxyReq, req);
|
|
36
|
+
rewriteProxyPath(proxyReq, req, /^\/n8n\/api/, '/api');
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
if (authMiddleware) {
|
|
41
|
+
app.use('/n8n/api', authMiddleware, apiProxyMiddleware);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
app.use('/n8n/api', apiProxyMiddleware);
|
|
45
|
+
}
|
|
46
|
+
// --- /webhooks/* → n8n /webhook/* (no auth) ---
|
|
47
|
+
const webhookProxyMiddleware = (0, http_proxy_middleware_1.createProxyMiddleware)({
|
|
48
|
+
target: n8nTarget,
|
|
49
|
+
changeOrigin: true,
|
|
50
|
+
on: {
|
|
51
|
+
proxyReq(proxyReq, req) {
|
|
52
|
+
(0, http_proxy_middleware_1.fixRequestBody)(proxyReq, req);
|
|
53
|
+
rewriteProxyPath(proxyReq, req, /^\/webhooks/, '/webhook');
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
app.use('/webhooks', webhookProxyMiddleware);
|
|
58
|
+
// --- /n8n/rest/push → n8n /rest/push (SSE push, NO response buffering) ---
|
|
59
|
+
// Must be registered BEFORE the catch-all /n8n/* route because
|
|
60
|
+
// selfHandleResponse buffers the entire response, which breaks SSE streaming.
|
|
61
|
+
const pushProxyMiddleware = (0, http_proxy_middleware_1.createProxyMiddleware)({
|
|
62
|
+
target: n8nTarget,
|
|
63
|
+
changeOrigin: true,
|
|
64
|
+
on: {
|
|
65
|
+
proxyReq(proxyReq, req) {
|
|
66
|
+
rewriteProxyPath(proxyReq, req, /^\/n8n/, '');
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
if (authMiddleware) {
|
|
71
|
+
app.use('/n8n/rest/push', authMiddleware, pushProxyMiddleware);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
app.use('/n8n/rest/push', pushProxyMiddleware);
|
|
75
|
+
}
|
|
76
|
+
// --- /n8n/healthz → n8n /healthz (no auth, no buffering) ---
|
|
77
|
+
const healthProxyMiddleware = (0, http_proxy_middleware_1.createProxyMiddleware)({
|
|
78
|
+
target: n8nTarget,
|
|
79
|
+
changeOrigin: true,
|
|
80
|
+
on: {
|
|
81
|
+
proxyReq(proxyReq, req) {
|
|
82
|
+
rewriteProxyPath(proxyReq, req, /^\/n8n/, '');
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
app.use('/n8n/healthz', healthProxyMiddleware);
|
|
87
|
+
// --- /n8n/* → n8n /* (with optional auth, WebSocket enabled, CSS injected) ---
|
|
88
|
+
const n8nProxyMiddleware = (0, http_proxy_middleware_1.createProxyMiddleware)({
|
|
89
|
+
target: n8nTarget,
|
|
90
|
+
changeOrigin: true,
|
|
91
|
+
ws: true,
|
|
92
|
+
pathRewrite: { '^/n8n': '/' },
|
|
93
|
+
cookiePathRewrite: { '/': '/n8n/' },
|
|
94
|
+
selfHandleResponse: true,
|
|
95
|
+
on: {
|
|
96
|
+
proxyReq: http_proxy_middleware_1.fixRequestBody,
|
|
97
|
+
proxyRes: (0, http_proxy_middleware_1.responseInterceptor)(async (responseBuffer, proxyRes) => {
|
|
98
|
+
const contentType = proxyRes.headers['content-type'] || '';
|
|
99
|
+
// Only inject CSS into HTML responses
|
|
100
|
+
if (!contentType.includes('text/html')) {
|
|
101
|
+
return responseBuffer;
|
|
102
|
+
}
|
|
103
|
+
let html = responseBuffer.toString('utf8');
|
|
104
|
+
// Rewrite n8n's absolute asset paths to go through the /n8n/ proxy
|
|
105
|
+
// Only two replacements needed: href="/ and src="/ cover all patterns
|
|
106
|
+
// including `<link crossorigin href="/assets/...">` and
|
|
107
|
+
// `<script crossorigin src="/assets/...">`.
|
|
108
|
+
html = html
|
|
109
|
+
.replace(/href="\//g, 'href="/n8n/')
|
|
110
|
+
.replace(/src="\//g, 'src="/n8n/');
|
|
111
|
+
// Override BASE_PATH so n8n's JS runtime uses the proxy prefix
|
|
112
|
+
const basePath = '<script>window.BASE_PATH="/n8n/";</script>';
|
|
113
|
+
// Remove the original base-path.js script (we override it)
|
|
114
|
+
html = html.replace(/<script src="\/n8n\/static\/base-path\.js"[^>]*><\/script>/, basePath);
|
|
115
|
+
// Inject the Octo theme <style> tag before </head>
|
|
116
|
+
const styleTag = (0, css_injector_js_1.getN8nThemeStyleTag)();
|
|
117
|
+
if (html.includes('</head>')) {
|
|
118
|
+
return html.replace('</head>', `${styleTag}</head>`);
|
|
119
|
+
}
|
|
120
|
+
return `${styleTag}${html}`;
|
|
121
|
+
}),
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
if (authMiddleware) {
|
|
125
|
+
app.use('/n8n', authMiddleware, n8nProxyMiddleware);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
app.use('/n8n', n8nProxyMiddleware);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=n8n-proxy.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-proxy.middleware.js","sourceRoot":"","sources":["../../../src/n8n/proxy/n8n-proxy.middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* Octo theme override for embedded n8n 2.x */
|
|
2
|
+
|
|
3
|
+
/* Keep n8n sidebar in collapsed mode (icon strip) */
|
|
4
|
+
#side-menu {
|
|
5
|
+
width: 42px !important;
|
|
6
|
+
min-width: 42px !important;
|
|
7
|
+
max-width: 42px !important;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Hide resize handle to prevent expanding */
|
|
11
|
+
#side-menu [class*="resizer"] {
|
|
12
|
+
display: none !important;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Hide banners / notification bars */
|
|
16
|
+
#banners {
|
|
17
|
+
display: none !important;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Force n8n app to fill iframe viewport height */
|
|
21
|
+
html, body {
|
|
22
|
+
height: 100% !important;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
#app {
|
|
26
|
+
height: 100% !important;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.app-grid {
|
|
30
|
+
height: 100% !important;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* Neutral color scheme matching Octo */
|
|
34
|
+
:root {
|
|
35
|
+
--color-primary: hsl(240 5.9% 10%);
|
|
36
|
+
--color-primary-tint-1: hsl(240 4.8% 95.9%);
|
|
37
|
+
--color-primary-tint-2: hsl(240 5.9% 90%);
|
|
38
|
+
--color-text-dark: hsl(240 10% 3.9%);
|
|
39
|
+
--color-text-base: hsl(240 3.8% 46.1%);
|
|
40
|
+
--color-text-light: hsl(240 5% 64.9%);
|
|
41
|
+
--color-background: hsl(0 0% 100%);
|
|
42
|
+
--color-canvas-background: hsl(0 0% 98%);
|
|
43
|
+
--color-foreground-xlight: hsl(240 4.8% 95.9%);
|
|
44
|
+
--border-color-base: hsl(240 5.9% 90%);
|
|
45
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export interface OctoUser {
|
|
2
|
+
id: number;
|
|
3
|
+
email: string;
|
|
4
|
+
username: string;
|
|
5
|
+
role?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* N8nUserSyncService — synchronises Octo users into the embedded n8n
|
|
9
|
+
* instance so that each Octo user has a corresponding n8n account.
|
|
10
|
+
*
|
|
11
|
+
* Uses n8n's internal REST API (`/rest/`) with cookie-based auth
|
|
12
|
+
* (compatible with n8n 2.x which requires API key for `/api/v1/`).
|
|
13
|
+
*/
|
|
14
|
+
export declare class N8nUserSyncService {
|
|
15
|
+
private n8nApiUrl;
|
|
16
|
+
private ownerCookie;
|
|
17
|
+
private ownerId;
|
|
18
|
+
private readonly ownerPassword;
|
|
19
|
+
private readonly logger;
|
|
20
|
+
setApiUrl(url: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Ensure n8n owner account exists and we have a valid auth cookie.
|
|
23
|
+
* Called once after n8n starts.
|
|
24
|
+
*
|
|
25
|
+
* Retries up to 5 times with 2s delay because n8n's REST routes
|
|
26
|
+
* may not be fully registered when /healthz first returns 200.
|
|
27
|
+
*/
|
|
28
|
+
ensureOwnerSetup(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Ensure the Octo user exists in n8n. Creates the user if missing.
|
|
31
|
+
*/
|
|
32
|
+
syncUser(octoUser: OctoUser): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Obtain an n8n auth cookie by logging in with the internal password.
|
|
35
|
+
*/
|
|
36
|
+
getN8nAuthToken(octoUser: OctoUser): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if n8n needs initial owner setup.
|
|
39
|
+
*/
|
|
40
|
+
private checkNeedsSetup;
|
|
41
|
+
/**
|
|
42
|
+
* Create the n8n owner account on a fresh instance.
|
|
43
|
+
*/
|
|
44
|
+
private setupOwner;
|
|
45
|
+
/**
|
|
46
|
+
* Login as the n8n owner and store the auth cookie.
|
|
47
|
+
*/
|
|
48
|
+
private loginAsOwner;
|
|
49
|
+
/**
|
|
50
|
+
* Build headers with the owner auth cookie.
|
|
51
|
+
*/
|
|
52
|
+
private ownerHeaders;
|
|
53
|
+
/**
|
|
54
|
+
* Look up an n8n user by email address.
|
|
55
|
+
*/
|
|
56
|
+
private findN8nUser;
|
|
57
|
+
/**
|
|
58
|
+
* Create a new user in n8n via the invitation flow (n8n 2.x).
|
|
59
|
+
*
|
|
60
|
+
* 1. POST /rest/invitations — owner invites user
|
|
61
|
+
* 2. POST /rest/invitations/{id}/accept — user accepts with password
|
|
62
|
+
*/
|
|
63
|
+
private createN8nUser;
|
|
64
|
+
/**
|
|
65
|
+
* Derive a deterministic internal password for n8n from the Octo user ID.
|
|
66
|
+
* Prefixed with "Octo@2026_" to satisfy n8n's password policy
|
|
67
|
+
* (requires uppercase letter).
|
|
68
|
+
*/
|
|
69
|
+
private generateInternalPassword;
|
|
70
|
+
/**
|
|
71
|
+
* Fixed owner password for the internal n8n admin account.
|
|
72
|
+
*/
|
|
73
|
+
private generateOwnerPassword;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=n8n-user-sync.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"n8n-user-sync.service.d.ts","sourceRoot":"","sources":["../../../src/n8n/sync/n8n-user-sync.service.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAWD;;;;;;GAMG;AACH,qBACa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqD;IAE5E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B;;;;;;OAMG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BvC;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAqC1D;;OAEG;YACW,eAAe;IAc7B;;OAEG;YACW,UAAU;IA0BxB;;OAEG;YACW,YAAY;IA6B1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;YACW,WAAW;IAwBzB;;;;;OAKG;YACW,aAAa;IAwD3B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAQhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAG9B"}
|