UNPKG

n8n-mcp

Version:

Integration between n8n workflow automation and Model Context Protocol (MCP)

156 lines โ€ข 6.16 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const workflow_diff_engine_1 = require("../services/workflow-diff-engine"); const testWorkflow = { id: 'test-workflow-null', name: 'Test Null Handling', nodes: [ { id: 'http_1', name: 'HTTP Request', type: 'n8n-nodes-base.httpRequest', typeVersion: 4, position: [200, 200], parameters: { url: 'https://api.example.com', method: 'GET', authentication: null, options: { timeout: 5000 } } }, { id: 'set_1', name: 'Set', type: 'n8n-nodes-base.set', typeVersion: 3, position: [400, 200], parameters: { mode: 'manual', fields: null } } ], connections: {} }; async function testUpdateNodeWithNullValues() { console.log('๐Ÿงช Testing updateNode operation with null/undefined handling...\n'); const engine = new workflow_diff_engine_1.WorkflowDiffEngine(); console.log('Test 1: Updating authentication.type where authentication is null'); let result = await engine.applyDiff(testWorkflow, { id: 'test-workflow-null', operations: [{ type: 'updateNode', nodeName: 'HTTP Request', changes: { 'parameters.authentication.type': 'headerAuth', 'parameters.authentication.properties.headerAuth.name': 'Authorization', 'parameters.authentication.properties.headerAuth.value': 'Bearer token123' } }] }); if (result.success) { const node = result.workflow.nodes.find((n) => n.name === 'HTTP Request'); console.log('โœ… Success! Authentication updated:'); console.log(' - Type:', node.parameters.authentication?.type); console.log(' - Header name:', node.parameters.authentication?.properties?.headerAuth?.name); console.log(' - Header value:', node.parameters.authentication?.properties?.headerAuth?.value); } else { console.error('โŒ Failed:', result.errors); } console.log('\nTest 2: Updating options.headers.Accept where headers is undefined'); result = await engine.applyDiff(testWorkflow, { id: 'test-workflow-null', operations: [{ type: 'updateNode', nodeName: 'HTTP Request', changes: { 'parameters.options.headers.Accept': 'application/json', 'parameters.options.headers.Content-Type': 'application/json' } }] }); if (result.success) { const node = result.workflow.nodes.find((n) => n.name === 'HTTP Request'); console.log('โœ… Success! Headers updated:'); console.log(' - Accept:', node.parameters.options?.headers?.Accept); console.log(' - Content-Type:', node.parameters.options?.headers?.['Content-Type']); } else { console.error('โŒ Failed:', result.errors); } console.log('\nTest 3: Updating fields.values where fields is null'); result = await engine.applyDiff(testWorkflow, { id: 'test-workflow-null', operations: [{ type: 'updateNode', nodeName: 'Set', changes: { 'parameters.fields.values': [ { name: 'field1', value: 'value1' }, { name: 'field2', value: 'value2' } ] } }] }); if (result.success) { const node = result.workflow.nodes.find((n) => n.name === 'Set'); console.log('โœ… Success! Fields updated:'); console.log(' - Values:', JSON.stringify(node.parameters.fields?.values, null, 2)); } else { console.error('โŒ Failed:', result.errors); } console.log('\nTest 4: Multiple operations with mixed null/existing values'); result = await engine.applyDiff(testWorkflow, { id: 'test-workflow-null', operations: [ { type: 'updateNode', nodeName: 'HTTP Request', changes: { 'parameters.url': 'https://new-api.example.com', 'parameters.authentication.type': 'oauth2', 'parameters.options.proxy.host': 'proxy.example.com', 'parameters.options.proxy.port': 8080 } }, { type: 'updateNode', nodeName: 'Set', changes: { 'parameters.mode': 'json', 'parameters.fields.schema': { type: 'object' } } } ] }); if (result.success) { console.log('โœ… Success! All operations applied:'); console.log(' - Operations applied:', result.operationsApplied); console.log(' - Message:', result.message); const httpNode = result.workflow.nodes.find((n) => n.name === 'HTTP Request'); const setNode = result.workflow.nodes.find((n) => n.name === 'Set'); console.log('\n HTTP Request node:'); console.log(' - URL:', httpNode.parameters.url); console.log(' - Auth type:', httpNode.parameters.authentication?.type); console.log(' - Proxy:', httpNode.parameters.options?.proxy); console.log('\n Set node:'); console.log(' - Mode:', setNode.parameters.mode); console.log(' - Schema:', setNode.parameters.fields?.schema); } else { console.error('โŒ Failed:', result.errors); } console.log('\nโœ… All null/undefined handling tests completed!'); } if (require.main === module) { testUpdateNodeWithNullValues().catch(error => { console.error('โŒ Test failed with error:', error); process.exit(1); }); } //# sourceMappingURL=test-updatenode-null-fix.js.map