n8n-mcp 2.21.0 โ†’ 2.22.5

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 (277) hide show
  1. package/README.md +1 -0
  2. package/data/nodes.db +0 -0
  3. package/dist/database/node-repository.d.ts +62 -0
  4. package/dist/database/node-repository.d.ts.map +1 -1
  5. package/dist/database/node-repository.js +276 -0
  6. package/dist/database/node-repository.js.map +1 -1
  7. package/dist/mcp/absolute-minimal.d.ts +4 -0
  8. package/dist/mcp/absolute-minimal.d.ts.map +1 -0
  9. package/dist/mcp/absolute-minimal.js +34 -0
  10. package/dist/mcp/absolute-minimal.js.map +1 -0
  11. package/dist/mcp/fixed-protocol.d.ts +17 -0
  12. package/dist/mcp/fixed-protocol.d.ts.map +1 -0
  13. package/dist/mcp/fixed-protocol.js +162 -0
  14. package/dist/mcp/fixed-protocol.js.map +1 -0
  15. package/dist/mcp/handlers-documentation.d.ts +18 -0
  16. package/dist/mcp/handlers-documentation.d.ts.map +1 -0
  17. package/dist/mcp/handlers-documentation.js +113 -0
  18. package/dist/mcp/handlers-documentation.js.map +1 -0
  19. package/dist/mcp/handlers-n8n-manager.d.ts +2 -1
  20. package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
  21. package/dist/mcp/handlers-n8n-manager.js +193 -5
  22. package/dist/mcp/handlers-n8n-manager.js.map +1 -1
  23. package/dist/mcp/handlers-workflow-diff.d.ts +2 -1
  24. package/dist/mcp/handlers-workflow-diff.d.ts.map +1 -1
  25. package/dist/mcp/handlers-workflow-diff.js +30 -2
  26. package/dist/mcp/handlers-workflow-diff.js.map +1 -1
  27. package/dist/mcp/index.js +0 -0
  28. package/dist/mcp/minimal-test.d.ts +3 -0
  29. package/dist/mcp/minimal-test.d.ts.map +1 -0
  30. package/dist/mcp/minimal-test.js +83 -0
  31. package/dist/mcp/minimal-test.js.map +1 -0
  32. package/dist/mcp/server.d.ts.map +1 -1
  33. package/dist/mcp/server.js +5 -2
  34. package/dist/mcp/server.js.map +1 -1
  35. package/dist/mcp/stderr-test.d.ts +2 -0
  36. package/dist/mcp/stderr-test.d.ts.map +1 -0
  37. package/dist/mcp/stderr-test.js +32 -0
  38. package/dist/mcp/stderr-test.js.map +1 -0
  39. package/dist/mcp/tool-docs/special/code-node-guide.d.ts +3 -0
  40. package/dist/mcp/tool-docs/special/code-node-guide.d.ts.map +1 -0
  41. package/dist/mcp/tool-docs/special/code-node-guide.js +61 -0
  42. package/dist/mcp/tool-docs/special/code-node-guide.js.map +1 -0
  43. package/dist/mcp/tool-docs/special/index.d.ts +2 -0
  44. package/dist/mcp/tool-docs/special/index.d.ts.map +1 -0
  45. package/dist/mcp/tool-docs/special/index.js +6 -0
  46. package/dist/mcp/tool-docs/special/index.js.map +1 -0
  47. package/dist/mcp/tool-docs/templates/get-node-for-task.d.ts +3 -0
  48. package/dist/mcp/tool-docs/templates/get-node-for-task.d.ts.map +1 -0
  49. package/dist/mcp/tool-docs/templates/get-node-for-task.js +50 -0
  50. package/dist/mcp/tool-docs/templates/get-node-for-task.js.map +1 -0
  51. package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.d.ts.map +1 -1
  52. package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.js +47 -11
  53. package/dist/mcp/tool-docs/workflow_management/n8n-autofix-workflow.js.map +1 -1
  54. package/dist/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.d.ts.map +1 -1
  55. package/dist/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.js +6 -0
  56. package/dist/mcp/tool-docs/workflow_management/n8n-update-partial-workflow.js.map +1 -1
  57. package/dist/mcp/tools-documentation-new.d.ts +6 -0
  58. package/dist/mcp/tools-documentation-new.d.ts.map +1 -0
  59. package/dist/mcp/tools-documentation-new.js +163 -0
  60. package/dist/mcp/tools-documentation-new.js.map +1 -0
  61. package/dist/mcp/tools-n8n-manager.d.ts.map +1 -1
  62. package/dist/mcp/tools-n8n-manager.js +55 -1
  63. package/dist/mcp/tools-n8n-manager.js.map +1 -1
  64. package/dist/mcp/ultra-minimal.d.ts +8 -0
  65. package/dist/mcp/ultra-minimal.d.ts.map +1 -0
  66. package/dist/mcp/ultra-minimal.js +93 -0
  67. package/dist/mcp/ultra-minimal.js.map +1 -0
  68. package/dist/mcp/working-test.d.ts +3 -0
  69. package/dist/mcp/working-test.d.ts.map +1 -0
  70. package/dist/mcp/working-test.js +48 -0
  71. package/dist/mcp/working-test.js.map +1 -0
  72. package/dist/mcp/wrapper.sh +28 -0
  73. package/dist/scripts/debug-n8n-auth.d.ts +3 -0
  74. package/dist/scripts/debug-n8n-auth.d.ts.map +1 -0
  75. package/dist/scripts/debug-n8n-auth.js +97 -0
  76. package/dist/scripts/debug-n8n-auth.js.map +1 -0
  77. package/dist/scripts/debug-node.d.ts +3 -0
  78. package/dist/scripts/debug-node.d.ts.map +1 -0
  79. package/dist/scripts/debug-node.js +59 -0
  80. package/dist/scripts/debug-node.js.map +1 -0
  81. package/dist/scripts/generate-metadata-only.d.ts +3 -0
  82. package/dist/scripts/generate-metadata-only.d.ts.map +1 -0
  83. package/dist/scripts/generate-metadata-only.js +146 -0
  84. package/dist/scripts/generate-metadata-only.js.map +1 -0
  85. package/dist/scripts/generate-metadata-sync.d.ts +3 -0
  86. package/dist/scripts/generate-metadata-sync.d.ts.map +1 -0
  87. package/dist/scripts/generate-metadata-sync.js +136 -0
  88. package/dist/scripts/generate-metadata-sync.js.map +1 -0
  89. package/dist/scripts/test-ai-workflow-validation.d.ts +3 -0
  90. package/dist/scripts/test-ai-workflow-validation.d.ts.map +1 -0
  91. package/dist/scripts/test-ai-workflow-validation.js +191 -0
  92. package/dist/scripts/test-ai-workflow-validation.js.map +1 -0
  93. package/dist/scripts/test-api-headers.d.ts +3 -0
  94. package/dist/scripts/test-api-headers.d.ts.map +1 -0
  95. package/dist/scripts/test-api-headers.js +35 -0
  96. package/dist/scripts/test-api-headers.js.map +1 -0
  97. package/dist/scripts/test-autofix-workflow.js +3 -3
  98. package/dist/scripts/test-autofix-workflow.js.map +1 -1
  99. package/dist/scripts/test-batch-processing.d.ts +3 -0
  100. package/dist/scripts/test-batch-processing.d.ts.map +1 -0
  101. package/dist/scripts/test-batch-processing.js +144 -0
  102. package/dist/scripts/test-batch-processing.js.map +1 -0
  103. package/dist/scripts/test-docker-config-simulation.d.ts +3 -0
  104. package/dist/scripts/test-docker-config-simulation.d.ts.map +1 -0
  105. package/dist/scripts/test-docker-config-simulation.js +74 -0
  106. package/dist/scripts/test-docker-config-simulation.js.map +1 -0
  107. package/dist/scripts/test-enhanced-validation.d.ts +3 -0
  108. package/dist/scripts/test-enhanced-validation.d.ts.map +1 -0
  109. package/dist/scripts/test-enhanced-validation.js +117 -0
  110. package/dist/scripts/test-enhanced-validation.js.map +1 -0
  111. package/dist/scripts/test-error-handling-validation.d.ts +3 -0
  112. package/dist/scripts/test-error-handling-validation.d.ts.map +1 -0
  113. package/dist/scripts/test-error-handling-validation.js +340 -0
  114. package/dist/scripts/test-error-handling-validation.js.map +1 -0
  115. package/dist/scripts/test-issue-45-fix.d.ts +3 -0
  116. package/dist/scripts/test-issue-45-fix.d.ts.map +1 -0
  117. package/dist/scripts/test-issue-45-fix.js +136 -0
  118. package/dist/scripts/test-issue-45-fix.js.map +1 -0
  119. package/dist/scripts/test-issue-74.d.ts +3 -0
  120. package/dist/scripts/test-issue-74.d.ts.map +1 -0
  121. package/dist/scripts/test-issue-74.js +112 -0
  122. package/dist/scripts/test-issue-74.js.map +1 -0
  123. package/dist/scripts/test-lazy-config.d.ts +3 -0
  124. package/dist/scripts/test-lazy-config.d.ts.map +1 -0
  125. package/dist/scripts/test-lazy-config.js +60 -0
  126. package/dist/scripts/test-lazy-config.js.map +1 -0
  127. package/dist/scripts/test-limited-results.d.ts +3 -0
  128. package/dist/scripts/test-limited-results.d.ts.map +1 -0
  129. package/dist/scripts/test-limited-results.js +76 -0
  130. package/dist/scripts/test-limited-results.js.map +1 -0
  131. package/dist/scripts/test-mcp-n8n-update-partial.d.ts +3 -0
  132. package/dist/scripts/test-mcp-n8n-update-partial.d.ts.map +1 -0
  133. package/dist/scripts/test-mcp-n8n-update-partial.js +138 -0
  134. package/dist/scripts/test-mcp-n8n-update-partial.js.map +1 -0
  135. package/dist/scripts/test-mcp-tools.d.ts +3 -0
  136. package/dist/scripts/test-mcp-tools.d.ts.map +1 -0
  137. package/dist/scripts/test-mcp-tools.js +36 -0
  138. package/dist/scripts/test-mcp-tools.js.map +1 -0
  139. package/dist/scripts/test-metadata-generation.d.ts +3 -0
  140. package/dist/scripts/test-metadata-generation.d.ts.map +1 -0
  141. package/dist/scripts/test-metadata-generation.js +96 -0
  142. package/dist/scripts/test-metadata-generation.js.map +1 -0
  143. package/dist/scripts/test-n8n-manager-integration.d.ts +3 -0
  144. package/dist/scripts/test-n8n-manager-integration.d.ts.map +1 -0
  145. package/dist/scripts/test-n8n-manager-integration.js +122 -0
  146. package/dist/scripts/test-n8n-manager-integration.js.map +1 -0
  147. package/dist/scripts/test-n8n-validate-workflow.d.ts +3 -0
  148. package/dist/scripts/test-n8n-validate-workflow.d.ts.map +1 -0
  149. package/dist/scripts/test-n8n-validate-workflow.js +125 -0
  150. package/dist/scripts/test-n8n-validate-workflow.js.map +1 -0
  151. package/dist/scripts/test-node-level-properties.d.ts +3 -0
  152. package/dist/scripts/test-node-level-properties.d.ts.map +1 -0
  153. package/dist/scripts/test-node-level-properties.js +196 -0
  154. package/dist/scripts/test-node-level-properties.js.map +1 -0
  155. package/dist/scripts/test-node-suggestions.js +1 -1
  156. package/dist/scripts/test-node-suggestions.js.map +1 -1
  157. package/dist/scripts/test-nodes.d.ts +3 -0
  158. package/dist/scripts/test-nodes.d.ts.map +1 -0
  159. package/dist/scripts/test-nodes.js +91 -0
  160. package/dist/scripts/test-nodes.js.map +1 -0
  161. package/dist/scripts/test-single-workflow.d.ts +3 -0
  162. package/dist/scripts/test-single-workflow.d.ts.map +1 -0
  163. package/dist/scripts/test-single-workflow.js +112 -0
  164. package/dist/scripts/test-single-workflow.js.map +1 -0
  165. package/dist/scripts/test-template-validation.d.ts +3 -0
  166. package/dist/scripts/test-template-validation.d.ts.map +1 -0
  167. package/dist/scripts/test-template-validation.js +142 -0
  168. package/dist/scripts/test-template-validation.js.map +1 -0
  169. package/dist/scripts/test-templates.d.ts +4 -0
  170. package/dist/scripts/test-templates.d.ts.map +1 -0
  171. package/dist/scripts/test-templates.js +99 -0
  172. package/dist/scripts/test-templates.js.map +1 -0
  173. package/dist/scripts/test-tools-documentation.d.ts +2 -0
  174. package/dist/scripts/test-tools-documentation.d.ts.map +1 -0
  175. package/dist/scripts/test-tools-documentation.js +41 -0
  176. package/dist/scripts/test-tools-documentation.js.map +1 -0
  177. package/dist/scripts/test-transactional-diff.d.ts +2 -0
  178. package/dist/scripts/test-transactional-diff.d.ts.map +1 -0
  179. package/dist/scripts/test-transactional-diff.js +240 -0
  180. package/dist/scripts/test-transactional-diff.js.map +1 -0
  181. package/dist/scripts/test-update-partial-debug.d.ts +3 -0
  182. package/dist/scripts/test-update-partial-debug.d.ts.map +1 -0
  183. package/dist/scripts/test-update-partial-debug.js +92 -0
  184. package/dist/scripts/test-update-partial-debug.js.map +1 -0
  185. package/dist/scripts/test-updatenode-null-fix.d.ts +3 -0
  186. package/dist/scripts/test-updatenode-null-fix.d.ts.map +1 -0
  187. package/dist/scripts/test-updatenode-null-fix.js +156 -0
  188. package/dist/scripts/test-updatenode-null-fix.js.map +1 -0
  189. package/dist/scripts/test-validation-parity.d.ts +2 -0
  190. package/dist/scripts/test-validation-parity.d.ts.map +1 -0
  191. package/dist/scripts/test-validation-parity.js +153 -0
  192. package/dist/scripts/test-validation-parity.js.map +1 -0
  193. package/dist/scripts/test-version-extraction.d.ts +2 -0
  194. package/dist/scripts/test-version-extraction.d.ts.map +1 -0
  195. package/dist/scripts/test-version-extraction.js +74 -0
  196. package/dist/scripts/test-version-extraction.js.map +1 -0
  197. package/dist/scripts/test-webhook-autofix.js +1 -1
  198. package/dist/scripts/test-webhook-autofix.js.map +1 -1
  199. package/dist/scripts/test-workflow-diff.d.ts +3 -0
  200. package/dist/scripts/test-workflow-diff.d.ts.map +1 -0
  201. package/dist/scripts/test-workflow-diff.js +328 -0
  202. package/dist/scripts/test-workflow-diff.js.map +1 -0
  203. package/dist/scripts/test-workflow-validation.d.ts +3 -0
  204. package/dist/scripts/test-workflow-validation.d.ts.map +1 -0
  205. package/dist/scripts/test-workflow-validation.js +238 -0
  206. package/dist/scripts/test-workflow-validation.js.map +1 -0
  207. package/dist/services/breaking-change-detector.d.ts +38 -0
  208. package/dist/services/breaking-change-detector.d.ts.map +1 -0
  209. package/dist/services/breaking-change-detector.js +184 -0
  210. package/dist/services/breaking-change-detector.js.map +1 -0
  211. package/dist/services/breaking-changes-registry.d.ts +28 -0
  212. package/dist/services/breaking-changes-registry.d.ts.map +1 -0
  213. package/dist/services/breaking-changes-registry.js +200 -0
  214. package/dist/services/breaking-changes-registry.js.map +1 -0
  215. package/dist/services/enhanced-config-validator.d.ts.map +1 -1
  216. package/dist/services/enhanced-config-validator.js +32 -0
  217. package/dist/services/enhanced-config-validator.js.map +1 -1
  218. package/dist/services/n8n-api-client.d.ts +1 -0
  219. package/dist/services/n8n-api-client.d.ts.map +1 -1
  220. package/dist/services/n8n-api-client.js +26 -4
  221. package/dist/services/n8n-api-client.js.map +1 -1
  222. package/dist/services/n8n-validation.d.ts +144 -6
  223. package/dist/services/n8n-validation.d.ts.map +1 -1
  224. package/dist/services/n8n-validation.js +12 -5
  225. package/dist/services/n8n-validation.js.map +1 -1
  226. package/dist/services/node-migration-service.d.ts +44 -0
  227. package/dist/services/node-migration-service.d.ts.map +1 -0
  228. package/dist/services/node-migration-service.js +231 -0
  229. package/dist/services/node-migration-service.js.map +1 -0
  230. package/dist/services/node-version-service.d.ts +63 -0
  231. package/dist/services/node-version-service.d.ts.map +1 -0
  232. package/dist/services/node-version-service.js +215 -0
  233. package/dist/services/node-version-service.js.map +1 -0
  234. package/dist/services/post-update-validator.d.ts +59 -0
  235. package/dist/services/post-update-validator.d.ts.map +1 -0
  236. package/dist/services/post-update-validator.js +231 -0
  237. package/dist/services/post-update-validator.js.map +1 -0
  238. package/dist/services/workflow-auto-fixer.d.ts +10 -2
  239. package/dist/services/workflow-auto-fixer.d.ts.map +1 -1
  240. package/dist/services/workflow-auto-fixer.js +124 -3
  241. package/dist/services/workflow-auto-fixer.js.map +1 -1
  242. package/dist/services/workflow-diff-engine.d.ts +1 -0
  243. package/dist/services/workflow-diff-engine.d.ts.map +1 -1
  244. package/dist/services/workflow-diff-engine.js +23 -1
  245. package/dist/services/workflow-diff-engine.js.map +1 -1
  246. package/dist/services/workflow-ownership.d.ts +35 -0
  247. package/dist/services/workflow-ownership.d.ts.map +1 -0
  248. package/dist/services/workflow-ownership.js +195 -0
  249. package/dist/services/workflow-ownership.js.map +1 -0
  250. package/dist/services/workflow-versioning-service.d.ts +102 -0
  251. package/dist/services/workflow-versioning-service.d.ts.map +1 -0
  252. package/dist/services/workflow-versioning-service.js +264 -0
  253. package/dist/services/workflow-versioning-service.js.map +1 -0
  254. package/dist/sse-server.d.ts +8 -0
  255. package/dist/sse-server.d.ts.map +1 -0
  256. package/dist/sse-server.js +652 -0
  257. package/dist/sse-server.js.map +1 -0
  258. package/dist/types/session-restoration.d.ts +25 -0
  259. package/dist/types/session-restoration.d.ts.map +1 -0
  260. package/dist/types/session-restoration.js +3 -0
  261. package/dist/types/session-restoration.js.map +1 -0
  262. package/dist/types/sse.d.ts +42 -0
  263. package/dist/types/sse.d.ts.map +1 -0
  264. package/dist/types/sse.js +3 -0
  265. package/dist/types/sse.js.map +1 -0
  266. package/dist/types/workflow-diff.d.ts +1 -0
  267. package/dist/types/workflow-diff.d.ts.map +1 -1
  268. package/dist/types/workflow-diff.js.map +1 -1
  269. package/dist/utils/sse-session-manager.d.ts +23 -0
  270. package/dist/utils/sse-session-manager.d.ts.map +1 -0
  271. package/dist/utils/sse-session-manager.js +178 -0
  272. package/dist/utils/sse-session-manager.js.map +1 -0
  273. package/dist/utils/version-utils.d.ts +16 -0
  274. package/dist/utils/version-utils.d.ts.map +1 -0
  275. package/dist/utils/version-utils.js +129 -0
  276. package/dist/utils/version-utils.js.map +1 -0
  277. package/package.json +1 -10
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const workflow_diff_engine_1 = require("../services/workflow-diff-engine");
4
+ const logger_1 = require("../utils/logger");
5
+ const logger = new logger_1.Logger({ prefix: '[TestTransactionalDiff]' });
6
+ const testWorkflow = {
7
+ id: 'test-workflow-123',
8
+ name: 'Test Workflow',
9
+ active: false,
10
+ nodes: [
11
+ {
12
+ id: '1',
13
+ name: 'Webhook',
14
+ type: 'n8n-nodes-base.webhook',
15
+ typeVersion: 2,
16
+ position: [200, 300],
17
+ parameters: {
18
+ path: '/test',
19
+ method: 'GET'
20
+ }
21
+ }
22
+ ],
23
+ connections: {},
24
+ settings: {
25
+ executionOrder: 'v1'
26
+ },
27
+ tags: []
28
+ };
29
+ async function testAddNodesAndConnect() {
30
+ logger.info('Test 1: Add two nodes and connect them in one operation');
31
+ const engine = new workflow_diff_engine_1.WorkflowDiffEngine();
32
+ const request = {
33
+ id: testWorkflow.id,
34
+ operations: [
35
+ {
36
+ type: 'addConnection',
37
+ source: 'Webhook',
38
+ target: 'Process Data'
39
+ },
40
+ {
41
+ type: 'addConnection',
42
+ source: 'Process Data',
43
+ target: 'Send Email'
44
+ },
45
+ {
46
+ type: 'addNode',
47
+ node: {
48
+ id: '2',
49
+ name: 'Process Data',
50
+ type: 'n8n-nodes-base.set',
51
+ typeVersion: 3,
52
+ position: [400, 300],
53
+ parameters: {
54
+ mode: 'manual',
55
+ fields: []
56
+ }
57
+ }
58
+ },
59
+ {
60
+ type: 'addNode',
61
+ node: {
62
+ id: '3',
63
+ name: 'Send Email',
64
+ type: 'n8n-nodes-base.emailSend',
65
+ typeVersion: 2.1,
66
+ position: [600, 300],
67
+ parameters: {
68
+ to: 'test@example.com',
69
+ subject: 'Test'
70
+ }
71
+ }
72
+ }
73
+ ]
74
+ };
75
+ const result = await engine.applyDiff(testWorkflow, request);
76
+ if (result.success) {
77
+ logger.info('โœ… Test passed! Operations applied successfully');
78
+ logger.info(`Message: ${result.message}`);
79
+ const workflow = result.workflow;
80
+ const hasProcessData = workflow.nodes.some((n) => n.name === 'Process Data');
81
+ const hasSendEmail = workflow.nodes.some((n) => n.name === 'Send Email');
82
+ if (hasProcessData && hasSendEmail) {
83
+ logger.info('โœ… Both nodes were added');
84
+ }
85
+ else {
86
+ logger.error('โŒ Nodes were not added correctly');
87
+ }
88
+ const webhookConnections = workflow.connections['Webhook'];
89
+ const processConnections = workflow.connections['Process Data'];
90
+ if (webhookConnections && processConnections) {
91
+ logger.info('โœ… Connections were established');
92
+ }
93
+ else {
94
+ logger.error('โŒ Connections were not established correctly');
95
+ }
96
+ }
97
+ else {
98
+ logger.error('โŒ Test failed!');
99
+ logger.error('Errors:', result.errors);
100
+ }
101
+ }
102
+ async function testOperationLimit() {
103
+ logger.info('\nTest 2: Operation limit (max 5)');
104
+ const engine = new workflow_diff_engine_1.WorkflowDiffEngine();
105
+ const request = {
106
+ id: testWorkflow.id,
107
+ operations: [
108
+ { type: 'addNode', node: { id: '101', name: 'Node1', type: 'n8n-nodes-base.set', typeVersion: 1, position: [400, 100], parameters: {} } },
109
+ { type: 'addNode', node: { id: '102', name: 'Node2', type: 'n8n-nodes-base.set', typeVersion: 1, position: [400, 200], parameters: {} } },
110
+ { type: 'addNode', node: { id: '103', name: 'Node3', type: 'n8n-nodes-base.set', typeVersion: 1, position: [400, 300], parameters: {} } },
111
+ { type: 'addNode', node: { id: '104', name: 'Node4', type: 'n8n-nodes-base.set', typeVersion: 1, position: [400, 400], parameters: {} } },
112
+ { type: 'addNode', node: { id: '105', name: 'Node5', type: 'n8n-nodes-base.set', typeVersion: 1, position: [400, 500], parameters: {} } },
113
+ { type: 'addNode', node: { id: '106', name: 'Node6', type: 'n8n-nodes-base.set', typeVersion: 1, position: [400, 600], parameters: {} } }
114
+ ]
115
+ };
116
+ const result = await engine.applyDiff(testWorkflow, request);
117
+ if (!result.success && result.errors?.[0]?.message.includes('Too many operations')) {
118
+ logger.info('โœ… Operation limit enforced correctly');
119
+ }
120
+ else {
121
+ logger.error('โŒ Operation limit not enforced');
122
+ }
123
+ }
124
+ async function testValidateOnly() {
125
+ logger.info('\nTest 3: Validate only mode');
126
+ const engine = new workflow_diff_engine_1.WorkflowDiffEngine();
127
+ const request = {
128
+ id: testWorkflow.id,
129
+ operations: [
130
+ {
131
+ type: 'addConnection',
132
+ source: 'Webhook',
133
+ target: 'HTTP Request'
134
+ },
135
+ {
136
+ type: 'addNode',
137
+ node: {
138
+ id: '4',
139
+ name: 'HTTP Request',
140
+ type: 'n8n-nodes-base.httpRequest',
141
+ typeVersion: 4.2,
142
+ position: [400, 300],
143
+ parameters: {
144
+ method: 'GET',
145
+ url: 'https://api.example.com'
146
+ }
147
+ }
148
+ },
149
+ {
150
+ type: 'updateSettings',
151
+ settings: {
152
+ saveDataErrorExecution: 'all'
153
+ }
154
+ }
155
+ ],
156
+ validateOnly: true
157
+ };
158
+ const result = await engine.applyDiff(testWorkflow, request);
159
+ if (result.success) {
160
+ logger.info('โœ… Validate-only mode works correctly');
161
+ logger.info(`Validation message: ${result.message}`);
162
+ if (testWorkflow.nodes.length === 1) {
163
+ logger.info('โœ… Original workflow unchanged');
164
+ }
165
+ else {
166
+ logger.error('โŒ Original workflow was modified in validate-only mode');
167
+ }
168
+ }
169
+ else {
170
+ logger.error('โŒ Validate-only mode failed');
171
+ logger.error('Errors:', result.errors);
172
+ }
173
+ }
174
+ async function testMixedOperations() {
175
+ logger.info('\nTest 4: Mixed operations (update existing, add new, connect)');
176
+ const engine = new workflow_diff_engine_1.WorkflowDiffEngine();
177
+ const request = {
178
+ id: testWorkflow.id,
179
+ operations: [
180
+ {
181
+ type: 'updateNode',
182
+ nodeName: 'Webhook',
183
+ changes: {
184
+ 'parameters.path': '/updated-path'
185
+ }
186
+ },
187
+ {
188
+ type: 'addNode',
189
+ node: {
190
+ id: '5',
191
+ name: 'Logger',
192
+ type: 'n8n-nodes-base.n8n',
193
+ typeVersion: 1,
194
+ position: [400, 300],
195
+ parameters: {
196
+ operation: 'log',
197
+ level: 'info'
198
+ }
199
+ }
200
+ },
201
+ {
202
+ type: 'addConnection',
203
+ source: 'Webhook',
204
+ target: 'Logger'
205
+ },
206
+ {
207
+ type: 'updateSettings',
208
+ settings: {
209
+ saveDataErrorExecution: 'all'
210
+ }
211
+ }
212
+ ]
213
+ };
214
+ const result = await engine.applyDiff(testWorkflow, request);
215
+ if (result.success) {
216
+ logger.info('โœ… Mixed operations applied successfully');
217
+ logger.info(`Message: ${result.message}`);
218
+ }
219
+ else {
220
+ logger.error('โŒ Mixed operations failed');
221
+ logger.error('Errors:', result.errors);
222
+ }
223
+ }
224
+ async function runTests() {
225
+ logger.info('Starting transactional diff tests...\n');
226
+ try {
227
+ await testAddNodesAndConnect();
228
+ await testOperationLimit();
229
+ await testValidateOnly();
230
+ await testMixedOperations();
231
+ logger.info('\nโœ… All tests completed!');
232
+ }
233
+ catch (error) {
234
+ logger.error('Test suite failed:', error);
235
+ }
236
+ }
237
+ if (require.main === module) {
238
+ runTests().catch(console.error);
239
+ }
240
+ //# sourceMappingURL=test-transactional-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-transactional-diff.js","sourceRoot":"","sources":["../../src/scripts/test-transactional-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=test-update-partial-debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-update-partial-debug.d.ts","sourceRoot":"","sources":["../../src/scripts/test-update-partial-debug.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const dotenv_1 = require("dotenv");
5
+ const logger_1 = require("../utils/logger");
6
+ const n8n_api_1 = require("../config/n8n-api");
7
+ const handlers_workflow_diff_1 = require("../mcp/handlers-workflow-diff");
8
+ const handlers_n8n_manager_1 = require("../mcp/handlers-n8n-manager");
9
+ (0, dotenv_1.config)();
10
+ async function testUpdatePartialDebug() {
11
+ logger_1.logger.info('Debug test for n8n_update_partial_workflow...');
12
+ if (!(0, n8n_api_1.isN8nApiConfigured)()) {
13
+ logger_1.logger.warn('n8n API not configured. This test requires a real n8n instance.');
14
+ logger_1.logger.info('Set N8N_API_URL and N8N_API_KEY to test.');
15
+ return;
16
+ }
17
+ const client = (0, handlers_n8n_manager_1.getN8nApiClient)();
18
+ if (!client) {
19
+ logger_1.logger.error('Failed to create n8n API client');
20
+ return;
21
+ }
22
+ try {
23
+ logger_1.logger.info('\n=== Creating test workflow ===');
24
+ const testWorkflow = {
25
+ name: `Test Partial Update ${Date.now()}`,
26
+ nodes: [
27
+ {
28
+ id: '1',
29
+ name: 'Start',
30
+ type: 'n8n-nodes-base.start',
31
+ typeVersion: 1,
32
+ position: [250, 300],
33
+ parameters: {}
34
+ },
35
+ {
36
+ id: '2',
37
+ name: 'Set',
38
+ type: 'n8n-nodes-base.set',
39
+ typeVersion: 3,
40
+ position: [450, 300],
41
+ parameters: {
42
+ mode: 'manual',
43
+ fields: {
44
+ values: [
45
+ { name: 'message', value: 'Initial value' }
46
+ ]
47
+ }
48
+ }
49
+ }
50
+ ],
51
+ connections: {
52
+ 'Start': {
53
+ main: [[{ node: 'Set', type: 'main', index: 0 }]]
54
+ }
55
+ },
56
+ settings: {
57
+ executionOrder: 'v1'
58
+ }
59
+ };
60
+ const createdWorkflow = await client.createWorkflow(testWorkflow);
61
+ logger_1.logger.info('Created workflow:', {
62
+ id: createdWorkflow.id,
63
+ name: createdWorkflow.name
64
+ });
65
+ logger_1.logger.info('\n=== Testing partial update (NO validateOnly) ===');
66
+ const updateRequest = {
67
+ id: createdWorkflow.id,
68
+ operations: [
69
+ {
70
+ type: 'updateName',
71
+ name: 'Updated via Partial Update'
72
+ }
73
+ ]
74
+ };
75
+ logger_1.logger.info('Update request:', JSON.stringify(updateRequest, null, 2));
76
+ const result = await (0, handlers_workflow_diff_1.handleUpdatePartialWorkflow)(updateRequest);
77
+ logger_1.logger.info('Update result:', JSON.stringify(result, null, 2));
78
+ if (createdWorkflow.id) {
79
+ logger_1.logger.info('\n=== Cleanup ===');
80
+ await client.deleteWorkflow(createdWorkflow.id);
81
+ logger_1.logger.info('Deleted test workflow');
82
+ }
83
+ }
84
+ catch (error) {
85
+ logger_1.logger.error('Test failed:', error);
86
+ }
87
+ }
88
+ testUpdatePartialDebug().catch(error => {
89
+ logger_1.logger.error('Unhandled error:', error);
90
+ process.exit(1);
91
+ });
92
+ //# sourceMappingURL=test-update-partial-debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-update-partial-debug.js","sourceRoot":"","sources":["../../src/scripts/test-update-partial-debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=test-updatenode-null-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-updatenode-null-fix.d.ts","sourceRoot":"","sources":["../../src/scripts/test-updatenode-null-fix.ts"],"names":[],"mappings":""}
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const workflow_diff_engine_1 = require("../services/workflow-diff-engine");
5
+ const testWorkflow = {
6
+ id: 'test-workflow-null',
7
+ name: 'Test Null Handling',
8
+ nodes: [
9
+ {
10
+ id: 'http_1',
11
+ name: 'HTTP Request',
12
+ type: 'n8n-nodes-base.httpRequest',
13
+ typeVersion: 4,
14
+ position: [200, 200],
15
+ parameters: {
16
+ url: 'https://api.example.com',
17
+ method: 'GET',
18
+ authentication: null,
19
+ options: {
20
+ timeout: 5000
21
+ }
22
+ }
23
+ },
24
+ {
25
+ id: 'set_1',
26
+ name: 'Set',
27
+ type: 'n8n-nodes-base.set',
28
+ typeVersion: 3,
29
+ position: [400, 200],
30
+ parameters: {
31
+ mode: 'manual',
32
+ fields: null
33
+ }
34
+ }
35
+ ],
36
+ connections: {}
37
+ };
38
+ async function testUpdateNodeWithNullValues() {
39
+ console.log('๐Ÿงช Testing updateNode operation with null/undefined handling...\n');
40
+ const engine = new workflow_diff_engine_1.WorkflowDiffEngine();
41
+ console.log('Test 1: Updating authentication.type where authentication is null');
42
+ let result = await engine.applyDiff(testWorkflow, {
43
+ id: 'test-workflow-null',
44
+ operations: [{
45
+ type: 'updateNode',
46
+ nodeName: 'HTTP Request',
47
+ changes: {
48
+ 'parameters.authentication.type': 'headerAuth',
49
+ 'parameters.authentication.properties.headerAuth.name': 'Authorization',
50
+ 'parameters.authentication.properties.headerAuth.value': 'Bearer token123'
51
+ }
52
+ }]
53
+ });
54
+ if (result.success) {
55
+ const node = result.workflow.nodes.find((n) => n.name === 'HTTP Request');
56
+ console.log('โœ… Success! Authentication updated:');
57
+ console.log(' - Type:', node.parameters.authentication?.type);
58
+ console.log(' - Header name:', node.parameters.authentication?.properties?.headerAuth?.name);
59
+ console.log(' - Header value:', node.parameters.authentication?.properties?.headerAuth?.value);
60
+ }
61
+ else {
62
+ console.error('โŒ Failed:', result.errors);
63
+ }
64
+ console.log('\nTest 2: Updating options.headers.Accept where headers is undefined');
65
+ result = await engine.applyDiff(testWorkflow, {
66
+ id: 'test-workflow-null',
67
+ operations: [{
68
+ type: 'updateNode',
69
+ nodeName: 'HTTP Request',
70
+ changes: {
71
+ 'parameters.options.headers.Accept': 'application/json',
72
+ 'parameters.options.headers.Content-Type': 'application/json'
73
+ }
74
+ }]
75
+ });
76
+ if (result.success) {
77
+ const node = result.workflow.nodes.find((n) => n.name === 'HTTP Request');
78
+ console.log('โœ… Success! Headers updated:');
79
+ console.log(' - Accept:', node.parameters.options?.headers?.Accept);
80
+ console.log(' - Content-Type:', node.parameters.options?.headers?.['Content-Type']);
81
+ }
82
+ else {
83
+ console.error('โŒ Failed:', result.errors);
84
+ }
85
+ console.log('\nTest 3: Updating fields.values where fields is null');
86
+ result = await engine.applyDiff(testWorkflow, {
87
+ id: 'test-workflow-null',
88
+ operations: [{
89
+ type: 'updateNode',
90
+ nodeName: 'Set',
91
+ changes: {
92
+ 'parameters.fields.values': [
93
+ { name: 'field1', value: 'value1' },
94
+ { name: 'field2', value: 'value2' }
95
+ ]
96
+ }
97
+ }]
98
+ });
99
+ if (result.success) {
100
+ const node = result.workflow.nodes.find((n) => n.name === 'Set');
101
+ console.log('โœ… Success! Fields updated:');
102
+ console.log(' - Values:', JSON.stringify(node.parameters.fields?.values, null, 2));
103
+ }
104
+ else {
105
+ console.error('โŒ Failed:', result.errors);
106
+ }
107
+ console.log('\nTest 4: Multiple operations with mixed null/existing values');
108
+ result = await engine.applyDiff(testWorkflow, {
109
+ id: 'test-workflow-null',
110
+ operations: [
111
+ {
112
+ type: 'updateNode',
113
+ nodeName: 'HTTP Request',
114
+ changes: {
115
+ 'parameters.url': 'https://new-api.example.com',
116
+ 'parameters.authentication.type': 'oauth2',
117
+ 'parameters.options.proxy.host': 'proxy.example.com',
118
+ 'parameters.options.proxy.port': 8080
119
+ }
120
+ },
121
+ {
122
+ type: 'updateNode',
123
+ nodeName: 'Set',
124
+ changes: {
125
+ 'parameters.mode': 'json',
126
+ 'parameters.fields.schema': { type: 'object' }
127
+ }
128
+ }
129
+ ]
130
+ });
131
+ if (result.success) {
132
+ console.log('โœ… Success! All operations applied:');
133
+ console.log(' - Operations applied:', result.operationsApplied);
134
+ console.log(' - Message:', result.message);
135
+ const httpNode = result.workflow.nodes.find((n) => n.name === 'HTTP Request');
136
+ const setNode = result.workflow.nodes.find((n) => n.name === 'Set');
137
+ console.log('\n HTTP Request node:');
138
+ console.log(' - URL:', httpNode.parameters.url);
139
+ console.log(' - Auth type:', httpNode.parameters.authentication?.type);
140
+ console.log(' - Proxy:', httpNode.parameters.options?.proxy);
141
+ console.log('\n Set node:');
142
+ console.log(' - Mode:', setNode.parameters.mode);
143
+ console.log(' - Schema:', setNode.parameters.fields?.schema);
144
+ }
145
+ else {
146
+ console.error('โŒ Failed:', result.errors);
147
+ }
148
+ console.log('\nโœ… All null/undefined handling tests completed!');
149
+ }
150
+ if (require.main === module) {
151
+ testUpdateNodeWithNullValues().catch(error => {
152
+ console.error('โŒ Test failed with error:', error);
153
+ process.exit(1);
154
+ });
155
+ }
156
+ //# sourceMappingURL=test-updatenode-null-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-updatenode-null-fix.js","sourceRoot":"","sources":["../../src/scripts/test-updatenode-null-fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-validation-parity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-validation-parity.d.ts","sourceRoot":"","sources":["../../src/scripts/test-validation-parity.ts"],"names":[],"mappings":""}