Skip to main content
Glama
test-webhook-autofix.tsβ€’4.67 kB
#!/usr/bin/env node /** * Test script for webhook path autofixer functionality */ import { NodeRepository } from '../database/node-repository'; import { createDatabaseAdapter } from '../database/database-adapter'; import { WorkflowAutoFixer } from '../services/workflow-auto-fixer'; import { WorkflowValidator } from '../services/workflow-validator'; import { EnhancedConfigValidator } from '../services/enhanced-config-validator'; import { Workflow } from '../types/n8n-api'; import { Logger } from '../utils/logger'; import { join } from 'path'; const logger = new Logger({ prefix: '[TestWebhookAutofix]' }); // Test workflow with webhook missing path const testWorkflow: Workflow = { id: 'test_webhook_fix', name: 'Test Webhook Autofix', active: false, nodes: [ { id: '1', name: 'Webhook', type: 'n8n-nodes-base.webhook', typeVersion: 2.1, position: [250, 300], parameters: {}, // Empty parameters - missing path }, { id: '2', name: 'HTTP Request', type: 'n8n-nodes-base.httpRequest', typeVersion: 4.2, position: [450, 300], parameters: { url: 'https://api.example.com/data', method: 'GET' } } ], connections: { 'Webhook': { main: [[{ node: 'HTTP Request', type: 'main', index: 0 }]] } }, settings: { executionOrder: 'v1' }, staticData: undefined }; async function testWebhookAutofix() { logger.info('Testing webhook path autofixer...'); // Initialize database and repository const dbPath = join(process.cwd(), 'data', 'nodes.db'); const adapter = await createDatabaseAdapter(dbPath); const repository = new NodeRepository(adapter); // Create validators const validator = new WorkflowValidator(repository, EnhancedConfigValidator); const autoFixer = new WorkflowAutoFixer(repository); // Step 1: Validate workflow to identify issues logger.info('Step 1: Validating workflow to identify issues...'); const validationResult = await validator.validateWorkflow(testWorkflow); console.log('\nπŸ“‹ Validation Summary:'); console.log(`- Valid: ${validationResult.valid}`); console.log(`- Errors: ${validationResult.errors.length}`); console.log(`- Warnings: ${validationResult.warnings.length}`); if (validationResult.errors.length > 0) { console.log('\n❌ Errors found:'); validationResult.errors.forEach(error => { console.log(` - [${error.nodeName || error.nodeId}] ${error.message}`); }); } // Step 2: Generate fixes (preview mode) logger.info('\nStep 2: Generating fixes in preview mode...'); const fixResult = await autoFixer.generateFixes( testWorkflow, validationResult, [], // No expression format issues to pass { applyFixes: false, // Preview mode fixTypes: ['webhook-missing-path'] // Only test webhook fixes } ); console.log('\nπŸ”§ Fix Results:'); console.log(`- Summary: ${fixResult.summary}`); console.log(`- Total fixes: ${fixResult.stats.total}`); console.log(`- Webhook path fixes: ${fixResult.stats.byType['webhook-missing-path']}`); if (fixResult.fixes.length > 0) { console.log('\nπŸ“ Detailed Fixes:'); fixResult.fixes.forEach(fix => { console.log(` - Node: ${fix.node}`); console.log(` Field: ${fix.field}`); console.log(` Type: ${fix.type}`); console.log(` Before: ${fix.before || 'undefined'}`); console.log(` After: ${fix.after}`); console.log(` Confidence: ${fix.confidence}`); console.log(` Description: ${fix.description}`); }); } if (fixResult.operations.length > 0) { console.log('\nπŸ”„ Operations to Apply:'); fixResult.operations.forEach(op => { if (op.type === 'updateNode') { console.log(` - Update Node: ${op.nodeId}`); console.log(` Updates: ${JSON.stringify(op.updates, null, 2)}`); } }); } // Step 3: Verify UUID format if (fixResult.fixes.length > 0) { const webhookFix = fixResult.fixes.find(f => f.type === 'webhook-missing-path'); if (webhookFix) { const uuid = webhookFix.after as string; const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; const isValidUUID = uuidRegex.test(uuid); console.log('\nβœ… UUID Validation:'); console.log(` - Generated UUID: ${uuid}`); console.log(` - Valid format: ${isValidUUID ? 'Yes' : 'No'}`); } } logger.info('\n✨ Webhook autofix test completed successfully!'); } // Run test testWebhookAutofix().catch(error => { logger.error('Test failed:', error); process.exit(1); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/czlonkowski/n8n-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server