#
tokens: 37797/50000 2/614 files (page 43/59)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 43 of 59. Use http://codebase.md/czlonkowski/n8n-mcp?lines=true&page={x} to view the full context.

# Directory Structure

```
├── _config.yml
├── .claude
│   └── agents
│       ├── code-reviewer.md
│       ├── context-manager.md
│       ├── debugger.md
│       ├── deployment-engineer.md
│       ├── mcp-backend-engineer.md
│       ├── n8n-mcp-tester.md
│       ├── technical-researcher.md
│       └── test-automator.md
├── .dockerignore
├── .env.docker
├── .env.example
├── .env.n8n.example
├── .env.test
├── .env.test.example
├── .github
│   ├── ABOUT.md
│   ├── BENCHMARK_THRESHOLDS.md
│   ├── FUNDING.yml
│   ├── gh-pages.yml
│   ├── secret_scanning.yml
│   └── workflows
│       ├── benchmark-pr.yml
│       ├── benchmark.yml
│       ├── docker-build-fast.yml
│       ├── docker-build-n8n.yml
│       ├── docker-build.yml
│       ├── release.yml
│       ├── test.yml
│       └── update-n8n-deps.yml
├── .gitignore
├── .npmignore
├── ATTRIBUTION.md
├── CHANGELOG.md
├── CLAUDE.md
├── codecov.yml
├── coverage.json
├── data
│   ├── .gitkeep
│   ├── nodes.db
│   ├── nodes.db-shm
│   ├── nodes.db-wal
│   └── templates.db
├── deploy
│   └── quick-deploy-n8n.sh
├── docker
│   ├── docker-entrypoint.sh
│   ├── n8n-mcp
│   ├── parse-config.js
│   └── README.md
├── docker-compose.buildkit.yml
├── docker-compose.extract.yml
├── docker-compose.n8n.yml
├── docker-compose.override.yml.example
├── docker-compose.test-n8n.yml
├── docker-compose.yml
├── Dockerfile
├── Dockerfile.railway
├── Dockerfile.test
├── docs
│   ├── AUTOMATED_RELEASES.md
│   ├── BENCHMARKS.md
│   ├── CHANGELOG.md
│   ├── CLAUDE_CODE_SETUP.md
│   ├── CLAUDE_INTERVIEW.md
│   ├── CODECOV_SETUP.md
│   ├── CODEX_SETUP.md
│   ├── CURSOR_SETUP.md
│   ├── DEPENDENCY_UPDATES.md
│   ├── DOCKER_README.md
│   ├── DOCKER_TROUBLESHOOTING.md
│   ├── FINAL_AI_VALIDATION_SPEC.md
│   ├── FLEXIBLE_INSTANCE_CONFIGURATION.md
│   ├── HTTP_DEPLOYMENT.md
│   ├── img
│   │   ├── cc_command.png
│   │   ├── cc_connected.png
│   │   ├── codex_connected.png
│   │   ├── cursor_tut.png
│   │   ├── Railway_api.png
│   │   ├── Railway_server_address.png
│   │   ├── vsc_ghcp_chat_agent_mode.png
│   │   ├── vsc_ghcp_chat_instruction_files.png
│   │   ├── vsc_ghcp_chat_thinking_tool.png
│   │   └── windsurf_tut.png
│   ├── INSTALLATION.md
│   ├── LIBRARY_USAGE.md
│   ├── local
│   │   ├── DEEP_DIVE_ANALYSIS_2025-10-02.md
│   │   ├── DEEP_DIVE_ANALYSIS_README.md
│   │   ├── Deep_dive_p1_p2.md
│   │   ├── integration-testing-plan.md
│   │   ├── integration-tests-phase1-summary.md
│   │   ├── N8N_AI_WORKFLOW_BUILDER_ANALYSIS.md
│   │   ├── P0_IMPLEMENTATION_PLAN.md
│   │   └── TEMPLATE_MINING_ANALYSIS.md
│   ├── MCP_ESSENTIALS_README.md
│   ├── MCP_QUICK_START_GUIDE.md
│   ├── N8N_DEPLOYMENT.md
│   ├── RAILWAY_DEPLOYMENT.md
│   ├── README_CLAUDE_SETUP.md
│   ├── README.md
│   ├── tools-documentation-usage.md
│   ├── VS_CODE_PROJECT_SETUP.md
│   ├── WINDSURF_SETUP.md
│   └── workflow-diff-examples.md
├── examples
│   └── enhanced-documentation-demo.js
├── fetch_log.txt
├── LICENSE
├── MEMORY_N8N_UPDATE.md
├── MEMORY_TEMPLATE_UPDATE.md
├── monitor_fetch.sh
├── N8N_HTTP_STREAMABLE_SETUP.md
├── n8n-nodes.db
├── P0-R3-TEST-PLAN.md
├── package-lock.json
├── package.json
├── package.runtime.json
├── PRIVACY.md
├── railway.json
├── README.md
├── renovate.json
├── scripts
│   ├── analyze-optimization.sh
│   ├── audit-schema-coverage.ts
│   ├── build-optimized.sh
│   ├── compare-benchmarks.js
│   ├── demo-optimization.sh
│   ├── deploy-http.sh
│   ├── deploy-to-vm.sh
│   ├── export-webhook-workflows.ts
│   ├── extract-changelog.js
│   ├── extract-from-docker.js
│   ├── extract-nodes-docker.sh
│   ├── extract-nodes-simple.sh
│   ├── format-benchmark-results.js
│   ├── generate-benchmark-stub.js
│   ├── generate-detailed-reports.js
│   ├── generate-test-summary.js
│   ├── http-bridge.js
│   ├── mcp-http-client.js
│   ├── migrate-nodes-fts.ts
│   ├── migrate-tool-docs.ts
│   ├── n8n-docs-mcp.service
│   ├── nginx-n8n-mcp.conf
│   ├── prebuild-fts5.ts
│   ├── prepare-release.js
│   ├── publish-npm-quick.sh
│   ├── publish-npm.sh
│   ├── quick-test.ts
│   ├── run-benchmarks-ci.js
│   ├── sync-runtime-version.js
│   ├── test-ai-validation-debug.ts
│   ├── test-code-node-enhancements.ts
│   ├── test-code-node-fixes.ts
│   ├── test-docker-config.sh
│   ├── test-docker-fingerprint.ts
│   ├── test-docker-optimization.sh
│   ├── test-docker.sh
│   ├── test-empty-connection-validation.ts
│   ├── test-error-message-tracking.ts
│   ├── test-error-output-validation.ts
│   ├── test-error-validation.js
│   ├── test-essentials.ts
│   ├── test-expression-code-validation.ts
│   ├── test-expression-format-validation.js
│   ├── test-fts5-search.ts
│   ├── test-fuzzy-fix.ts
│   ├── test-fuzzy-simple.ts
│   ├── test-helpers-validation.ts
│   ├── test-http-search.ts
│   ├── test-http.sh
│   ├── test-jmespath-validation.ts
│   ├── test-multi-tenant-simple.ts
│   ├── test-multi-tenant.ts
│   ├── test-n8n-integration.sh
│   ├── test-node-info.js
│   ├── test-node-type-validation.ts
│   ├── test-nodes-base-prefix.ts
│   ├── test-operation-validation.ts
│   ├── test-optimized-docker.sh
│   ├── test-release-automation.js
│   ├── test-search-improvements.ts
│   ├── test-security.ts
│   ├── test-single-session.sh
│   ├── test-sqljs-triggers.ts
│   ├── test-telemetry-debug.ts
│   ├── test-telemetry-direct.ts
│   ├── test-telemetry-env.ts
│   ├── test-telemetry-integration.ts
│   ├── test-telemetry-no-select.ts
│   ├── test-telemetry-security.ts
│   ├── test-telemetry-simple.ts
│   ├── test-typeversion-validation.ts
│   ├── test-url-configuration.ts
│   ├── test-user-id-persistence.ts
│   ├── test-webhook-validation.ts
│   ├── test-workflow-insert.ts
│   ├── test-workflow-sanitizer.ts
│   ├── test-workflow-tracking-debug.ts
│   ├── update-and-publish-prep.sh
│   ├── update-n8n-deps.js
│   ├── update-readme-version.js
│   ├── vitest-benchmark-json-reporter.js
│   └── vitest-benchmark-reporter.ts
├── SECURITY.md
├── src
│   ├── config
│   │   └── n8n-api.ts
│   ├── data
│   │   └── canonical-ai-tool-examples.json
│   ├── database
│   │   ├── database-adapter.ts
│   │   ├── migrations
│   │   │   └── add-template-node-configs.sql
│   │   ├── node-repository.ts
│   │   ├── nodes.db
│   │   ├── schema-optimized.sql
│   │   └── schema.sql
│   ├── errors
│   │   └── validation-service-error.ts
│   ├── http-server-single-session.ts
│   ├── http-server.ts
│   ├── index.ts
│   ├── loaders
│   │   └── node-loader.ts
│   ├── mappers
│   │   └── docs-mapper.ts
│   ├── mcp
│   │   ├── handlers-n8n-manager.ts
│   │   ├── handlers-workflow-diff.ts
│   │   ├── index.ts
│   │   ├── server.ts
│   │   ├── stdio-wrapper.ts
│   │   ├── tool-docs
│   │   │   ├── configuration
│   │   │   │   ├── get-node-as-tool-info.ts
│   │   │   │   ├── get-node-documentation.ts
│   │   │   │   ├── get-node-essentials.ts
│   │   │   │   ├── get-node-info.ts
│   │   │   │   ├── get-property-dependencies.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── search-node-properties.ts
│   │   │   ├── discovery
│   │   │   │   ├── get-database-statistics.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── list-ai-tools.ts
│   │   │   │   ├── list-nodes.ts
│   │   │   │   └── search-nodes.ts
│   │   │   ├── guides
│   │   │   │   ├── ai-agents-guide.ts
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── system
│   │   │   │   ├── index.ts
│   │   │   │   ├── n8n-diagnostic.ts
│   │   │   │   ├── n8n-health-check.ts
│   │   │   │   ├── n8n-list-available-tools.ts
│   │   │   │   └── tools-documentation.ts
│   │   │   ├── templates
│   │   │   │   ├── get-template.ts
│   │   │   │   ├── get-templates-for-task.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── list-node-templates.ts
│   │   │   │   ├── list-tasks.ts
│   │   │   │   ├── search-templates-by-metadata.ts
│   │   │   │   └── search-templates.ts
│   │   │   ├── types.ts
│   │   │   ├── validation
│   │   │   │   ├── index.ts
│   │   │   │   ├── validate-node-minimal.ts
│   │   │   │   ├── validate-node-operation.ts
│   │   │   │   ├── validate-workflow-connections.ts
│   │   │   │   ├── validate-workflow-expressions.ts
│   │   │   │   └── validate-workflow.ts
│   │   │   └── workflow_management
│   │   │       ├── index.ts
│   │   │       ├── n8n-autofix-workflow.ts
│   │   │       ├── n8n-create-workflow.ts
│   │   │       ├── n8n-delete-execution.ts
│   │   │       ├── n8n-delete-workflow.ts
│   │   │       ├── n8n-get-execution.ts
│   │   │       ├── n8n-get-workflow-details.ts
│   │   │       ├── n8n-get-workflow-minimal.ts
│   │   │       ├── n8n-get-workflow-structure.ts
│   │   │       ├── n8n-get-workflow.ts
│   │   │       ├── n8n-list-executions.ts
│   │   │       ├── n8n-list-workflows.ts
│   │   │       ├── n8n-trigger-webhook-workflow.ts
│   │   │       ├── n8n-update-full-workflow.ts
│   │   │       ├── n8n-update-partial-workflow.ts
│   │   │       └── n8n-validate-workflow.ts
│   │   ├── tools-documentation.ts
│   │   ├── tools-n8n-friendly.ts
│   │   ├── tools-n8n-manager.ts
│   │   ├── tools.ts
│   │   └── workflow-examples.ts
│   ├── mcp-engine.ts
│   ├── mcp-tools-engine.ts
│   ├── n8n
│   │   ├── MCPApi.credentials.ts
│   │   └── MCPNode.node.ts
│   ├── parsers
│   │   ├── node-parser.ts
│   │   ├── property-extractor.ts
│   │   └── simple-parser.ts
│   ├── scripts
│   │   ├── debug-http-search.ts
│   │   ├── extract-from-docker.ts
│   │   ├── fetch-templates-robust.ts
│   │   ├── fetch-templates.ts
│   │   ├── rebuild-database.ts
│   │   ├── rebuild-optimized.ts
│   │   ├── rebuild.ts
│   │   ├── sanitize-templates.ts
│   │   ├── seed-canonical-ai-examples.ts
│   │   ├── test-autofix-documentation.ts
│   │   ├── test-autofix-workflow.ts
│   │   ├── test-execution-filtering.ts
│   │   ├── test-node-suggestions.ts
│   │   ├── test-protocol-negotiation.ts
│   │   ├── test-summary.ts
│   │   ├── test-webhook-autofix.ts
│   │   ├── validate.ts
│   │   └── validation-summary.ts
│   ├── services
│   │   ├── ai-node-validator.ts
│   │   ├── ai-tool-validators.ts
│   │   ├── confidence-scorer.ts
│   │   ├── config-validator.ts
│   │   ├── enhanced-config-validator.ts
│   │   ├── example-generator.ts
│   │   ├── execution-processor.ts
│   │   ├── expression-format-validator.ts
│   │   ├── expression-validator.ts
│   │   ├── n8n-api-client.ts
│   │   ├── n8n-validation.ts
│   │   ├── node-documentation-service.ts
│   │   ├── node-similarity-service.ts
│   │   ├── node-specific-validators.ts
│   │   ├── operation-similarity-service.ts
│   │   ├── property-dependencies.ts
│   │   ├── property-filter.ts
│   │   ├── resource-similarity-service.ts
│   │   ├── sqlite-storage-service.ts
│   │   ├── task-templates.ts
│   │   ├── universal-expression-validator.ts
│   │   ├── workflow-auto-fixer.ts
│   │   ├── workflow-diff-engine.ts
│   │   └── workflow-validator.ts
│   ├── telemetry
│   │   ├── batch-processor.ts
│   │   ├── config-manager.ts
│   │   ├── early-error-logger.ts
│   │   ├── error-sanitization-utils.ts
│   │   ├── error-sanitizer.ts
│   │   ├── event-tracker.ts
│   │   ├── event-validator.ts
│   │   ├── index.ts
│   │   ├── performance-monitor.ts
│   │   ├── rate-limiter.ts
│   │   ├── startup-checkpoints.ts
│   │   ├── telemetry-error.ts
│   │   ├── telemetry-manager.ts
│   │   ├── telemetry-types.ts
│   │   └── workflow-sanitizer.ts
│   ├── templates
│   │   ├── batch-processor.ts
│   │   ├── metadata-generator.ts
│   │   ├── README.md
│   │   ├── template-fetcher.ts
│   │   ├── template-repository.ts
│   │   └── template-service.ts
│   ├── types
│   │   ├── index.ts
│   │   ├── instance-context.ts
│   │   ├── n8n-api.ts
│   │   ├── node-types.ts
│   │   └── workflow-diff.ts
│   └── utils
│       ├── auth.ts
│       ├── bridge.ts
│       ├── cache-utils.ts
│       ├── console-manager.ts
│       ├── documentation-fetcher.ts
│       ├── enhanced-documentation-fetcher.ts
│       ├── error-handler.ts
│       ├── example-generator.ts
│       ├── fixed-collection-validator.ts
│       ├── logger.ts
│       ├── mcp-client.ts
│       ├── n8n-errors.ts
│       ├── node-source-extractor.ts
│       ├── node-type-normalizer.ts
│       ├── node-type-utils.ts
│       ├── node-utils.ts
│       ├── npm-version-checker.ts
│       ├── protocol-version.ts
│       ├── simple-cache.ts
│       ├── ssrf-protection.ts
│       ├── template-node-resolver.ts
│       ├── template-sanitizer.ts
│       ├── url-detector.ts
│       ├── validation-schemas.ts
│       └── version.ts
├── test-output.txt
├── test-reinit-fix.sh
├── tests
│   ├── __snapshots__
│   │   └── .gitkeep
│   ├── auth.test.ts
│   ├── benchmarks
│   │   ├── database-queries.bench.ts
│   │   ├── index.ts
│   │   ├── mcp-tools.bench.ts
│   │   ├── mcp-tools.bench.ts.disabled
│   │   ├── mcp-tools.bench.ts.skip
│   │   ├── node-loading.bench.ts.disabled
│   │   ├── README.md
│   │   ├── search-operations.bench.ts.disabled
│   │   └── validation-performance.bench.ts.disabled
│   ├── bridge.test.ts
│   ├── comprehensive-extraction-test.js
│   ├── data
│   │   └── .gitkeep
│   ├── debug-slack-doc.js
│   ├── demo-enhanced-documentation.js
│   ├── docker-tests-README.md
│   ├── error-handler.test.ts
│   ├── examples
│   │   └── using-database-utils.test.ts
│   ├── extracted-nodes-db
│   │   ├── database-import.json
│   │   ├── extraction-report.json
│   │   ├── insert-nodes.sql
│   │   ├── n8n-nodes-base__Airtable.json
│   │   ├── n8n-nodes-base__Discord.json
│   │   ├── n8n-nodes-base__Function.json
│   │   ├── n8n-nodes-base__HttpRequest.json
│   │   ├── n8n-nodes-base__If.json
│   │   ├── n8n-nodes-base__Slack.json
│   │   ├── n8n-nodes-base__SplitInBatches.json
│   │   └── n8n-nodes-base__Webhook.json
│   ├── factories
│   │   ├── node-factory.ts
│   │   └── property-definition-factory.ts
│   ├── fixtures
│   │   ├── .gitkeep
│   │   ├── database
│   │   │   └── test-nodes.json
│   │   ├── factories
│   │   │   ├── node.factory.ts
│   │   │   └── parser-node.factory.ts
│   │   └── template-configs.ts
│   ├── helpers
│   │   └── env-helpers.ts
│   ├── http-server-auth.test.ts
│   ├── integration
│   │   ├── ai-validation
│   │   │   ├── ai-agent-validation.test.ts
│   │   │   ├── ai-tool-validation.test.ts
│   │   │   ├── chat-trigger-validation.test.ts
│   │   │   ├── e2e-validation.test.ts
│   │   │   ├── helpers.ts
│   │   │   ├── llm-chain-validation.test.ts
│   │   │   ├── README.md
│   │   │   └── TEST_REPORT.md
│   │   ├── ci
│   │   │   └── database-population.test.ts
│   │   ├── database
│   │   │   ├── connection-management.test.ts
│   │   │   ├── empty-database.test.ts
│   │   │   ├── fts5-search.test.ts
│   │   │   ├── node-fts5-search.test.ts
│   │   │   ├── node-repository.test.ts
│   │   │   ├── performance.test.ts
│   │   │   ├── template-node-configs.test.ts
│   │   │   ├── template-repository.test.ts
│   │   │   ├── test-utils.ts
│   │   │   └── transactions.test.ts
│   │   ├── database-integration.test.ts
│   │   ├── docker
│   │   │   ├── docker-config.test.ts
│   │   │   ├── docker-entrypoint.test.ts
│   │   │   └── test-helpers.ts
│   │   ├── flexible-instance-config.test.ts
│   │   ├── mcp
│   │   │   └── template-examples-e2e.test.ts
│   │   ├── mcp-protocol
│   │   │   ├── basic-connection.test.ts
│   │   │   ├── error-handling.test.ts
│   │   │   ├── performance.test.ts
│   │   │   ├── protocol-compliance.test.ts
│   │   │   ├── README.md
│   │   │   ├── session-management.test.ts
│   │   │   ├── test-helpers.ts
│   │   │   ├── tool-invocation.test.ts
│   │   │   └── workflow-error-validation.test.ts
│   │   ├── msw-setup.test.ts
│   │   ├── n8n-api
│   │   │   ├── executions
│   │   │   │   ├── delete-execution.test.ts
│   │   │   │   ├── get-execution.test.ts
│   │   │   │   ├── list-executions.test.ts
│   │   │   │   └── trigger-webhook.test.ts
│   │   │   ├── scripts
│   │   │   │   └── cleanup-orphans.ts
│   │   │   ├── system
│   │   │   │   ├── diagnostic.test.ts
│   │   │   │   ├── health-check.test.ts
│   │   │   │   └── list-tools.test.ts
│   │   │   ├── test-connection.ts
│   │   │   ├── types
│   │   │   │   └── mcp-responses.ts
│   │   │   ├── utils
│   │   │   │   ├── cleanup-helpers.ts
│   │   │   │   ├── credentials.ts
│   │   │   │   ├── factories.ts
│   │   │   │   ├── fixtures.ts
│   │   │   │   ├── mcp-context.ts
│   │   │   │   ├── n8n-client.ts
│   │   │   │   ├── node-repository.ts
│   │   │   │   ├── response-types.ts
│   │   │   │   ├── test-context.ts
│   │   │   │   └── webhook-workflows.ts
│   │   │   └── workflows
│   │   │       ├── autofix-workflow.test.ts
│   │   │       ├── create-workflow.test.ts
│   │   │       ├── delete-workflow.test.ts
│   │   │       ├── get-workflow-details.test.ts
│   │   │       ├── get-workflow-minimal.test.ts
│   │   │       ├── get-workflow-structure.test.ts
│   │   │       ├── get-workflow.test.ts
│   │   │       ├── list-workflows.test.ts
│   │   │       ├── smart-parameters.test.ts
│   │   │       ├── update-partial-workflow.test.ts
│   │   │       ├── update-workflow.test.ts
│   │   │       └── validate-workflow.test.ts
│   │   ├── security
│   │   │   ├── command-injection-prevention.test.ts
│   │   │   └── rate-limiting.test.ts
│   │   ├── setup
│   │   │   ├── integration-setup.ts
│   │   │   └── msw-test-server.ts
│   │   ├── telemetry
│   │   │   ├── docker-user-id-stability.test.ts
│   │   │   └── mcp-telemetry.test.ts
│   │   ├── templates
│   │   │   └── metadata-operations.test.ts
│   │   └── workflow-creation-node-type-format.test.ts
│   ├── logger.test.ts
│   ├── MOCKING_STRATEGY.md
│   ├── mocks
│   │   ├── n8n-api
│   │   │   ├── data
│   │   │   │   ├── credentials.ts
│   │   │   │   ├── executions.ts
│   │   │   │   └── workflows.ts
│   │   │   ├── handlers.ts
│   │   │   └── index.ts
│   │   └── README.md
│   ├── node-storage-export.json
│   ├── setup
│   │   ├── global-setup.ts
│   │   ├── msw-setup.ts
│   │   ├── TEST_ENV_DOCUMENTATION.md
│   │   └── test-env.ts
│   ├── test-database-extraction.js
│   ├── test-direct-extraction.js
│   ├── test-enhanced-documentation.js
│   ├── test-enhanced-integration.js
│   ├── test-mcp-extraction.js
│   ├── test-mcp-server-extraction.js
│   ├── test-mcp-tools-integration.js
│   ├── test-node-documentation-service.js
│   ├── test-node-list.js
│   ├── test-package-info.js
│   ├── test-parsing-operations.js
│   ├── test-slack-node-complete.js
│   ├── test-small-rebuild.js
│   ├── test-sqlite-search.js
│   ├── test-storage-system.js
│   ├── unit
│   │   ├── __mocks__
│   │   │   ├── n8n-nodes-base.test.ts
│   │   │   ├── n8n-nodes-base.ts
│   │   │   └── README.md
│   │   ├── database
│   │   │   ├── __mocks__
│   │   │   │   └── better-sqlite3.ts
│   │   │   ├── database-adapter-unit.test.ts
│   │   │   ├── node-repository-core.test.ts
│   │   │   ├── node-repository-operations.test.ts
│   │   │   ├── node-repository-outputs.test.ts
│   │   │   ├── README.md
│   │   │   └── template-repository-core.test.ts
│   │   ├── docker
│   │   │   ├── config-security.test.ts
│   │   │   ├── edge-cases.test.ts
│   │   │   ├── parse-config.test.ts
│   │   │   └── serve-command.test.ts
│   │   ├── errors
│   │   │   └── validation-service-error.test.ts
│   │   ├── examples
│   │   │   └── using-n8n-nodes-base-mock.test.ts
│   │   ├── flexible-instance-security-advanced.test.ts
│   │   ├── flexible-instance-security.test.ts
│   │   ├── http-server
│   │   │   └── multi-tenant-support.test.ts
│   │   ├── http-server-n8n-mode.test.ts
│   │   ├── http-server-n8n-reinit.test.ts
│   │   ├── http-server-session-management.test.ts
│   │   ├── loaders
│   │   │   └── node-loader.test.ts
│   │   ├── mappers
│   │   │   └── docs-mapper.test.ts
│   │   ├── mcp
│   │   │   ├── get-node-essentials-examples.test.ts
│   │   │   ├── handlers-n8n-manager-simple.test.ts
│   │   │   ├── handlers-n8n-manager.test.ts
│   │   │   ├── handlers-workflow-diff.test.ts
│   │   │   ├── lru-cache-behavior.test.ts
│   │   │   ├── multi-tenant-tool-listing.test.ts.disabled
│   │   │   ├── parameter-validation.test.ts
│   │   │   ├── search-nodes-examples.test.ts
│   │   │   ├── tools-documentation.test.ts
│   │   │   └── tools.test.ts
│   │   ├── monitoring
│   │   │   └── cache-metrics.test.ts
│   │   ├── MULTI_TENANT_TEST_COVERAGE.md
│   │   ├── multi-tenant-integration.test.ts
│   │   ├── parsers
│   │   │   ├── node-parser-outputs.test.ts
│   │   │   ├── node-parser.test.ts
│   │   │   ├── property-extractor.test.ts
│   │   │   └── simple-parser.test.ts
│   │   ├── scripts
│   │   │   └── fetch-templates-extraction.test.ts
│   │   ├── services
│   │   │   ├── ai-node-validator.test.ts
│   │   │   ├── ai-tool-validators.test.ts
│   │   │   ├── confidence-scorer.test.ts
│   │   │   ├── config-validator-basic.test.ts
│   │   │   ├── config-validator-edge-cases.test.ts
│   │   │   ├── config-validator-node-specific.test.ts
│   │   │   ├── config-validator-security.test.ts
│   │   │   ├── debug-validator.test.ts
│   │   │   ├── enhanced-config-validator-integration.test.ts
│   │   │   ├── enhanced-config-validator-operations.test.ts
│   │   │   ├── enhanced-config-validator.test.ts
│   │   │   ├── example-generator.test.ts
│   │   │   ├── execution-processor.test.ts
│   │   │   ├── expression-format-validator.test.ts
│   │   │   ├── expression-validator-edge-cases.test.ts
│   │   │   ├── expression-validator.test.ts
│   │   │   ├── fixed-collection-validation.test.ts
│   │   │   ├── loop-output-edge-cases.test.ts
│   │   │   ├── n8n-api-client.test.ts
│   │   │   ├── n8n-validation.test.ts
│   │   │   ├── node-similarity-service.test.ts
│   │   │   ├── node-specific-validators.test.ts
│   │   │   ├── operation-similarity-service-comprehensive.test.ts
│   │   │   ├── operation-similarity-service.test.ts
│   │   │   ├── property-dependencies.test.ts
│   │   │   ├── property-filter-edge-cases.test.ts
│   │   │   ├── property-filter.test.ts
│   │   │   ├── resource-similarity-service-comprehensive.test.ts
│   │   │   ├── resource-similarity-service.test.ts
│   │   │   ├── task-templates.test.ts
│   │   │   ├── template-service.test.ts
│   │   │   ├── universal-expression-validator.test.ts
│   │   │   ├── validation-fixes.test.ts
│   │   │   ├── workflow-auto-fixer.test.ts
│   │   │   ├── workflow-diff-engine.test.ts
│   │   │   ├── workflow-fixed-collection-validation.test.ts
│   │   │   ├── workflow-validator-comprehensive.test.ts
│   │   │   ├── workflow-validator-edge-cases.test.ts
│   │   │   ├── workflow-validator-error-outputs.test.ts
│   │   │   ├── workflow-validator-expression-format.test.ts
│   │   │   ├── workflow-validator-loops-simple.test.ts
│   │   │   ├── workflow-validator-loops.test.ts
│   │   │   ├── workflow-validator-mocks.test.ts
│   │   │   ├── workflow-validator-performance.test.ts
│   │   │   ├── workflow-validator-with-mocks.test.ts
│   │   │   └── workflow-validator.test.ts
│   │   ├── telemetry
│   │   │   ├── batch-processor.test.ts
│   │   │   ├── config-manager.test.ts
│   │   │   ├── event-tracker.test.ts
│   │   │   ├── event-validator.test.ts
│   │   │   ├── rate-limiter.test.ts
│   │   │   ├── telemetry-error.test.ts
│   │   │   ├── telemetry-manager.test.ts
│   │   │   ├── v2.18.3-fixes-verification.test.ts
│   │   │   └── workflow-sanitizer.test.ts
│   │   ├── templates
│   │   │   ├── batch-processor.test.ts
│   │   │   ├── metadata-generator.test.ts
│   │   │   ├── template-repository-metadata.test.ts
│   │   │   └── template-repository-security.test.ts
│   │   ├── test-env-example.test.ts
│   │   ├── test-infrastructure.test.ts
│   │   ├── types
│   │   │   ├── instance-context-coverage.test.ts
│   │   │   └── instance-context-multi-tenant.test.ts
│   │   ├── utils
│   │   │   ├── auth-timing-safe.test.ts
│   │   │   ├── cache-utils.test.ts
│   │   │   ├── console-manager.test.ts
│   │   │   ├── database-utils.test.ts
│   │   │   ├── fixed-collection-validator.test.ts
│   │   │   ├── n8n-errors.test.ts
│   │   │   ├── node-type-normalizer.test.ts
│   │   │   ├── node-type-utils.test.ts
│   │   │   ├── node-utils.test.ts
│   │   │   ├── simple-cache-memory-leak-fix.test.ts
│   │   │   ├── ssrf-protection.test.ts
│   │   │   └── template-node-resolver.test.ts
│   │   └── validation-fixes.test.ts
│   └── utils
│       ├── assertions.ts
│       ├── builders
│       │   └── workflow.builder.ts
│       ├── data-generators.ts
│       ├── database-utils.ts
│       ├── README.md
│       └── test-helpers.ts
├── thumbnail.png
├── tsconfig.build.json
├── tsconfig.json
├── types
│   ├── mcp.d.ts
│   └── test-env.d.ts
├── verify-telemetry-fix.js
├── versioned-nodes.md
├── vitest.config.benchmark.ts
├── vitest.config.integration.ts
└── vitest.config.ts
```

# Files

--------------------------------------------------------------------------------
/docs/local/integration-testing-plan.md:
--------------------------------------------------------------------------------

```markdown
   1 | # Comprehensive Integration Testing Plan
   2 | 
   3 | ## Status
   4 | 
   5 | **Phase 1: Foundation** ✅ **COMPLETE** (October 3, 2025)
   6 | - All utility files created and tested
   7 | - Webhook workflows created on `https://n8n-test.n8n-mcp.com`
   8 | - GitHub secrets configured
   9 | - Critical fix: Updated credentials to use webhook URLs instead of IDs
  10 | - Environment loading fixed to support real n8n API integration tests
  11 | 
  12 | **Phase 2: Workflow Creation Tests** ✅ **COMPLETE** (October 3, 2025)
  13 | - 15 test scenarios implemented and passing
  14 | - P0 bug verification confirmed (FULL node type format)
  15 | - All test categories covered: base nodes, advanced features, error scenarios, edge cases
  16 | - Documented actual n8n API behavior (validation at execution time, not creation time)
  17 | - Test file: `tests/integration/n8n-api/workflows/create-workflow.test.ts` (484 lines)
  18 | 
  19 | **Phase 3: Workflow Retrieval Tests** ✅ **COMPLETE** (October 3, 2025)
  20 | - 11 test scenarios implemented and passing
  21 | - All MCP retrieval handlers tested: handleGetWorkflow, handleGetWorkflowDetails, handleGetWorkflowStructure, handleGetWorkflowMinimal
  22 | - Test files:
  23 |   - `get-workflow.test.ts` (3 scenarios)
  24 |   - `get-workflow-details.test.ts` (4 scenarios)
  25 |   - `get-workflow-structure.test.ts` (2 scenarios)
  26 |   - `get-workflow-minimal.test.ts` (2 scenarios)
  27 | 
  28 | **Phase 4: Workflow Update Tests** ✅ **COMPLETE** (October 4, 2025)
  29 | - 42 test scenarios implemented and passing
  30 | - Enhanced settings filtering (whitelist approach) to enable updates while maintaining Issue #248 protection
  31 | - All update operations tested:
  32 |   - Full workflow updates: 7 scenarios (update-workflow.test.ts)
  33 |   - Partial/diff-based updates: 32 scenarios covering all 15 operations (update-partial-workflow.test.ts)
  34 |   - Validation error scenarios: 3 scenarios
  35 | - Critical fixes:
  36 |   - Settings filtering uses OpenAPI spec whitelist (filters callerPolicy, preserves safe properties)
  37 |   - All tests comply with n8n API requirements (name, nodes, connections, settings fields)
  38 |   - Removed invalid "Update Connections" test (empty connections invalid for multi-node workflows)
  39 | - Version 2.15.4 released with comprehensive CHANGELOG entry
  40 | 
  41 | **Phase 5: Workflow Management Tests** ✅ **COMPLETE** (October 4, 2025)
  42 | - 16 test scenarios implemented and passing
  43 | - All workflow management operations tested:
  44 |   - Delete workflow: 3 scenarios (delete-workflow.test.ts)
  45 |   - List workflows: 13 scenarios (list-workflows.test.ts)
  46 | - Critical API compliance fixes:
  47 |   - handleDeleteWorkflow: Now returns deleted workflow data (per n8n API spec)
  48 |   - handleListWorkflows: Fixed tags parameter format (array → CSV string conversion)
  49 |   - N8nApiClient.deleteWorkflow: Return type corrected (void → Workflow)
  50 |   - WorkflowListParams.tags: Type corrected (string[] → string per n8n OpenAPI spec)
  51 | - Unit test coverage: Added 9 unit tests for handler coverage (100% coverage achieved)
  52 | - n8n-mcp-tester validation: All tools tested and working correctly in production
  53 | - Version 2.15.5 released with comprehensive CHANGELOG entry
  54 | - Test results: 71/71 integration tests passing (Phase 1-5 complete)
  55 | 
  56 | **Phase 6A: Workflow Validation Tests** ✅ **COMPLETE** (October 5, 2025)
  57 | - 12 test scenarios implemented and passing
  58 | - NodeRepository utility created for tests requiring node validation
  59 | - All validation profiles tested: strict, runtime, ai-friendly, minimal
  60 | - Test coverage:
  61 |   - Valid workflows across all 4 profiles (4 scenarios)
  62 |   - Invalid workflow detection (2 scenarios - bad node types, missing connections)
  63 |   - Selective validation (3 scenarios - nodes only, connections only, expressions only)
  64 |   - Error handling (2 scenarios - non-existent workflow, invalid profile)
  65 |   - Response format verification (1 scenario)
  66 | - Critical discoveries:
  67 |   - Response only includes errors/warnings fields when they exist (not empty arrays)
  68 |   - Field name is errorCount, not totalErrors
  69 |   - Tests require NodeRepository instance (added singleton utility)
  70 | - Test file: validate-workflow.test.ts (431 lines)
  71 | - Test results: 83/83 integration tests passing (Phase 1-5, 6A complete)
  72 | 
  73 | **Phase 6B: Workflow Autofix Tests** ✅ **COMPLETE** (October 5, 2025)
  74 | - 16 test scenarios implemented and passing
  75 | - All autofix operations tested: preview mode, apply mode, fix types, confidence filtering
  76 | - Test coverage:
  77 |   - Preview mode (2 scenarios - expression-format, multiple fix types)
  78 |   - Apply mode (2 scenarios - expression-format, webhook-missing-path)
  79 |   - Fix type filtering (2 scenarios - single type, multiple types)
  80 |   - Confidence thresholds (3 scenarios - high, medium, low)
  81 |   - Max fixes parameter (1 scenario)
  82 |   - No fixes available (1 scenario)
  83 |   - Error handling (3 scenarios - non-existent workflow, invalid parameters)
  84 |   - Response format verification (2 scenarios - preview and apply modes)
  85 | - Fix types tested:
  86 |   - expression-format (missing = prefix for resource locators)
  87 |   - typeversion-correction (outdated typeVersion values)
  88 |   - error-output-config (error output configuration issues)
  89 |   - node-type-correction (incorrect node types)
  90 |   - webhook-missing-path (missing webhook path parameters)
  91 | - Code quality improvements:
  92 |   - Fixed database resource leak in NodeRepository utility
  93 |   - Added TypeScript interfaces (ValidationResponse, AutofixResponse)
  94 |   - Replaced unsafe `as any` casts with proper type definitions
  95 |   - All lint and typecheck errors resolved
  96 | - Test file: autofix-workflow.test.ts (855 lines)
  97 | - Test results: 99/99 integration tests passing (Phase 1-6 complete)
  98 | 
  99 | **Phase 7: Execution Management Tests** ✅ **COMPLETE** (October 5, 2025)
 100 | - 54 test scenarios implemented and passing
 101 | - All 4 execution management handlers tested against real n8n instance
 102 | - Test coverage:
 103 |   - handleTriggerWebhookWorkflow (20 tests): All HTTP methods (GET/POST/PUT/DELETE), query params, JSON body, custom headers, error handling
 104 |   - handleGetExecution (16 tests): All 4 retrieval modes (preview/summary/filtered/full), node filtering, item limits, input data inclusion, legacy compatibility
 105 |   - handleListExecutions (13 tests): Status filtering (success/error/waiting), pagination with cursor, various limits (1/10/50/100), data inclusion control
 106 |   - handleDeleteExecution (5 tests): Successful deletion, verification via fetch attempt, error handling
 107 | - Critical fix: Corrected response structure expectations (executions/returned vs data/count)
 108 | - Test files:
 109 |   - trigger-webhook.test.ts (375 lines, 20 tests)
 110 |   - get-execution.test.ts (429 lines, 16 tests)
 111 |   - list-executions.test.ts (264 lines, 13 tests)
 112 |   - delete-execution.test.ts (149 lines, 5 tests)
 113 | - Code review: APPROVED (9.5/10 quality score)
 114 | - Test results: 153/153 integration tests passing (Phase 1-7 complete)
 115 | 
 116 | **Phase 8: System Tools Tests** ✅ **COMPLETE** (October 5, 2025)
 117 | - 19 test scenarios implemented and passing
 118 | - All 3 system tool handlers tested against real n8n instance
 119 | - Test coverage:
 120 |   - handleHealthCheck (3 tests): API connectivity verification, version information, feature availability
 121 |   - handleListAvailableTools (7 tests): Complete tool inventory by category, configuration status, API limitations
 122 |   - handleDiagnostic (9 tests): Environment checks, API connectivity, tools availability, verbose mode with debug info
 123 | - TypeScript type safety improvements:
 124 |   - Created response-types.ts with comprehensive interfaces for all response types
 125 |   - Replaced all 'as any' casts with proper TypeScript interfaces
 126 |   - Added null-safety checks and non-null assertions
 127 |   - Full type safety and IDE autocomplete support
 128 | - Test files:
 129 |   - health-check.test.ts (117 lines, 3 tests)
 130 |   - list-tools.test.ts (181 lines, 7 tests)
 131 |   - diagnostic.test.ts (243 lines, 9 tests)
 132 |   - response-types.ts (241 lines, comprehensive type definitions)
 133 | - Code review: APPROVED
 134 | - Test results: 172/172 integration tests passing (Phase 1-8 complete)
 135 | 
 136 | **🎉 INTEGRATION TEST SUITE COMPLETE**: All 18 MCP handlers fully tested
 137 | 
 138 | **Next Phase**: Update documentation and finalize integration testing plan
 139 | 
 140 | ---
 141 | 
 142 | ## Overview
 143 | 
 144 | Transform the test suite to test all 17 **MCP handlers** against a **real n8n instance** instead of mocks. This plan ensures 100% coverage of every tool, operation, and parameter combination to prevent bugs like the P0 workflow creation issue from slipping through.
 145 | 
 146 | ### What We Test: MCP Handlers (The Product Layer)
 147 | 
 148 | **IMPORTANT**: These integration tests validate the **MCP handler layer** (the actual product that AI assistants interact with), not just the raw n8n API client.
 149 | 
 150 | **Architecture:**
 151 | ```
 152 | AI Assistant (Claude)
 153 |       ↓
 154 |   MCP Tools (What AI sees)
 155 |       ↓
 156 |   MCP Handlers (What we test) ← INTEGRATION TESTS TARGET THIS LAYER
 157 |       ↓
 158 |   N8nApiClient (Low-level HTTP)
 159 |       ↓
 160 |   n8n REST API
 161 | ```
 162 | 
 163 | **Why This Matters:**
 164 | - **MCP handlers** wrap API responses in `McpToolResponse` format: `{ success: boolean, data?: any, error?: string }`
 165 | - **MCP handlers** transform and enrich API responses (e.g., `handleGetWorkflowDetails` adds execution stats)
 166 | - **MCP handlers** provide the exact interface that AI assistants consume
 167 | - Testing raw API client bypasses the product layer and misses MCP-specific logic
 168 | 
 169 | **Test Pattern:**
 170 | ```typescript
 171 | // ❌ WRONG: Testing raw API client (low-level service)
 172 | const result = await client.createWorkflow(workflow);
 173 | 
 174 | // ✅ CORRECT: Testing MCP handler (product layer)
 175 | const response = await handleCreateWorkflow({ ...workflow }, mcpContext);
 176 | expect(response.success).toBe(true);
 177 | const result = response.data;
 178 | ```
 179 | 
 180 | ## Critical Requirements
 181 | 
 182 | 1. **Credentials**:
 183 |    - Local development: Read from `.env` file
 184 |    - CI/GitHub Actions: Use GitHub secrets (`N8N_URL`, `N8N_API_KEY`)
 185 | 
 186 | 2. **Pre-activated Webhook Workflows**:
 187 |    - n8n API doesn't support workflow activation via API
 188 |    - Need pre-created, activated workflows for webhook testing
 189 |    - Store webhook URLs (not workflow IDs) in `.env`:
 190 |      - `N8N_TEST_WEBHOOK_GET_URL` - GET method webhook URL
 191 |      - `N8N_TEST_WEBHOOK_POST_URL` - POST method webhook URL
 192 |      - `N8N_TEST_WEBHOOK_PUT_URL` - PUT method webhook URL
 193 |      - `N8N_TEST_WEBHOOK_DELETE_URL` - DELETE method webhook URL
 194 |    - **Rationale**: Webhook URLs are what the `n8n_trigger_webhook_workflow` tool needs. Workflow IDs are only for workflow management tests (which create workflows dynamically during test execution).
 195 | 
 196 | 3. **100% Coverage Goal**: Test EVERY tool, EVERY operation, EVERY parameter combination
 197 | 
 198 | ---
 199 | 
 200 | ## Complete Test Coverage Matrix
 201 | 
 202 | ### Total Test Scenarios: ~150+
 203 | 
 204 | #### Workflow Management (10 MCP handlers)
 205 | 
 206 | **1. `handleCreateWorkflow`** - 15+ scenarios (MCP handler testing)
 207 | - Create workflow with base nodes (webhook, httpRequest, set)
 208 | - Create workflow with langchain nodes (agent, aiChain)
 209 | - Invalid node types (error handling)
 210 | - Complex multi-node workflows
 211 | - Complex connection patterns
 212 | - **P0 Bug Verification**: SHORT vs FULL node type handling
 213 | - Missing required parameters
 214 | - Duplicate node names
 215 | - Invalid connection references
 216 | - Settings variations
 217 | 
 218 | **2. `handleGetWorkflow`** - 3 scenarios
 219 | - Successful retrieval
 220 | - Not found (invalid ID)
 221 | - Malformed ID
 222 | 
 223 | **3. `handleGetWorkflowDetails`** - 4 scenarios
 224 | - Basic workflow
 225 | - Workflow with metadata
 226 | - Workflow with version history
 227 | - Workflow with execution stats
 228 | 
 229 | **4. `handleGetWorkflowStructure`** - 2 scenarios
 230 | - Simple workflow
 231 | - Complex workflow (verify no parameter data)
 232 | 
 233 | **5. `handleGetWorkflowMinimal`** - 2 scenarios
 234 | - Active workflow
 235 | - Inactive workflow
 236 | 
 237 | **6. `handleUpdateWorkflow`** - 8+ scenarios
 238 | - Full workflow replacement
 239 | - Update nodes
 240 | - Update connections
 241 | - Update settings
 242 | - Update tags
 243 | - Validation errors
 244 | - Concurrent update conflicts
 245 | - Large workflow updates
 246 | 
 247 | **7. `handleUpdatePartialWorkflow`** - 30+ scenarios (15 operations × 2 paths)
 248 | 
 249 | **Node Operations (12 scenarios):**
 250 | - `addNode`: Success, duplicate name, invalid type, missing position
 251 | - `removeNode`: By ID, by name, not found, with connection cleanup
 252 | - `updateNode`: By ID, by name, invalid updates, nested parameter updates
 253 | - `moveNode`: Valid position, boundary positions
 254 | - `enableNode`: Success, already enabled
 255 | - `disableNode`: Success, already disabled
 256 | 
 257 | **Connection Operations (10 scenarios):**
 258 | - `addConnection`: Default ports, custom ports, invalid nodes
 259 | - `removeConnection`: Success, not found, with ignoreErrors
 260 | - `updateConnection`: Change ports, change indices
 261 | - `cleanStaleConnections`: Dry run, actual cleanup
 262 | - `replaceConnections`: Full replacement, validation
 263 | 
 264 | **Metadata Operations (8 scenarios):**
 265 | - `updateSettings`: Timezone, execution order, error workflow
 266 | - `updateName`: Valid, duplicate, empty
 267 | - `addTag`: New tag, existing tag
 268 | - `removeTag`: Existing, non-existing
 269 | 
 270 | **8. `handleDeleteWorkflow`** - 3 scenarios
 271 | - Successful deletion
 272 | - Not found
 273 | - Verify cleanup (workflow actually deleted)
 274 | 
 275 | **9. `handleListWorkflows`** - 12+ scenarios
 276 | - No filters (all workflows)
 277 | - Filter by active status (true/false)
 278 | - Filter by tags (single, multiple)
 279 | - Filter by projectId (enterprise feature)
 280 | - Pagination: first page, next page, last page
 281 | - Pagination: cursor handling
 282 | - Exclude pinned data
 283 | - Limit variations (1, 50, 100)
 284 | - Empty results
 285 | - Sort order verification
 286 | 
 287 | **10. `handleValidateWorkflow`** - 16 scenarios (4 profiles × 4 validation types)
 288 | 
 289 | **Validation Profiles:**
 290 | - `strict`: All validations enabled, strictest rules
 291 | - `runtime`: Production-ready validation
 292 | - `ai-friendly`: Relaxed rules for AI-generated workflows
 293 | - `minimal`: Basic structure validation only
 294 | 
 295 | **Validation Types (for each profile):**
 296 | - All validations enabled (default)
 297 | - Nodes only (`validateNodes: true`, others false)
 298 | - Connections only (`validateConnections: true`, others false)
 299 | - Expressions only (`validateExpressions: true`, others false)
 300 | 
 301 | **11. `handleAutofixWorkflow`** - 20+ scenarios
 302 | 
 303 | **Fix Types (5):**
 304 | - `expression-format`: Fix `{{}}` syntax issues
 305 | - `typeversion-correction`: Fix outdated typeVersion
 306 | - `error-output-config`: Fix error output configuration
 307 | - `node-type-correction`: Fix incorrect node types
 308 | - `webhook-missing-path`: Add missing webhook paths
 309 | 
 310 | **Confidence Levels (3):**
 311 | - `high`: Only apply high-confidence fixes
 312 | - `medium`: Apply high + medium confidence fixes
 313 | - `low`: Apply all fixes
 314 | 
 315 | **Test Matrix:**
 316 | - Each fix type with preview mode (`applyFixes: false`)
 317 | - Each fix type with apply mode (`applyFixes: true`)
 318 | - Confidence threshold filtering
 319 | - `maxFixes` parameter limiting
 320 | - Multiple fix types in single workflow
 321 | - No fixes available scenario
 322 | 
 323 | ---
 324 | 
 325 | #### Execution Management (4 handlers)
 326 | 
 327 | **12. `handleTriggerWebhookWorkflow`** - 16+ scenarios
 328 | 
 329 | **HTTP Methods (4):**
 330 | - GET: Query parameters, no data
 331 | - POST: JSON body, form data, headers
 332 | - PUT: Update data, custom headers
 333 | - DELETE: Query parameters, headers
 334 | 
 335 | **Scenarios per method:**
 336 | - Basic trigger (no data)
 337 | - With request data
 338 | - With custom headers
 339 | - Wait for response (true/false)
 340 | - Workflow not found
 341 | - Invalid webhook URL
 342 | 
 343 | **13. `handleGetExecution`** - 20+ scenarios
 344 | 
 345 | **Execution Modes (4):**
 346 | - `preview`: Structure & counts only (no data)
 347 | - `summary`: 2 samples per node (default)
 348 | - `filtered`: Custom limits and node filters
 349 | - `full`: Complete execution data
 350 | 
 351 | **Scenarios per mode:**
 352 | - Successful execution
 353 | - Failed execution
 354 | - Running execution
 355 | - With input data (`includeInputData: true`)
 356 | - Node filters (`nodeNames: ['Node1', 'Node2']`)
 357 | - Item limits (`itemsLimit: 0, 2, 5, -1`)
 358 | - Not found
 359 | 
 360 | **14. `handleListExecutions`** - 10+ scenarios
 361 | - No filters (all executions)
 362 | - Filter by workflowId
 363 | - Filter by status (success, error, waiting)
 364 | - Filter by projectId
 365 | - Pagination: first page, next page, last page
 366 | - Include execution data (`includeData: true/false`)
 367 | - Limit variations (1, 50, 100)
 368 | - Empty results
 369 | 
 370 | **15. `handleDeleteExecution`** - 3 scenarios
 371 | - Successful deletion
 372 | - Not found
 373 | - Verify cleanup
 374 | 
 375 | ---
 376 | 
 377 | #### System/Utility (3 handlers)
 378 | 
 379 | **16. `handleHealthCheck`** - 2 scenarios
 380 | - API available
 381 | - Feature availability check
 382 | 
 383 | **17. `handleListAvailableTools`** - 1 scenario
 384 | - List all tools
 385 | 
 386 | **18. `handleDiagnostic`** - 3 scenarios
 387 | - Basic diagnostic
 388 | - Verbose mode (`verbose: true`)
 389 | - Configuration display
 390 | 
 391 | ---
 392 | 
 393 | ## Implementation Phases
 394 | 
 395 | ### Phase 1: Foundation (Branch: `feat/integration-tests-foundation`)
 396 | 
 397 | #### 1.1 Environment Configuration
 398 | 
 399 | **Update `.env.example`:**
 400 | ```bash
 401 | # ========================================
 402 | # INTEGRATION TESTING CONFIGURATION
 403 | # ========================================
 404 | 
 405 | # n8n API Configuration for Integration Tests
 406 | N8N_API_URL=http://localhost:5678
 407 | N8N_API_KEY=your-api-key-here
 408 | 
 409 | # Pre-activated Webhook URLs for Testing
 410 | # Create these workflows manually in n8n and activate them
 411 | # Store the full webhook URLs (not workflow IDs)
 412 | N8N_TEST_WEBHOOK_GET_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-get
 413 | N8N_TEST_WEBHOOK_POST_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-post
 414 | N8N_TEST_WEBHOOK_PUT_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-put
 415 | N8N_TEST_WEBHOOK_DELETE_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-delete
 416 | 
 417 | # Test Configuration
 418 | N8N_TEST_CLEANUP_ENABLED=true           # Enable automatic cleanup
 419 | N8N_TEST_TAG=mcp-integration-test       # Tag for test workflows
 420 | N8N_TEST_NAME_PREFIX=[MCP-TEST]         # Name prefix for test workflows
 421 | ```
 422 | 
 423 | **GitHub Secrets (for CI):**
 424 | - `N8N_URL`: n8n instance URL (e.g., `https://n8n-test.n8n-mcp.com`)
 425 | - `N8N_API_KEY`: n8n API key (JWT token from n8n Settings > API)
 426 | - `N8N_TEST_WEBHOOK_GET_URL`: Pre-activated GET webhook URL
 427 | - `N8N_TEST_WEBHOOK_POST_URL`: Pre-activated POST webhook URL
 428 | - `N8N_TEST_WEBHOOK_PUT_URL`: Pre-activated PUT webhook URL
 429 | - `N8N_TEST_WEBHOOK_DELETE_URL`: Pre-activated DELETE webhook URL
 430 | 
 431 | **Note**: Webhook URLs can be stored as repository secrets (not environment secrets) since they don't grant API access. The real secret is `N8N_API_KEY`.
 432 | 
 433 | #### 1.2 Directory Structure
 434 | 
 435 | ```
 436 | tests/integration/n8n-api/
 437 | ├── workflows/
 438 | │   ├── create-workflow.test.ts          (10+ scenarios)
 439 | │   ├── get-workflow.test.ts             (3 scenarios)
 440 | │   ├── get-workflow-details.test.ts     (4 scenarios)
 441 | │   ├── get-workflow-structure.test.ts   (2 scenarios)
 442 | │   ├── get-workflow-minimal.test.ts     (2 scenarios)
 443 | │   ├── update-workflow.test.ts          (8+ scenarios)
 444 | │   ├── update-partial-workflow.test.ts  (30+ scenarios - 15 operations)
 445 | │   ├── delete-workflow.test.ts          (3 scenarios)
 446 | │   ├── list-workflows.test.ts           (12+ scenarios)
 447 | │   ├── validate-workflow.test.ts        (16 scenarios - 4 profiles × 4 types)
 448 | │   └── autofix-workflow.test.ts         (20+ scenarios - 5 types × modes)
 449 | ├── executions/
 450 | │   ├── trigger-webhook.test.ts          (16+ scenarios - 4 methods)
 451 | │   ├── get-execution.test.ts            (20+ scenarios - 4 modes)
 452 | │   ├── list-executions.test.ts          (10+ scenarios)
 453 | │   └── delete-execution.test.ts         (3 scenarios)
 454 | ├── system/
 455 | │   ├── health-check.test.ts             (2 scenarios)
 456 | │   ├── list-tools.test.ts               (1 scenario)
 457 | │   └── diagnostic.test.ts               (3 scenarios)
 458 | └── utils/
 459 |     ├── credentials.ts                   # Environment-aware credential loader
 460 |     ├── n8n-client.ts                    # Pre-configured API client
 461 |     ├── cleanup-helpers.ts               # Multi-level cleanup
 462 |     ├── test-context.ts                  # Resource tracking
 463 |     ├── fixtures.ts                      # Reusable workflow templates
 464 |     ├── factories.ts                     # Test data generators
 465 |     └── webhook-workflows.ts             # Webhook workflow configurations
 466 | ```
 467 | 
 468 | #### 1.3 Core Utilities
 469 | 
 470 | **mcp-context.ts** - MCP context configuration for handler testing:
 471 | ```typescript
 472 | import { InstanceContext } from '../../../../src/types/instance-context';
 473 | import { getN8nCredentials } from './credentials';
 474 | 
 475 | /**
 476 |  * Creates MCP context for testing MCP handlers against real n8n instance
 477 |  * This is what gets passed to MCP handlers (handleCreateWorkflow, etc.)
 478 |  */
 479 | export function createMcpContext(): InstanceContext {
 480 |   const creds = getN8nCredentials();
 481 |   return {
 482 |     n8nApiUrl: creds.url,
 483 |     n8nApiKey: creds.apiKey
 484 |   };
 485 | }
 486 | ```
 487 | 
 488 | **credentials.ts** - Environment-aware credential loader:
 489 | ```typescript
 490 | import dotenv from 'dotenv';
 491 | 
 492 | dotenv.config();
 493 | 
 494 | export interface N8nTestCredentials {
 495 |   url: string;
 496 |   apiKey: string;
 497 |   webhookUrls: {
 498 |     get: string;
 499 |     post: string;
 500 |     put: string;
 501 |     delete: string;
 502 |   };
 503 |   cleanup: {
 504 |     enabled: boolean;
 505 |     tag: string;
 506 |     namePrefix: string;
 507 |   };
 508 | }
 509 | 
 510 | export function getN8nCredentials(): N8nTestCredentials {
 511 |   if (process.env.CI) {
 512 |     // CI: Use GitHub secrets
 513 |     const url = process.env.N8N_URL;
 514 |     const apiKey = process.env.N8N_API_KEY;
 515 | 
 516 |     if (!url || !apiKey) {
 517 |       throw new Error(
 518 |         'Missing required CI credentials:\n' +
 519 |         `  N8N_URL: ${url ? 'set' : 'MISSING'}\n` +
 520 |         `  N8N_API_KEY: ${apiKey ? 'set' : 'MISSING'}\n` +
 521 |         'Please configure GitHub secrets for integration tests.'
 522 |       );
 523 |     }
 524 | 
 525 |     return {
 526 |       url,
 527 |       apiKey,
 528 |       webhookUrls: {
 529 |         get: process.env.N8N_TEST_WEBHOOK_GET_URL || '',
 530 |         post: process.env.N8N_TEST_WEBHOOK_POST_URL || '',
 531 |         put: process.env.N8N_TEST_WEBHOOK_PUT_URL || '',
 532 |         delete: process.env.N8N_TEST_WEBHOOK_DELETE_URL || ''
 533 |       },
 534 |       cleanup: {
 535 |         enabled: true,
 536 |         tag: 'mcp-integration-test',
 537 |         namePrefix: '[MCP-TEST]'
 538 |       }
 539 |     };
 540 |   } else {
 541 |     // Local: Use .env file
 542 |     const url = process.env.N8N_API_URL;
 543 |     const apiKey = process.env.N8N_API_KEY;
 544 | 
 545 |     if (!url || !apiKey) {
 546 |       throw new Error(
 547 |         'Missing required credentials in .env:\n' +
 548 |         `  N8N_API_URL: ${url ? 'set' : 'MISSING'}\n` +
 549 |         `  N8N_API_KEY: ${apiKey ? 'set' : 'MISSING'}\n\n` +
 550 |         'Please add these to your .env file.\n' +
 551 |         'See .env.example for configuration details.'
 552 |       );
 553 |     }
 554 | 
 555 |     return {
 556 |       url,
 557 |       apiKey,
 558 |       webhookUrls: {
 559 |         get: process.env.N8N_TEST_WEBHOOK_GET_URL || '',
 560 |         post: process.env.N8N_TEST_WEBHOOK_POST_URL || '',
 561 |         put: process.env.N8N_TEST_WEBHOOK_PUT_URL || '',
 562 |         delete: process.env.N8N_TEST_WEBHOOK_DELETE_URL || ''
 563 |       },
 564 |       cleanup: {
 565 |         enabled: process.env.N8N_TEST_CLEANUP_ENABLED !== 'false',
 566 |         tag: process.env.N8N_TEST_TAG || 'mcp-integration-test',
 567 |         namePrefix: process.env.N8N_TEST_NAME_PREFIX || '[MCP-TEST]'
 568 |       }
 569 |     };
 570 |   }
 571 | }
 572 | 
 573 | export function validateCredentials(creds: N8nTestCredentials): void {
 574 |   if (!creds.url) throw new Error('N8N_API_URL is required');
 575 |   if (!creds.apiKey) throw new Error('N8N_API_KEY is required');
 576 | }
 577 | 
 578 | export function validateWebhookUrls(creds: N8nTestCredentials): void {
 579 |   const missing: string[] = [];
 580 |   if (!creds.webhookUrls.get) missing.push('GET');
 581 |   if (!creds.webhookUrls.post) missing.push('POST');
 582 |   if (!creds.webhookUrls.put) missing.push('PUT');
 583 |   if (!creds.webhookUrls.delete) missing.push('DELETE');
 584 | 
 585 |   if (missing.length > 0) {
 586 |     throw new Error(
 587 |       `Missing webhook URLs for HTTP methods: ${missing.join(', ')}\n` +
 588 |       `Please create and activate webhook workflows, then set:\n` +
 589 |       missing.map(m => `  N8N_TEST_WEBHOOK_${m}_URL`).join('\n')
 590 |     );
 591 |   }
 592 | }
 593 | ```
 594 | 
 595 | **n8n-client.ts** - Pre-configured API client (for test utilities only):
 596 | ```typescript
 597 | import { N8nApiClient } from '../../../src/services/n8n-api-client';
 598 | import { getN8nCredentials } from './credentials';
 599 | 
 600 | /**
 601 |  * IMPORTANT: This client is ONLY used for test setup/cleanup utilities.
 602 |  * DO NOT use this in actual test cases - use MCP handlers instead!
 603 |  *
 604 |  * Test utilities that need direct API access:
 605 |  * - cleanupOrphanedWorkflows() - bulk cleanup
 606 |  * - Fixture setup/teardown
 607 |  * - Pre-test verification
 608 |  *
 609 |  * Actual tests MUST use MCP handlers:
 610 |  * - handleCreateWorkflow()
 611 |  * - handleGetWorkflow()
 612 |  * - etc.
 613 |  */
 614 | let client: N8nApiClient | null = null;
 615 | 
 616 | export function getTestN8nClient(): N8nApiClient {
 617 |   if (!client) {
 618 |     const creds = getN8nCredentials();
 619 |     client = new N8nApiClient(creds.url, creds.apiKey);
 620 |   }
 621 |   return client;
 622 | }
 623 | 
 624 | export function resetTestN8nClient(): void {
 625 |   client = null;
 626 | }
 627 | ```
 628 | 
 629 | **test-context.ts** - Resource tracking for cleanup:
 630 | ```typescript
 631 | import { getN8nCredentials } from './credentials';
 632 | 
 633 | export interface TestContext {
 634 |   workflowIds: string[];
 635 |   executionIds: string[];
 636 |   cleanup: () => Promise<void>;
 637 | }
 638 | 
 639 | export function createTestContext(): TestContext {
 640 |   const context: TestContext = {
 641 |     workflowIds: [],
 642 |     executionIds: [],
 643 |     cleanup: async () => {
 644 |       const creds = getN8nCredentials();
 645 |       if (!creds.cleanup.enabled) return;
 646 | 
 647 |       const client = getTestN8nClient();
 648 | 
 649 |       // Delete executions first
 650 |       for (const id of context.executionIds) {
 651 |         try {
 652 |           await client.deleteExecution(id);
 653 |         } catch (error) {
 654 |           console.warn(`Failed to delete execution ${id}:`, error);
 655 |         }
 656 |       }
 657 | 
 658 |       // Then delete workflows
 659 |       for (const id of context.workflowIds) {
 660 |         try {
 661 |           await client.deleteWorkflow(id);
 662 |         } catch (error) {
 663 |           console.warn(`Failed to delete workflow ${id}:`, error);
 664 |         }
 665 |       }
 666 | 
 667 |       context.workflowIds = [];
 668 |       context.executionIds = [];
 669 |     }
 670 |   };
 671 | 
 672 |   return context;
 673 | }
 674 | ```
 675 | 
 676 | **cleanup-helpers.ts** - Multi-level cleanup strategies:
 677 | ```typescript
 678 | import { N8nApiClient } from '../../../src/services/n8n-api-client';
 679 | import { getN8nCredentials, getTestN8nClient } from './credentials';
 680 | 
 681 | /**
 682 |  * Clean up orphaned test workflows
 683 |  * Run this periodically in CI to clean up failed test runs
 684 |  */
 685 | export async function cleanupOrphanedWorkflows(): Promise<void> {
 686 |   const creds = getN8nCredentials();
 687 |   const client = getTestN8nClient();
 688 | 
 689 |   let allWorkflows: any[] = [];
 690 |   let cursor: string | undefined;
 691 | 
 692 |   // Fetch all workflows with pagination
 693 |   do {
 694 |     const response = await client.listWorkflows({ cursor, limit: 100 });
 695 |     allWorkflows.push(...response.data);
 696 |     cursor = response.nextCursor;
 697 |   } while (cursor);
 698 | 
 699 |   // Find test workflows
 700 |   const testWorkflows = allWorkflows.filter(w =>
 701 |     w.tags?.includes(creds.cleanup.tag) ||
 702 |     w.name?.startsWith(creds.cleanup.namePrefix)
 703 |   );
 704 | 
 705 |   console.log(`Found ${testWorkflows.length} orphaned test workflows`);
 706 | 
 707 |   // Delete them
 708 |   for (const workflow of testWorkflows) {
 709 |     try {
 710 |       await client.deleteWorkflow(workflow.id);
 711 |       console.log(`Deleted orphaned workflow: ${workflow.name} (${workflow.id})`);
 712 |     } catch (error) {
 713 |       console.warn(`Failed to delete workflow ${workflow.id}:`, error);
 714 |     }
 715 |   }
 716 | }
 717 | 
 718 | /**
 719 |  * Clean up old executions (older than 24 hours)
 720 |  */
 721 | export async function cleanupOldExecutions(): Promise<void> {
 722 |   const client = getTestN8nClient();
 723 | 
 724 |   let allExecutions: any[] = [];
 725 |   let cursor: string | undefined;
 726 | 
 727 |   // Fetch all executions
 728 |   do {
 729 |     const response = await client.listExecutions({ cursor, limit: 100 });
 730 |     allExecutions.push(...response.data);
 731 |     cursor = response.nextCursor;
 732 |   } while (cursor);
 733 | 
 734 |   const oneDayAgo = Date.now() - 24 * 60 * 60 * 1000;
 735 |   const oldExecutions = allExecutions.filter(e =>
 736 |     new Date(e.startedAt).getTime() < oneDayAgo
 737 |   );
 738 | 
 739 |   console.log(`Found ${oldExecutions.length} old executions`);
 740 | 
 741 |   for (const execution of oldExecutions) {
 742 |     try {
 743 |       await client.deleteExecution(execution.id);
 744 |     } catch (error) {
 745 |       console.warn(`Failed to delete execution ${execution.id}:`, error);
 746 |     }
 747 |   }
 748 | }
 749 | ```
 750 | 
 751 | **fixtures.ts** - Reusable workflow templates:
 752 | ```typescript
 753 | import { Workflow } from '../../../src/types/n8n-api';
 754 | 
 755 | export const SIMPLE_WEBHOOK_WORKFLOW: Partial<Workflow> = {
 756 |   name: '[MCP-TEST] Simple Webhook',
 757 |   nodes: [
 758 |     {
 759 |       id: 'webhook-1',
 760 |       name: 'Webhook',
 761 |       type: 'n8n-nodes-base.webhook',
 762 |       typeVersion: 2,
 763 |       position: [250, 300],
 764 |       parameters: {
 765 |         httpMethod: 'GET',
 766 |         path: 'test-webhook'
 767 |       }
 768 |     }
 769 |   ],
 770 |   connections: {}
 771 | };
 772 | 
 773 | export const SIMPLE_HTTP_WORKFLOW: Partial<Workflow> = {
 774 |   name: '[MCP-TEST] Simple HTTP Request',
 775 |   nodes: [
 776 |     {
 777 |       id: 'webhook-1',
 778 |       name: 'Webhook',
 779 |       type: 'n8n-nodes-base.webhook',
 780 |       typeVersion: 2,
 781 |       position: [250, 300],
 782 |       parameters: {
 783 |         httpMethod: 'GET',
 784 |         path: 'trigger'
 785 |       }
 786 |     },
 787 |     {
 788 |       id: 'http-1',
 789 |       name: 'HTTP Request',
 790 |       type: 'n8n-nodes-base.httpRequest',
 791 |       typeVersion: 4.2,
 792 |       position: [450, 300],
 793 |       parameters: {
 794 |         url: 'https://httpbin.org/get',
 795 |         method: 'GET'
 796 |       }
 797 |     }
 798 |   ],
 799 |   connections: {
 800 |     Webhook: {
 801 |       main: [[{ node: 'HTTP Request', type: 'main', index: 0 }]]
 802 |     }
 803 |   }
 804 | };
 805 | 
 806 | // Add more fixtures for complex workflows
 807 | ```
 808 | 
 809 | **webhook-workflows.ts** - Webhook workflow setup guide:
 810 | ```typescript
 811 | /**
 812 |  * Guide for setting up webhook workflows manually in n8n
 813 |  *
 814 |  * These workflows must be created manually and activated because
 815 |  * n8n API doesn't support workflow activation.
 816 |  *
 817 |  * For each HTTP method, create a workflow with:
 818 |  * 1. Single Webhook node
 819 |  * 2. Configured for the specific HTTP method
 820 |  * 3. Unique webhook path
 821 |  * 4. Activated in n8n UI
 822 |  * 5. Workflow ID added to .env
 823 |  */
 824 | 
 825 | export const WEBHOOK_WORKFLOW_CONFIGS = {
 826 |   GET: {
 827 |     name: '[MCP-TEST] Webhook GET',
 828 |     description: 'Pre-activated webhook for GET method testing',
 829 |     nodes: [
 830 |       {
 831 |         name: 'Webhook',
 832 |         type: 'n8n-nodes-base.webhook',
 833 |         typeVersion: 2,
 834 |         parameters: {
 835 |           httpMethod: 'GET',
 836 |           path: 'mcp-test-get',
 837 |           responseMode: 'lastNode'
 838 |         }
 839 |       }
 840 |     ]
 841 |   },
 842 |   POST: {
 843 |     name: '[MCP-TEST] Webhook POST',
 844 |     description: 'Pre-activated webhook for POST method testing',
 845 |     nodes: [
 846 |       {
 847 |         name: 'Webhook',
 848 |         type: 'n8n-nodes-base.webhook',
 849 |         typeVersion: 2,
 850 |         parameters: {
 851 |           httpMethod: 'POST',
 852 |           path: 'mcp-test-post',
 853 |           responseMode: 'lastNode'
 854 |         }
 855 |       }
 856 |     ]
 857 |   },
 858 |   PUT: {
 859 |     name: '[MCP-TEST] Webhook PUT',
 860 |     description: 'Pre-activated webhook for PUT method testing',
 861 |     nodes: [
 862 |       {
 863 |         name: 'Webhook',
 864 |         type: 'n8n-nodes-base.webhook',
 865 |         typeVersion: 2,
 866 |         parameters: {
 867 |           httpMethod: 'PUT',
 868 |           path: 'mcp-test-put',
 869 |           responseMode: 'lastNode'
 870 |         }
 871 |       }
 872 |     ]
 873 |   },
 874 |   DELETE: {
 875 |     name: '[MCP-TEST] Webhook DELETE',
 876 |     description: 'Pre-activated webhook for DELETE method testing',
 877 |     nodes: [
 878 |       {
 879 |         name: 'Webhook',
 880 |         type: 'n8n-nodes-base.webhook',
 881 |         typeVersion: 2,
 882 |         parameters: {
 883 |           httpMethod: 'DELETE',
 884 |           path: 'mcp-test-delete',
 885 |           responseMode: 'lastNode'
 886 |         }
 887 |       }
 888 |     ]
 889 |   }
 890 | };
 891 | 
 892 | export function printSetupInstructions(): void {
 893 |   console.log(`
 894 | ╔════════════════════════════════════════════════════════════════╗
 895 | ║  WEBHOOK WORKFLOW SETUP REQUIRED                               ║
 896 | ╠════════════════════════════════════════════════════════════════╣
 897 | ║                                                                ║
 898 | ║  Integration tests require 4 pre-activated webhook workflows:  ║
 899 | ║                                                                ║
 900 | ║  1. Create workflows manually in n8n UI                        ║
 901 | ║  2. Use the configurations shown below                         ║
 902 | ║  3. ACTIVATE each workflow in n8n UI                           ║
 903 | ║  4. Copy workflow IDs to .env file                             ║
 904 | ║                                                                ║
 905 | ╚════════════════════════════════════════════════════════════════╝
 906 | 
 907 | Required workflows:
 908 | `);
 909 | 
 910 |   Object.entries(WEBHOOK_WORKFLOW_CONFIGS).forEach(([method, config]) => {
 911 |     console.log(`
 912 | ${method} Method:
 913 |   Name: ${config.name}
 914 |   Path: ${config.nodes[0].parameters.path}
 915 |   .env variable: N8N_TEST_WEBHOOK_${method}_ID
 916 | `);
 917 |   });
 918 | }
 919 | ```
 920 | 
 921 | ---
 922 | 
 923 | ### Phase 2: Workflow Creation Tests (P0)
 924 | 
 925 | **Branch**: `feat/integration-tests-phase-2`
 926 | 
 927 | **File**: `tests/integration/n8n-api/workflows/create-workflow.test.ts`
 928 | 
 929 | **Test Approach**: Tests the `handleCreateWorkflow` MCP handler against real n8n instance
 930 | 
 931 | **MCP Handler Test Pattern:**
 932 | ```typescript
 933 | import { handleCreateWorkflow } from '../../../../src/mcp/handlers-n8n-manager';
 934 | import { createMcpContext } from '../utils/mcp-context';
 935 | import { InstanceContext } from '../../../../src/types/instance-context';
 936 | 
 937 | describe('Integration: handleCreateWorkflow', () => {
 938 |   let mcpContext: InstanceContext;
 939 | 
 940 |   beforeEach(() => {
 941 |     mcpContext = createMcpContext();
 942 |   });
 943 | 
 944 |   it('should create workflow using MCP handler', async () => {
 945 |     const workflow = { name: 'Test', nodes: [...], connections: {} };
 946 | 
 947 |     // Test MCP handler (the product layer)
 948 |     const response = await handleCreateWorkflow({ ...workflow }, mcpContext);
 949 | 
 950 |     // Verify MCP response structure
 951 |     expect(response.success).toBe(true);
 952 |     expect(response.data).toBeDefined();
 953 | 
 954 |     // Extract actual workflow from MCP response
 955 |     const result = response.data;
 956 |     expect(result.id).toBeTruthy();
 957 |   });
 958 | });
 959 | ```
 960 | 
 961 | **15 Test Scenarios** (all testing MCP handlers):
 962 | 1. Create workflow with base webhook node (verify P0 bug fix)
 963 | 2. Create workflow with base HTTP request node
 964 | 3. Create workflow with langchain agent node
 965 | 4. Create complex multi-node workflow
 966 | 5. Create workflow with complex connections
 967 | 6. Create workflow with custom settings
 968 | 7. Create workflow with n8n expressions
 969 | 8. Create workflow with error handling
 970 | 9. Error: Invalid node type (documents API behavior)
 971 | 10. Error: Missing required parameters (documents API behavior)
 972 | 11. Error: Duplicate node names (documents API behavior)
 973 | 12. Error: Invalid connection references (documents API behavior)
 974 | 13. Edge case: Minimal single node workflow
 975 | 14. Edge case: Empty connections object
 976 | 15. Edge case: Workflow without settings
 977 | 
 978 | ---
 979 | 
 980 | ### Phase 3: Workflow Retrieval Tests (P1)
 981 | 
 982 | **Branch**: `feat/integration-tests-phase-3`
 983 | 
 984 | **Test Approach**: Tests MCP handlers (`handleGetWorkflow`, `handleGetWorkflowDetails`, `handleGetWorkflowStructure`, `handleGetWorkflowMinimal`)
 985 | 
 986 | **MCP Handler Pattern:**
 987 | ```typescript
 988 | import {
 989 |   handleGetWorkflow,
 990 |   handleGetWorkflowDetails,
 991 |   handleGetWorkflowStructure,
 992 |   handleGetWorkflowMinimal
 993 | } from '../../../../src/mcp/handlers-n8n-manager';
 994 | 
 995 | // Test MCP handler
 996 | const response = await handleGetWorkflow({ id: workflowId }, mcpContext);
 997 | expect(response.success).toBe(true);
 998 | const workflow = response.data;
 999 | 
1000 | // Note: handleGetWorkflowDetails returns nested structure
1001 | const detailsResponse = await handleGetWorkflowDetails({ id }, mcpContext);
1002 | const workflow = detailsResponse.data.workflow;  // Extract from nested structure
1003 | const stats = detailsResponse.data.executionStats;
1004 | ```
1005 | 
1006 | **Files**:
1007 | - `get-workflow.test.ts` (3 scenarios - tests handleGetWorkflow)
1008 | - `get-workflow-details.test.ts` (4 scenarios - tests handleGetWorkflowDetails)
1009 | - `get-workflow-structure.test.ts` (2 scenarios - tests handleGetWorkflowStructure)
1010 | - `get-workflow-minimal.test.ts` (2 scenarios - tests handleGetWorkflowMinimal)
1011 | 
1012 | ---
1013 | 
1014 | ### Phase 4: Workflow Update Tests (P1)
1015 | 
1016 | **Branch**: `feat/integration-tests-workflow-updates`
1017 | 
1018 | **Files**:
1019 | - `update-workflow.test.ts` (8+ scenarios)
1020 | - `update-partial-workflow.test.ts` (30+ scenarios covering all 15 operations)
1021 | 
1022 | ---
1023 | 
1024 | ### Phase 5: Workflow Management Tests (P2)
1025 | 
1026 | **Branch**: `feat/integration-tests-workflow-management`
1027 | 
1028 | **Files**:
1029 | - `delete-workflow.test.ts` (3 scenarios)
1030 | - `list-workflows.test.ts` (12+ scenarios with all filters and pagination)
1031 | 
1032 | ---
1033 | 
1034 | ### Phase 6A: Workflow Validation Tests (P2) ✅ COMPLETE
1035 | 
1036 | **Branch**: `feat/integration-tests-phase-6`
1037 | 
1038 | **Files**:
1039 | - ✅ `tests/integration/n8n-api/utils/node-repository.ts` - NodeRepository singleton for validation tests
1040 | - ✅ `validate-workflow.test.ts` (12 scenarios: 4 profiles + invalid detection + selective validation + error handling)
1041 | 
1042 | **Implementation Notes**:
1043 | - Created NodeRepository utility since handleValidateWorkflow requires repository parameter
1044 | - Tests cover all 4 validation profiles (strict, runtime, ai-friendly, minimal)
1045 | - Invalid workflow detection tests (bad node types, missing connections)
1046 | - Selective validation tests (nodes only, connections only, expressions only)
1047 | - Response structure correctly handles conditional errors/warnings fields
1048 | 
1049 | ### Phase 6B: Workflow Autofix Tests (P2)
1050 | 
1051 | **Branch**: `feat/integration-tests-phase-6b` (or continue on `feat/integration-tests-phase-6`)
1052 | 
1053 | **Files**:
1054 | - `autofix-workflow.test.ts` (15-20 scenarios: 5 fix types × modes × confidence levels)
1055 | 
1056 | **Test Coverage Required**:
1057 | - 5 fix types: expression-format, typeversion-correction, error-output-config, node-type-correction, webhook-missing-path
1058 | - Preview mode (applyFixes: false) vs Apply mode (applyFixes: true)
1059 | - Confidence threshold filtering (high, medium, low)
1060 | - maxFixes parameter limiting
1061 | - Multiple fix types in single workflow
1062 | - No fixes available scenario
1063 | 
1064 | ---
1065 | 
1066 | ### Phase 7: Execution Management Tests (P2)
1067 | 
1068 | **Branch**: `feat/integration-tests-executions`
1069 | 
1070 | **Files**:
1071 | - `trigger-webhook.test.ts` (16+ scenarios: 4 HTTP methods × variations)
1072 | - `get-execution.test.ts` (20+ scenarios: 4 modes × filters)
1073 | - `list-executions.test.ts` (10+ scenarios)
1074 | - `delete-execution.test.ts` (3 scenarios)
1075 | 
1076 | **Special Considerations for Webhook Testing**:
1077 | - Use pre-activated workflows from `.env`
1078 | - Each HTTP method uses a different workflow ID
1079 | - Test both successful triggers and error cases
1080 | - Verify response data for synchronous executions
1081 | 
1082 | ---
1083 | 
1084 | ### Phase 8: System Tools Tests (P3)
1085 | 
1086 | **Branch**: `feat/integration-tests-system`
1087 | 
1088 | **Files**:
1089 | - `health-check.test.ts` (2 scenarios)
1090 | - `list-tools.test.ts` (1 scenario)
1091 | - `diagnostic.test.ts` (3 scenarios)
1092 | 
1093 | ---
1094 | 
1095 | ### Phase 9: CI/CD Integration
1096 | 
1097 | **Branch**: `feat/integration-tests-ci`
1098 | 
1099 | **GitHub Actions Workflow** (`.github/workflows/integration-tests.yml`):
1100 | 
1101 | ```yaml
1102 | name: Integration Tests
1103 | 
1104 | on:
1105 |   pull_request:
1106 |   push:
1107 |     branches: [main]
1108 |   schedule:
1109 |     - cron: '0 2 * * *'  # Daily at 2 AM
1110 |   workflow_dispatch:
1111 | 
1112 | jobs:
1113 |   integration-tests:
1114 |     runs-on: ubuntu-latest
1115 | 
1116 |     steps:
1117 |       - uses: actions/checkout@v4
1118 | 
1119 |       - name: Setup Node.js
1120 |         uses: actions/setup-node@v4
1121 |         with:
1122 |           node-version: '20'
1123 |           cache: 'npm'
1124 | 
1125 |       - name: Install dependencies
1126 |         run: npm ci
1127 | 
1128 |       - name: Build project
1129 |         run: npm run build
1130 | 
1131 |       - name: Run integration tests
1132 |         env:
1133 |           N8N_URL: ${{ secrets.N8N_URL }}
1134 |           N8N_API_KEY: ${{ secrets.N8N_API_KEY }}
1135 |           N8N_TEST_WEBHOOK_GET_URL: ${{ secrets.N8N_TEST_WEBHOOK_GET_URL }}
1136 |           N8N_TEST_WEBHOOK_POST_URL: ${{ secrets.N8N_TEST_WEBHOOK_POST_URL }}
1137 |           N8N_TEST_WEBHOOK_PUT_URL: ${{ secrets.N8N_TEST_WEBHOOK_PUT_URL }}
1138 |           N8N_TEST_WEBHOOK_DELETE_URL: ${{ secrets.N8N_TEST_WEBHOOK_DELETE_URL }}
1139 |           CI: true
1140 |         run: npm run test:integration:n8n
1141 | 
1142 |       - name: Cleanup orphaned workflows
1143 |         if: always()
1144 |         env:
1145 |           N8N_URL: ${{ secrets.N8N_URL }}
1146 |           N8N_API_KEY: ${{ secrets.N8N_API_KEY }}
1147 |         run: npm run test:cleanup:orphans
1148 | ```
1149 | 
1150 | **Add npm scripts to `package.json`**:
1151 | ```json
1152 | {
1153 |   "scripts": {
1154 |     "test:integration:n8n": "vitest run tests/integration/n8n-api",
1155 |     "test:cleanup:orphans": "tsx tests/integration/n8n-api/utils/cleanup-orphans.ts"
1156 |   }
1157 | }
1158 | ```
1159 | 
1160 | ---
1161 | 
1162 | ## Test Isolation Strategy
1163 | 
1164 | ### Workflow Naming Convention
1165 | - Prefix: `[MCP-TEST]`
1166 | - Include test name: `[MCP-TEST] Create Workflow - Base Nodes`
1167 | - Include timestamp for uniqueness: `[MCP-TEST] Test Name ${Date.now()}`
1168 | 
1169 | ### Workflow Tagging
1170 | - All test workflows tagged with: `mcp-integration-test`
1171 | - Enables bulk cleanup queries
1172 | 
1173 | ### Cleanup Levels
1174 | 1. **Test-level**: After each test via `afterEach` hook
1175 | 2. **Suite-level**: After each test file via `afterAll` hook
1176 | 3. **CI-level**: After CI job completes (always run)
1177 | 4. **Orphan cleanup**: Periodic job to clean up failed test runs
1178 | 
1179 | ---
1180 | 
1181 | ## Pre-Test Setup Checklist
1182 | 
1183 | ### Local Development
1184 | 1. ✅ Install n8n locally or use Docker
1185 | 2. ✅ Start n8n instance: `npx n8n start`
1186 | 3. ✅ Create 4 webhook workflows (GET, POST, PUT, DELETE)
1187 | 4. ✅ Activate all 4 webhook workflows in n8n UI
1188 | 5. ✅ Get webhook URLs from the workflow's Webhook node
1189 | 6. ✅ Copy `.env.example` to `.env`
1190 | 7. ✅ Set `N8N_API_URL=<your-n8n-url>`
1191 | 8. ✅ Generate API key in n8n Settings > API
1192 | 9. ✅ Set `N8N_API_KEY=<your-key>`
1193 | 10. ✅ Set all 4 `N8N_TEST_WEBHOOK_*_URL` variables with full webhook URLs
1194 | 
1195 | ### CI/GitHub Actions (✅ COMPLETED)
1196 | 1. ✅ Set up cloud n8n instance: `https://n8n-test.n8n-mcp.com`
1197 | 2. ✅ Create 4 webhook workflows (GET, POST, PUT, DELETE)
1198 | 3. ✅ Activate all 4 webhook workflows
1199 | 4. ✅ Add GitHub secrets: `N8N_URL`, `N8N_API_KEY`
1200 | 5. ✅ Add webhook URL secrets:
1201 |    - `N8N_TEST_WEBHOOK_GET_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-get`
1202 |    - `N8N_TEST_WEBHOOK_POST_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-post`
1203 |    - `N8N_TEST_WEBHOOK_PUT_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-put`
1204 |    - `N8N_TEST_WEBHOOK_DELETE_URL=https://n8n-test.n8n-mcp.com/webhook/mcp-test-delete`
1205 | 
1206 | ---
1207 | 
1208 | ## Success Criteria
1209 | 
1210 | ### Phase 1: Foundation ✅ COMPLETE
1211 | - ✅ Environment configuration (.env, GitHub secrets)
1212 | - ✅ All utility files created (8 files, ~1,520 lines of code)
1213 | - ✅ Pre-activated webhook workflows created and tested
1214 | - ✅ Cleanup helpers with pagination safety
1215 | - ✅ Resource tracking with TestContext
1216 | - ✅ Fixtures and factories for test data
1217 | - ✅ Documentation updated
1218 | - ✅ Environment loading fixed (loads .env before test defaults)
1219 | - ✅ Vitest integration config updated (removed MSW for n8n-api tests)
1220 | 
1221 | ### Phase 2: Workflow Creation Tests ✅ COMPLETE
1222 | - ✅ 15 test scenarios implemented (all passing)
1223 | - ✅ Tests the `handleCreateWorkflow` MCP handler (product layer)
1224 | - ✅ All tests use MCP handler pattern with McpToolResponse validation
1225 | - ✅ P0 bug verification (FULL vs SHORT node type format)
1226 | - ✅ Base node tests (webhook, HTTP, langchain, multi-node)
1227 | - ✅ Advanced features (connections, settings, expressions, error handling)
1228 | - ✅ Error scenarios (4 tests documenting actual API behavior)
1229 | - ✅ Edge cases (3 tests for minimal/empty configurations)
1230 | - ✅ Test file: 563 lines covering all handleCreateWorkflow scenarios
1231 | - ✅ All tests passing against real n8n instance
1232 | 
1233 | ### Overall Project (In Progress)
1234 | - ⏳ All 17 handlers have integration tests (11 of 17 complete)
1235 | - ⏳ All operations/parameters covered (99 of 150+ scenarios complete)
1236 | - ✅ Tests run successfully locally (Phases 1-6 verified)
1237 | - ⏳ Tests run successfully in CI (pending Phase 9)
1238 | - ✅ No manual cleanup required (automatic)
1239 | - ✅ Test coverage catches P0-level bugs (verified in Phase 2)
1240 | - ⏳ CI runs on every PR and daily (pending Phase 9)
1241 | - ✅ Clear error messages when tests fail
1242 | - ✅ Documentation for webhook workflow setup
1243 | - ✅ Code quality maintained (lint, typecheck, type safety)
1244 | 
1245 | ---
1246 | 
1247 | ## Timeline Estimate
1248 | 
1249 | - **Phase 1 (Foundation)**: ✅ COMPLETE (October 3, 2025)
1250 | - **Phase 2 (Workflow Creation)**: ✅ COMPLETE (October 3, 2025)
1251 | - **Phase 3 (Retrieval)**: ✅ COMPLETE (October 3, 2025)
1252 | - **Phase 4 (Updates)**: ✅ COMPLETE (October 4, 2025)
1253 | - **Phase 5 (Management)**: ✅ COMPLETE (October 4, 2025)
1254 | - **Phase 6A (Validation)**: ✅ COMPLETE (October 5, 2025)
1255 | - **Phase 6B (Autofix)**: ✅ COMPLETE (October 5, 2025)
1256 | - **Phase 7 (Executions)**: 2 days
1257 | - **Phase 8 (System)**: 1 day
1258 | - **Phase 9 (CI/CD)**: 1 day
1259 | 
1260 | **Total**: 6 days complete, ~4 days remaining
1261 | 
1262 | ---
1263 | 
1264 | ## Notes
1265 | 
1266 | - Each phase should be developed on a separate branch
1267 | - Phases can be parallelized where dependencies allow
1268 | - Run local tests frequently to catch issues early
1269 | - Document any n8n API quirks discovered during testing
1270 | 
1271 | ## Key Learnings from Implementation
1272 | 
1273 | ### Critical Testing Principle: Test the Product Layer
1274 | 
1275 | **The Mistake**: Initially, Phase 2 tests called `client.createWorkflow()` (raw API client) instead of `handleCreateWorkflow()` (MCP handler).
1276 | 
1277 | **Why This Was Wrong**:
1278 | - AI assistants interact with MCP handlers, not raw API client
1279 | - MCP handlers wrap responses in `McpToolResponse` format
1280 | - MCP handlers may transform/enrich API responses
1281 | - Bypassing MCP layer misses product-specific logic and bugs
1282 | 
1283 | **The Fix**: All tests updated to use MCP handlers:
1284 | ```typescript
1285 | // ❌ BEFORE: Testing wrong layer
1286 | const result = await client.createWorkflow(workflow);
1287 | 
1288 | // ✅ AFTER: Testing the actual product
1289 | const response = await handleCreateWorkflow({ ...workflow }, mcpContext);
1290 | expect(response.success).toBe(true);
1291 | const result = response.data;
1292 | ```
1293 | 
1294 | **Lesson Learned**: Always test the layer closest to the user/consumer. For n8n-mcp, that's the MCP handler layer.
1295 | 
1296 | ### n8n API Behavior Discoveries
1297 | 1. **Validation Timing**: n8n API accepts workflows with invalid node types and connection references at creation time. Validation only happens at execution time.
1298 | 2. **Node Type Format**: FULL node type format (`n8n-nodes-base.*`) must be used in API requests. The P0 bug was confirmed fixed.
1299 | 3. **Missing Parameters**: n8n accepts workflows with missing required parameters. They fail during execution, not creation.
1300 | 4. **Duplicate Names**: n8n API handles duplicate node names gracefully (may auto-rename).
1301 | 
1302 | ### Technical Implementation Insights
1303 | 1. **MSW Interference**: Integration tests that need real network requests must NOT load MSW setup. Removed from vitest.config.integration.ts.
1304 | 2. **Environment Loading**: Must load `.env` file BEFORE test defaults in global setup to preserve real credentials.
1305 | 3. **Cleanup Safety**: TestContext pattern works well for tracking and cleaning up test resources.
1306 | 4. **Test Isolation**: Each test creates unique workflows with timestamps to avoid conflicts.
1307 | 
```

--------------------------------------------------------------------------------
/tests/extracted-nodes-db/n8n-nodes-base__Airtable.json:
--------------------------------------------------------------------------------

```json
  1 | {
  2 |   "node_type": "n8n-nodes-base.Airtable",
  3 |   "name": "Airtable",
  4 |   "package_name": "n8n-nodes-base",
  5 |   "code_hash": "2d67e72931697178946f5127b43e954649c4c5e7ad9e29764796404ae96e7db5",
  6 |   "code_length": 936,
  7 |   "source_location": "node_modules/n8n-nodes-base/dist/nodes/Airtable/Airtable.node.js",
  8 |   "has_credentials": false,
  9 |   "source_code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Airtable = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst AirtableV1_node_1 = require(\"./v1/AirtableV1.node\");\nconst AirtableV2_node_1 = require(\"./v2/AirtableV2.node\");\nclass Airtable extends n8n_workflow_1.VersionedNodeType {\n    constructor() {\n        const baseDescription = {\n            displayName: 'Airtable',\n            name: 'airtable',\n            icon: 'file:airtable.svg',\n            group: ['input'],\n            description: 'Read, update, write and delete data from Airtable',\n            defaultVersion: 2,\n        };\n        const nodeVersions = {\n            1: new AirtableV1_node_1.AirtableV1(baseDescription),\n            2: new AirtableV2_node_1.AirtableV2(baseDescription),\n        };\n        super(nodeVersions, baseDescription);\n    }\n}\nexports.Airtable = Airtable;\n//# sourceMappingURL=Airtable.node.js.map",
 10 |   "package_info": {
 11 |     "name": "n8n-nodes-base",
 12 |     "version": "1.14.1",
 13 |     "description": "Base nodes of n8n",
 14 |     "license": "SEE LICENSE IN LICENSE.md",
 15 |     "homepage": "https://n8n.io",
 16 |     "author": {
 17 |       "name": "Jan Oberhauser",
 18 |       "email": "[email protected]"
 19 |     },
 20 |     "main": "index.js",
 21 |     "repository": {
 22 |       "type": "git",
 23 |       "url": "git+https://github.com/n8n-io/n8n.git"
 24 |     },
 25 |     "files": [
 26 |       "dist"
 27 |     ],
 28 |     "n8n": {
 29 |       "credentials": [
 30 |         "dist/credentials/ActionNetworkApi.credentials.js",
 31 |         "dist/credentials/ActiveCampaignApi.credentials.js",
 32 |         "dist/credentials/AcuitySchedulingApi.credentials.js",
 33 |         "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js",
 34 |         "dist/credentials/AdaloApi.credentials.js",
 35 |         "dist/credentials/AffinityApi.credentials.js",
 36 |         "dist/credentials/AgileCrmApi.credentials.js",
 37 |         "dist/credentials/AirtableApi.credentials.js",
 38 |         "dist/credentials/AirtableOAuth2Api.credentials.js",
 39 |         "dist/credentials/AirtableTokenApi.credentials.js",
 40 |         "dist/credentials/AlienVaultApi.credentials.js",
 41 |         "dist/credentials/Amqp.credentials.js",
 42 |         "dist/credentials/ApiTemplateIoApi.credentials.js",
 43 |         "dist/credentials/AsanaApi.credentials.js",
 44 |         "dist/credentials/AsanaOAuth2Api.credentials.js",
 45 |         "dist/credentials/Auth0ManagementApi.credentials.js",
 46 |         "dist/credentials/AutomizyApi.credentials.js",
 47 |         "dist/credentials/AutopilotApi.credentials.js",
 48 |         "dist/credentials/Aws.credentials.js",
 49 |         "dist/credentials/BambooHrApi.credentials.js",
 50 |         "dist/credentials/BannerbearApi.credentials.js",
 51 |         "dist/credentials/BaserowApi.credentials.js",
 52 |         "dist/credentials/BeeminderApi.credentials.js",
 53 |         "dist/credentials/BitbucketApi.credentials.js",
 54 |         "dist/credentials/BitlyApi.credentials.js",
 55 |         "dist/credentials/BitlyOAuth2Api.credentials.js",
 56 |         "dist/credentials/BitwardenApi.credentials.js",
 57 |         "dist/credentials/BoxOAuth2Api.credentials.js",
 58 |         "dist/credentials/BrandfetchApi.credentials.js",
 59 |         "dist/credentials/BubbleApi.credentials.js",
 60 |         "dist/credentials/CalApi.credentials.js",
 61 |         "dist/credentials/CalendlyApi.credentials.js",
 62 |         "dist/credentials/CarbonBlackApi.credentials.js",
 63 |         "dist/credentials/ChargebeeApi.credentials.js",
 64 |         "dist/credentials/CircleCiApi.credentials.js",
 65 |         "dist/credentials/CiscoMerakiApi.credentials.js",
 66 |         "dist/credentials/CiscoSecureEndpointApi.credentials.js",
 67 |         "dist/credentials/CiscoWebexOAuth2Api.credentials.js",
 68 |         "dist/credentials/CiscoUmbrellaApi.credentials.js",
 69 |         "dist/credentials/CitrixAdcApi.credentials.js",
 70 |         "dist/credentials/CloudflareApi.credentials.js",
 71 |         "dist/credentials/ClearbitApi.credentials.js",
 72 |         "dist/credentials/ClickUpApi.credentials.js",
 73 |         "dist/credentials/ClickUpOAuth2Api.credentials.js",
 74 |         "dist/credentials/ClockifyApi.credentials.js",
 75 |         "dist/credentials/CockpitApi.credentials.js",
 76 |         "dist/credentials/CodaApi.credentials.js",
 77 |         "dist/credentials/ContentfulApi.credentials.js",
 78 |         "dist/credentials/ConvertKitApi.credentials.js",
 79 |         "dist/credentials/CopperApi.credentials.js",
 80 |         "dist/credentials/CortexApi.credentials.js",
 81 |         "dist/credentials/CrateDb.credentials.js",
 82 |         "dist/credentials/CrowdStrikeOAuth2Api.credentials.js",
 83 |         "dist/credentials/CrowdDevApi.credentials.js",
 84 |         "dist/credentials/CustomerIoApi.credentials.js",
 85 |         "dist/credentials/DeepLApi.credentials.js",
 86 |         "dist/credentials/DemioApi.credentials.js",
 87 |         "dist/credentials/DhlApi.credentials.js",
 88 |         "dist/credentials/DiscourseApi.credentials.js",
 89 |         "dist/credentials/DisqusApi.credentials.js",
 90 |         "dist/credentials/DriftApi.credentials.js",
 91 |         "dist/credentials/DriftOAuth2Api.credentials.js",
 92 |         "dist/credentials/DropboxApi.credentials.js",
 93 |         "dist/credentials/DropboxOAuth2Api.credentials.js",
 94 |         "dist/credentials/DropcontactApi.credentials.js",
 95 |         "dist/credentials/EgoiApi.credentials.js",
 96 |         "dist/credentials/ElasticsearchApi.credentials.js",
 97 |         "dist/credentials/ElasticSecurityApi.credentials.js",
 98 |         "dist/credentials/EmeliaApi.credentials.js",
 99 |         "dist/credentials/ERPNextApi.credentials.js",
100 |         "dist/credentials/EventbriteApi.credentials.js",
101 |         "dist/credentials/EventbriteOAuth2Api.credentials.js",
102 |         "dist/credentials/F5BigIpApi.credentials.js",
103 |         "dist/credentials/FacebookGraphApi.credentials.js",
104 |         "dist/credentials/FacebookGraphAppApi.credentials.js",
105 |         "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js",
106 |         "dist/credentials/FigmaApi.credentials.js",
107 |         "dist/credentials/FileMaker.credentials.js",
108 |         "dist/credentials/FlowApi.credentials.js",
109 |         "dist/credentials/FormIoApi.credentials.js",
110 |         "dist/credentials/FormstackApi.credentials.js",
111 |         "dist/credentials/FormstackOAuth2Api.credentials.js",
112 |         "dist/credentials/FortiGateApi.credentials.js",
113 |         "dist/credentials/FreshdeskApi.credentials.js",
114 |         "dist/credentials/FreshserviceApi.credentials.js",
115 |         "dist/credentials/FreshworksCrmApi.credentials.js",
116 |         "dist/credentials/Ftp.credentials.js",
117 |         "dist/credentials/GetResponseApi.credentials.js",
118 |         "dist/credentials/GetResponseOAuth2Api.credentials.js",
119 |         "dist/credentials/GhostAdminApi.credentials.js",
120 |         "dist/credentials/GhostContentApi.credentials.js",
121 |         "dist/credentials/GithubApi.credentials.js",
122 |         "dist/credentials/GithubOAuth2Api.credentials.js",
123 |         "dist/credentials/GitlabApi.credentials.js",
124 |         "dist/credentials/GitlabOAuth2Api.credentials.js",
125 |         "dist/credentials/GitPassword.credentials.js",
126 |         "dist/credentials/GmailOAuth2Api.credentials.js",
127 |         "dist/credentials/GoogleAdsOAuth2Api.credentials.js",
128 |         "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js",
129 |         "dist/credentials/GoogleApi.credentials.js",
130 |         "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js",
131 |         "dist/credentials/GoogleBooksOAuth2Api.credentials.js",
132 |         "dist/credentials/GoogleCalendarOAuth2Api.credentials.js",
133 |         "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js",
134 |         "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js",
135 |         "dist/credentials/GoogleContactsOAuth2Api.credentials.js",
136 |         "dist/credentials/GoogleDocsOAuth2Api.credentials.js",
137 |         "dist/credentials/GoogleDriveOAuth2Api.credentials.js",
138 |         "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js",
139 |         "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js",
140 |         "dist/credentials/GoogleOAuth2Api.credentials.js",
141 |         "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js",
142 |         "dist/credentials/GoogleSheetsOAuth2Api.credentials.js",
143 |         "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js",
144 |         "dist/credentials/GoogleSlidesOAuth2Api.credentials.js",
145 |         "dist/credentials/GoogleTasksOAuth2Api.credentials.js",
146 |         "dist/credentials/GoogleTranslateOAuth2Api.credentials.js",
147 |         "dist/credentials/GotifyApi.credentials.js",
148 |         "dist/credentials/GoToWebinarOAuth2Api.credentials.js",
149 |         "dist/credentials/GristApi.credentials.js",
150 |         "dist/credentials/GrafanaApi.credentials.js",
151 |         "dist/credentials/GSuiteAdminOAuth2Api.credentials.js",
152 |         "dist/credentials/GumroadApi.credentials.js",
153 |         "dist/credentials/HaloPSAApi.credentials.js",
154 |         "dist/credentials/HarvestApi.credentials.js",
155 |         "dist/credentials/HarvestOAuth2Api.credentials.js",
156 |         "dist/credentials/HelpScoutOAuth2Api.credentials.js",
157 |         "dist/credentials/HighLevelApi.credentials.js",
158 |         "dist/credentials/HomeAssistantApi.credentials.js",
159 |         "dist/credentials/HttpBasicAuth.credentials.js",
160 |         "dist/credentials/HttpDigestAuth.credentials.js",
161 |         "dist/credentials/HttpHeaderAuth.credentials.js",
162 |         "dist/credentials/HttpCustomAuth.credentials.js",
163 |         "dist/credentials/HttpQueryAuth.credentials.js",
164 |         "dist/credentials/HubspotApi.credentials.js",
165 |         "dist/credentials/HubspotAppToken.credentials.js",
166 |         "dist/credentials/HubspotDeveloperApi.credentials.js",
167 |         "dist/credentials/HubspotOAuth2Api.credentials.js",
168 |         "dist/credentials/HumanticAiApi.credentials.js",
169 |         "dist/credentials/HunterApi.credentials.js",
170 |         "dist/credentials/HybridAnalysisApi.credentials.js",
171 |         "dist/credentials/Imap.credentials.js",
172 |         "dist/credentials/ImpervaWafApi.credentials.js",
173 |         "dist/credentials/IntercomApi.credentials.js",
174 |         "dist/credentials/InvoiceNinjaApi.credentials.js",
175 |         "dist/credentials/IterableApi.credentials.js",
176 |         "dist/credentials/JenkinsApi.credentials.js",
177 |         "dist/credentials/JiraSoftwareCloudApi.credentials.js",
178 |         "dist/credentials/JiraSoftwareServerApi.credentials.js",
179 |         "dist/credentials/JotFormApi.credentials.js",
180 |         "dist/credentials/Kafka.credentials.js",
181 |         "dist/credentials/KeapOAuth2Api.credentials.js",
182 |         "dist/credentials/KibanaApi.credentials.js",
183 |         "dist/credentials/KitemakerApi.credentials.js",
184 |         "dist/credentials/KoBoToolboxApi.credentials.js",
185 |         "dist/credentials/Ldap.credentials.js",
186 |         "dist/credentials/LemlistApi.credentials.js",
187 |         "dist/credentials/LinearApi.credentials.js",
188 |         "dist/credentials/LinearOAuth2Api.credentials.js",
189 |         "dist/credentials/LineNotifyOAuth2Api.credentials.js",
190 |         "dist/credentials/LingvaNexApi.credentials.js",
191 |         "dist/credentials/LinkedInOAuth2Api.credentials.js",
192 |         "dist/credentials/LoneScaleApi.credentials.js",
193 |         "dist/credentials/Magento2Api.credentials.js",
194 |         "dist/credentials/MailcheckApi.credentials.js",
195 |         "dist/credentials/MailchimpApi.credentials.js",
196 |         "dist/credentials/MailchimpOAuth2Api.credentials.js",
197 |         "dist/credentials/MailerLiteApi.credentials.js",
198 |         "dist/credentials/MailgunApi.credentials.js",
199 |         "dist/credentials/MailjetEmailApi.credentials.js",
200 |         "dist/credentials/MailjetSmsApi.credentials.js",
201 |         "dist/credentials/MandrillApi.credentials.js",
202 |         "dist/credentials/MarketstackApi.credentials.js",
203 |         "dist/credentials/MatrixApi.credentials.js",
204 |         "dist/credentials/MattermostApi.credentials.js",
205 |         "dist/credentials/MauticApi.credentials.js",
206 |         "dist/credentials/MauticOAuth2Api.credentials.js",
207 |         "dist/credentials/MediumApi.credentials.js",
208 |         "dist/credentials/MediumOAuth2Api.credentials.js",
209 |         "dist/credentials/MetabaseApi.credentials.js",
210 |         "dist/credentials/MessageBirdApi.credentials.js",
211 |         "dist/credentials/MetabaseApi.credentials.js",
212 |         "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js",
213 |         "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js",
214 |         "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js",
215 |         "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js",
216 |         "dist/credentials/MicrosoftOAuth2Api.credentials.js",
217 |         "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js",
218 |         "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js",
219 |         "dist/credentials/MicrosoftSql.credentials.js",
220 |         "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js",
221 |         "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js",
222 |         "dist/credentials/MindeeInvoiceApi.credentials.js",
223 |         "dist/credentials/MindeeReceiptApi.credentials.js",
224 |         "dist/credentials/MispApi.credentials.js",
225 |         "dist/credentials/MistApi.credentials.js",
226 |         "dist/credentials/MoceanApi.credentials.js",
227 |         "dist/credentials/MondayComApi.credentials.js",
228 |         "dist/credentials/MondayComOAuth2Api.credentials.js",
229 |         "dist/credentials/MongoDb.credentials.js",
230 |         "dist/credentials/MonicaCrmApi.credentials.js",
231 |         "dist/credentials/Mqtt.credentials.js",
232 |         "dist/credentials/Msg91Api.credentials.js",
233 |         "dist/credentials/MySql.credentials.js",
234 |         "dist/credentials/N8nApi.credentials.js",
235 |         "dist/credentials/NasaApi.credentials.js",
236 |         "dist/credentials/NetlifyApi.credentials.js",
237 |         "dist/credentials/NextCloudApi.credentials.js",
238 |         "dist/credentials/NextCloudOAuth2Api.credentials.js",
239 |         "dist/credentials/NocoDb.credentials.js",
240 |         "dist/credentials/NocoDbApiToken.credentials.js",
241 |         "dist/credentials/NotionApi.credentials.js",
242 |         "dist/credentials/NotionOAuth2Api.credentials.js",
243 |         "dist/credentials/NpmApi.credentials.js",
244 |         "dist/credentials/OAuth1Api.credentials.js",
245 |         "dist/credentials/OAuth2Api.credentials.js",
246 |         "dist/credentials/OdooApi.credentials.js",
247 |         "dist/credentials/OktaApi.credentials.js",
248 |         "dist/credentials/OneSimpleApi.credentials.js",
249 |         "dist/credentials/OnfleetApi.credentials.js",
250 |         "dist/credentials/OpenAiApi.credentials.js",
251 |         "dist/credentials/OpenCTIApi.credentials.js",
252 |         "dist/credentials/OpenWeatherMapApi.credentials.js",
253 |         "dist/credentials/OrbitApi.credentials.js",
254 |         "dist/credentials/OuraApi.credentials.js",
255 |         "dist/credentials/PaddleApi.credentials.js",
256 |         "dist/credentials/PagerDutyApi.credentials.js",
257 |         "dist/credentials/PagerDutyOAuth2Api.credentials.js",
258 |         "dist/credentials/PayPalApi.credentials.js",
259 |         "dist/credentials/PeekalinkApi.credentials.js",
260 |         "dist/credentials/PhantombusterApi.credentials.js",
261 |         "dist/credentials/PhilipsHueOAuth2Api.credentials.js",
262 |         "dist/credentials/PipedriveApi.credentials.js",
263 |         "dist/credentials/PipedriveOAuth2Api.credentials.js",
264 |         "dist/credentials/PlivoApi.credentials.js",
265 |         "dist/credentials/Postgres.credentials.js",
266 |         "dist/credentials/PostHogApi.credentials.js",
267 |         "dist/credentials/PostmarkApi.credentials.js",
268 |         "dist/credentials/ProfitWellApi.credentials.js",
269 |         "dist/credentials/PushbulletOAuth2Api.credentials.js",
270 |         "dist/credentials/PushcutApi.credentials.js",
271 |         "dist/credentials/PushoverApi.credentials.js",
272 |         "dist/credentials/QRadarApi.credentials.js",
273 |         "dist/credentials/QualysApi.credentials.js",
274 |         "dist/credentials/QuestDb.credentials.js",
275 |         "dist/credentials/QuickBaseApi.credentials.js",
276 |         "dist/credentials/QuickBooksOAuth2Api.credentials.js",
277 |         "dist/credentials/RabbitMQ.credentials.js",
278 |         "dist/credentials/RaindropOAuth2Api.credentials.js",
279 |         "dist/credentials/RecordedFutureApi.credentials.js",
280 |         "dist/credentials/RedditOAuth2Api.credentials.js",
281 |         "dist/credentials/Redis.credentials.js",
282 |         "dist/credentials/RocketchatApi.credentials.js",
283 |         "dist/credentials/RundeckApi.credentials.js",
284 |         "dist/credentials/S3.credentials.js",
285 |         "dist/credentials/SalesforceJwtApi.credentials.js",
286 |         "dist/credentials/SalesforceOAuth2Api.credentials.js",
287 |         "dist/credentials/SalesmateApi.credentials.js",
288 |         "dist/credentials/SeaTableApi.credentials.js",
289 |         "dist/credentials/SecurityScorecardApi.credentials.js",
290 |         "dist/credentials/SegmentApi.credentials.js",
291 |         "dist/credentials/SekoiaApi.credentials.js",
292 |         "dist/credentials/SendGridApi.credentials.js",
293 |         "dist/credentials/BrevoApi.credentials.js",
294 |         "dist/credentials/SendyApi.credentials.js",
295 |         "dist/credentials/SentryIoApi.credentials.js",
296 |         "dist/credentials/SentryIoOAuth2Api.credentials.js",
297 |         "dist/credentials/SentryIoServerApi.credentials.js",
298 |         "dist/credentials/ServiceNowOAuth2Api.credentials.js",
299 |         "dist/credentials/ServiceNowBasicApi.credentials.js",
300 |         "dist/credentials/Sftp.credentials.js",
301 |         "dist/credentials/ShopifyApi.credentials.js",
302 |         "dist/credentials/ShopifyAccessTokenApi.credentials.js",
303 |         "dist/credentials/ShopifyOAuth2Api.credentials.js",
304 |         "dist/credentials/Signl4Api.credentials.js",
305 |         "dist/credentials/SlackApi.credentials.js",
306 |         "dist/credentials/SlackOAuth2Api.credentials.js",
307 |         "dist/credentials/Sms77Api.credentials.js",
308 |         "dist/credentials/Smtp.credentials.js",
309 |         "dist/credentials/Snowflake.credentials.js",
310 |         "dist/credentials/SplunkApi.credentials.js",
311 |         "dist/credentials/SpontitApi.credentials.js",
312 |         "dist/credentials/SpotifyOAuth2Api.credentials.js",
313 |         "dist/credentials/ShufflerApi.credentials.js",
314 |         "dist/credentials/SshPassword.credentials.js",
315 |         "dist/credentials/SshPrivateKey.credentials.js",
316 |         "dist/credentials/StackbyApi.credentials.js",
317 |         "dist/credentials/StoryblokContentApi.credentials.js",
318 |         "dist/credentials/StoryblokManagementApi.credentials.js",
319 |         "dist/credentials/StrapiApi.credentials.js",
320 |         "dist/credentials/StrapiTokenApi.credentials.js",
321 |         "dist/credentials/StravaOAuth2Api.credentials.js",
322 |         "dist/credentials/StripeApi.credentials.js",
323 |         "dist/credentials/SupabaseApi.credentials.js",
324 |         "dist/credentials/SurveyMonkeyApi.credentials.js",
325 |         "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js",
326 |         "dist/credentials/SyncroMspApi.credentials.js",
327 |         "dist/credentials/TaigaApi.credentials.js",
328 |         "dist/credentials/TapfiliateApi.credentials.js",
329 |         "dist/credentials/TelegramApi.credentials.js",
330 |         "dist/credentials/TheHiveProjectApi.credentials.js",
331 |         "dist/credentials/TheHiveApi.credentials.js",
332 |         "dist/credentials/TimescaleDb.credentials.js",
333 |         "dist/credentials/TodoistApi.credentials.js",
334 |         "dist/credentials/TodoistOAuth2Api.credentials.js",
335 |         "dist/credentials/TogglApi.credentials.js",
336 |         "dist/credentials/TotpApi.credentials.js",
337 |         "dist/credentials/TravisCiApi.credentials.js",
338 |         "dist/credentials/TrellixEpoApi.credentials.js",
339 |         "dist/credentials/TrelloApi.credentials.js",
340 |         "dist/credentials/TwakeCloudApi.credentials.js",
341 |         "dist/credentials/TwakeServerApi.credentials.js",
342 |         "dist/credentials/TwilioApi.credentials.js",
343 |         "dist/credentials/TwistOAuth2Api.credentials.js",
344 |         "dist/credentials/TwitterOAuth1Api.credentials.js",
345 |         "dist/credentials/TwitterOAuth2Api.credentials.js",
346 |         "dist/credentials/TypeformApi.credentials.js",
347 |         "dist/credentials/TypeformOAuth2Api.credentials.js",
348 |         "dist/credentials/UnleashedSoftwareApi.credentials.js",
349 |         "dist/credentials/UpleadApi.credentials.js",
350 |         "dist/credentials/UProcApi.credentials.js",
351 |         "dist/credentials/UptimeRobotApi.credentials.js",
352 |         "dist/credentials/UrlScanIoApi.credentials.js",
353 |         "dist/credentials/VeroApi.credentials.js",
354 |         "dist/credentials/VirusTotalApi.credentials.js",
355 |         "dist/credentials/VonageApi.credentials.js",
356 |         "dist/credentials/VenafiTlsProtectCloudApi.credentials.js",
357 |         "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js",
358 |         "dist/credentials/WebflowApi.credentials.js",
359 |         "dist/credentials/WebflowOAuth2Api.credentials.js",
360 |         "dist/credentials/WekanApi.credentials.js",
361 |         "dist/credentials/WhatsAppApi.credentials.js",
362 |         "dist/credentials/WiseApi.credentials.js",
363 |         "dist/credentials/WooCommerceApi.credentials.js",
364 |         "dist/credentials/WordpressApi.credentials.js",
365 |         "dist/credentials/WorkableApi.credentials.js",
366 |         "dist/credentials/WufooApi.credentials.js",
367 |         "dist/credentials/XeroOAuth2Api.credentials.js",
368 |         "dist/credentials/YourlsApi.credentials.js",
369 |         "dist/credentials/YouTubeOAuth2Api.credentials.js",
370 |         "dist/credentials/ZammadBasicAuthApi.credentials.js",
371 |         "dist/credentials/ZammadTokenAuthApi.credentials.js",
372 |         "dist/credentials/ZendeskApi.credentials.js",
373 |         "dist/credentials/ZendeskOAuth2Api.credentials.js",
374 |         "dist/credentials/ZohoOAuth2Api.credentials.js",
375 |         "dist/credentials/ZoomApi.credentials.js",
376 |         "dist/credentials/ZoomOAuth2Api.credentials.js",
377 |         "dist/credentials/ZscalerZiaApi.credentials.js",
378 |         "dist/credentials/ZulipApi.credentials.js"
379 |       ],
380 |       "nodes": [
381 |         "dist/nodes/ActionNetwork/ActionNetwork.node.js",
382 |         "dist/nodes/ActiveCampaign/ActiveCampaign.node.js",
383 |         "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js",
384 |         "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js",
385 |         "dist/nodes/Adalo/Adalo.node.js",
386 |         "dist/nodes/Affinity/Affinity.node.js",
387 |         "dist/nodes/Affinity/AffinityTrigger.node.js",
388 |         "dist/nodes/AgileCrm/AgileCrm.node.js",
389 |         "dist/nodes/Airtable/Airtable.node.js",
390 |         "dist/nodes/Airtable/AirtableTrigger.node.js",
391 |         "dist/nodes/Amqp/Amqp.node.js",
392 |         "dist/nodes/Amqp/AmqpTrigger.node.js",
393 |         "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js",
394 |         "dist/nodes/Asana/Asana.node.js",
395 |         "dist/nodes/Asana/AsanaTrigger.node.js",
396 |         "dist/nodes/Automizy/Automizy.node.js",
397 |         "dist/nodes/Autopilot/Autopilot.node.js",
398 |         "dist/nodes/Autopilot/AutopilotTrigger.node.js",
399 |         "dist/nodes/Aws/AwsLambda.node.js",
400 |         "dist/nodes/Aws/AwsSns.node.js",
401 |         "dist/nodes/Aws/AwsSnsTrigger.node.js",
402 |         "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js",
403 |         "dist/nodes/Aws/Comprehend/AwsComprehend.node.js",
404 |         "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js",
405 |         "dist/nodes/Aws/ELB/AwsElb.node.js",
406 |         "dist/nodes/Aws/Rekognition/AwsRekognition.node.js",
407 |         "dist/nodes/Aws/S3/AwsS3.node.js",
408 |         "dist/nodes/Aws/SES/AwsSes.node.js",
409 |         "dist/nodes/Aws/SQS/AwsSqs.node.js",
410 |         "dist/nodes/Aws/Textract/AwsTextract.node.js",
411 |         "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js",
412 |         "dist/nodes/BambooHr/BambooHr.node.js",
413 |         "dist/nodes/Bannerbear/Bannerbear.node.js",
414 |         "dist/nodes/Baserow/Baserow.node.js",
415 |         "dist/nodes/Beeminder/Beeminder.node.js",
416 |         "dist/nodes/Bitbucket/BitbucketTrigger.node.js",
417 |         "dist/nodes/Bitly/Bitly.node.js",
418 |         "dist/nodes/Bitwarden/Bitwarden.node.js",
419 |         "dist/nodes/Box/Box.node.js",
420 |         "dist/nodes/Box/BoxTrigger.node.js",
421 |         "dist/nodes/Brandfetch/Brandfetch.node.js",
422 |         "dist/nodes/Bubble/Bubble.node.js",
423 |         "dist/nodes/Cal/CalTrigger.node.js",
424 |         "dist/nodes/Calendly/CalendlyTrigger.node.js",
425 |         "dist/nodes/Chargebee/Chargebee.node.js",
426 |         "dist/nodes/Chargebee/ChargebeeTrigger.node.js",
427 |         "dist/nodes/CircleCi/CircleCi.node.js",
428 |         "dist/nodes/Cisco/Webex/CiscoWebex.node.js",
429 |         "dist/nodes/Citrix/ADC/CitrixAdc.node.js",
430 |         "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js",
431 |         "dist/nodes/Cloudflare/Cloudflare.node.js",
432 |         "dist/nodes/Clearbit/Clearbit.node.js",
433 |         "dist/nodes/ClickUp/ClickUp.node.js",
434 |         "dist/nodes/ClickUp/ClickUpTrigger.node.js",
435 |         "dist/nodes/Clockify/Clockify.node.js",
436 |         "dist/nodes/Clockify/ClockifyTrigger.node.js",
437 |         "dist/nodes/Cockpit/Cockpit.node.js",
438 |         "dist/nodes/Coda/Coda.node.js",
439 |         "dist/nodes/Code/Code.node.js",
440 |         "dist/nodes/CoinGecko/CoinGecko.node.js",
441 |         "dist/nodes/CompareDatasets/CompareDatasets.node.js",
442 |         "dist/nodes/Compression/Compression.node.js",
443 |         "dist/nodes/Contentful/Contentful.node.js",
444 |         "dist/nodes/ConvertKit/ConvertKit.node.js",
445 |         "dist/nodes/ConvertKit/ConvertKitTrigger.node.js",
446 |         "dist/nodes/Copper/Copper.node.js",
447 |         "dist/nodes/Copper/CopperTrigger.node.js",
448 |         "dist/nodes/Cortex/Cortex.node.js",
449 |         "dist/nodes/CrateDb/CrateDb.node.js",
450 |         "dist/nodes/Cron/Cron.node.js",
451 |         "dist/nodes/CrowdDev/CrowdDev.node.js",
452 |         "dist/nodes/CrowdDev/CrowdDevTrigger.node.js",
453 |         "dist/nodes/Crypto/Crypto.node.js",
454 |         "dist/nodes/CustomerIo/CustomerIo.node.js",
455 |         "dist/nodes/CustomerIo/CustomerIoTrigger.node.js",
456 |         "dist/nodes/DateTime/DateTime.node.js",
457 |         "dist/nodes/DebugHelper/DebugHelper.node.js",
458 |         "dist/nodes/DeepL/DeepL.node.js",
459 |         "dist/nodes/Demio/Demio.node.js",
460 |         "dist/nodes/Dhl/Dhl.node.js",
461 |         "dist/nodes/Discord/Discord.node.js",
462 |         "dist/nodes/Discourse/Discourse.node.js",
463 |         "dist/nodes/Disqus/Disqus.node.js",
464 |         "dist/nodes/Drift/Drift.node.js",
465 |         "dist/nodes/Dropbox/Dropbox.node.js",
466 |         "dist/nodes/Dropcontact/Dropcontact.node.js",
467 |         "dist/nodes/EditImage/EditImage.node.js",
468 |         "dist/nodes/E2eTest/E2eTest.node.js",
469 |         "dist/nodes/Egoi/Egoi.node.js",
470 |         "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js",
471 |         "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js",
472 |         "dist/nodes/EmailReadImap/EmailReadImap.node.js",
473 |         "dist/nodes/EmailSend/EmailSend.node.js",
474 |         "dist/nodes/Emelia/Emelia.node.js",
475 |         "dist/nodes/Emelia/EmeliaTrigger.node.js",
476 |         "dist/nodes/ERPNext/ERPNext.node.js",
477 |         "dist/nodes/ErrorTrigger/ErrorTrigger.node.js",
478 |         "dist/nodes/Eventbrite/EventbriteTrigger.node.js",
479 |         "dist/nodes/ExecuteCommand/ExecuteCommand.node.js",
480 |         "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js",
481 |         "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js",
482 |         "dist/nodes/ExecutionData/ExecutionData.node.js",
483 |         "dist/nodes/Facebook/FacebookGraphApi.node.js",
484 |         "dist/nodes/Facebook/FacebookTrigger.node.js",
485 |         "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js",
486 |         "dist/nodes/Figma/FigmaTrigger.node.js",
487 |         "dist/nodes/FileMaker/FileMaker.node.js",
488 |         "dist/nodes/Filter/Filter.node.js",
489 |         "dist/nodes/Flow/Flow.node.js",
490 |         "dist/nodes/Flow/FlowTrigger.node.js",
491 |         "dist/nodes/Form/FormTrigger.node.js",
492 |         "dist/nodes/FormIo/FormIoTrigger.node.js",
493 |         "dist/nodes/Formstack/FormstackTrigger.node.js",
494 |         "dist/nodes/Freshdesk/Freshdesk.node.js",
495 |         "dist/nodes/Freshservice/Freshservice.node.js",
496 |         "dist/nodes/FreshworksCrm/FreshworksCrm.node.js",
497 |         "dist/nodes/Ftp/Ftp.node.js",
498 |         "dist/nodes/Function/Function.node.js",
499 |         "dist/nodes/FunctionItem/FunctionItem.node.js",
500 |         "dist/nodes/GetResponse/GetResponse.node.js",
501 |         "dist/nodes/GetResponse/GetResponseTrigger.node.js",
502 |         "dist/nodes/Ghost/Ghost.node.js",
503 |         "dist/nodes/Git/Git.node.js",
504 |         "dist/nodes/Github/Github.node.js",
505 |         "dist/nodes/Github/GithubTrigger.node.js",
506 |         "dist/nodes/Gitlab/Gitlab.node.js",
507 |         "dist/nodes/Gitlab/GitlabTrigger.node.js",
508 |         "dist/nodes/Google/Ads/GoogleAds.node.js",
509 |         "dist/nodes/Google/Analytics/GoogleAnalytics.node.js",
510 |         "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js",
511 |         "dist/nodes/Google/Books/GoogleBooks.node.js",
512 |         "dist/nodes/Google/Calendar/GoogleCalendar.node.js",
513 |         "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js",
514 |         "dist/nodes/Google/Chat/GoogleChat.node.js",
515 |         "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js",
516 |         "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js",
517 |         "dist/nodes/Google/Contacts/GoogleContacts.node.js",
518 |         "dist/nodes/Google/Docs/GoogleDocs.node.js",
519 |         "dist/nodes/Google/Drive/GoogleDrive.node.js",
520 |         "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js",
521 |         "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js",
522 |         "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js",
523 |         "dist/nodes/Google/Gmail/Gmail.node.js",
524 |         "dist/nodes/Google/Gmail/GmailTrigger.node.js",
525 |         "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js",
526 |         "dist/nodes/Google/Perspective/GooglePerspective.node.js",
527 |         "dist/nodes/Google/Sheet/GoogleSheets.node.js",
528 |         "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js",
529 |         "dist/nodes/Google/Slides/GoogleSlides.node.js",
530 |         "dist/nodes/Google/Task/GoogleTasks.node.js",
531 |         "dist/nodes/Google/Translate/GoogleTranslate.node.js",
532 |         "dist/nodes/Google/YouTube/YouTube.node.js",
533 |         "dist/nodes/Gotify/Gotify.node.js",
534 |         "dist/nodes/GoToWebinar/GoToWebinar.node.js",
535 |         "dist/nodes/Grafana/Grafana.node.js",
536 |         "dist/nodes/GraphQL/GraphQL.node.js",
537 |         "dist/nodes/Grist/Grist.node.js",
538 |         "dist/nodes/Gumroad/GumroadTrigger.node.js",
539 |         "dist/nodes/HackerNews/HackerNews.node.js",
540 |         "dist/nodes/HaloPSA/HaloPSA.node.js",
541 |         "dist/nodes/Harvest/Harvest.node.js",
542 |         "dist/nodes/HelpScout/HelpScout.node.js",
543 |         "dist/nodes/HelpScout/HelpScoutTrigger.node.js",
544 |         "dist/nodes/HighLevel/HighLevel.node.js",
545 |         "dist/nodes/HomeAssistant/HomeAssistant.node.js",
546 |         "dist/nodes/HtmlExtract/HtmlExtract.node.js",
547 |         "dist/nodes/Html/Html.node.js",
548 |         "dist/nodes/HttpRequest/HttpRequest.node.js",
549 |         "dist/nodes/Hubspot/Hubspot.node.js",
550 |         "dist/nodes/Hubspot/HubspotTrigger.node.js",
551 |         "dist/nodes/HumanticAI/HumanticAi.node.js",
552 |         "dist/nodes/Hunter/Hunter.node.js",
553 |         "dist/nodes/ICalendar/ICalendar.node.js",
554 |         "dist/nodes/If/If.node.js",
555 |         "dist/nodes/Intercom/Intercom.node.js",
556 |         "dist/nodes/Interval/Interval.node.js",
557 |         "dist/nodes/InvoiceNinja/InvoiceNinja.node.js",
558 |         "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js",
559 |         "dist/nodes/ItemLists/ItemLists.node.js",
560 |         "dist/nodes/Iterable/Iterable.node.js",
561 |         "dist/nodes/Jenkins/Jenkins.node.js",
562 |         "dist/nodes/Jira/Jira.node.js",
563 |         "dist/nodes/Jira/JiraTrigger.node.js",
564 |         "dist/nodes/JotForm/JotFormTrigger.node.js",
565 |         "dist/nodes/Kafka/Kafka.node.js",
566 |         "dist/nodes/Kafka/KafkaTrigger.node.js",
567 |         "dist/nodes/Keap/Keap.node.js",
568 |         "dist/nodes/Keap/KeapTrigger.node.js",
569 |         "dist/nodes/Kitemaker/Kitemaker.node.js",
570 |         "dist/nodes/KoBoToolbox/KoBoToolbox.node.js",
571 |         "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js",
572 |         "dist/nodes/Ldap/Ldap.node.js",
573 |         "dist/nodes/Lemlist/Lemlist.node.js",
574 |         "dist/nodes/Lemlist/LemlistTrigger.node.js",
575 |         "dist/nodes/Line/Line.node.js",
576 |         "dist/nodes/Linear/Linear.node.js",
577 |         "dist/nodes/Linear/LinearTrigger.node.js",
578 |         "dist/nodes/LingvaNex/LingvaNex.node.js",
579 |         "dist/nodes/LinkedIn/LinkedIn.node.js",
580 |         "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js",
581 |         "dist/nodes/LoneScale/LoneScaleTrigger.node.js",
582 |         "dist/nodes/LoneScale/LoneScale.node.js",
583 |         "dist/nodes/Magento/Magento2.node.js",
584 |         "dist/nodes/Mailcheck/Mailcheck.node.js",
585 |         "dist/nodes/Mailchimp/Mailchimp.node.js",
586 |         "dist/nodes/Mailchimp/MailchimpTrigger.node.js",
587 |         "dist/nodes/MailerLite/MailerLite.node.js",
588 |         "dist/nodes/MailerLite/MailerLiteTrigger.node.js",
589 |         "dist/nodes/Mailgun/Mailgun.node.js",
590 |         "dist/nodes/Mailjet/Mailjet.node.js",
591 |         "dist/nodes/Mailjet/MailjetTrigger.node.js",
592 |         "dist/nodes/Mandrill/Mandrill.node.js",
593 |         "dist/nodes/ManualTrigger/ManualTrigger.node.js",
594 |         "dist/nodes/Markdown/Markdown.node.js",
595 |         "dist/nodes/Marketstack/Marketstack.node.js",
596 |         "dist/nodes/Matrix/Matrix.node.js",
597 |         "dist/nodes/Mattermost/Mattermost.node.js",
598 |         "dist/nodes/Mautic/Mautic.node.js",
599 |         "dist/nodes/Mautic/MauticTrigger.node.js",
600 |         "dist/nodes/Medium/Medium.node.js",
601 |         "dist/nodes/Merge/Merge.node.js",
602 |         "dist/nodes/MessageBird/MessageBird.node.js",
603 |         "dist/nodes/Metabase/Metabase.node.js",
604 |         "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js",
605 |         "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js",
606 |         "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js",
607 |         "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js",
608 |         "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js",
609 |         "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js",
610 |         "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js",
611 |         "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js",
612 |         "dist/nodes/Mindee/Mindee.node.js",
613 |         "dist/nodes/Misp/Misp.node.js",
614 |         "dist/nodes/Mocean/Mocean.node.js",
615 |         "dist/nodes/MondayCom/MondayCom.node.js",
616 |         "dist/nodes/MongoDb/MongoDb.node.js",
617 |         "dist/nodes/MonicaCrm/MonicaCrm.node.js",
618 |         "dist/nodes/MoveBinaryData/MoveBinaryData.node.js",
619 |         "dist/nodes/MQTT/Mqtt.node.js",
620 |         "dist/nodes/MQTT/MqttTrigger.node.js",
621 |         "dist/nodes/Msg91/Msg91.node.js",
622 |         "dist/nodes/MySql/MySql.node.js",
623 |         "dist/nodes/N8n/N8n.node.js",
624 |         "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js",
625 |         "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js",
626 |         "dist/nodes/N8nTrigger/N8nTrigger.node.js",
627 |         "dist/nodes/Nasa/Nasa.node.js",
628 |         "dist/nodes/Netlify/Netlify.node.js",
629 |         "dist/nodes/Netlify/NetlifyTrigger.node.js",
630 |         "dist/nodes/NextCloud/NextCloud.node.js",
631 |         "dist/nodes/NocoDB/NocoDB.node.js",
632 |         "dist/nodes/Brevo/Brevo.node.js",
633 |         "dist/nodes/Brevo/BrevoTrigger.node.js",
634 |         "dist/nodes/StickyNote/StickyNote.node.js",
635 |         "dist/nodes/NoOp/NoOp.node.js",
636 |         "dist/nodes/Onfleet/Onfleet.node.js",
637 |         "dist/nodes/Onfleet/OnfleetTrigger.node.js",
638 |         "dist/nodes/Notion/Notion.node.js",
639 |         "dist/nodes/Notion/NotionTrigger.node.js",
640 |         "dist/nodes/Npm/Npm.node.js",
641 |         "dist/nodes/Odoo/Odoo.node.js",
642 |         "dist/nodes/OneSimpleApi/OneSimpleApi.node.js",
643 |         "dist/nodes/OpenAi/OpenAi.node.js",
644 |         "dist/nodes/OpenThesaurus/OpenThesaurus.node.js",
645 |         "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js",
646 |         "dist/nodes/Orbit/Orbit.node.js",
647 |         "dist/nodes/Oura/Oura.node.js",
648 |         "dist/nodes/Paddle/Paddle.node.js",
649 |         "dist/nodes/PagerDuty/PagerDuty.node.js",
650 |         "dist/nodes/PayPal/PayPal.node.js",
651 |         "dist/nodes/PayPal/PayPalTrigger.node.js",
652 |         "dist/nodes/Peekalink/Peekalink.node.js",
653 |         "dist/nodes/Phantombuster/Phantombuster.node.js",
654 |         "dist/nodes/PhilipsHue/PhilipsHue.node.js",
655 |         "dist/nodes/Pipedrive/Pipedrive.node.js",
656 |         "dist/nodes/Pipedrive/PipedriveTrigger.node.js",
657 |         "dist/nodes/Plivo/Plivo.node.js",
658 |         "dist/nodes/PostBin/PostBin.node.js",
659 |         "dist/nodes/Postgres/Postgres.node.js",
660 |         "dist/nodes/Postgres/PostgresTrigger.node.js",
661 |         "dist/nodes/PostHog/PostHog.node.js",
662 |         "dist/nodes/Postmark/PostmarkTrigger.node.js",
663 |         "dist/nodes/ProfitWell/ProfitWell.node.js",
664 |         "dist/nodes/Pushbullet/Pushbullet.node.js",
665 |         "dist/nodes/Pushcut/Pushcut.node.js",
666 |         "dist/nodes/Pushcut/PushcutTrigger.node.js",
667 |         "dist/nodes/Pushover/Pushover.node.js",
668 |         "dist/nodes/QuestDb/QuestDb.node.js",
669 |         "dist/nodes/QuickBase/QuickBase.node.js",
670 |         "dist/nodes/QuickBooks/QuickBooks.node.js",
671 |         "dist/nodes/QuickChart/QuickChart.node.js",
672 |         "dist/nodes/RabbitMQ/RabbitMQ.node.js",
673 |         "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js",
674 |         "dist/nodes/Raindrop/Raindrop.node.js",
675 |         "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js",
676 |         "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js",
677 |         "dist/nodes/ReadPdf/ReadPDF.node.js",
678 |         "dist/nodes/Reddit/Reddit.node.js",
679 |         "dist/nodes/Redis/Redis.node.js",
680 |         "dist/nodes/Redis/RedisTrigger.node.js",
681 |         "dist/nodes/RenameKeys/RenameKeys.node.js",
682 |         "dist/nodes/RespondToWebhook/RespondToWebhook.node.js",
683 |         "dist/nodes/Rocketchat/Rocketchat.node.js",
684 |         "dist/nodes/RssFeedRead/RssFeedRead.node.js",
685 |         "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js",
686 |         "dist/nodes/Rundeck/Rundeck.node.js",
687 |         "dist/nodes/S3/S3.node.js",
688 |         "dist/nodes/Salesforce/Salesforce.node.js",
689 |         "dist/nodes/Salesmate/Salesmate.node.js",
690 |         "dist/nodes/Schedule/ScheduleTrigger.node.js",
691 |         "dist/nodes/SeaTable/SeaTable.node.js",
692 |         "dist/nodes/SeaTable/SeaTableTrigger.node.js",
693 |         "dist/nodes/SecurityScorecard/SecurityScorecard.node.js",
694 |         "dist/nodes/Segment/Segment.node.js",
695 |         "dist/nodes/SendGrid/SendGrid.node.js",
696 |         "dist/nodes/Sendy/Sendy.node.js",
697 |         "dist/nodes/SentryIo/SentryIo.node.js",
698 |         "dist/nodes/ServiceNow/ServiceNow.node.js",
699 |         "dist/nodes/Set/Set.node.js",
700 |         "dist/nodes/Shopify/Shopify.node.js",
701 |         "dist/nodes/Shopify/ShopifyTrigger.node.js",
702 |         "dist/nodes/Signl4/Signl4.node.js",
703 |         "dist/nodes/Slack/Slack.node.js",
704 |         "dist/nodes/Sms77/Sms77.node.js",
705 |         "dist/nodes/Snowflake/Snowflake.node.js",
706 |         "dist/nodes/SplitInBatches/SplitInBatches.node.js",
707 |         "dist/nodes/Splunk/Splunk.node.js",
708 |         "dist/nodes/Spontit/Spontit.node.js",
709 |         "dist/nodes/Spotify/Spotify.node.js",
710 |         "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js",
711 |         "dist/nodes/SseTrigger/SseTrigger.node.js",
712 |         "dist/nodes/Ssh/Ssh.node.js",
713 |         "dist/nodes/Stackby/Stackby.node.js",
714 |         "dist/nodes/Start/Start.node.js",
715 |         "dist/nodes/StopAndError/StopAndError.node.js",
716 |         "dist/nodes/Storyblok/Storyblok.node.js",
717 |         "dist/nodes/Strapi/Strapi.node.js",
718 |         "dist/nodes/Strava/Strava.node.js",
719 |         "dist/nodes/Strava/StravaTrigger.node.js",
720 |         "dist/nodes/Stripe/Stripe.node.js",
721 |         "dist/nodes/Stripe/StripeTrigger.node.js",
722 |         "dist/nodes/Supabase/Supabase.node.js",
723 |         "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js",
724 |         "dist/nodes/Switch/Switch.node.js",
725 |         "dist/nodes/SyncroMSP/SyncroMsp.node.js",
726 |         "dist/nodes/Taiga/Taiga.node.js",
727 |         "dist/nodes/Taiga/TaigaTrigger.node.js",
728 |         "dist/nodes/Tapfiliate/Tapfiliate.node.js",
729 |         "dist/nodes/Telegram/Telegram.node.js",
730 |         "dist/nodes/Telegram/TelegramTrigger.node.js",
731 |         "dist/nodes/TheHiveProject/TheHiveProject.node.js",
732 |         "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js",
733 |         "dist/nodes/TheHive/TheHive.node.js",
734 |         "dist/nodes/TheHive/TheHiveTrigger.node.js",
735 |         "dist/nodes/TimescaleDb/TimescaleDb.node.js",
736 |         "dist/nodes/Todoist/Todoist.node.js",
737 |         "dist/nodes/Toggl/TogglTrigger.node.js",
738 |         "dist/nodes/Totp/Totp.node.js",
739 |         "dist/nodes/TravisCi/TravisCi.node.js",
740 |         "dist/nodes/Trello/Trello.node.js",
741 |         "dist/nodes/Trello/TrelloTrigger.node.js",
742 |         "dist/nodes/Twake/Twake.node.js",
743 |         "dist/nodes/Twilio/Twilio.node.js",
744 |         "dist/nodes/Twist/Twist.node.js",
745 |         "dist/nodes/Twitter/Twitter.node.js",
746 |         "dist/nodes/Typeform/TypeformTrigger.node.js",
747 |         "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js",
748 |         "dist/nodes/Uplead/Uplead.node.js",
749 |         "dist/nodes/UProc/UProc.node.js",
750 |         "dist/nodes/UptimeRobot/UptimeRobot.node.js",
751 |         "dist/nodes/UrlScanIo/UrlScanIo.node.js",
752 |         "dist/nodes/Vero/Vero.node.js",
753 |         "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js",
754 |         "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js",
755 |         "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js",
756 |         "dist/nodes/Vonage/Vonage.node.js",
757 |         "dist/nodes/Wait/Wait.node.js",
758 |         "dist/nodes/Webflow/Webflow.node.js",
759 |         "dist/nodes/Webflow/WebflowTrigger.node.js",
760 |         "dist/nodes/Webhook/Webhook.node.js",
761 |         "dist/nodes/Wekan/Wekan.node.js",
762 |         "dist/nodes/WhatsApp/WhatsApp.node.js",
763 |         "dist/nodes/Wise/Wise.node.js",
764 |         "dist/nodes/Wise/WiseTrigger.node.js",
765 |         "dist/nodes/WooCommerce/WooCommerce.node.js",
766 |         "dist/nodes/WooCommerce/WooCommerceTrigger.node.js",
767 |         "dist/nodes/Wordpress/Wordpress.node.js",
768 |         "dist/nodes/Workable/WorkableTrigger.node.js",
769 |         "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js",
770 |         "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js",
771 |         "dist/nodes/Wufoo/WufooTrigger.node.js",
772 |         "dist/nodes/Xero/Xero.node.js",
773 |         "dist/nodes/Xml/Xml.node.js",
774 |         "dist/nodes/Yourls/Yourls.node.js",
775 |         "dist/nodes/Zammad/Zammad.node.js",
776 |         "dist/nodes/Zendesk/Zendesk.node.js",
777 |         "dist/nodes/Zendesk/ZendeskTrigger.node.js",
778 |         "dist/nodes/Zoho/ZohoCrm.node.js",
779 |         "dist/nodes/Zoom/Zoom.node.js",
780 |         "dist/nodes/Zulip/Zulip.node.js"
781 |       ]
782 |     },
783 |     "devDependencies": {
784 |       "@types/amqplib": "^0.10.1",
785 |       "@types/aws4": "^1.5.1",
786 |       "@types/basic-auth": "^1.1.3",
787 |       "@types/cheerio": "^0.22.15",
788 |       "@types/cron": "~1.7.1",
789 |       "@types/eventsource": "^1.1.2",
790 |       "@types/express": "^4.17.6",
791 |       "@types/gm": "^1.25.0",
792 |       "@types/imap-simple": "^4.2.0",
793 |       "@types/js-nacl": "^1.3.0",
794 |       "@types/jsonwebtoken": "^9.0.1",
795 |       "@types/lodash": "^4.14.195",
796 |       "@types/lossless-json": "^1.0.0",
797 |       "@types/mailparser": "^2.7.3",
798 |       "@types/mime-types": "^2.1.0",
799 |       "@types/mssql": "^6.0.2",
800 |       "@types/node-ssh": "^7.0.1",
801 |       "@types/nodemailer": "^6.4.0",
802 |       "@types/promise-ftp": "^1.3.4",
803 |       "@types/redis": "^2.8.11",
804 |       "@types/request-promise-native": "~1.0.15",
805 |       "@types/rfc2047": "^2.0.1",
806 |       "@types/showdown": "^1.9.4",
807 |       "@types/snowflake-sdk": "^1.6.12",
808 |       "@types/ssh2-sftp-client": "^5.1.0",
809 |       "@types/tmp": "^0.2.0",
810 |       "@types/uuid": "^8.3.2",
811 |       "@types/xml2js": "^0.4.11",
812 |       "eslint-plugin-n8n-nodes-base": "^1.16.0",
813 |       "gulp": "^4.0.0",
814 |       "n8n-core": "1.14.1"
815 |     },
816 |     "dependencies": {
817 |       "@kafkajs/confluent-schema-registry": "1.0.6",
818 |       "@n8n/vm2": "^3.9.20",
819 |       "amqplib": "^0.10.3",
820 |       "aws4": "^1.8.0",
821 |       "basic-auth": "^2.0.1",
822 |       "change-case": "^4.1.1",
823 |       "cheerio": "1.0.0-rc.6",
824 |       "chokidar": "3.5.2",
825 |       "cron": "~1.7.2",
826 |       "csv-parse": "^5.5.0",
827 |       "currency-codes": "^2.1.0",
828 |       "eventsource": "^2.0.2",
829 |       "fast-glob": "^3.2.5",
830 |       "fflate": "^0.7.0",
831 |       "get-system-fonts": "^2.0.2",
832 |       "gm": "^1.25.0",
833 |       "iconv-lite": "^0.6.2",
834 |       "ics": "^2.27.0",
835 |       "imap-simple": "^4.3.0",
836 |       "isbot": "^3.6.13",
837 |       "iso-639-1": "^2.1.3",
838 |       "js-nacl": "^1.4.0",
839 |       "jsonwebtoken": "^9.0.0",
840 |       "kafkajs": "^1.14.0",
841 |       "ldapts": "^4.2.6",
842 |       "lodash": "^4.17.21",
843 |       "lossless-json": "^1.0.4",
844 |       "luxon": "^3.3.0",
845 |       "mailparser": "^3.2.0",
846 |       "minifaker": "^1.34.1",
847 |       "moment": "~2.29.2",
848 |       "moment-timezone": "^0.5.28",
849 |       "mongodb": "^4.17.1",
850 |       "mqtt": "^5.0.2",
851 |       "mssql": "^8.1.2",
852 |       "mysql2": "~2.3.0",
853 |       "nanoid": "^3.3.6",
854 |       "node-html-markdown": "^1.1.3",
855 |       "node-ssh": "^12.0.0",
856 |       "nodemailer": "^6.7.1",
857 |       "otpauth": "^9.1.1",
858 |       "pdfjs-dist": "^2.16.105",
859 |       "pg": "^8.3.0",
860 |       "pg-promise": "^10.5.8",
861 |       "pretty-bytes": "^5.6.0",
862 |       "promise-ftp": "^1.3.5",
863 |       "pyodide": "^0.23.4",
864 |       "redis": "^3.1.1",
865 |       "rfc2047": "^4.0.1",
866 |       "rhea": "^1.0.11",
867 |       "rss-parser": "^3.7.0",
868 |       "semver": "^7.5.4",
869 |       "showdown": "^2.0.3",
870 |       "simple-git": "^3.17.0",
871 |       "snowflake-sdk": "^1.8.0",
872 |       "ssh2-sftp-client": "^7.0.0",
873 |       "tmp-promise": "^3.0.2",
874 |       "typedi": "^0.10.0",
875 |       "uuid": "^8.3.2",
876 |       "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz",
877 |       "xml2js": "^0.5.0",
878 |       "n8n-workflow": "1.14.1"
879 |     },
880 |     "scripts": {
881 |       "clean": "rimraf dist .turbo",
882 |       "dev": "pnpm watch",
883 |       "typecheck": "tsc",
884 |       "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata",
885 |       "build:translations": "gulp build:translations",
886 |       "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types",
887 |       "format": "prettier --write . --ignore-path ../../.prettierignore",
888 |       "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js",
889 |       "lintfix": "eslint . --fix",
890 |       "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"",
891 |       "test": "jest"
892 |     }
893 |   },
894 |   "extraction_time_ms": 5,
895 |   "extracted_at": "2025-06-07T17:49:22.782Z"
896 | }
```
Page 43/59FirstPrevNextLast