diff --git a/README-ENHANCED.md b/README-ENHANCED.md new file mode 100644 index 0000000..d242e89 --- /dev/null +++ b/README-ENHANCED.md @@ -0,0 +1,155 @@ +# n8n-MCP Enhanced Documentation System + +This is the enhanced n8n-MCP integration that provides comprehensive node documentation, including operations, API methods, examples, and rich metadata through the Model Context Protocol (MCP). + +## Overview + +The enhanced system provides: + +- **Rich Node Documentation**: Complete documentation including markdown content, operations, API methods, and code examples +- **Full-Text Search**: SQLite FTS5-powered search across node names, descriptions, and documentation +- **Comprehensive Node Information**: Source code, credentials, examples, templates, and metadata in a single query +- **Automatic Documentation Extraction**: Fetches and parses documentation from the official n8n-docs repository + +## Available MCP Tools + +### 1. `get_node_info` +Get comprehensive information about a specific n8n node. + +**Parameters:** +- `nodeType` (string, required): The node type identifier (e.g., 'n8n-nodes-base.slack') + +**Returns:** +- Complete node information including: + - Basic metadata (name, displayName, description, category) + - Documentation (markdown, URL, title) + - Operations and API methods + - Code examples and templates + - Related resources and required scopes + - Source code (node and credential) + - Example workflow and parameters + +### 2. `search_nodes` +Search n8n nodes with full-text search and advanced filtering. + +**Parameters:** +- `query` (string, optional): Search query for full-text search +- `category` (string, optional): Filter by node category +- `packageName` (string, optional): Filter by package name +- `hasCredentials` (boolean, optional): Filter nodes that require credentials +- `isTrigger` (boolean, optional): Filter trigger nodes only +- `limit` (number, optional): Maximum results to return (default: 20) + +**Returns:** +- Array of matching nodes with summary information + +### 3. `get_node_statistics` +Get statistics about the node documentation database. + +**Returns:** +- Total nodes, packages, and storage statistics +- Nodes with documentation, examples, and credentials +- Package distribution + +### 4. `rebuild_documentation_database` +Rebuild the node documentation database with the latest information. + +**Parameters:** +- `packageFilter` (string, optional): Only rebuild nodes from specific package + +**Returns:** +- Rebuild statistics and status + +## Database Schema + +The system uses a SQLite database with the following main table: + +```sql +CREATE TABLE nodes ( + node_type TEXT UNIQUE NOT NULL, + name TEXT NOT NULL, + display_name TEXT, + description TEXT, + category TEXT, + source_code TEXT NOT NULL, + documentation_markdown TEXT, + operations TEXT, -- JSON array of OperationInfo + api_methods TEXT, -- JSON array of ApiMethodMapping + documentation_examples TEXT, -- JSON array of CodeExample + templates TEXT, -- JSON array of TemplateInfo + related_resources TEXT, -- JSON array of RelatedResource + -- ... additional fields +); +``` + +## Building the Documentation Database + +To build or rebuild the documentation database: + +```bash +# Using npm script +npm run docs:rebuild + +# Or directly +npx ts-node src/scripts/rebuild-database.ts +``` + +This will: +1. Clone/update the n8n-docs repository +2. Extract source code for all available nodes +3. Parse and extract enhanced documentation +4. Generate example workflows +5. Store everything in the SQLite database + +## Usage Example + +```typescript +// Get comprehensive information about the Slack node +const slackInfo = await mcpClient.callTool('get_node_info', { + nodeType: 'n8n-nodes-base.slack' +}); + +// Search for all trigger nodes with credentials +const triggers = await mcpClient.callTool('search_nodes', { + isTrigger: true, + hasCredentials: true +}); + +// Get database statistics +const stats = await mcpClient.callTool('get_node_statistics', {}); +``` + +## Architecture + +The enhanced system consists of: + +1. **NodeDocumentationService**: Main service that manages the SQLite database +2. **EnhancedDocumentationFetcher**: Fetches and parses documentation from n8n-docs +3. **ExampleGenerator**: Generates example workflows and parameters +4. **MCP Server**: Exposes the tools through the Model Context Protocol + +## Development + +```bash +# Install dependencies +npm install + +# Build TypeScript +npm run build + +# Run tests +npm test + +# Start MCP server +npm start +``` + +## Environment Variables + +- `NODE_DB_PATH`: Path to the SQLite database (default: `./data/nodes.db`) +- `N8N_API_URL`: n8n instance URL +- `N8N_API_KEY`: n8n API key for workflow operations + +## License + +Licensed under the Sustainable Use License v1.0 \ No newline at end of file diff --git a/README-v2.md b/README-v2.md deleted file mode 100644 index e2ffb75..0000000 --- a/README-v2.md +++ /dev/null @@ -1,285 +0,0 @@ -# n8n Node Documentation MCP Server - -An MCP (Model Context Protocol) server that provides n8n node documentation, source code, and usage examples to AI assistants. - -## Purpose - -This MCP server serves as a knowledge base for AI assistants (like Claude) to understand and work with n8n nodes. It provides: - -- **Complete node source code** - The actual implementation of each n8n node -- **Official documentation** - Markdown documentation from the n8n-docs repository -- **Usage examples** - Sample workflow JSON showing how to use each node -- **Search capabilities** - Full-text search across node names, descriptions, and documentation - -## Features - -- ๐Ÿ” **Full-text search** - Search nodes by name, description, or documentation content -- ๐Ÿ“š **Complete documentation** - Fetches and indexes official n8n documentation -- ๐Ÿ’ป **Source code access** - Provides full source code for each node -- ๐ŸŽฏ **Usage examples** - Generates example workflows for each node type -- ๐Ÿ”„ **Auto-rebuild** - Rebuilds the entire database on startup or on demand -- โšก **Fast SQLite storage** - All data stored locally for instant access - -## Installation - -### Prerequisites - -- Node.js 18+ -- n8n instance (for node extraction) -- Git (for cloning n8n-docs) - -### Setup - -```bash -# Clone the repository -git clone https://github.com/yourusername/n8n-mcp.git -cd n8n-mcp - -# Install dependencies -npm install - -# Build the project -npm run build - -# Rebuild the database with all nodes -npm run db:rebuild -``` - -## Usage with Claude Desktop - -### 1. Configure Claude Desktop - -Add to your Claude Desktop configuration file: - -**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` -**Windows**: `%APPDATA%\Claude\claude_desktop_config.json` -**Linux**: `~/.config/Claude/claude_desktop_config.json` - -```json -{ - "mcpServers": { - "n8n-nodes": { - "command": "node", - "args": ["/absolute/path/to/n8n-mcp/dist/index-v2.js"], - "env": { - "NODE_DB_PATH": "/absolute/path/to/n8n-mcp/data/nodes.db", - "REBUILD_ON_START": "false" - } - } - } -} -``` - -### 2. Available MCP Tools - -Once configured, you can ask Claude to: - -- **List all n8n nodes**: "Show me all available n8n nodes" -- **Get node information**: "Show me the IF node documentation and code" -- **Search for nodes**: "Find all webhook-related nodes" -- **Get examples**: "Show me an example of using the HTTP Request node" - -### MCP Tools Reference - -#### `list_nodes` -Lists all available n8n nodes with basic information. - -``` -Parameters: -- category (optional): Filter by category -- packageName (optional): Filter by package -- isTrigger (optional): Show only trigger nodes -``` - -#### `get_node_info` -Gets complete information about a specific node including source code, documentation, and examples. - -``` -Parameters: -- nodeType (required): The node type (e.g., "n8n-nodes-base.if", "If", "webhook") -``` - -#### `search_nodes` -Searches for nodes by name, description, or documentation content. - -``` -Parameters: -- query (required): Search query -- category (optional): Filter by category -- hasDocumentation (optional): Only show nodes with docs -- limit (optional): Max results (default: 20) -``` - -#### `get_node_example` -Gets example workflow JSON for a specific node. - -``` -Parameters: -- nodeType (required): The node type -``` - -#### `get_node_source_code` -Gets only the source code of a node. - -``` -Parameters: -- nodeType (required): The node type -- includeCredentials (optional): Include credential definitions -``` - -#### `get_node_documentation` -Gets only the documentation for a node. - -``` -Parameters: -- nodeType (required): The node type -- format (optional): "markdown" or "plain" (default: markdown) -``` - -## Database Management - -### Initial Setup - -```bash -# Build and populate the database -npm run db:rebuild -``` - -### Database Structure - -The SQLite database stores: -- Node source code -- Official documentation from n8n-docs -- Generated usage examples -- Node metadata (category, triggers, webhooks, etc.) - -### Rebuild Process - -The rebuild process: -1. Clears the existing database -2. Fetches latest n8n-docs repository -3. Extracts source code from all n8n nodes -4. Fetches documentation for each node -5. Generates usage examples -6. Stores everything in SQLite with full-text search - -## Example Responses - -### IF Node Example - -When asking for the IF node, the server returns: - -```json -{ - "nodeType": "n8n-nodes-base.if", - "name": "If", - "displayName": "If", - "description": "Route items based on comparison operations", - "sourceCode": "// Full TypeScript source code...", - "documentation": "# If Node\n\nThe If node splits a workflow...", - "exampleWorkflow": { - "nodes": [{ - "parameters": { - "conditions": { - "options": { - "caseSensitive": true, - "leftValue": "", - "typeValidation": "strict", - "version": 2 - }, - "conditions": [{ - "id": "871274c8-dabf-465a-a6cf-655a1786aa55", - "leftValue": "={{ $json }}", - "rightValue": "", - "operator": { - "type": "object", - "operation": "notEmpty", - "singleValue": true - } - }], - "combinator": "and" - }, - "options": {} - }, - "type": "n8n-nodes-base.if", - "typeVersion": 2.2, - "position": [220, 120], - "id": "64b5d49f-ac2e-4456-bfa9-2d6eb9c7a624", - "name": "If" - }], - "connections": { - "If": { - "main": [[], []] - } - } - } -} -``` - -## Development - -### Running in Development Mode - -```bash -# Start with auto-reload -npm run dev - -# Run tests -npm test - -# Type checking -npm run typecheck -``` - -### Environment Variables - -```env -# Database location -NODE_DB_PATH=/path/to/nodes.db - -# Rebuild database on server start -REBUILD_ON_START=true - -# Logging -LOG_LEVEL=debug - -# Documentation repository location (optional) -DOCS_REPO_PATH=/path/to/n8n-docs -``` - -## Architecture - -``` -n8n-mcp/ -โ”œโ”€โ”€ src/ -โ”‚ โ”œโ”€โ”€ mcp/ -โ”‚ โ”‚ โ”œโ”€โ”€ server-v2.ts # MCP server implementation -โ”‚ โ”‚ โ””โ”€โ”€ tools-v2.ts # MCP tool definitions -โ”‚ โ”œโ”€โ”€ services/ -โ”‚ โ”‚ โ””โ”€โ”€ node-documentation-service.ts # Database service -โ”‚ โ”œโ”€โ”€ utils/ -โ”‚ โ”‚ โ”œโ”€โ”€ documentation-fetcher.ts # n8n-docs fetcher -โ”‚ โ”‚ โ”œโ”€โ”€ example-generator.ts # Example generator -โ”‚ โ”‚ โ””โ”€โ”€ node-source-extractor.ts # Source extractor -โ”‚ โ””โ”€โ”€ scripts/ -โ”‚ โ””โ”€โ”€ rebuild-database-v2.ts # Database rebuild -โ””โ”€โ”€ data/ - โ””โ”€โ”€ nodes.db # SQLite database -``` - -## Troubleshooting - -### Database not found -```bash -npm run db:rebuild -``` - -### No documentation for some nodes -Some nodes may not have documentation in the n8n-docs repository. The server will still provide source code and generated examples. - -### Rebuild takes too long -The initial rebuild processes 500+ nodes and fetches documentation. Subsequent starts use the cached database unless `REBUILD_ON_START=true`. - -## License - -ISC \ No newline at end of file diff --git a/data/demo-enhanced.db b/data/demo-enhanced.db new file mode 100644 index 0000000..8cecb8d Binary files /dev/null and b/data/demo-enhanced.db differ diff --git a/data/test-enhanced-docs.db b/data/test-enhanced-docs.db new file mode 100644 index 0000000..c0b8093 Binary files /dev/null and b/data/test-enhanced-docs.db differ diff --git a/data/test-enhanced.db b/data/test-enhanced.db new file mode 100644 index 0000000..8cecb8d Binary files /dev/null and b/data/test-enhanced.db differ diff --git a/data/test-nodes-v2.db b/data/test-nodes-v2.db new file mode 100644 index 0000000..f8e1f02 Binary files /dev/null and b/data/test-nodes-v2.db differ diff --git a/data/test-slack-fix.db b/data/test-slack-fix.db new file mode 100644 index 0000000..6888824 Binary files /dev/null and b/data/test-slack-fix.db differ diff --git a/data/test-slack.db b/data/test-slack.db new file mode 100644 index 0000000..229b384 Binary files /dev/null and b/data/test-slack.db differ diff --git a/docs/ENHANCED_DOCUMENTATION_PARSER.md b/docs/ENHANCED_DOCUMENTATION_PARSER.md new file mode 100644 index 0000000..5bd00e5 --- /dev/null +++ b/docs/ENHANCED_DOCUMENTATION_PARSER.md @@ -0,0 +1,133 @@ +# Enhanced Documentation Parser for n8n-MCP + +## Overview + +We have successfully enhanced the markdown parser in DocumentationFetcher to extract rich, structured content from n8n documentation. This enhancement enables AI agents to have deeper understanding of n8n nodes, their operations, API mappings, and usage patterns. + +## Key Features Implemented + +### 1. Enhanced Documentation Structure + +The `EnhancedDocumentationFetcher` class extracts and structures documentation into: + +```typescript +interface EnhancedNodeDocumentation { + markdown: string; // Raw markdown content + url: string; // Documentation URL + title?: string; // Node title + description?: string; // Node description + operations?: OperationInfo[]; // Structured operations + apiMethods?: ApiMethodMapping[]; // API endpoint mappings + examples?: CodeExample[]; // Code examples + templates?: TemplateInfo[]; // Template references + relatedResources?: RelatedResource[]; // Related docs + requiredScopes?: string[]; // OAuth scopes + metadata?: DocumentationMetadata; // Frontmatter data +} +``` + +### 2. Operations Extraction + +The parser correctly identifies and extracts hierarchical operations: + +- **Resource Level**: e.g., "Channel", "Message", "User" +- **Operation Level**: e.g., "Archive", "Send", "Get" +- **Descriptions**: Detailed operation descriptions + +Example from Slack node: +- Channel.Archive: "a channel" +- Message.Send: "a message" +- User.Get: "information about a user" + +### 3. API Method Mapping + +Extracts mappings between n8n operations and actual API endpoints from markdown tables: + +``` +Channel.Archive โ†’ conversations.archive (https://api.slack.com/methods/conversations.archive) +Message.Send โ†’ chat.postMessage (https://api.slack.com/methods/chat.postMessage) +``` + +### 4. Enhanced Database Schema + +Created a new schema to store the rich documentation: + +- `nodes` table: Extended with documentation fields +- `node_operations`: Stores all operations for each node +- `node_api_methods`: Maps operations to API endpoints +- `node_examples`: Stores code examples +- `node_resources`: Related documentation links +- `node_scopes`: Required OAuth scopes + +### 5. Full-Text Search Enhancement + +The FTS index now includes: +- Documentation title and description +- Operations and their descriptions +- API method names +- Full markdown content + +## Usage Examples + +### Basic Usage + +```javascript +const fetcher = new EnhancedDocumentationFetcher(); +const doc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.slack'); + +// Access structured data +console.log(`Operations: ${doc.operations.length}`); +console.log(`API Methods: ${doc.apiMethods.length}`); +``` + +### With Database Storage + +```javascript +const storage = new EnhancedSQLiteStorageService(); +const nodeInfo = await extractor.extractNodeSource('n8n-nodes-base.slack'); +const storedNode = await storage.storeNodeWithDocumentation(nodeInfo); + +// Access counts +console.log(`Stored ${storedNode.operationCount} operations`); +console.log(`Stored ${storedNode.apiMethodCount} API methods`); +``` + +## Benefits for AI Agents + +1. **Comprehensive Understanding**: AI agents can now understand not just what a node does, but exactly which operations are available and how they map to API endpoints. + +2. **Better Search**: Enhanced FTS allows searching across operations, descriptions, and documentation content. + +3. **Structured Data**: Operations and API methods are stored as structured data, making it easier for AI to reason about node capabilities. + +4. **Rich Context**: Related resources, examples, and metadata provide additional context for better AI responses. + +## Implementation Files + +- `/src/utils/enhanced-documentation-fetcher.ts`: Main parser implementation +- `/src/services/enhanced-sqlite-storage-service.ts`: Database storage with rich schema +- `/src/db/enhanced-schema.sql`: Enhanced database schema +- `/tests/demo-enhanced-documentation.js`: Working demonstration + +## Future Enhancements + +1. **Example Extraction**: Improve code example extraction from documentation +2. **Parameter Parsing**: Extract operation parameters and their types +3. **Credential Requirements**: Parse specific credential field requirements +4. **Version Tracking**: Track documentation versions and changes +5. **Caching**: Implement smart caching for documentation fetches + +## Testing + +Run the demo to see the enhanced parser in action: + +```bash +npm run build +node tests/demo-enhanced-documentation.js +``` + +This will show: +- Extraction of 40+ operations from Slack node +- API method mappings with URLs +- Resource grouping and organization +- Related documentation links \ No newline at end of file diff --git a/docs/SLACK_DOCUMENTATION_FIX.md b/docs/SLACK_DOCUMENTATION_FIX.md new file mode 100644 index 0000000..cb9cae8 --- /dev/null +++ b/docs/SLACK_DOCUMENTATION_FIX.md @@ -0,0 +1,81 @@ +# Slack Documentation Fix Summary + +## Issues Fixed + +### 1. Documentation Fetcher Was Getting Wrong Files +**Problem**: When searching for Slack node documentation, the fetcher was finding credential documentation instead of node documentation. + +**Root Cause**: +- Documentation files in n8n-docs repository are named with full node type (e.g., `n8n-nodes-base.slack.md`) +- The fetcher was searching for just the node name (e.g., `slack.md`) +- This caused it to find `slack.md` in the credentials folder first + +**Fix Applied**: +- Updated `getNodeDocumentation()` to search for full node type first +- Added logic to skip credential documentation files by checking: + - If file path includes `/credentials/` + - If content has "credentials" in title without "node documentation" +- Fixed search order to prioritize correct documentation + +### 2. Node Source Extractor Case Sensitivity +**Problem**: Slack node source code wasn't found because the directory is capitalized (`Slack/`) but search was case-sensitive. + +**Root Cause**: +- n8n node directories use capitalized names (e.g., `Slack/`, `If/`) +- Extractor was searching with lowercase names from node type + +**Fix Applied**: +- Added case variants to try when searching: + - Original case + - Capitalized first letter + - All lowercase + - All uppercase +- Now properly finds nodes regardless of directory naming convention + +### 3. Missing Information in Database +**Problem**: Node definitions weren't being properly parsed from compiled JavaScript. + +**Fix Applied**: +- Improved `parseNodeDefinition()` to extract individual fields using regex +- Added extraction for: + - displayName + - description + - icon + - category/group + - version + - trigger/webhook detection + +## Test Results + +After applying fixes: +- โœ… Slack node source code is correctly extracted +- โœ… Slack node documentation (not credentials) is fetched +- โœ… Documentation URL points to correct page +- โœ… All information is properly stored in database + +## Files Modified + +1. `/src/utils/documentation-fetcher.ts` + - Fixed path searching logic + - Added credential documentation filtering + - Improved search order + +2. `/src/utils/node-source-extractor.ts` + - Added case-insensitive directory searching + - Improved path detection for different node structures + +3. `/src/services/node-documentation-service.ts` + - Enhanced node definition parsing + - Better extraction of metadata from source code + +## Verification + +Run the test to verify the fix: +```bash +node tests/test-slack-fix.js +``` + +This should show: +- Source code found at correct location +- Documentation is node documentation (not credentials) +- All fields properly extracted and stored \ No newline at end of file diff --git a/examples/enhanced-documentation-demo.js b/examples/enhanced-documentation-demo.js new file mode 100644 index 0000000..808b680 --- /dev/null +++ b/examples/enhanced-documentation-demo.js @@ -0,0 +1,107 @@ +#!/usr/bin/env node + +const { DocumentationFetcher } = require('../dist/utils/documentation-fetcher'); + +async function demonstrateEnhancedDocumentation() { + console.log('๐ŸŽฏ Enhanced Documentation Demo\n'); + + const fetcher = new DocumentationFetcher(); + const nodeType = 'n8n-nodes-base.slack'; + + console.log(`Fetching enhanced documentation for: ${nodeType}\n`); + + try { + const doc = await fetcher.getEnhancedNodeDocumentation(nodeType); + + if (!doc) { + console.log('No documentation found for this node.'); + return; + } + + // Display title and description + console.log('๐Ÿ“„ Basic Information:'); + console.log(`Title: ${doc.title || 'N/A'}`); + console.log(`URL: ${doc.url}`); + console.log(`Description: ${doc.description || 'See documentation for details'}\n`); + + // Display operations + if (doc.operations && doc.operations.length > 0) { + console.log('โš™๏ธ Available Operations:'); + // Group by resource + const resourceMap = new Map(); + doc.operations.forEach(op => { + if (!resourceMap.has(op.resource)) { + resourceMap.set(op.resource, []); + } + resourceMap.get(op.resource).push(op); + }); + + resourceMap.forEach((ops, resource) => { + console.log(`\n ${resource}:`); + ops.forEach(op => { + console.log(` - ${op.operation}: ${op.description}`); + }); + }); + console.log(''); + } + + // Display API methods + if (doc.apiMethods && doc.apiMethods.length > 0) { + console.log('๐Ÿ”Œ API Method Mappings (first 5):'); + doc.apiMethods.slice(0, 5).forEach(method => { + console.log(` ${method.resource}.${method.operation} โ†’ ${method.apiMethod}`); + if (method.apiUrl) { + console.log(` Documentation: ${method.apiUrl}`); + } + }); + console.log(` ... and ${Math.max(0, doc.apiMethods.length - 5)} more\n`); + } + + // Display templates + if (doc.templates && doc.templates.length > 0) { + console.log('๐Ÿ“‹ Available Templates:'); + doc.templates.forEach(template => { + console.log(` - ${template.name}`); + if (template.description) { + console.log(` ${template.description}`); + } + }); + console.log(''); + } + + // Display related resources + if (doc.relatedResources && doc.relatedResources.length > 0) { + console.log('๐Ÿ”— Related Resources:'); + doc.relatedResources.forEach(resource => { + console.log(` - ${resource.title} (${resource.type})`); + console.log(` ${resource.url}`); + }); + console.log(''); + } + + // Display required scopes + if (doc.requiredScopes && doc.requiredScopes.length > 0) { + console.log('๐Ÿ” Required Scopes:'); + doc.requiredScopes.forEach(scope => { + console.log(` - ${scope}`); + }); + console.log(''); + } + + // Display summary + console.log('๐Ÿ“Š Summary:'); + console.log(` - Total operations: ${doc.operations?.length || 0}`); + console.log(` - Total API methods: ${doc.apiMethods?.length || 0}`); + console.log(` - Code examples: ${doc.examples?.length || 0}`); + console.log(` - Templates: ${doc.templates?.length || 0}`); + console.log(` - Related resources: ${doc.relatedResources?.length || 0}`); + + } catch (error) { + console.error('Error:', error.message); + } finally { + await fetcher.cleanup(); + } +} + +// Run demo +demonstrateEnhancedDocumentation().catch(console.error); \ No newline at end of file diff --git a/package.json b/package.json index 081dd1a..a42d6e4 100644 --- a/package.json +++ b/package.json @@ -6,18 +6,13 @@ "scripts": { "build": "tsc", "dev": "nodemon --exec ts-node src/index.ts", - "dev:v2": "nodemon --exec ts-node src/index-v2.ts", - "dev:http": "nodemon --exec ts-node src/index-http.ts", "start": "node dist/index.js", - "start:v2": "node dist/index-v2.js", - "start:http": "node dist/index-http.js", "test": "jest", "lint": "tsc --noEmit", "typecheck": "tsc --noEmit", "db:rebuild": "node dist/scripts/rebuild-database.js", - "db:rebuild:v2": "node dist/scripts/rebuild-database-v2.js", "db:init": "node -e \"new (require('./dist/services/sqlite-storage-service').SQLiteStorageService)(); console.log('Database initialized')\"", - "test:v2": "node tests/test-node-documentation-service.js" + "docs:rebuild": "ts-node src/scripts/rebuild-database.ts" }, "repository": { "type": "git", diff --git a/src/db/schema-v2.sql b/src/db/schema-v2.sql deleted file mode 100644 index 8ebb072..0000000 --- a/src/db/schema-v2.sql +++ /dev/null @@ -1,99 +0,0 @@ --- Main nodes table with documentation and examples -CREATE TABLE IF NOT EXISTS nodes ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - node_type TEXT UNIQUE NOT NULL, -- e.g., "n8n-nodes-base.if" - name TEXT NOT NULL, -- e.g., "If" - display_name TEXT, -- e.g., "If" - description TEXT, -- Brief description from node definition - category TEXT, -- e.g., "Core Nodes", "Flow" - subcategory TEXT, -- More specific categorization - icon TEXT, -- Icon identifier/path - - -- Source code - source_code TEXT NOT NULL, -- Full node source code - credential_code TEXT, -- Credential type definitions - code_hash TEXT NOT NULL, -- Hash for change detection - code_length INTEGER NOT NULL, -- Source code size - - -- Documentation - documentation_markdown TEXT, -- Full markdown documentation from n8n-docs - documentation_url TEXT, -- URL to documentation page - - -- Example usage - example_workflow TEXT, -- JSON example workflow using this node - example_parameters TEXT, -- JSON example of node parameters - properties_schema TEXT, -- JSON schema of node properties - - -- Metadata - package_name TEXT NOT NULL, -- e.g., "n8n-nodes-base" - version TEXT, -- Node version - codex_data TEXT, -- Additional codex/metadata JSON - aliases TEXT, -- JSON array of alternative names - - -- Flags - has_credentials INTEGER DEFAULT 0, - is_trigger INTEGER DEFAULT 0, -- Whether it's a trigger node - is_webhook INTEGER DEFAULT 0, -- Whether it's a webhook node - - -- Timestamps - extracted_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP -); - --- Indexes for performance -CREATE INDEX IF NOT EXISTS idx_nodes_package_name ON nodes(package_name); -CREATE INDEX IF NOT EXISTS idx_nodes_category ON nodes(category); -CREATE INDEX IF NOT EXISTS idx_nodes_code_hash ON nodes(code_hash); -CREATE INDEX IF NOT EXISTS idx_nodes_name ON nodes(name); -CREATE INDEX IF NOT EXISTS idx_nodes_is_trigger ON nodes(is_trigger); - --- Full Text Search virtual table for comprehensive search -CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5( - node_type, - name, - display_name, - description, - category, - documentation_markdown, - aliases, - content=nodes, - content_rowid=id -); - --- Triggers to keep FTS in sync -CREATE TRIGGER IF NOT EXISTS nodes_ai AFTER INSERT ON nodes -BEGIN - INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, category, documentation_markdown, aliases) - VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.category, new.documentation_markdown, new.aliases); -END; - -CREATE TRIGGER IF NOT EXISTS nodes_ad AFTER DELETE ON nodes -BEGIN - DELETE FROM nodes_fts WHERE rowid = old.id; -END; - -CREATE TRIGGER IF NOT EXISTS nodes_au AFTER UPDATE ON nodes -BEGIN - DELETE FROM nodes_fts WHERE rowid = old.id; - INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, category, documentation_markdown, aliases) - VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.category, new.documentation_markdown, new.aliases); -END; - --- Table for storing node documentation versions -CREATE TABLE IF NOT EXISTS documentation_sources ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - source TEXT NOT NULL, -- 'n8n-docs-repo', 'inline', 'generated' - commit_hash TEXT, -- Git commit hash if from repo - fetched_at DATETIME DEFAULT CURRENT_TIMESTAMP -); - --- Statistics table -CREATE TABLE IF NOT EXISTS extraction_stats ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - total_nodes INTEGER NOT NULL, - nodes_with_docs INTEGER NOT NULL, - nodes_with_examples INTEGER NOT NULL, - total_code_size INTEGER NOT NULL, - total_docs_size INTEGER NOT NULL, - extraction_date DATETIME DEFAULT CURRENT_TIMESTAMP -); \ No newline at end of file diff --git a/src/db/schema.sql b/src/db/schema.sql index 6eca80a..dc21e74 100644 --- a/src/db/schema.sql +++ b/src/db/schema.sql @@ -1,34 +1,75 @@ --- Main nodes table +-- Enhanced n8n Node Documentation Database Schema +-- This schema stores comprehensive node information including source code, +-- documentation, operations, API methods, examples, and metadata + +-- Main nodes table with rich documentation CREATE TABLE IF NOT EXISTS nodes ( id INTEGER PRIMARY KEY AUTOINCREMENT, node_type TEXT UNIQUE NOT NULL, name TEXT NOT NULL, - package_name TEXT NOT NULL, display_name TEXT, description TEXT, - code_hash TEXT NOT NULL, - code_length INTEGER NOT NULL, - source_location TEXT NOT NULL, + category TEXT, + subcategory TEXT, + icon TEXT, + + -- Source code source_code TEXT NOT NULL, credential_code TEXT, - package_info TEXT, -- JSON + code_hash TEXT NOT NULL, + code_length INTEGER NOT NULL, + + -- Documentation + documentation_markdown TEXT, + documentation_url TEXT, + documentation_title TEXT, + + -- Enhanced documentation fields (stored as JSON) + operations TEXT, + api_methods TEXT, + documentation_examples TEXT, + templates TEXT, + related_resources TEXT, + required_scopes TEXT, + + -- Example usage + example_workflow TEXT, + example_parameters TEXT, + properties_schema TEXT, + + -- Metadata + package_name TEXT NOT NULL, + version TEXT, + codex_data TEXT, + aliases TEXT, + + -- Flags has_credentials INTEGER DEFAULT 0, + is_trigger INTEGER DEFAULT 0, + is_webhook INTEGER DEFAULT 0, + + -- Timestamps extracted_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- Indexes for performance CREATE INDEX IF NOT EXISTS idx_nodes_package_name ON nodes(package_name); +CREATE INDEX IF NOT EXISTS idx_nodes_category ON nodes(category); CREATE INDEX IF NOT EXISTS idx_nodes_code_hash ON nodes(code_hash); CREATE INDEX IF NOT EXISTS idx_nodes_name ON nodes(name); +CREATE INDEX IF NOT EXISTS idx_nodes_is_trigger ON nodes(is_trigger); +CREATE INDEX IF NOT EXISTS idx_nodes_has_credentials ON nodes(has_credentials); --- Full Text Search virtual table for node search +-- Full Text Search table CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5( node_type, name, display_name, description, - package_name, + category, + documentation_markdown, + aliases, content=nodes, content_rowid=id ); @@ -36,8 +77,8 @@ CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5( -- Triggers to keep FTS in sync CREATE TRIGGER IF NOT EXISTS nodes_ai AFTER INSERT ON nodes BEGIN - INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, package_name) - VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.package_name); + INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, category, documentation_markdown, aliases) + VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.category, new.documentation_markdown, new.aliases); END; CREATE TRIGGER IF NOT EXISTS nodes_ad AFTER DELETE ON nodes @@ -48,16 +89,55 @@ END; CREATE TRIGGER IF NOT EXISTS nodes_au AFTER UPDATE ON nodes BEGIN DELETE FROM nodes_fts WHERE rowid = old.id; - INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, package_name) - VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.package_name); + INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, category, documentation_markdown, aliases) + VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.category, new.documentation_markdown, new.aliases); END; --- Statistics table for metadata +-- Documentation sources tracking +CREATE TABLE IF NOT EXISTS documentation_sources ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + source TEXT NOT NULL, + commit_hash TEXT, + fetched_at DATETIME DEFAULT CURRENT_TIMESTAMP +); + +-- Statistics tracking CREATE TABLE IF NOT EXISTS extraction_stats ( id INTEGER PRIMARY KEY AUTOINCREMENT, total_nodes INTEGER NOT NULL, - total_packages INTEGER NOT NULL, + nodes_with_docs INTEGER NOT NULL, + nodes_with_examples INTEGER NOT NULL, total_code_size INTEGER NOT NULL, - nodes_with_credentials INTEGER NOT NULL, + total_docs_size INTEGER NOT NULL, extraction_date DATETIME DEFAULT CURRENT_TIMESTAMP -); \ No newline at end of file +); + +-- Views for common queries +CREATE VIEW IF NOT EXISTS nodes_summary AS +SELECT + node_type, + name, + display_name, + description, + category, + package_name, + CASE WHEN documentation_markdown IS NOT NULL THEN 1 ELSE 0 END as has_documentation, + CASE WHEN documentation_examples IS NOT NULL THEN 1 ELSE 0 END as has_examples, + CASE WHEN operations IS NOT NULL THEN 1 ELSE 0 END as has_operations, + has_credentials, + is_trigger, + is_webhook +FROM nodes; + +CREATE VIEW IF NOT EXISTS package_summary AS +SELECT + package_name, + COUNT(*) as node_count, + SUM(CASE WHEN documentation_markdown IS NOT NULL THEN 1 ELSE 0 END) as nodes_with_docs, + SUM(CASE WHEN documentation_examples IS NOT NULL THEN 1 ELSE 0 END) as nodes_with_examples, + SUM(has_credentials) as nodes_with_credentials, + SUM(is_trigger) as trigger_nodes, + SUM(is_webhook) as webhook_nodes +FROM nodes +GROUP BY package_name +ORDER BY node_count DESC; \ No newline at end of file diff --git a/src/index-http.ts b/src/index-http.ts deleted file mode 100644 index e3bd08d..0000000 --- a/src/index-http.ts +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env node -/** - * n8n Documentation MCP Server - * Copyright (c) 2025 n8n-mcp contributors - * - * This software is licensed under the Sustainable Use License. - * See the LICENSE file in the root directory of this source tree. - */ - -import dotenv from 'dotenv'; -import { N8NDocumentationRemoteServer } from './mcp/remote-server'; -import { logger } from './utils/logger'; -import * as path from 'path'; - -// Load environment variables -dotenv.config(); - -async function main() { - try { - // Get configuration from environment - const config = { - port: parseInt(process.env.MCP_PORT || '3000', 10), - host: process.env.MCP_HOST || '0.0.0.0', - domain: process.env.MCP_DOMAIN || 'localhost', - authToken: process.env.MCP_AUTH_TOKEN, - cors: process.env.MCP_CORS === 'true', - tlsCert: process.env.MCP_TLS_CERT, - tlsKey: process.env.MCP_TLS_KEY, - }; - - // Validate required configuration - if (!config.domain || config.domain === 'localhost') { - logger.warn('MCP_DOMAIN not set or set to localhost. Using default: localhost'); - logger.warn('For production, set MCP_DOMAIN to your actual domain (e.g., n8ndocumentation.aiservices.pl)'); - } - - if (!config.authToken) { - logger.warn('MCP_AUTH_TOKEN not set. Server will run without authentication.'); - logger.warn('For production, set MCP_AUTH_TOKEN to a secure value.'); - } - - // Set database path if not already set - if (!process.env.NODE_DB_PATH) { - process.env.NODE_DB_PATH = path.join(__dirname, '../data/nodes-v2.db'); - } - - logger.info('Starting n8n Documentation MCP Remote Server'); - logger.info('Configuration:', { - port: config.port, - host: config.host, - domain: config.domain, - cors: config.cors, - authEnabled: !!config.authToken, - tlsEnabled: !!(config.tlsCert && config.tlsKey), - databasePath: process.env.NODE_DB_PATH, - }); - - const server = new N8NDocumentationRemoteServer(config); - - // Start the server - await server.start(); - - // Handle graceful shutdown - const shutdown = async () => { - logger.info('Received shutdown signal'); - await server.stop(); - process.exit(0); - }; - - process.on('SIGINT', shutdown); - process.on('SIGTERM', shutdown); - - logger.info('Server is ready to accept connections'); - logger.info(`Claude Desktop configuration:`); - logger.info(JSON.stringify({ - "mcpServers": { - "n8n-nodes-remote": { - "command": "curl", - "args": [ - "-X", "POST", - "-H", "Content-Type: application/json", - "-H", `Authorization: Bearer ${config.authToken || 'YOUR_AUTH_TOKEN'}`, - "-d", "@-", - `https://${config.domain}/mcp` - ], - "env": {} - } - } - }, null, 2)); - - } catch (error) { - logger.error('Failed to start server:', error); - process.exit(1); - } -} - -// Run the server -main().catch((error) => { - logger.error('Unhandled error:', error); - process.exit(1); -}); \ No newline at end of file diff --git a/src/index-v2.ts b/src/index-v2.ts deleted file mode 100644 index 294a2d7..0000000 --- a/src/index-v2.ts +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env node -/** - * n8n Documentation MCP Server - * Copyright (c) 2025 n8n-mcp contributors - * - * This software is licensed under the Sustainable Use License. - * See the LICENSE file in the root directory of this source tree. - */ - -import dotenv from 'dotenv'; -import { N8NDocumentationMCPServer } from './mcp/server-v2'; -import { MCPServerConfig } from './types'; -import { logger } from './utils/logger'; -import { NodeDocumentationService } from './services/node-documentation-service'; - -// Load environment variables -dotenv.config(); - -async function main() { - const config: MCPServerConfig = { - port: parseInt(process.env.MCP_SERVER_PORT || '3000', 10), - host: process.env.MCP_SERVER_HOST || 'localhost', - authToken: process.env.MCP_AUTH_TOKEN, - }; - - // Check if we should rebuild the database on startup - const rebuildOnStart = process.env.REBUILD_ON_START === 'true'; - - if (rebuildOnStart) { - logger.info('Rebuilding database on startup...'); - const service = new NodeDocumentationService(); - try { - const stats = await service.rebuildDatabase(); - logger.info('Database rebuild complete:', stats); - } catch (error) { - logger.error('Failed to rebuild database:', error); - process.exit(1); - } finally { - service.close(); - } - } - - const server = new N8NDocumentationMCPServer(config); - - try { - await server.start(); - } catch (error) { - logger.error('Failed to start MCP server:', error); - process.exit(1); - } -} - -// Handle graceful shutdown -process.on('SIGINT', () => { - logger.info('Received SIGINT, shutting down MCP server...'); - process.exit(0); -}); - -process.on('SIGTERM', () => { - logger.info('Received SIGTERM, shutting down MCP server...'); - process.exit(0); -}); - -main().catch((error) => { - logger.error('Unhandled error:', error); - process.exit(1); -}); \ No newline at end of file diff --git a/src/mcp/http-server.ts b/src/mcp/http-server.ts deleted file mode 100644 index 870af64..0000000 --- a/src/mcp/http-server.ts +++ /dev/null @@ -1,592 +0,0 @@ -import express from 'express'; -import { createServer } from 'http'; -import { WebSocketServer, WebSocket } from 'ws'; -import { Server } from '@modelcontextprotocol/sdk/server/index.js'; -// WebSocketServerTransport is not available in the SDK, we'll implement a custom solution -import { - CallToolRequestSchema, - ErrorCode, - ListResourcesRequestSchema, - ListToolsRequestSchema, - McpError, - ReadResourceRequestSchema, -} from '@modelcontextprotocol/sdk/types.js'; -import { NodeDocumentationService } from '../services/node-documentation-service'; -import { nodeDocumentationTools } from './tools-v2'; -import { logger } from '../utils/logger'; -import { authenticateRequest } from '../utils/auth-middleware'; -import * as crypto from 'crypto'; - -interface HttpServerConfig { - port: number; - host: string; - domain: string; - authToken?: string; - cors?: boolean; - tlsCert?: string; - tlsKey?: string; -} - -/** - * HTTP/WebSocket MCP Server for remote access - */ -export class N8NDocumentationHttpServer { - private app: express.Application; - private server: any; - private wss!: WebSocketServer; - private nodeService: NodeDocumentationService; - private config: HttpServerConfig; - private activeSessions: Map = new Map(); - - constructor(config: HttpServerConfig) { - this.config = config; - this.app = express(); - this.nodeService = new NodeDocumentationService(); - - this.setupMiddleware(); - this.setupRoutes(); - this.setupWebSocket(); - } - - private setupMiddleware(): void { - // JSON parsing - this.app.use(express.json()); - - // CORS if enabled - if (this.config.cors) { - this.app.use((req, res, next): void => { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); - res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization'); - if (req.method === 'OPTIONS') { - res.sendStatus(200); - return; - } - next(); - }); - } - - // Request logging - this.app.use((req, res, next): void => { - logger.info(`${req.method} ${req.path}`, { - ip: req.ip, - userAgent: req.get('user-agent') - }); - next(); - }); - } - - private setupRoutes(): void { - // Health check endpoint - this.app.get('/health', (req, res) => { - res.json({ - status: 'ok', - service: 'n8n-documentation-mcp', - version: '2.0.0', - uptime: process.uptime() - }); - }); - - // MCP info endpoint - this.app.get('/mcp', (req, res) => { - res.json({ - name: 'n8n-node-documentation', - version: '2.0.0', - description: 'MCP server providing n8n node documentation and source code', - transport: 'websocket', - endpoint: `wss://${this.config.domain}/mcp/websocket`, - authentication: 'bearer-token', - tools: nodeDocumentationTools.map(t => ({ - name: t.name, - description: t.description - })) - }); - }); - - // Database stats endpoint (public) - this.app.get('/stats', async (req, res) => { - try { - const stats = this.nodeService.getStatistics(); - res.json(stats); - } catch (error) { - logger.error('Failed to get statistics:', error); - res.status(500).json({ error: 'Failed to retrieve statistics' }); - } - }); - - // Rebuild endpoint (requires auth) - this.app.post('/rebuild', authenticateRequest(this.config.authToken), async (req, res) => { - try { - logger.info('Database rebuild requested'); - const stats = await this.nodeService.rebuildDatabase(); - res.json({ - message: 'Database rebuild complete', - stats - }); - } catch (error) { - logger.error('Rebuild failed:', error); - res.status(500).json({ error: 'Rebuild failed' }); - } - }); - } - - private setupWebSocket(): void { - // Create HTTP server - this.server = createServer(this.app); - - // Create WebSocket server - this.wss = new WebSocketServer({ - server: this.server, - path: '/mcp/websocket' - }); - - this.wss.on('connection', async (ws: WebSocket, req: any) => { - const sessionId = crypto.randomUUID(); - logger.info(`WebSocket connection established: ${sessionId}`); - - // Authenticate WebSocket connection - const authHeader = req.headers.authorization; - if (this.config.authToken && authHeader !== `Bearer ${this.config.authToken}`) { - logger.warn(`Unauthorized WebSocket connection attempt: ${sessionId}`); - ws.close(1008, 'Unauthorized'); - return; - } - - try { - // Create MCP server instance for this connection - const mcpServer = new Server( - { - name: 'n8n-node-documentation', - version: '2.0.0', - }, - { - capabilities: { - tools: {}, - resources: {}, - }, - } - ); - - // Setup MCP handlers - this.setupMcpHandlers(mcpServer); - - // WebSocket transport not available in SDK - implement JSON-RPC over WebSocket - // For now, we'll handle messages directly - ws.on('message', async (data: Buffer) => { - try { - const request = JSON.parse(data.toString()); - // Process request through MCP server handlers - // This would need custom implementation - logger.warn('WebSocket MCP not fully implemented yet'); - ws.send(JSON.stringify({ - jsonrpc: '2.0', - id: request.id, - error: { - code: -32601, - message: 'WebSocket transport not implemented' - } - })); - } catch (error) { - logger.error('WebSocket message error:', error); - } - }); - - this.activeSessions.set(sessionId, { mcpServer, ws }); - logger.info(`MCP session established: ${sessionId}`); - - // Handle disconnect - ws.on('close', () => { - logger.info(`WebSocket connection closed: ${sessionId}`); - this.activeSessions.delete(sessionId); - }); - - } catch (error) { - logger.error(`Failed to establish MCP session: ${sessionId}`, error); - ws.close(1011, 'Server error'); - } - }); - } - - private setupMcpHandlers(server: Server): void { - // List available tools - server.setRequestHandler(ListToolsRequestSchema, async () => ({ - tools: nodeDocumentationTools, - })); - - // List available resources - server.setRequestHandler(ListResourcesRequestSchema, async () => ({ - resources: [ - { - uri: 'nodes://list', - name: 'Available n8n Nodes', - description: 'List of all available n8n nodes', - mimeType: 'application/json', - }, - { - uri: 'nodes://statistics', - name: 'Database Statistics', - description: 'Statistics about the node documentation database', - mimeType: 'application/json', - }, - ], - })); - - // Read resources - server.setRequestHandler(ReadResourceRequestSchema, async (request) => { - const { uri } = request.params; - - try { - if (uri === 'nodes://list') { - const nodes = await this.nodeService.listNodes(); - return { - contents: [ - { - uri, - mimeType: 'application/json', - text: JSON.stringify(nodes.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - })), null, 2), - }, - ], - }; - } - - if (uri === 'nodes://statistics') { - const stats = this.nodeService.getStatistics(); - return { - contents: [ - { - uri, - mimeType: 'application/json', - text: JSON.stringify(stats, null, 2), - }, - ], - }; - } - - throw new McpError(ErrorCode.InvalidRequest, `Unknown resource: ${uri}`); - } catch (error) { - logger.error('Resource read error:', error); - throw error instanceof McpError ? error : new McpError( - ErrorCode.InternalError, - `Failed to read resource: ${error instanceof Error ? error.message : String(error)}` - ); - } - }); - - // Handle tool calls - server.setRequestHandler(CallToolRequestSchema, async (request) => { - const { name, arguments: args } = request.params; - - try { - switch (name) { - case 'list_nodes': - return await this.handleListNodes(args); - - case 'get_node_info': - return await this.handleGetNodeInfo(args); - - case 'search_nodes': - return await this.handleSearchNodes(args); - - case 'get_node_example': - return await this.handleGetNodeExample(args); - - case 'get_node_source_code': - return await this.handleGetNodeSourceCode(args); - - case 'get_node_documentation': - return await this.handleGetNodeDocumentation(args); - - case 'rebuild_database': - return await this.handleRebuildDatabase(args); - - case 'get_database_statistics': - return await this.handleGetStatistics(); - - default: - throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); - } - } catch (error) { - logger.error(`Tool execution error (${name}):`, error); - throw error instanceof McpError ? error : new McpError( - ErrorCode.InternalError, - `Tool execution failed: ${error instanceof Error ? error.message : String(error)}` - ); - } - }); - } - - // Tool handlers (copied from server-v2.ts) - private async handleListNodes(args: any): Promise { - const nodes = await this.nodeService.listNodes(); - - let filtered = nodes; - - if (args.category) { - filtered = filtered.filter(n => n.category === args.category); - } - - if (args.packageName) { - filtered = filtered.filter(n => n.packageName === args.packageName); - } - - if (args.isTrigger !== undefined) { - filtered = filtered.filter(n => n.isTrigger === args.isTrigger); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(filtered.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - packageName: n.packageName, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - isTrigger: n.isTrigger, - isWebhook: n.isWebhook, - })), null, 2), - }, - ], - }; - } - - private async handleGetNodeInfo(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify({ - nodeType: nodeInfo.nodeType, - name: nodeInfo.name, - displayName: nodeInfo.displayName, - description: nodeInfo.description, - category: nodeInfo.category, - packageName: nodeInfo.packageName, - sourceCode: nodeInfo.sourceCode, - credentialCode: nodeInfo.credentialCode, - documentation: nodeInfo.documentation, - documentationUrl: nodeInfo.documentationUrl, - exampleWorkflow: nodeInfo.exampleWorkflow, - exampleParameters: nodeInfo.exampleParameters, - propertiesSchema: nodeInfo.propertiesSchema, - isTrigger: nodeInfo.isTrigger, - isWebhook: nodeInfo.isWebhook, - }, null, 2), - }, - ], - }; - } - - private async handleSearchNodes(args: any): Promise { - if (!args.query) { - throw new McpError(ErrorCode.InvalidParams, 'query is required'); - } - - const results = await this.nodeService.searchNodes({ - query: args.query, - category: args.category, - limit: args.limit || 20, - }); - - let filtered = results; - if (args.hasDocumentation) { - filtered = filtered.filter(n => !!n.documentation); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(filtered.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - })), null, 2), - }, - ], - }; - } - - private async handleGetNodeExample(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - if (!nodeInfo.exampleWorkflow) { - return { - content: [ - { - type: 'text', - text: `No example available for node: ${args.nodeType}`, - }, - ], - }; - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(nodeInfo.exampleWorkflow, null, 2), - }, - ], - }; - } - - private async handleGetNodeSourceCode(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - const response: any = { - nodeType: nodeInfo.nodeType, - sourceCode: nodeInfo.sourceCode, - }; - - if (args.includeCredentials && nodeInfo.credentialCode) { - response.credentialCode = nodeInfo.credentialCode; - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(response, null, 2), - }, - ], - }; - } - - private async handleGetNodeDocumentation(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - if (!nodeInfo.documentation) { - return { - content: [ - { - type: 'text', - text: `No documentation available for node: ${args.nodeType}`, - }, - ], - }; - } - - const content = args.format === 'plain' - ? nodeInfo.documentation.replace(/[#*`]/g, '') - : nodeInfo.documentation; - - return { - content: [ - { - type: 'text', - text: content, - }, - ], - }; - } - - private async handleRebuildDatabase(args: any): Promise { - logger.info('Database rebuild requested via MCP'); - - const stats = await this.nodeService.rebuildDatabase(); - - return { - content: [ - { - type: 'text', - text: JSON.stringify({ - message: 'Database rebuild complete', - stats, - }, null, 2), - }, - ], - }; - } - - private async handleGetStatistics(): Promise { - const stats = this.nodeService.getStatistics(); - - return { - content: [ - { - type: 'text', - text: JSON.stringify(stats, null, 2), - }, - ], - }; - } - - async start(): Promise { - return new Promise((resolve) => { - this.server.listen(this.config.port, this.config.host, () => { - logger.info(`n8n Documentation MCP HTTP server started`); - logger.info(`HTTP endpoint: http://${this.config.host}:${this.config.port}`); - logger.info(`WebSocket endpoint: ws://${this.config.host}:${this.config.port}/mcp/websocket`); - logger.info(`Domain: ${this.config.domain}`); - resolve(); - }); - }); - } - - async stop(): Promise { - logger.info('Stopping n8n Documentation MCP HTTP server...'); - - // Close all WebSocket connections - this.wss.clients.forEach((ws: WebSocket) => ws.close()); - - // Close HTTP server - return new Promise((resolve) => { - this.server.close(() => { - this.nodeService.close(); - logger.info('Server stopped'); - resolve(); - }); - }); - } -} \ No newline at end of file diff --git a/src/mcp/remote-server.ts b/src/mcp/remote-server.ts deleted file mode 100644 index bcd5fb0..0000000 --- a/src/mcp/remote-server.ts +++ /dev/null @@ -1,608 +0,0 @@ -import express from 'express'; -import { createServer as createHttpServer } from 'http'; -import { createServer as createHttpsServer } from 'https'; -import { - ErrorCode, - McpError, -} from '@modelcontextprotocol/sdk/types.js'; -import { NodeDocumentationService } from '../services/node-documentation-service'; -import { nodeDocumentationTools } from './tools-v2'; -import { logger } from '../utils/logger'; -import { authenticateRequest } from '../utils/auth-middleware'; -import * as fs from 'fs'; - -interface RemoteServerConfig { - port: number; - host: string; - domain: string; - authToken?: string; - cors?: boolean; - tlsCert?: string; - tlsKey?: string; -} - -/** - * Remote MCP Server using Streamable HTTP transport - * Based on MCP's modern approach for remote servers - */ -export class N8NDocumentationRemoteServer { - private app: express.Application; - private server: any; - private nodeService: NodeDocumentationService; - private config: RemoteServerConfig; - - constructor(config: RemoteServerConfig) { - this.config = config; - this.app = express(); - this.nodeService = new NodeDocumentationService(); - - this.setupMiddleware(); - this.setupRoutes(); - } - - private setupMiddleware(): void { - // Parse JSON bodies with larger limit for MCP messages - this.app.use(express.json({ limit: '10mb' })); - - // CORS if enabled - if (this.config.cors) { - this.app.use((req, res, next): void => { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); - res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Request-ID'); - if (req.method === 'OPTIONS') { - res.sendStatus(200); - return; - } - next(); - }); - } - - // Request logging - this.app.use((req, res, next): void => { - logger.info(`${req.method} ${req.path}`, { - ip: req.ip, - userAgent: req.get('user-agent'), - requestId: req.get('X-Request-ID') - }); - next(); - }); - } - - private setupRoutes(): void { - // Health check endpoint - this.app.get('/health', (req, res) => { - res.json({ - status: 'ok', - service: 'n8n-documentation-mcp', - version: '2.0.0', - uptime: process.uptime(), - domain: this.config.domain - }); - }); - - // MCP info endpoint - provides server capabilities - this.app.get('/', (req, res) => { - res.json({ - name: 'n8n-node-documentation', - version: '2.0.0', - description: 'MCP server providing n8n node documentation and source code', - transport: 'http', - endpoint: `https://${this.config.domain}/mcp`, - authentication: this.config.authToken ? 'bearer-token' : 'none', - capabilities: { - tools: nodeDocumentationTools.map(t => ({ - name: t.name, - description: t.description - })), - resources: [ - { - uri: 'nodes://list', - name: 'Available n8n Nodes', - description: 'List of all available n8n nodes', - }, - { - uri: 'nodes://statistics', - name: 'Database Statistics', - description: 'Statistics about the node documentation database', - }, - ] - } - }); - }); - - // Database stats endpoint (public) - this.app.get('/stats', async (req, res) => { - try { - const stats = this.nodeService.getStatistics(); - res.json(stats); - } catch (error) { - logger.error('Failed to get statistics:', error); - res.status(500).json({ error: 'Failed to retrieve statistics' }); - } - }); - - // Rebuild endpoint (requires auth) - this.app.post('/rebuild', authenticateRequest(this.config.authToken), async (req, res) => { - try { - logger.info('Database rebuild requested'); - const stats = await this.nodeService.rebuildDatabase(); - res.json({ - message: 'Database rebuild complete', - stats - }); - } catch (error) { - logger.error('Rebuild failed:', error); - res.status(500).json({ error: 'Rebuild failed' }); - } - }); - - // Main MCP endpoint - handles all MCP protocol messages - this.app.post('/mcp', authenticateRequest(this.config.authToken), async (req, res) => { - const requestId = req.get('X-Request-ID') || 'unknown'; - - try { - // Process the JSON-RPC request directly - const response = await this.handleJsonRpcRequest(req.body); - res.json(response); - } catch (error) { - logger.error(`MCP request failed (${requestId}):`, error); - - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: '2.0', - id: req.body?.id || null, - error: { - code: -32603, - message: 'Internal error', - data: error instanceof Error ? error.message : String(error) - } - }); - } - } - }); - } - - private async handleJsonRpcRequest(request: any): Promise { - const { jsonrpc, method, params, id } = request; - - if (jsonrpc !== '2.0') { - return { - jsonrpc: '2.0', - id: id || null, - error: { - code: -32600, - message: 'Invalid Request', - data: 'JSON-RPC version must be "2.0"' - } - }; - } - - try { - let result; - - switch (method) { - case 'tools/list': - result = await this.handleListTools(); - break; - - case 'resources/list': - result = await this.handleListResources(); - break; - - case 'resources/read': - result = await this.handleReadResource(params); - break; - - case 'tools/call': - result = await this.handleToolCall(params); - break; - - default: - return { - jsonrpc: '2.0', - id: id || null, - error: { - code: -32601, - message: 'Method not found', - data: `Unknown method: ${method}` - } - }; - } - - return { - jsonrpc: '2.0', - id: id || null, - result - }; - } catch (error) { - logger.error(`Error handling method ${method}:`, error); - - const errorCode = error instanceof McpError ? error.code : -32603; - const errorMessage = error instanceof Error ? error.message : 'Internal error'; - - return { - jsonrpc: '2.0', - id: id || null, - error: { - code: errorCode, - message: errorMessage, - data: error instanceof McpError ? error.data : undefined - } - }; - } - } - - private async handleListTools(): Promise { - return { - tools: nodeDocumentationTools, - }; - } - - private async handleListResources(): Promise { - return { - resources: [ - { - uri: 'nodes://list', - name: 'Available n8n Nodes', - description: 'List of all available n8n nodes', - mimeType: 'application/json', - }, - { - uri: 'nodes://statistics', - name: 'Database Statistics', - description: 'Statistics about the node documentation database', - mimeType: 'application/json', - }, - ], - }; - } - - private async handleReadResource(params: any): Promise { - const { uri } = params; - - if (uri === 'nodes://list') { - const nodes = await this.nodeService.listNodes(); - return { - contents: [ - { - uri, - mimeType: 'application/json', - text: JSON.stringify(nodes.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - })), null, 2), - }, - ], - }; - } - - if (uri === 'nodes://statistics') { - const stats = this.nodeService.getStatistics(); - return { - contents: [ - { - uri, - mimeType: 'application/json', - text: JSON.stringify(stats, null, 2), - }, - ], - }; - } - - throw new McpError(ErrorCode.InvalidRequest, `Unknown resource: ${uri}`); - } - - private async handleToolCall(params: any): Promise { - const { name, arguments: args } = params; - - switch (name) { - case 'list_nodes': - return await this.handleListNodes(args); - - case 'get_node_info': - return await this.handleGetNodeInfo(args); - - case 'search_nodes': - return await this.handleSearchNodes(args); - - case 'get_node_example': - return await this.handleGetNodeExample(args); - - case 'get_node_source_code': - return await this.handleGetNodeSourceCode(args); - - case 'get_node_documentation': - return await this.handleGetNodeDocumentation(args); - - case 'rebuild_database': - return await this.handleRebuildDatabase(args); - - case 'get_database_statistics': - return await this.handleGetStatistics(); - - default: - throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); - } - } - - // Tool handlers - private async handleListNodes(args: any): Promise { - const nodes = await this.nodeService.listNodes(); - - let filtered = nodes; - - if (args.category) { - filtered = filtered.filter(n => n.category === args.category); - } - - if (args.packageName) { - filtered = filtered.filter(n => n.packageName === args.packageName); - } - - if (args.isTrigger !== undefined) { - filtered = filtered.filter(n => n.isTrigger === args.isTrigger); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(filtered.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - packageName: n.packageName, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - isTrigger: n.isTrigger, - isWebhook: n.isWebhook, - })), null, 2), - }, - ], - }; - } - - private async handleGetNodeInfo(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify({ - nodeType: nodeInfo.nodeType, - name: nodeInfo.name, - displayName: nodeInfo.displayName, - description: nodeInfo.description, - category: nodeInfo.category, - packageName: nodeInfo.packageName, - sourceCode: nodeInfo.sourceCode, - credentialCode: nodeInfo.credentialCode, - documentation: nodeInfo.documentation, - documentationUrl: nodeInfo.documentationUrl, - exampleWorkflow: nodeInfo.exampleWorkflow, - exampleParameters: nodeInfo.exampleParameters, - propertiesSchema: nodeInfo.propertiesSchema, - isTrigger: nodeInfo.isTrigger, - isWebhook: nodeInfo.isWebhook, - }, null, 2), - }, - ], - }; - } - - private async handleSearchNodes(args: any): Promise { - if (!args.query) { - throw new McpError(ErrorCode.InvalidParams, 'query is required'); - } - - const results = await this.nodeService.searchNodes({ - query: args.query, - category: args.category, - limit: args.limit || 20, - }); - - let filtered = results; - if (args.hasDocumentation) { - filtered = filtered.filter(n => !!n.documentation); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(filtered.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - })), null, 2), - }, - ], - }; - } - - private async handleGetNodeExample(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - if (!nodeInfo.exampleWorkflow) { - return { - content: [ - { - type: 'text', - text: `No example available for node: ${args.nodeType}`, - }, - ], - }; - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(nodeInfo.exampleWorkflow, null, 2), - }, - ], - }; - } - - private async handleGetNodeSourceCode(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - const response: any = { - nodeType: nodeInfo.nodeType, - sourceCode: nodeInfo.sourceCode, - }; - - if (args.includeCredentials && nodeInfo.credentialCode) { - response.credentialCode = nodeInfo.credentialCode; - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(response, null, 2), - }, - ], - }; - } - - private async handleGetNodeDocumentation(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - if (!nodeInfo.documentation) { - return { - content: [ - { - type: 'text', - text: `No documentation available for node: ${args.nodeType}`, - }, - ], - }; - } - - const content = args.format === 'plain' - ? nodeInfo.documentation.replace(/[#*`]/g, '') - : nodeInfo.documentation; - - return { - content: [ - { - type: 'text', - text: content, - }, - ], - }; - } - - private async handleRebuildDatabase(args: any): Promise { - logger.info('Database rebuild requested via MCP'); - - const stats = await this.nodeService.rebuildDatabase(); - - return { - content: [ - { - type: 'text', - text: JSON.stringify({ - message: 'Database rebuild complete', - stats, - }, null, 2), - }, - ], - }; - } - - private async handleGetStatistics(): Promise { - const stats = this.nodeService.getStatistics(); - - return { - content: [ - { - type: 'text', - text: JSON.stringify(stats, null, 2), - }, - ], - }; - } - - async start(): Promise { - // Create server (HTTP or HTTPS) - if (this.config.tlsCert && this.config.tlsKey) { - const tlsOptions = { - cert: fs.readFileSync(this.config.tlsCert), - key: fs.readFileSync(this.config.tlsKey), - }; - this.server = createHttpsServer(tlsOptions, this.app); - } else { - this.server = createHttpServer(this.app); - } - - return new Promise((resolve) => { - this.server.listen(this.config.port, this.config.host, () => { - const protocol = this.config.tlsCert ? 'https' : 'http'; - logger.info(`n8n Documentation MCP Remote server started`); - logger.info(`Endpoint: ${protocol}://${this.config.host}:${this.config.port}`); - logger.info(`Domain: ${this.config.domain}`); - logger.info(`MCP endpoint: ${protocol}://${this.config.domain}/mcp`); - resolve(); - }); - }); - } - - async stop(): Promise { - logger.info('Stopping n8n Documentation MCP Remote server...'); - - return new Promise((resolve) => { - this.server.close(() => { - this.nodeService.close(); - logger.info('Server stopped'); - resolve(); - }); - }); - } -} \ No newline at end of file diff --git a/src/mcp/server-v2.ts b/src/mcp/server-v2.ts deleted file mode 100644 index dbe1b79..0000000 --- a/src/mcp/server-v2.ts +++ /dev/null @@ -1,435 +0,0 @@ -import { Server } from '@modelcontextprotocol/sdk/server/index.js'; -import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; -import { - CallToolRequestSchema, - ErrorCode, - ListResourcesRequestSchema, - ListToolsRequestSchema, - McpError, - ReadResourceRequestSchema, -} from '@modelcontextprotocol/sdk/types.js'; -import { NodeDocumentationService } from '../services/node-documentation-service'; -import { nodeDocumentationTools } from './tools-v2'; -import { logger } from '../utils/logger'; -import { MCPServerConfig } from '../types'; - -/** - * MCP Server focused on serving n8n node documentation and code - */ -export class N8NDocumentationMCPServer { - private server: Server; - private nodeService: NodeDocumentationService; - - constructor(config: MCPServerConfig) { - logger.info('Initializing n8n Documentation MCP server', { config }); - - this.server = new Server( - { - name: 'n8n-node-documentation', - version: '2.0.0', - }, - { - capabilities: { - tools: {}, - resources: {}, - }, - } - ); - - this.nodeService = new NodeDocumentationService(); - this.setupHandlers(); - } - - private setupHandlers(): void { - // List available tools - this.server.setRequestHandler(ListToolsRequestSchema, async () => ({ - tools: nodeDocumentationTools, - })); - - // List available resources - this.server.setRequestHandler(ListResourcesRequestSchema, async () => ({ - resources: [ - { - uri: 'nodes://list', - name: 'Available n8n Nodes', - description: 'List of all available n8n nodes', - mimeType: 'application/json', - }, - { - uri: 'nodes://statistics', - name: 'Database Statistics', - description: 'Statistics about the node documentation database', - mimeType: 'application/json', - }, - ], - })); - - // Read resources - this.server.setRequestHandler(ReadResourceRequestSchema, async (request) => { - const { uri } = request.params; - - try { - if (uri === 'nodes://list') { - const nodes = await this.nodeService.listNodes(); - return { - contents: [ - { - uri, - mimeType: 'application/json', - text: JSON.stringify(nodes.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - })), null, 2), - }, - ], - }; - } - - if (uri === 'nodes://statistics') { - const stats = this.nodeService.getStatistics(); - return { - contents: [ - { - uri, - mimeType: 'application/json', - text: JSON.stringify(stats, null, 2), - }, - ], - }; - } - - // Handle specific node URIs like nodes://info/n8n-nodes-base.if - const nodeMatch = uri.match(/^nodes:\/\/info\/(.+)$/); - if (nodeMatch) { - const nodeType = nodeMatch[1]; - const nodeInfo = await this.nodeService.getNodeInfo(nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${nodeType}`); - } - - return { - contents: [ - { - uri, - mimeType: 'application/json', - text: JSON.stringify(nodeInfo, null, 2), - }, - ], - }; - } - - throw new McpError(ErrorCode.InvalidRequest, `Unknown resource: ${uri}`); - } catch (error) { - logger.error('Resource read error:', error); - throw error instanceof McpError ? error : new McpError( - ErrorCode.InternalError, - `Failed to read resource: ${error instanceof Error ? error.message : String(error)}` - ); - } - }); - - // Handle tool calls - this.server.setRequestHandler(CallToolRequestSchema, async (request) => { - const { name, arguments: args } = request.params; - - try { - switch (name) { - case 'list_nodes': - return await this.handleListNodes(args); - - case 'get_node_info': - return await this.handleGetNodeInfo(args); - - case 'search_nodes': - return await this.handleSearchNodes(args); - - case 'get_node_example': - return await this.handleGetNodeExample(args); - - case 'get_node_source_code': - return await this.handleGetNodeSourceCode(args); - - case 'get_node_documentation': - return await this.handleGetNodeDocumentation(args); - - case 'rebuild_database': - return await this.handleRebuildDatabase(args); - - case 'get_database_statistics': - return await this.handleGetStatistics(); - - default: - throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); - } - } catch (error) { - logger.error(`Tool execution error (${name}):`, error); - throw error instanceof McpError ? error : new McpError( - ErrorCode.InternalError, - `Tool execution failed: ${error instanceof Error ? error.message : String(error)}` - ); - } - }); - } - - private async handleListNodes(args: any): Promise { - const nodes = await this.nodeService.listNodes(); - - // Apply filters - let filtered = nodes; - - if (args.category) { - filtered = filtered.filter(n => n.category === args.category); - } - - if (args.packageName) { - filtered = filtered.filter(n => n.packageName === args.packageName); - } - - if (args.isTrigger !== undefined) { - filtered = filtered.filter(n => n.isTrigger === args.isTrigger); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(filtered.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - packageName: n.packageName, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - isTrigger: n.isTrigger, - isWebhook: n.isWebhook, - })), null, 2), - }, - ], - }; - } - - private async handleGetNodeInfo(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify({ - nodeType: nodeInfo.nodeType, - name: nodeInfo.name, - displayName: nodeInfo.displayName, - description: nodeInfo.description, - category: nodeInfo.category, - packageName: nodeInfo.packageName, - sourceCode: nodeInfo.sourceCode, - credentialCode: nodeInfo.credentialCode, - documentation: nodeInfo.documentation, - documentationUrl: nodeInfo.documentationUrl, - exampleWorkflow: nodeInfo.exampleWorkflow, - exampleParameters: nodeInfo.exampleParameters, - propertiesSchema: nodeInfo.propertiesSchema, - isTrigger: nodeInfo.isTrigger, - isWebhook: nodeInfo.isWebhook, - }, null, 2), - }, - ], - }; - } - - private async handleSearchNodes(args: any): Promise { - if (!args.query) { - throw new McpError(ErrorCode.InvalidParams, 'query is required'); - } - - const results = await this.nodeService.searchNodes({ - query: args.query, - category: args.category, - limit: args.limit || 20, - }); - - // Filter by documentation if requested - let filtered = results; - if (args.hasDocumentation) { - filtered = filtered.filter(n => !!n.documentation); - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(filtered.map(n => ({ - nodeType: n.nodeType, - name: n.name, - displayName: n.displayName, - category: n.category, - description: n.description, - hasDocumentation: !!n.documentation, - hasExample: !!n.exampleWorkflow, - })), null, 2), - }, - ], - }; - } - - private async handleGetNodeExample(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - if (!nodeInfo.exampleWorkflow) { - return { - content: [ - { - type: 'text', - text: `No example available for node: ${args.nodeType}`, - }, - ], - }; - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(nodeInfo.exampleWorkflow, null, 2), - }, - ], - }; - } - - private async handleGetNodeSourceCode(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - const response: any = { - nodeType: nodeInfo.nodeType, - sourceCode: nodeInfo.sourceCode, - }; - - if (args.includeCredentials && nodeInfo.credentialCode) { - response.credentialCode = nodeInfo.credentialCode; - } - - return { - content: [ - { - type: 'text', - text: JSON.stringify(response, null, 2), - }, - ], - }; - } - - private async handleGetNodeDocumentation(args: any): Promise { - if (!args.nodeType) { - throw new McpError(ErrorCode.InvalidParams, 'nodeType is required'); - } - - const nodeInfo = await this.nodeService.getNodeInfo(args.nodeType); - - if (!nodeInfo) { - throw new McpError(ErrorCode.InvalidRequest, `Node not found: ${args.nodeType}`); - } - - if (!nodeInfo.documentation) { - return { - content: [ - { - type: 'text', - text: `No documentation available for node: ${args.nodeType}`, - }, - ], - }; - } - - const content = args.format === 'plain' - ? nodeInfo.documentation.replace(/[#*`]/g, '') - : nodeInfo.documentation; - - return { - content: [ - { - type: 'text', - text: content, - }, - ], - }; - } - - private async handleRebuildDatabase(args: any): Promise { - logger.info('Starting database rebuild...'); - - const stats = await this.nodeService.rebuildDatabase(); - - return { - content: [ - { - type: 'text', - text: JSON.stringify({ - message: 'Database rebuild complete', - stats, - }, null, 2), - }, - ], - }; - } - - private async handleGetStatistics(): Promise { - const stats = this.nodeService.getStatistics(); - - return { - content: [ - { - type: 'text', - text: JSON.stringify(stats, null, 2), - }, - ], - }; - } - - async start(): Promise { - logger.info('Starting n8n Documentation MCP server...'); - - const transport = new StdioServerTransport(); - await this.server.connect(transport); - - logger.info('n8n Documentation MCP server started successfully'); - } - - async stop(): Promise { - logger.info('Stopping n8n Documentation MCP server...'); - await this.server.close(); - this.nodeService.close(); - logger.info('Server stopped'); - } -} \ No newline at end of file diff --git a/src/mcp/server.ts b/src/mcp/server.ts index bb547a1..ab9668c 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -16,18 +16,18 @@ import { N8NApiClient } from '../utils/n8n-client'; import { N8NMCPBridge } from '../utils/bridge'; import { logger } from '../utils/logger'; import { NodeSourceExtractor } from '../utils/node-source-extractor'; -import { SQLiteStorageService } from '../services/sqlite-storage-service'; +import { NodeDocumentationService } from '../services/node-documentation-service'; export class N8NMCPServer { private server: Server; private n8nClient: N8NApiClient; private nodeExtractor: NodeSourceExtractor; - private nodeStorage: SQLiteStorageService; + private nodeDocService: NodeDocumentationService; constructor(config: MCPServerConfig, n8nConfig: N8NConfig) { this.n8nClient = new N8NApiClient(n8nConfig); this.nodeExtractor = new NodeSourceExtractor(); - this.nodeStorage = new SQLiteStorageService(); + this.nodeDocService = new NodeDocumentationService(); logger.info('Initializing n8n MCP server', { config, n8nConfig }); this.server = new Server( { @@ -164,12 +164,14 @@ export class N8NMCPServer { return this.getNodeSourceCode(args); case 'list_available_nodes': return this.listAvailableNodes(args); - case 'extract_all_nodes': - return this.extractAllNodes(args); + case 'get_node_info': + return this.getNodeInfo(args); case 'search_nodes': return this.searchNodes(args); case 'get_node_statistics': return this.getNodeStatistics(args); + case 'rebuild_documentation_database': + return this.rebuildDocumentationDatabase(args); default: throw new Error(`Unknown tool: ${name}`); } @@ -323,84 +325,87 @@ export class N8NMCPServer { } } - private async extractAllNodes(args: any): Promise { + + private async getNodeInfo(args: any): Promise { try { - logger.info(`Extracting all nodes`, args); + logger.info('Getting comprehensive node information', args); + const nodeInfo = await this.nodeDocService.getNodeInfo(args.nodeType); - // Get list of all nodes - const allNodes = await this.nodeExtractor.listAvailableNodes(); - let nodesToExtract = allNodes; - - // Apply filters - if (args.packageFilter) { - nodesToExtract = nodesToExtract.filter(node => - node.packageName === args.packageFilter || - node.location?.includes(args.packageFilter) - ); + if (!nodeInfo) { + throw new Error(`Node ${args.nodeType} not found`); } - - if (args.limit) { - nodesToExtract = nodesToExtract.slice(0, args.limit); - } - - logger.info(`Extracting ${nodesToExtract.length} nodes...`); - - const extractedNodes = []; - const errors = []; - - for (const node of nodesToExtract) { - try { - const nodeType = node.packageName ? `${node.packageName}.${node.name}` : node.name; - const nodeInfo = await this.nodeExtractor.extractNodeSource(nodeType); - await this.nodeStorage.storeNode(nodeInfo); - extractedNodes.push(nodeType); - } catch (error) { - errors.push({ - node: node.name, - error: error instanceof Error ? error.message : 'Unknown error' - }); - } - } - - const stats = await this.nodeStorage.getStatistics(); - + return { - success: true, - extracted: extractedNodes.length, - failed: errors.length, - totalStored: stats.totalNodes, - errors: errors.slice(0, 10), // Limit error list - statistics: stats + nodeType: nodeInfo.nodeType, + name: nodeInfo.name, + displayName: nodeInfo.displayName, + description: nodeInfo.description, + category: nodeInfo.category, + subcategory: nodeInfo.subcategory, + icon: nodeInfo.icon, + documentation: { + markdown: nodeInfo.documentationMarkdown, + url: nodeInfo.documentationUrl, + title: nodeInfo.documentationTitle, + }, + operations: nodeInfo.operations || [], + apiMethods: nodeInfo.apiMethods || [], + examples: nodeInfo.documentationExamples || [], + templates: nodeInfo.templates || [], + relatedResources: nodeInfo.relatedResources || [], + requiredScopes: nodeInfo.requiredScopes || [], + exampleWorkflow: nodeInfo.exampleWorkflow, + exampleParameters: nodeInfo.exampleParameters, + propertiesSchema: nodeInfo.propertiesSchema, + metadata: { + packageName: nodeInfo.packageName, + version: nodeInfo.version, + hasCredentials: nodeInfo.hasCredentials, + isTrigger: nodeInfo.isTrigger, + isWebhook: nodeInfo.isWebhook, + aliases: nodeInfo.aliases, + }, + sourceCode: { + node: nodeInfo.sourceCode, + credential: nodeInfo.credentialCode, + }, }; } catch (error) { - logger.error(`Failed to extract all nodes`, error); - throw new Error(`Failed to extract all nodes: ${error instanceof Error ? error.message : 'Unknown error'}`); + logger.error(`Failed to get node info`, error); + throw new Error(`Failed to get node info: ${error instanceof Error ? error.message : 'Unknown error'}`); } } private async searchNodes(args: any): Promise { try { - logger.info(`Searching nodes`, args); - - const results = await this.nodeStorage.searchNodes({ + logger.info('Searching nodes with enhanced filtering', args); + const results = await this.nodeDocService.searchNodes({ query: args.query, + category: args.category, packageName: args.packageName, hasCredentials: args.hasCredentials, - limit: args.limit || 20 + isTrigger: args.isTrigger, + limit: args.limit || 20, }); - + return { nodes: results.map(node => ({ nodeType: node.nodeType, name: node.name, - packageName: node.packageName, displayName: node.displayName, description: node.description, - codeLength: node.codeLength, - hasCredentials: node.hasCredentials, - location: node.sourceLocation + category: node.category, + packageName: node.packageName, + hasDocumentation: !!node.documentationMarkdown, + hasExamples: !!(node.documentationExamples && node.documentationExamples.length > 0), + operationCount: node.operations?.length || 0, + metadata: { + hasCredentials: node.hasCredentials, + isTrigger: node.isTrigger, + isWebhook: node.isWebhook, + }, })), - total: results.length + total: results.length, }; } catch (error) { logger.error(`Failed to search nodes`, error); @@ -411,12 +416,11 @@ export class N8NMCPServer { private async getNodeStatistics(args: any): Promise { try { logger.info(`Getting node statistics`); - const stats = await this.nodeStorage.getStatistics(); + const stats = this.nodeDocService.getStatistics(); return { ...stats, - formattedTotalSize: `${(stats.totalCodeSize / 1024 / 1024).toFixed(2)} MB`, - formattedAverageSize: `${(stats.averageNodeSize / 1024).toFixed(2)} KB` + formattedTotalSize: stats.totalCodeSize ? `${(stats.totalCodeSize / 1024 / 1024).toFixed(2)} MB` : '0 MB', }; } catch (error) { logger.error(`Failed to get node statistics`, error); @@ -424,6 +428,23 @@ export class N8NMCPServer { } } + private async rebuildDocumentationDatabase(args: any): Promise { + try { + logger.info('Rebuilding documentation database', args); + const stats = await this.nodeDocService.rebuildDatabase(); + + return { + success: true, + message: 'Documentation database rebuilt successfully', + statistics: stats, + }; + } catch (error) { + logger.error(`Failed to rebuild documentation database`, error); + throw new Error(`Failed to rebuild documentation database: ${error instanceof Error ? error.message : 'Unknown error'}`); + } + } + + async start(): Promise { try { logger.info('Starting n8n MCP server...'); diff --git a/src/mcp/tools-v2.ts b/src/mcp/tools-v2.ts deleted file mode 100644 index 14ed402..0000000 --- a/src/mcp/tools-v2.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { ToolDefinition } from '../types'; - -/** - * Simplified MCP tools focused on serving n8n node documentation and code - */ -export const nodeDocumentationTools: ToolDefinition[] = [ - { - name: 'list_nodes', - description: 'List all available n8n nodes with basic information', - inputSchema: { - type: 'object', - properties: { - category: { - type: 'string', - description: 'Filter by category (e.g., "Core Nodes", "Flow", "Data Transformation")', - }, - packageName: { - type: 'string', - description: 'Filter by package name (e.g., "n8n-nodes-base")', - }, - isTrigger: { - type: 'boolean', - description: 'Filter to show only trigger nodes', - }, - }, - }, - }, - { - name: 'get_node_info', - description: 'Get complete information about a specific n8n node including source code, documentation, and examples', - inputSchema: { - type: 'object', - properties: { - nodeType: { - type: 'string', - description: 'The node type or name (e.g., "n8n-nodes-base.if", "If", "webhook")', - }, - }, - required: ['nodeType'], - }, - }, - { - name: 'search_nodes', - description: 'Search for n8n nodes by name, description, or documentation content', - inputSchema: { - type: 'object', - properties: { - query: { - type: 'string', - description: 'Search query (searches in node names, descriptions, and documentation)', - }, - category: { - type: 'string', - description: 'Filter by category', - }, - hasDocumentation: { - type: 'boolean', - description: 'Filter to show only nodes with documentation', - }, - limit: { - type: 'number', - description: 'Maximum number of results to return', - default: 20, - }, - }, - required: ['query'], - }, - }, - { - name: 'get_node_example', - description: 'Get example workflow/usage for a specific n8n node', - inputSchema: { - type: 'object', - properties: { - nodeType: { - type: 'string', - description: 'The node type or name', - }, - }, - required: ['nodeType'], - }, - }, - { - name: 'get_node_source_code', - description: 'Get only the source code of a specific n8n node', - inputSchema: { - type: 'object', - properties: { - nodeType: { - type: 'string', - description: 'The node type or name', - }, - includeCredentials: { - type: 'boolean', - description: 'Include credential type definitions if available', - default: false, - }, - }, - required: ['nodeType'], - }, - }, - { - name: 'get_node_documentation', - description: 'Get only the documentation for a specific n8n node', - inputSchema: { - type: 'object', - properties: { - nodeType: { - type: 'string', - description: 'The node type or name', - }, - format: { - type: 'string', - enum: ['markdown', 'plain'], - description: 'Documentation format', - default: 'markdown', - }, - }, - required: ['nodeType'], - }, - }, - { - name: 'rebuild_database', - description: 'Rebuild the entire node database with latest information from n8n and documentation', - inputSchema: { - type: 'object', - properties: { - includeDocumentation: { - type: 'boolean', - description: 'Include documentation from n8n-docs repository', - default: true, - }, - }, - }, - }, - { - name: 'get_database_statistics', - description: 'Get statistics about the node database', - inputSchema: { - type: 'object', - properties: {}, - }, - }, -]; \ No newline at end of file diff --git a/src/mcp/tools.ts b/src/mcp/tools.ts index c75fdde..50f1f3f 100644 --- a/src/mcp/tools.ts +++ b/src/mcp/tools.ts @@ -182,31 +182,40 @@ export const n8nTools: ToolDefinition[] = [ }, }, { - name: 'extract_all_nodes', - description: 'Extract and store all available n8n nodes in the database', + name: 'get_node_statistics', + description: 'Get statistics about stored n8n nodes', + inputSchema: { + type: 'object', + properties: {}, + }, + }, + { + name: 'get_node_info', + description: 'Get comprehensive information about a specific n8n node including documentation, operations, API methods, and examples', inputSchema: { type: 'object', properties: { - packageFilter: { + nodeType: { type: 'string', - description: 'Optional package name to filter extraction', - }, - limit: { - type: 'number', - description: 'Maximum number of nodes to extract', + description: 'The node type identifier (e.g., n8n-nodes-base.slack)', }, }, + required: ['nodeType'], }, }, { name: 'search_nodes', - description: 'Search for n8n nodes by name, package, or functionality', + description: 'Search n8n nodes with full-text search and advanced filtering', inputSchema: { type: 'object', properties: { query: { type: 'string', - description: 'Search query', + description: 'Search query for full-text search', + }, + category: { + type: 'string', + description: 'Filter by node category', }, packageName: { type: 'string', @@ -214,7 +223,11 @@ export const n8nTools: ToolDefinition[] = [ }, hasCredentials: { type: 'boolean', - description: 'Filter nodes that have credentials', + description: 'Filter nodes that require credentials', + }, + isTrigger: { + type: 'boolean', + description: 'Filter trigger nodes only', }, limit: { type: 'number', @@ -225,11 +238,16 @@ export const n8nTools: ToolDefinition[] = [ }, }, { - name: 'get_node_statistics', - description: 'Get statistics about stored n8n nodes', + name: 'rebuild_documentation_database', + description: 'Rebuild the node documentation database with the latest information', inputSchema: { type: 'object', - properties: {}, + properties: { + packageFilter: { + type: 'string', + description: 'Optional: Only rebuild nodes from specific package', + }, + }, }, }, ]; \ No newline at end of file diff --git a/src/scripts/rebuild-database-v2.ts b/src/scripts/rebuild-database-v2.ts deleted file mode 100644 index d354421..0000000 --- a/src/scripts/rebuild-database-v2.ts +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env node - -import { NodeDocumentationService } from '../services/node-documentation-service'; -import { logger } from '../utils/logger'; - -async function rebuildDatabase() { - console.log('๐Ÿ”„ Starting complete database rebuild...\n'); - - const service = new NodeDocumentationService(); - - try { - const startTime = Date.now(); - - console.log('1๏ธโƒฃ Initializing services...'); - console.log('2๏ธโƒฃ Fetching n8n-docs repository...'); - console.log('3๏ธโƒฃ Discovering available nodes...'); - console.log('4๏ธโƒฃ Extracting node information...\n'); - - const stats = await service.rebuildDatabase(); - - const duration = ((Date.now() - startTime) / 1000).toFixed(2); - - console.log('\n๐Ÿ“Š Rebuild Results:'); - console.log(` Total nodes processed: ${stats.total}`); - console.log(` Successfully stored: ${stats.successful}`); - console.log(` Failed: ${stats.failed}`); - console.log(` Duration: ${duration}s`); - - if (stats.errors.length > 0) { - console.log('\nโš ๏ธ First 5 errors:'); - stats.errors.slice(0, 5).forEach(error => { - console.log(` - ${error}`); - }); - if (stats.errors.length > 5) { - console.log(` ... and ${stats.errors.length - 5} more errors`); - } - } - - // Get final statistics - const dbStats = service.getStatistics(); - console.log('\n๐Ÿ“ˆ Database Statistics:'); - console.log(` Total nodes: ${dbStats.totalNodes}`); - console.log(` Nodes with documentation: ${dbStats.nodesWithDocs}`); - console.log(` Nodes with examples: ${dbStats.nodesWithExamples}`); - console.log(` Trigger nodes: ${dbStats.triggerNodes}`); - console.log(` Webhook nodes: ${dbStats.webhookNodes}`); - console.log(` Total packages: ${dbStats.totalPackages}`); - - console.log('\nโœจ Database rebuild complete!'); - - } catch (error) { - console.error('\nโŒ Database rebuild failed:', error); - process.exit(1); - } finally { - service.close(); - } -} - -// Run if called directly -if (require.main === module) { - rebuildDatabase().catch(error => { - console.error(error); - process.exit(1); - }); -} - -export { rebuildDatabase }; \ No newline at end of file diff --git a/src/scripts/rebuild-database.ts b/src/scripts/rebuild-database.ts index 55e7fec..bc33ea1 100644 --- a/src/scripts/rebuild-database.ts +++ b/src/scripts/rebuild-database.ts @@ -1,129 +1,79 @@ #!/usr/bin/env node -import { NodeSourceExtractor } from '../utils/node-source-extractor'; -import { SQLiteStorageService } from '../services/sqlite-storage-service'; +import { NodeDocumentationService } from '../services/node-documentation-service'; import { logger } from '../utils/logger'; -import * as path from 'path'; /** - * Rebuild the entire nodes database by extracting all available nodes + * Rebuild the enhanced documentation database */ -async function rebuildDatabase() { - console.log('๐Ÿ”„ Starting database rebuild...\n'); +async function rebuildDocumentationDatabase() { + console.log('๐Ÿ”„ Starting enhanced documentation database rebuild...\n'); const startTime = Date.now(); - const extractor = new NodeSourceExtractor(); - const storage = new SQLiteStorageService(); + const service = new NodeDocumentationService(); try { - // Step 1: Clear existing database - console.log('1๏ธโƒฃ Clearing existing database...'); - await storage.rebuildDatabase(); + // Run the rebuild + const results = await service.rebuildDatabase(); - // Step 2: Get all available nodes - console.log('2๏ธโƒฃ Discovering available nodes...'); - const allNodes = await extractor.listAvailableNodes(); - console.log(` Found ${allNodes.length} nodes\n`); + const duration = ((Date.now() - startTime) / 1000).toFixed(2); - // Step 3: Extract and store each node - console.log('3๏ธโƒฃ Extracting and storing nodes...'); - let processed = 0; - let stored = 0; - let failed = 0; - const errors: Array<{ node: string; error: string }> = []; + console.log('\nโœ… Enhanced documentation database rebuild completed!\n'); + console.log('๐Ÿ“Š Results:'); + console.log(` Total nodes found: ${results.total}`); + console.log(` Successfully processed: ${results.successful}`); + console.log(` Failed: ${results.failed}`); + console.log(` Duration: ${duration}s`); - // Process in batches for better performance - const batchSize = 50; - for (let i = 0; i < allNodes.length; i += batchSize) { - const batch = allNodes.slice(i, Math.min(i + batchSize, allNodes.length)); - const nodeInfos = []; + if (results.errors.length > 0) { + console.log(`\nโš ๏ธ First ${Math.min(5, results.errors.length)} errors:`); + results.errors.slice(0, 5).forEach(err => { + console.log(` - ${err}`); + }); - for (const node of batch) { - processed++; - - try { - const nodeType = node.packageName ? `${node.packageName}.${node.name}` : node.name; - - // Show progress - if (processed % 100 === 0) { - const progress = ((processed / allNodes.length) * 100).toFixed(1); - console.log(` Progress: ${processed}/${allNodes.length} (${progress}%)`); - } - - const nodeInfo = await extractor.extractNodeSource(nodeType); - nodeInfos.push(nodeInfo); - stored++; - } catch (error) { - failed++; - const errorMsg = error instanceof Error ? error.message : 'Unknown error'; - errors.push({ - node: node.name, - error: errorMsg - }); - - // Log first few errors - if (errors.length <= 5) { - logger.debug(`Failed to extract ${node.name}: ${errorMsg}`); - } - } - } - - // Bulk store the batch - if (nodeInfos.length > 0) { - await storage.bulkStoreNodes(nodeInfos); + if (results.errors.length > 5) { + console.log(` ... and ${results.errors.length - 5} more errors`); } } - // Step 4: Save statistics - console.log('\n4๏ธโƒฃ Saving statistics...'); - const stats = await storage.getStatistics(); - await storage.saveExtractionStats(stats); - - // Step 5: Display results - const duration = ((Date.now() - startTime) / 1000).toFixed(2); - - console.log('\nโœ… Database rebuild completed!\n'); - console.log('๐Ÿ“Š Results:'); - console.log(` Total nodes found: ${allNodes.length}`); - console.log(` Successfully stored: ${stored}`); - console.log(` Failed: ${failed}`); - console.log(` Duration: ${duration}s`); - console.log(` Database size: ${(stats.totalCodeSize / 1024 / 1024).toFixed(2)} MB`); + // Get and display statistics + const stats = service.getStatistics(); + console.log('\n๐Ÿ“ˆ Database Statistics:'); + console.log(` Total nodes: ${stats.totalNodes}`); + console.log(` Nodes with documentation: ${stats.nodesWithDocs}`); + console.log(` Nodes with examples: ${stats.nodesWithExamples}`); + console.log(` Nodes with credentials: ${stats.nodesWithCredentials}`); + console.log(` Trigger nodes: ${stats.triggerNodes}`); + console.log(` Webhook nodes: ${stats.webhookNodes}`); console.log('\n๐Ÿ“ฆ Package distribution:'); - stats.packageDistribution.slice(0, 10).forEach(pkg => { + stats.packageDistribution.slice(0, 10).forEach((pkg: any) => { console.log(` ${pkg.package}: ${pkg.count} nodes`); }); - if (errors.length > 0) { - console.log(`\nโš ๏ธ First ${Math.min(5, errors.length)} errors:`); - errors.slice(0, 5).forEach(err => { - console.log(` - ${err.node}: ${err.error}`); - }); - - if (errors.length > 5) { - console.log(` ... and ${errors.length - 5} more errors`); - } - } - // Close database connection - storage.close(); + service.close(); - console.log('\nโœจ Database is ready for use!'); + console.log('\nโœจ Enhanced documentation database is ready!'); + console.log('๐Ÿ’ก The database now includes:'); + console.log(' - Complete node source code'); + console.log(' - Enhanced documentation with operations and API methods'); + console.log(' - Code examples and templates'); + console.log(' - Related resources and required scopes'); } catch (error) { - console.error('\nโŒ Database rebuild failed:', error); - storage.close(); + console.error('\nโŒ Documentation database rebuild failed:', error); + service.close(); process.exit(1); } } // Run if called directly if (require.main === module) { - rebuildDatabase().catch(error => { + rebuildDocumentationDatabase().catch(error => { console.error('Fatal error:', error); process.exit(1); }); } -export { rebuildDatabase }; \ No newline at end of file +export { rebuildDocumentationDatabase }; \ No newline at end of file diff --git a/src/services/node-documentation-service.ts b/src/services/node-documentation-service.ts index 82f58ae..6fb626d 100644 --- a/src/services/node-documentation-service.ts +++ b/src/services/node-documentation-service.ts @@ -4,7 +4,15 @@ import path from 'path'; import { promises as fs } from 'fs'; import { logger } from '../utils/logger'; import { NodeSourceExtractor } from '../utils/node-source-extractor'; -import { DocumentationFetcher } from '../utils/documentation-fetcher'; +import { + EnhancedDocumentationFetcher, + EnhancedNodeDocumentation, + OperationInfo, + ApiMethodMapping, + CodeExample, + TemplateInfo, + RelatedResource +} from '../utils/enhanced-documentation-fetcher'; import { ExampleGenerator } from '../utils/example-generator'; interface NodeInfo { @@ -17,8 +25,15 @@ interface NodeInfo { icon?: string; sourceCode: string; credentialCode?: string; - documentation?: string; + documentationMarkdown?: string; documentationUrl?: string; + documentationTitle?: string; + operations?: OperationInfo[]; + apiMethods?: ApiMethodMapping[]; + documentationExamples?: CodeExample[]; + templates?: TemplateInfo[]; + relatedResources?: RelatedResource[]; + requiredScopes?: string[]; exampleWorkflow?: any; exampleParameters?: any; propertiesSchema?: any; @@ -44,7 +59,7 @@ interface SearchOptions { export class NodeDocumentationService { private db: Database.Database; private extractor: NodeSourceExtractor; - private docsFetcher: DocumentationFetcher; + private docsFetcher: EnhancedDocumentationFetcher; constructor(dbPath?: string) { const databasePath = dbPath || process.env.NODE_DB_PATH || path.join(process.cwd(), 'data', 'nodes-v2.db'); @@ -57,7 +72,7 @@ export class NodeDocumentationService { this.db = new Database(databasePath); this.extractor = new NodeSourceExtractor(); - this.docsFetcher = new DocumentationFetcher(); + this.docsFetcher = new EnhancedDocumentationFetcher(); // Initialize database with new schema this.initializeDatabase(); @@ -88,6 +103,15 @@ CREATE TABLE IF NOT EXISTS nodes ( -- Documentation documentation_markdown TEXT, documentation_url TEXT, + documentation_title TEXT, + + -- Enhanced documentation fields (stored as JSON) + operations TEXT, + api_methods TEXT, + documentation_examples TEXT, + templates TEXT, + related_resources TEXT, + required_scopes TEXT, -- Example usage example_workflow TEXT, @@ -182,14 +206,16 @@ CREATE TABLE IF NOT EXISTS extraction_stats ( INSERT OR REPLACE INTO nodes ( node_type, name, display_name, description, category, subcategory, icon, source_code, credential_code, code_hash, code_length, - documentation_markdown, documentation_url, + documentation_markdown, documentation_url, documentation_title, + operations, api_methods, documentation_examples, templates, related_resources, required_scopes, example_workflow, example_parameters, properties_schema, package_name, version, codex_data, aliases, has_credentials, is_trigger, is_webhook ) VALUES ( @nodeType, @name, @displayName, @description, @category, @subcategory, @icon, @sourceCode, @credentialCode, @hash, @codeLength, - @documentation, @documentationUrl, + @documentation, @documentationUrl, @documentationTitle, + @operations, @apiMethods, @documentationExamples, @templates, @relatedResources, @requiredScopes, @exampleWorkflow, @exampleParameters, @propertiesSchema, @packageName, @version, @codexData, @aliases, @hasCredentials, @isTrigger, @isWebhook @@ -208,8 +234,15 @@ CREATE TABLE IF NOT EXISTS extraction_stats ( credentialCode: nodeInfo.credentialCode || null, hash, codeLength: nodeInfo.sourceCode.length, - documentation: nodeInfo.documentation || null, + documentation: nodeInfo.documentationMarkdown || null, documentationUrl: nodeInfo.documentationUrl || null, + documentationTitle: nodeInfo.documentationTitle || null, + operations: nodeInfo.operations ? JSON.stringify(nodeInfo.operations) : null, + apiMethods: nodeInfo.apiMethods ? JSON.stringify(nodeInfo.apiMethods) : null, + documentationExamples: nodeInfo.documentationExamples ? JSON.stringify(nodeInfo.documentationExamples) : null, + templates: nodeInfo.templates ? JSON.stringify(nodeInfo.templates) : null, + relatedResources: nodeInfo.relatedResources ? JSON.stringify(nodeInfo.relatedResources) : null, + requiredScopes: nodeInfo.requiredScopes ? JSON.stringify(nodeInfo.requiredScopes) : null, exampleWorkflow: nodeInfo.exampleWorkflow ? JSON.stringify(nodeInfo.exampleWorkflow) : null, exampleParameters: nodeInfo.exampleParameters ? JSON.stringify(nodeInfo.exampleParameters) : null, propertiesSchema: nodeInfo.propertiesSchema ? JSON.stringify(nodeInfo.propertiesSchema) : null, @@ -346,13 +379,13 @@ CREATE TABLE IF NOT EXISTS extraction_stats ( // Parse node definition to get metadata const nodeDefinition = this.parseNodeDefinition(nodeData.sourceCode); - // Get documentation - const docs = await this.docsFetcher.getNodeDocumentation(nodeType); + // Get enhanced documentation + const enhancedDocs = await this.docsFetcher.getEnhancedNodeDocumentation(nodeType); // Generate example const example = ExampleGenerator.generateFromNodeDefinition(nodeDefinition); - // Prepare node info + // Prepare node info with enhanced documentation const nodeInfo: NodeInfo = { nodeType: nodeType, name: node.name, @@ -363,8 +396,15 @@ CREATE TABLE IF NOT EXISTS extraction_stats ( icon: nodeDefinition.icon, sourceCode: nodeData.sourceCode, credentialCode: nodeData.credentialCode, - documentation: docs?.markdown, - documentationUrl: docs?.url, + documentationMarkdown: enhancedDocs?.markdown, + documentationUrl: enhancedDocs?.url, + documentationTitle: enhancedDocs?.title, + operations: enhancedDocs?.operations, + apiMethods: enhancedDocs?.apiMethods, + documentationExamples: enhancedDocs?.examples, + templates: enhancedDocs?.templates, + relatedResources: enhancedDocs?.relatedResources, + requiredScopes: enhancedDocs?.requiredScopes, exampleWorkflow: example, exampleParameters: example.nodes[0]?.parameters, propertiesSchema: nodeDefinition.properties, @@ -410,28 +450,88 @@ CREATE TABLE IF NOT EXISTS extraction_stats ( * Parse node definition from source code */ private parseNodeDefinition(sourceCode: string): any { - try { - // Try to extract the description object from the source - const descMatch = sourceCode.match(/description\s*[:=]\s*({[\s\S]*?})\s*[,;]/); - if (descMatch) { - // Clean up the match and try to parse it - const descStr = descMatch[1] - .replace(/(['"])?([a-zA-Z0-9_]+)(['"])?\s*:/g, '"$2":') // Quote property names - .replace(/:\s*'([^']*)'/g, ': "$1"') // Convert single quotes to double - .replace(/,\s*}/g, '}'); // Remove trailing commas - - return JSON.parse(descStr); - } - } catch (error) { - logger.debug('Failed to parse node definition:', error); - } - - // Return minimal definition if parsing fails - return { + const result: any = { displayName: '', description: '', - properties: [] + properties: [], + category: null, + subcategory: null, + icon: null, + version: null, + codex: null, + alias: null }; + + try { + // Extract individual properties using specific patterns + + // Display name + const displayNameMatch = sourceCode.match(/displayName\s*[:=]\s*['"`]([^'"`]+)['"`]/); + if (displayNameMatch) { + result.displayName = displayNameMatch[1]; + } + + // Description + const descriptionMatch = sourceCode.match(/description\s*[:=]\s*['"`]([^'"`]+)['"`]/); + if (descriptionMatch) { + result.description = descriptionMatch[1]; + } + + // Icon + const iconMatch = sourceCode.match(/icon\s*[:=]\s*['"`]([^'"`]+)['"`]/); + if (iconMatch) { + result.icon = iconMatch[1]; + } + + // Category/group + const groupMatch = sourceCode.match(/group\s*[:=]\s*\[['"`]([^'"`]+)['"`]\]/); + if (groupMatch) { + result.category = groupMatch[1]; + } + + // Version + const versionMatch = sourceCode.match(/version\s*[:=]\s*(\d+)/); + if (versionMatch) { + result.version = parseInt(versionMatch[1]); + } + + // Subtitle + const subtitleMatch = sourceCode.match(/subtitle\s*[:=]\s*['"`]([^'"`]+)['"`]/); + if (subtitleMatch) { + result.subtitle = subtitleMatch[1]; + } + + // Try to extract properties array + const propsMatch = sourceCode.match(/properties\s*[:=]\s*(\[[\s\S]*?\])\s*[,}]/); + if (propsMatch) { + try { + // This is complex to parse from minified code, so we'll skip for now + result.properties = []; + } catch (e) { + // Ignore parsing errors + } + } + + // Check if it's a trigger node + if (sourceCode.includes('implements.*ITrigger') || + sourceCode.includes('polling:.*true') || + sourceCode.includes('webhook:.*true') || + result.displayName.toLowerCase().includes('trigger')) { + result.isTrigger = true; + } + + // Check if it's a webhook node + if (sourceCode.includes('webhooks:') || + sourceCode.includes('webhook:.*true') || + result.displayName.toLowerCase().includes('webhook')) { + result.isWebhook = true; + } + + } catch (error) { + logger.debug('Error parsing node definition:', error); + } + + return result; } /** @@ -448,8 +548,15 @@ CREATE TABLE IF NOT EXISTS extraction_stats ( icon: row.icon, sourceCode: row.source_code, credentialCode: row.credential_code, - documentation: row.documentation_markdown, + documentationMarkdown: row.documentation_markdown, documentationUrl: row.documentation_url, + documentationTitle: row.documentation_title, + operations: row.operations ? JSON.parse(row.operations) : null, + apiMethods: row.api_methods ? JSON.parse(row.api_methods) : null, + documentationExamples: row.documentation_examples ? JSON.parse(row.documentation_examples) : null, + templates: row.templates ? JSON.parse(row.templates) : null, + relatedResources: row.related_resources ? JSON.parse(row.related_resources) : null, + requiredScopes: row.required_scopes ? JSON.parse(row.required_scopes) : null, exampleWorkflow: row.example_workflow ? JSON.parse(row.example_workflow) : null, exampleParameters: row.example_parameters ? JSON.parse(row.example_parameters) : null, propertiesSchema: row.properties_schema ? JSON.parse(row.properties_schema) : null, diff --git a/src/services/node-storage-service.ts b/src/services/node-storage-service.ts deleted file mode 100644 index f1cae29..0000000 --- a/src/services/node-storage-service.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { NodeSourceInfo } from '../utils/node-source-extractor'; -import { logger } from '../utils/logger'; -import * as crypto from 'crypto'; - -export interface StoredNode { - id: string; - nodeType: string; - name: string; - packageName: string; - displayName?: string; - description?: string; - codeHash: string; - codeLength: number; - sourceLocation: string; - hasCredentials: boolean; - extractedAt: Date; - updatedAt: Date; - sourceCode?: string; - credentialCode?: string; - packageInfo?: any; - metadata?: Record; -} - -export interface NodeSearchQuery { - query?: string; - packageName?: string; - nodeType?: string; - hasCredentials?: boolean; - limit?: number; - offset?: number; -} - -export class NodeStorageService { - private nodes: Map = new Map(); - private nodesByPackage: Map> = new Map(); - private searchIndex: Map> = new Map(); - - /** - * Store a node in the database - */ - async storeNode(nodeInfo: NodeSourceInfo): Promise { - const codeHash = crypto.createHash('sha256').update(nodeInfo.sourceCode).digest('hex'); - - // Parse display name and description from source if possible - const displayName = this.extractDisplayName(nodeInfo.sourceCode); - const description = this.extractDescription(nodeInfo.sourceCode); - - const storedNode: StoredNode = { - id: crypto.randomUUID(), - nodeType: nodeInfo.nodeType, - name: nodeInfo.nodeType.split('.').pop() || nodeInfo.nodeType, - packageName: nodeInfo.nodeType.split('.')[0] || 'unknown', - displayName, - description, - codeHash, - codeLength: nodeInfo.sourceCode.length, - sourceLocation: nodeInfo.location, - hasCredentials: !!nodeInfo.credentialCode, - extractedAt: new Date(), - updatedAt: new Date(), - sourceCode: nodeInfo.sourceCode, - credentialCode: nodeInfo.credentialCode, - packageInfo: nodeInfo.packageInfo, - }; - - // Store in memory (replace with real DB) - this.nodes.set(nodeInfo.nodeType, storedNode); - - // Update package index - if (!this.nodesByPackage.has(storedNode.packageName)) { - this.nodesByPackage.set(storedNode.packageName, new Set()); - } - this.nodesByPackage.get(storedNode.packageName)!.add(nodeInfo.nodeType); - - // Update search index - this.updateSearchIndex(storedNode); - - logger.info(`Stored node: ${nodeInfo.nodeType} (${codeHash.substring(0, 8)}...)`); - return storedNode; - } - - /** - * Search for nodes - */ - async searchNodes(query: NodeSearchQuery): Promise { - let results: StoredNode[] = []; - - if (query.query) { - // Text search - const searchTerms = query.query.toLowerCase().split(' '); - const matchingNodeTypes = new Set(); - - for (const term of searchTerms) { - const matches = this.searchIndex.get(term) || new Set(); - matches.forEach(nodeType => matchingNodeTypes.add(nodeType)); - } - - results = Array.from(matchingNodeTypes) - .map(nodeType => this.nodes.get(nodeType)!) - .filter(Boolean); - } else { - // Get all nodes - results = Array.from(this.nodes.values()); - } - - // Apply filters - if (query.packageName) { - results = results.filter(node => node.packageName === query.packageName); - } - - if (query.nodeType) { - results = results.filter(node => node.nodeType.includes(query.nodeType!)); - } - - if (query.hasCredentials !== undefined) { - results = results.filter(node => node.hasCredentials === query.hasCredentials); - } - - // Apply pagination - const offset = query.offset || 0; - const limit = query.limit || 50; - - return results.slice(offset, offset + limit); - } - - /** - * Get node by type - */ - async getNode(nodeType: string): Promise { - return this.nodes.get(nodeType) || null; - } - - /** - * Get all packages - */ - async getPackages(): Promise> { - return Array.from(this.nodesByPackage.entries()).map(([name, nodes]) => ({ - name, - nodeCount: nodes.size, - })); - } - - /** - * Bulk store nodes - */ - async bulkStoreNodes(nodeInfos: NodeSourceInfo[]): Promise<{ - stored: number; - failed: number; - errors: Array<{ nodeType: string; error: string }>; - }> { - const results = { - stored: 0, - failed: 0, - errors: [] as Array<{ nodeType: string; error: string }>, - }; - - for (const nodeInfo of nodeInfos) { - try { - await this.storeNode(nodeInfo); - results.stored++; - } catch (error) { - results.failed++; - results.errors.push({ - nodeType: nodeInfo.nodeType, - error: error instanceof Error ? error.message : 'Unknown error', - }); - } - } - - return results; - } - - /** - * Generate statistics - */ - async getStatistics(): Promise<{ - totalNodes: number; - totalPackages: number; - totalCodeSize: number; - nodesWithCredentials: number; - averageNodeSize: number; - packageDistribution: Array<{ package: string; count: number }>; - }> { - const nodes = Array.from(this.nodes.values()); - const totalCodeSize = nodes.reduce((sum, node) => sum + node.codeLength, 0); - const nodesWithCredentials = nodes.filter(node => node.hasCredentials).length; - - const packageDistribution = Array.from(this.nodesByPackage.entries()) - .map(([pkg, nodeSet]) => ({ package: pkg, count: nodeSet.size })) - .sort((a, b) => b.count - a.count); - - return { - totalNodes: nodes.length, - totalPackages: this.nodesByPackage.size, - totalCodeSize, - nodesWithCredentials, - averageNodeSize: nodes.length > 0 ? Math.round(totalCodeSize / nodes.length) : 0, - packageDistribution, - }; - } - - /** - * Extract display name from source code - */ - private extractDisplayName(sourceCode: string): string | undefined { - const match = sourceCode.match(/displayName:\s*["'`]([^"'`]+)["'`]/); - return match ? match[1] : undefined; - } - - /** - * Extract description from source code - */ - private extractDescription(sourceCode: string): string | undefined { - const match = sourceCode.match(/description:\s*["'`]([^"'`]+)["'`]/); - return match ? match[1] : undefined; - } - - /** - * Update search index - */ - private updateSearchIndex(node: StoredNode): void { - // Index by name parts - const nameParts = node.name.toLowerCase().split(/(?=[A-Z])|[._-]/).filter(Boolean); - for (const part of nameParts) { - if (!this.searchIndex.has(part)) { - this.searchIndex.set(part, new Set()); - } - this.searchIndex.get(part)!.add(node.nodeType); - } - - // Index by display name - if (node.displayName) { - const displayParts = node.displayName.toLowerCase().split(/\s+/); - for (const part of displayParts) { - if (!this.searchIndex.has(part)) { - this.searchIndex.set(part, new Set()); - } - this.searchIndex.get(part)!.add(node.nodeType); - } - } - - // Index by package name - const pkgParts = node.packageName.toLowerCase().split(/[.-]/); - for (const part of pkgParts) { - if (!this.searchIndex.has(part)) { - this.searchIndex.set(part, new Set()); - } - this.searchIndex.get(part)!.add(node.nodeType); - } - } - - /** - * Export all nodes for database import - */ - async exportForDatabase(): Promise<{ - nodes: StoredNode[]; - metadata: { - exportedAt: Date; - totalNodes: number; - totalPackages: number; - }; - }> { - const nodes = Array.from(this.nodes.values()); - - return { - nodes, - metadata: { - exportedAt: new Date(), - totalNodes: nodes.length, - totalPackages: this.nodesByPackage.size, - }, - }; - } -} \ No newline at end of file diff --git a/src/services/sqlite-storage-service.ts b/src/services/sqlite-storage-service.ts deleted file mode 100644 index f92e5cf..0000000 --- a/src/services/sqlite-storage-service.ts +++ /dev/null @@ -1,410 +0,0 @@ -import Database from 'better-sqlite3'; -import * as path from 'path'; -import * as fs from 'fs'; -import * as crypto from 'crypto'; -import { NodeSourceInfo } from '../utils/node-source-extractor'; -import { StoredNode, NodeSearchQuery } from './node-storage-service'; -import { logger } from '../utils/logger'; - -export class SQLiteStorageService { - private db: Database.Database; - private readonly dbPath: string; - - constructor(dbPath?: string) { - this.dbPath = dbPath || process.env.NODE_DB_PATH || path.join(process.cwd(), 'data', 'nodes.db'); - - // Ensure data directory exists - const dataDir = path.dirname(this.dbPath); - if (!fs.existsSync(dataDir)) { - fs.mkdirSync(dataDir, { recursive: true }); - } - - this.db = new Database(this.dbPath, { - verbose: process.env.NODE_ENV === 'development' ? (msg: unknown) => logger.debug(String(msg)) : undefined - }); - - // Enable WAL mode for better performance - this.db.pragma('journal_mode = WAL'); - - this.initializeDatabase(); - } - - /** - * Initialize database with schema - */ - private initializeDatabase(): void { - try { - const schema = ` - -- Main nodes table - CREATE TABLE IF NOT EXISTS nodes ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - node_type TEXT UNIQUE NOT NULL, - name TEXT NOT NULL, - package_name TEXT NOT NULL, - display_name TEXT, - description TEXT, - code_hash TEXT NOT NULL, - code_length INTEGER NOT NULL, - source_location TEXT NOT NULL, - source_code TEXT NOT NULL, - credential_code TEXT, - package_info TEXT, -- JSON - has_credentials INTEGER DEFAULT 0, - extracted_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP - ); - - -- Indexes for performance - CREATE INDEX IF NOT EXISTS idx_nodes_package_name ON nodes(package_name); - CREATE INDEX IF NOT EXISTS idx_nodes_code_hash ON nodes(code_hash); - CREATE INDEX IF NOT EXISTS idx_nodes_name ON nodes(name); - - -- Full Text Search virtual table for node search - CREATE VIRTUAL TABLE IF NOT EXISTS nodes_fts USING fts5( - node_type, - name, - display_name, - description, - package_name, - content=nodes, - content_rowid=id - ); - - -- Triggers to keep FTS in sync - CREATE TRIGGER IF NOT EXISTS nodes_ai AFTER INSERT ON nodes - BEGIN - INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, package_name) - VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.package_name); - END; - - CREATE TRIGGER IF NOT EXISTS nodes_ad AFTER DELETE ON nodes - BEGIN - DELETE FROM nodes_fts WHERE rowid = old.id; - END; - - CREATE TRIGGER IF NOT EXISTS nodes_au AFTER UPDATE ON nodes - BEGIN - DELETE FROM nodes_fts WHERE rowid = old.id; - INSERT INTO nodes_fts(rowid, node_type, name, display_name, description, package_name) - VALUES (new.id, new.node_type, new.name, new.display_name, new.description, new.package_name); - END; - - -- Statistics table for metadata - CREATE TABLE IF NOT EXISTS extraction_stats ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - total_nodes INTEGER NOT NULL, - total_packages INTEGER NOT NULL, - total_code_size INTEGER NOT NULL, - nodes_with_credentials INTEGER NOT NULL, - extraction_date DATETIME DEFAULT CURRENT_TIMESTAMP - ); - `; - - this.db.exec(schema); - logger.info('Database initialized successfully'); - } catch (error) { - logger.error('Failed to initialize database:', error); - throw error; - } - } - - /** - * Store a node in the database - */ - async storeNode(nodeInfo: NodeSourceInfo): Promise { - const codeHash = crypto.createHash('sha256').update(nodeInfo.sourceCode).digest('hex'); - - // Parse display name and description from source - const displayName = this.extractDisplayName(nodeInfo.sourceCode); - const description = this.extractDescription(nodeInfo.sourceCode); - - const stmt = this.db.prepare(` - INSERT OR REPLACE INTO nodes ( - node_type, name, package_name, display_name, description, - code_hash, code_length, source_location, source_code, - credential_code, package_info, has_credentials, - updated_at - ) VALUES ( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP - ) - `); - - const name = nodeInfo.nodeType.split('.').pop() || nodeInfo.nodeType; - const packageName = nodeInfo.nodeType.split('.')[0] || 'unknown'; - - const result = stmt.run( - nodeInfo.nodeType, - name, - packageName, - displayName || null, - description || null, - codeHash, - nodeInfo.sourceCode.length, - nodeInfo.location, - nodeInfo.sourceCode, - nodeInfo.credentialCode || null, - nodeInfo.packageInfo ? JSON.stringify(nodeInfo.packageInfo) : null, - nodeInfo.credentialCode ? 1 : 0 - ); - - logger.info(`Stored node: ${nodeInfo.nodeType} (${codeHash.substring(0, 8)}...)`); - - return { - id: String(result.lastInsertRowid), - nodeType: nodeInfo.nodeType, - name, - packageName, - displayName, - description, - codeHash, - codeLength: nodeInfo.sourceCode.length, - sourceLocation: nodeInfo.location, - hasCredentials: !!nodeInfo.credentialCode, - extractedAt: new Date(), - updatedAt: new Date(), - sourceCode: nodeInfo.sourceCode, - credentialCode: nodeInfo.credentialCode, - packageInfo: nodeInfo.packageInfo - }; - } - - /** - * Search for nodes using FTS - */ - async searchNodes(query: NodeSearchQuery): Promise { - let sql = ` - SELECT DISTINCT n.* - FROM nodes n - `; - - const params: any[] = []; - const conditions: string[] = []; - - if (query.query) { - // Use FTS for text search - sql += ` JOIN nodes_fts fts ON n.id = fts.rowid`; - conditions.push(`nodes_fts MATCH ?`); - // Convert search query to FTS syntax (prefix search) - const ftsQuery = query.query.split(' ') - .map(term => `${term}*`) - .join(' '); - params.push(ftsQuery); - } - - if (query.packageName) { - conditions.push(`n.package_name = ?`); - params.push(query.packageName); - } - - if (query.nodeType) { - conditions.push(`n.node_type LIKE ?`); - params.push(`%${query.nodeType}%`); - } - - if (query.hasCredentials !== undefined) { - conditions.push(`n.has_credentials = ?`); - params.push(query.hasCredentials ? 1 : 0); - } - - if (conditions.length > 0) { - sql += ` WHERE ${conditions.join(' AND ')}`; - } - - sql += ` ORDER BY n.name`; - - if (query.limit) { - sql += ` LIMIT ?`; - params.push(query.limit); - - if (query.offset) { - sql += ` OFFSET ?`; - params.push(query.offset); - } - } - - const stmt = this.db.prepare(sql); - const rows = stmt.all(...params); - - return rows.map(row => this.rowToStoredNode(row)); - } - - /** - * Get node by type - */ - async getNode(nodeType: string): Promise { - const stmt = this.db.prepare(` - SELECT * FROM nodes WHERE node_type = ? - `); - - const row = stmt.get(nodeType); - return row ? this.rowToStoredNode(row) : null; - } - - /** - * Get all packages - */ - async getPackages(): Promise> { - const stmt = this.db.prepare(` - SELECT package_name as name, COUNT(*) as nodeCount - FROM nodes - GROUP BY package_name - ORDER BY nodeCount DESC - `); - - return stmt.all() as Array<{ name: string; nodeCount: number }>; - } - - /** - * Bulk store nodes (used for database rebuild) - */ - async bulkStoreNodes(nodeInfos: NodeSourceInfo[]): Promise<{ - stored: number; - failed: number; - errors: Array<{ nodeType: string; error: string }>; - }> { - const results = { - stored: 0, - failed: 0, - errors: [] as Array<{ nodeType: string; error: string }> - }; - - // Use transaction for bulk insert - const insertMany = this.db.transaction((nodes: NodeSourceInfo[]) => { - for (const nodeInfo of nodes) { - try { - this.storeNode(nodeInfo); - results.stored++; - } catch (error) { - results.failed++; - results.errors.push({ - nodeType: nodeInfo.nodeType, - error: error instanceof Error ? error.message : 'Unknown error' - }); - } - } - }); - - insertMany(nodeInfos); - - return results; - } - - /** - * Get statistics - */ - async getStatistics(): Promise<{ - totalNodes: number; - totalPackages: number; - totalCodeSize: number; - nodesWithCredentials: number; - averageNodeSize: number; - packageDistribution: Array<{ package: string; count: number }>; - }> { - const stats = this.db.prepare(` - SELECT - COUNT(*) as totalNodes, - COUNT(DISTINCT package_name) as totalPackages, - SUM(code_length) as totalCodeSize, - SUM(has_credentials) as nodesWithCredentials - FROM nodes - `).get() as any; - - const packageDist = this.db.prepare(` - SELECT package_name as package, COUNT(*) as count - FROM nodes - GROUP BY package_name - ORDER BY count DESC - `).all() as Array<{ package: string; count: number }>; - - return { - totalNodes: stats.totalNodes || 0, - totalPackages: stats.totalPackages || 0, - totalCodeSize: stats.totalCodeSize || 0, - nodesWithCredentials: stats.nodesWithCredentials || 0, - averageNodeSize: stats.totalNodes > 0 ? Math.round(stats.totalCodeSize / stats.totalNodes) : 0, - packageDistribution: packageDist - }; - } - - /** - * Rebuild entire database - */ - async rebuildDatabase(): Promise { - logger.info('Starting database rebuild...'); - - // Clear existing data - this.db.exec('DELETE FROM nodes'); - this.db.exec('DELETE FROM extraction_stats'); - - logger.info('Database cleared for rebuild'); - } - - /** - * Save extraction statistics - */ - async saveExtractionStats(stats: { - totalNodes: number; - totalPackages: number; - totalCodeSize: number; - nodesWithCredentials: number; - }): Promise { - const stmt = this.db.prepare(` - INSERT INTO extraction_stats ( - total_nodes, total_packages, total_code_size, nodes_with_credentials - ) VALUES (?, ?, ?, ?) - `); - - stmt.run( - stats.totalNodes, - stats.totalPackages, - stats.totalCodeSize, - stats.nodesWithCredentials - ); - } - - /** - * Close database connection - */ - close(): void { - this.db.close(); - } - - /** - * Convert database row to StoredNode - */ - private rowToStoredNode(row: any): StoredNode { - return { - id: String(row.id), - nodeType: row.node_type, - name: row.name, - packageName: row.package_name, - displayName: row.display_name, - description: row.description, - codeHash: row.code_hash, - codeLength: row.code_length, - sourceLocation: row.source_location, - hasCredentials: row.has_credentials === 1, - extractedAt: new Date(row.extracted_at), - updatedAt: new Date(row.updated_at), - sourceCode: row.source_code, - credentialCode: row.credential_code, - packageInfo: row.package_info ? JSON.parse(row.package_info) : undefined - }; - } - - /** - * Extract display name from source code - */ - private extractDisplayName(sourceCode: string): string | undefined { - const match = sourceCode.match(/displayName:\s*["'`]([^"'`]+)["'`]/); - return match ? match[1] : undefined; - } - - /** - * Extract description from source code - */ - private extractDescription(sourceCode: string): string | undefined { - const match = sourceCode.match(/description:\s*["'`]([^"'`]+)["'`]/); - return match ? match[1] : undefined; - } -} \ No newline at end of file diff --git a/src/utils/auth-middleware.ts b/src/utils/auth-middleware.ts deleted file mode 100644 index 98b3060..0000000 --- a/src/utils/auth-middleware.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { Request, Response, NextFunction } from 'express'; -import { logger } from './logger'; - -/** - * Express middleware for authenticating requests with Bearer tokens - */ -export function authenticateRequest(authToken?: string) { - return (req: Request, res: Response, next: NextFunction): void => { - if (!authToken) { - // No auth required - return next(); - } - - const authHeader = req.headers['authorization']; - - if (!authHeader) { - logger.warn('Missing authorization header', { - ip: req.ip, - path: req.path, - }); - - res.status(401).json({ - error: 'Unauthorized', - message: 'Missing authorization header', - }); - return; - } - - // Support both "Bearer TOKEN" and just "TOKEN" formats - const providedToken = authHeader.startsWith('Bearer ') - ? authHeader.substring(7) - : authHeader; - - if (providedToken !== authToken) { - logger.warn('Invalid authentication token', { - ip: req.ip, - path: req.path, - }); - - res.status(401).json({ - error: 'Unauthorized', - message: 'Invalid authentication token', - }); - return; - } - - next(); - }; -} \ No newline at end of file diff --git a/src/utils/documentation-fetcher.ts b/src/utils/documentation-fetcher.ts index 2ce29ea..d9d5e81 100644 --- a/src/utils/documentation-fetcher.ts +++ b/src/utils/documentation-fetcher.ts @@ -1,241 +1,2 @@ -import { promises as fs } from 'fs'; -import path from 'path'; -import { logger } from './logger'; -import { execSync } from 'child_process'; - -interface NodeDocumentation { - markdown: string; - url: string; - examples?: any[]; -} - -export class DocumentationFetcher { - private docsPath: string; - private docsRepoUrl = 'https://github.com/n8n-io/n8n-docs.git'; - private cloned = false; - - constructor(docsPath?: string) { - this.docsPath = docsPath || path.join(process.cwd(), 'temp', 'n8n-docs'); - } - - /** - * Clone or update the n8n-docs repository - */ - async ensureDocsRepository(): Promise { - try { - // Check if directory exists - const exists = await fs.access(this.docsPath).then(() => true).catch(() => false); - - if (!exists) { - logger.info('Cloning n8n-docs repository...'); - await fs.mkdir(path.dirname(this.docsPath), { recursive: true }); - execSync(`git clone --depth 1 ${this.docsRepoUrl} ${this.docsPath}`, { - stdio: 'pipe' - }); - logger.info('n8n-docs repository cloned successfully'); - } else { - logger.info('Updating n8n-docs repository...'); - execSync('git pull --ff-only', { - cwd: this.docsPath, - stdio: 'pipe' - }); - logger.info('n8n-docs repository updated'); - } - - this.cloned = true; - } catch (error) { - logger.error('Failed to clone/update n8n-docs repository:', error); - throw error; - } - } - - /** - * Get documentation for a specific node - */ - async getNodeDocumentation(nodeType: string): Promise { - if (!this.cloned) { - await this.ensureDocsRepository(); - } - - try { - // Convert node type to documentation path - // e.g., "n8n-nodes-base.if" -> "if" - const nodeName = this.extractNodeName(nodeType); - - // Common documentation paths to check - const possiblePaths = [ - path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'core-nodes', `${nodeName}.md`), - path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'app-nodes', `${nodeName}.md`), - path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'trigger-nodes', `${nodeName}.md`), - path.join(this.docsPath, 'docs', 'code-examples', 'expressions', `${nodeName}.md`), - // Generic search in docs folder - path.join(this.docsPath, 'docs', '**', `${nodeName}.md`) - ]; - - for (const docPath of possiblePaths) { - try { - const content = await fs.readFile(docPath, 'utf-8'); - const url = this.generateDocUrl(docPath); - - return { - markdown: content, - url, - examples: this.extractExamples(content) - }; - } catch (error) { - // Continue to next path - continue; - } - } - - // If no exact match, try to find by searching - const foundPath = await this.searchForNodeDoc(nodeName); - if (foundPath) { - const content = await fs.readFile(foundPath, 'utf-8'); - return { - markdown: content, - url: this.generateDocUrl(foundPath), - examples: this.extractExamples(content) - }; - } - - logger.warn(`No documentation found for node: ${nodeType}`); - return null; - } catch (error) { - logger.error(`Failed to get documentation for ${nodeType}:`, error); - return null; - } - } - - /** - * Extract node name from node type - */ - private extractNodeName(nodeType: string): string { - // Handle different node type formats - // "n8n-nodes-base.if" -> "if" - // "@n8n/n8n-nodes-langchain.Agent" -> "agent" - const parts = nodeType.split('.'); - const name = parts[parts.length - 1]; - return name.toLowerCase(); - } - - /** - * Search for node documentation file - */ - private async searchForNodeDoc(nodeName: string): Promise { - try { - const result = execSync( - `find ${this.docsPath}/docs -name "*.md" -type f | grep -i "${nodeName}" | head -1`, - { encoding: 'utf-8', stdio: 'pipe' } - ).trim(); - - return result || null; - } catch (error) { - return null; - } - } - - /** - * Generate documentation URL from file path - */ - private generateDocUrl(filePath: string): string { - const relativePath = path.relative(this.docsPath, filePath); - const urlPath = relativePath - .replace(/^docs\//, '') - .replace(/\.md$/, '') - .replace(/\\/g, '/'); - - return `https://docs.n8n.io/${urlPath}`; - } - - /** - * Extract code examples from markdown content - */ - private extractExamples(markdown: string): any[] { - const examples: any[] = []; - - // Extract JSON code blocks - const jsonCodeBlockRegex = /```json\n([\s\S]*?)```/g; - let match; - - while ((match = jsonCodeBlockRegex.exec(markdown)) !== null) { - try { - const json = JSON.parse(match[1]); - examples.push(json); - } catch (error) { - // Not valid JSON, skip - } - } - - // Extract workflow examples - const workflowExampleRegex = /## Example.*?\n([\s\S]*?)(?=\n##|\n#|$)/gi; - while ((match = workflowExampleRegex.exec(markdown)) !== null) { - const exampleText = match[1]; - // Try to find JSON in the example section - const jsonMatch = exampleText.match(/```json\n([\s\S]*?)```/); - if (jsonMatch) { - try { - const json = JSON.parse(jsonMatch[1]); - examples.push(json); - } catch (error) { - // Not valid JSON - } - } - } - - return examples; - } - - /** - * Get all available documentation files - */ - async getAllDocumentationFiles(): Promise> { - if (!this.cloned) { - await this.ensureDocsRepository(); - } - - const docMap = new Map(); - - try { - const findDocs = execSync( - `find ${this.docsPath}/docs -name "*.md" -type f | grep -E "(core-nodes|app-nodes|trigger-nodes)/"`, - { encoding: 'utf-8', stdio: 'pipe' } - ).trim().split('\n'); - - for (const docPath of findDocs) { - if (!docPath) continue; - - const filename = path.basename(docPath, '.md'); - const content = await fs.readFile(docPath, 'utf-8'); - - // Try to extract the node type from the content - const nodeTypeMatch = content.match(/node[_-]?type[:\s]+["']?([^"'\s]+)["']?/i); - if (nodeTypeMatch) { - docMap.set(nodeTypeMatch[1], docPath); - } else { - // Use filename as fallback - docMap.set(filename, docPath); - } - } - - logger.info(`Found ${docMap.size} documentation files`); - return docMap; - } catch (error) { - logger.error('Failed to get documentation files:', error); - return docMap; - } - } - - /** - * Clean up cloned repository - */ - async cleanup(): Promise { - try { - await fs.rm(this.docsPath, { recursive: true, force: true }); - this.cloned = false; - logger.info('Cleaned up documentation repository'); - } catch (error) { - logger.error('Failed to cleanup docs repository:', error); - } - } -} \ No newline at end of file +// Re-export everything from enhanced-documentation-fetcher +export * from './enhanced-documentation-fetcher'; \ No newline at end of file diff --git a/src/utils/enhanced-documentation-fetcher.ts b/src/utils/enhanced-documentation-fetcher.ts new file mode 100644 index 0000000..c8ec646 --- /dev/null +++ b/src/utils/enhanced-documentation-fetcher.ts @@ -0,0 +1,621 @@ +import { promises as fs } from 'fs'; +import path from 'path'; +import { logger } from './logger'; +import { execSync } from 'child_process'; + +// Enhanced documentation structure with rich content +export interface EnhancedNodeDocumentation { + markdown: string; + url: string; + title?: string; + description?: string; + operations?: OperationInfo[]; + apiMethods?: ApiMethodMapping[]; + examples?: CodeExample[]; + templates?: TemplateInfo[]; + relatedResources?: RelatedResource[]; + requiredScopes?: string[]; + metadata?: DocumentationMetadata; +} + +export interface OperationInfo { + resource: string; + operation: string; + description: string; + subOperations?: string[]; +} + +export interface ApiMethodMapping { + resource: string; + operation: string; + apiMethod: string; + apiUrl: string; +} + +export interface CodeExample { + title?: string; + description?: string; + type: 'json' | 'javascript' | 'yaml' | 'text'; + code: string; + language?: string; +} + +export interface TemplateInfo { + name: string; + description?: string; + url?: string; +} + +export interface RelatedResource { + title: string; + url: string; + type: 'documentation' | 'api' | 'tutorial' | 'external'; +} + +export interface DocumentationMetadata { + contentType?: string[]; + priority?: string; + tags?: string[]; + lastUpdated?: Date; +} + +export class EnhancedDocumentationFetcher { + private docsPath: string; + private docsRepoUrl = 'https://github.com/n8n-io/n8n-docs.git'; + private cloned = false; + + constructor(docsPath?: string) { + this.docsPath = docsPath || path.join(process.cwd(), 'temp', 'n8n-docs'); + } + + /** + * Clone or update the n8n-docs repository + */ + async ensureDocsRepository(): Promise { + try { + const exists = await fs.access(this.docsPath).then(() => true).catch(() => false); + + if (!exists) { + logger.info('Cloning n8n-docs repository...'); + await fs.mkdir(path.dirname(this.docsPath), { recursive: true }); + execSync(`git clone --depth 1 ${this.docsRepoUrl} ${this.docsPath}`, { + stdio: 'pipe' + }); + logger.info('n8n-docs repository cloned successfully'); + } else { + logger.info('Updating n8n-docs repository...'); + execSync('git pull --ff-only', { + cwd: this.docsPath, + stdio: 'pipe' + }); + logger.info('n8n-docs repository updated'); + } + + this.cloned = true; + } catch (error) { + logger.error('Failed to clone/update n8n-docs repository:', error); + throw error; + } + } + + /** + * Get enhanced documentation for a specific node + */ + async getEnhancedNodeDocumentation(nodeType: string): Promise { + if (!this.cloned) { + await this.ensureDocsRepository(); + } + + try { + const nodeName = this.extractNodeName(nodeType); + + // Common documentation paths to check + const possiblePaths = [ + path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'app-nodes', `${nodeType}.md`), + path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'core-nodes', `${nodeType}.md`), + path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'trigger-nodes', `${nodeType}.md`), + path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'core-nodes', `${nodeName}.md`), + path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'app-nodes', `${nodeName}.md`), + path.join(this.docsPath, 'docs', 'integrations', 'builtin', 'trigger-nodes', `${nodeName}.md`), + ]; + + for (const docPath of possiblePaths) { + try { + const content = await fs.readFile(docPath, 'utf-8'); + logger.debug(`Checking doc path: ${docPath}`); + + // Skip credential documentation files + if (this.isCredentialDoc(docPath, content)) { + logger.debug(`Skipping credential doc: ${docPath}`); + continue; + } + + logger.info(`Found documentation for ${nodeType} at: ${docPath}`); + return this.parseEnhancedDocumentation(content, docPath); + } catch (error) { + // File doesn't exist, continue + continue; + } + } + + // If no exact match, try to find by searching + logger.debug(`No exact match found, searching for ${nodeType}...`); + const foundPath = await this.searchForNodeDoc(nodeType); + if (foundPath) { + logger.info(`Found documentation via search at: ${foundPath}`); + const content = await fs.readFile(foundPath, 'utf-8'); + + if (!this.isCredentialDoc(foundPath, content)) { + return this.parseEnhancedDocumentation(content, foundPath); + } + } + + logger.warn(`No documentation found for node: ${nodeType}`); + return null; + } catch (error) { + logger.error(`Failed to get documentation for ${nodeType}:`, error); + return null; + } + } + + /** + * Parse markdown content into enhanced documentation structure + */ + private parseEnhancedDocumentation(markdown: string, filePath: string): EnhancedNodeDocumentation { + const doc: EnhancedNodeDocumentation = { + markdown, + url: this.generateDocUrl(filePath), + }; + + // Extract frontmatter metadata + const metadata = this.extractFrontmatter(markdown); + if (metadata) { + doc.metadata = metadata; + doc.title = metadata.title; + doc.description = metadata.description; + } + + // Extract title and description from content if not in frontmatter + if (!doc.title) { + doc.title = this.extractTitle(markdown); + } + if (!doc.description) { + doc.description = this.extractDescription(markdown); + } + + // Extract operations + doc.operations = this.extractOperations(markdown); + + // Extract API method mappings + doc.apiMethods = this.extractApiMethods(markdown); + + // Extract code examples + doc.examples = this.extractCodeExamples(markdown); + + // Extract templates + doc.templates = this.extractTemplates(markdown); + + // Extract related resources + doc.relatedResources = this.extractRelatedResources(markdown); + + // Extract required scopes + doc.requiredScopes = this.extractRequiredScopes(markdown); + + return doc; + } + + /** + * Extract frontmatter metadata + */ + private extractFrontmatter(markdown: string): any { + const frontmatterMatch = markdown.match(/^---\n([\s\S]*?)\n---/); + if (!frontmatterMatch) return null; + + const frontmatter: any = {}; + const lines = frontmatterMatch[1].split('\n'); + + for (const line of lines) { + if (line.includes(':')) { + const [key, ...valueParts] = line.split(':'); + const value = valueParts.join(':').trim(); + + // Parse arrays + if (value.startsWith('[') && value.endsWith(']')) { + frontmatter[key.trim()] = value + .slice(1, -1) + .split(',') + .map(v => v.trim()); + } else { + frontmatter[key.trim()] = value; + } + } + } + + return frontmatter; + } + + /** + * Extract title from markdown + */ + private extractTitle(markdown: string): string | undefined { + const match = markdown.match(/^#\s+(.+)$/m); + return match ? match[1].trim() : undefined; + } + + /** + * Extract description from markdown + */ + private extractDescription(markdown: string): string | undefined { + // Remove frontmatter + const content = markdown.replace(/^---[\s\S]*?---\n/, ''); + + // Find first paragraph after title + const lines = content.split('\n'); + let foundTitle = false; + let description = ''; + + for (const line of lines) { + if (line.startsWith('#')) { + foundTitle = true; + continue; + } + + if (foundTitle && line.trim() && !line.startsWith('#') && !line.startsWith('*') && !line.startsWith('-')) { + description = line.trim(); + break; + } + } + + return description || undefined; + } + + /** + * Extract operations from markdown + */ + private extractOperations(markdown: string): OperationInfo[] { + const operations: OperationInfo[] = []; + + // Find operations section + const operationsMatch = markdown.match(/##\s+Operations\s*\n([\s\S]*?)(?=\n##|\n#|$)/i); + if (!operationsMatch) return operations; + + const operationsText = operationsMatch[1]; + + // Parse operation structure - handle nested bullet points + let currentResource: string | null = null; + const lines = operationsText.split('\n'); + + for (const line of lines) { + const trimmedLine = line.trim(); + + // Skip empty lines + if (!trimmedLine) continue; + + // Resource level - non-indented bullet with bold text (e.g., "* **Channel**") + if (line.match(/^\*\s+\*\*[^*]+\*\*\s*$/) && !line.match(/^\s+/)) { + const match = trimmedLine.match(/^\*\s+\*\*([^*]+)\*\*/); + if (match) { + currentResource = match[1].trim(); + } + continue; + } + + // Skip if we don't have a current resource + if (!currentResource) continue; + + // Operation level - indented bullets (any whitespace + *) + if (line.match(/^\s+\*\s+/) && currentResource) { + // Extract operation name and description + const operationMatch = trimmedLine.match(/^\*\s+\*\*([^*]+)\*\*(.*)$/); + if (operationMatch) { + const operation = operationMatch[1].trim(); + let description = operationMatch[2].trim(); + + // Clean up description + description = description.replace(/^:\s*/, '').replace(/\.$/, '').trim(); + + operations.push({ + resource: currentResource, + operation, + description: description || operation, + }); + } else { + // Handle operations without bold formatting or with different format + const simpleMatch = trimmedLine.match(/^\*\s+(.+)$/); + if (simpleMatch) { + const text = simpleMatch[1].trim(); + // Split by colon to separate operation from description + const colonIndex = text.indexOf(':'); + if (colonIndex > 0) { + operations.push({ + resource: currentResource, + operation: text.substring(0, colonIndex).trim(), + description: text.substring(colonIndex + 1).trim() || text, + }); + } else { + operations.push({ + resource: currentResource, + operation: text, + description: text, + }); + } + } + } + } + } + + return operations; + } + + /** + * Extract API method mappings from markdown tables + */ + private extractApiMethods(markdown: string): ApiMethodMapping[] { + const apiMethods: ApiMethodMapping[] = []; + + // Find API method tables + const tableRegex = /\|.*Resource.*\|.*Operation.*\|.*(?:Slack API method|API method|Method).*\|[\s\S]*?\n(?=\n[^|]|$)/gi; + const tables = markdown.match(tableRegex); + + if (!tables) return apiMethods; + + for (const table of tables) { + const rows = table.split('\n').filter(row => row.trim() && !row.includes('---')); + + // Skip header row + for (let i = 1; i < rows.length; i++) { + const cells = rows[i].split('|').map(cell => cell.trim()).filter(Boolean); + + if (cells.length >= 3) { + const resource = cells[0]; + const operation = cells[1]; + const apiMethodCell = cells[2]; + + // Extract API method and URL from markdown link + const linkMatch = apiMethodCell.match(/\[([^\]]+)\]\(([^)]+)\)/); + + if (linkMatch) { + apiMethods.push({ + resource, + operation, + apiMethod: linkMatch[1], + apiUrl: linkMatch[2], + }); + } else { + apiMethods.push({ + resource, + operation, + apiMethod: apiMethodCell, + apiUrl: '', + }); + } + } + } + } + + return apiMethods; + } + + /** + * Extract code examples from markdown + */ + private extractCodeExamples(markdown: string): CodeExample[] { + const examples: CodeExample[] = []; + + // Extract all code blocks with language + const codeBlockRegex = /```(\w+)?\n([\s\S]*?)```/g; + let match; + + while ((match = codeBlockRegex.exec(markdown)) !== null) { + const language = match[1] || 'text'; + const code = match[2].trim(); + + // Look for title or description before the code block + const beforeCodeIndex = match.index; + const beforeText = markdown.substring(Math.max(0, beforeCodeIndex - 200), beforeCodeIndex); + const titleMatch = beforeText.match(/(?:###|####)\s+(.+)$/m); + + const example: CodeExample = { + type: this.mapLanguageToType(language), + language, + code, + }; + + if (titleMatch) { + example.title = titleMatch[1].trim(); + } + + // Try to parse JSON examples + if (language === 'json') { + try { + JSON.parse(code); + examples.push(example); + } catch (e) { + // Skip invalid JSON + } + } else { + examples.push(example); + } + } + + return examples; + } + + /** + * Extract template information + */ + private extractTemplates(markdown: string): TemplateInfo[] { + const templates: TemplateInfo[] = []; + + // Look for template widget + const templateWidgetMatch = markdown.match(/\[\[\s*templatesWidget\s*\(\s*[^,]+,\s*'([^']+)'\s*\)\s*\]\]/); + if (templateWidgetMatch) { + templates.push({ + name: templateWidgetMatch[1], + description: `Templates for ${templateWidgetMatch[1]}`, + }); + } + + return templates; + } + + /** + * Extract related resources + */ + private extractRelatedResources(markdown: string): RelatedResource[] { + const resources: RelatedResource[] = []; + + // Find related resources section + const relatedMatch = markdown.match(/##\s+(?:Related resources|Related|Resources)\s*\n([\s\S]*?)(?=\n##|\n#|$)/i); + if (!relatedMatch) return resources; + + const relatedText = relatedMatch[1]; + + // Extract links + const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g; + let match; + + while ((match = linkRegex.exec(relatedText)) !== null) { + const title = match[1]; + const url = match[2]; + + // Determine resource type + let type: RelatedResource['type'] = 'external'; + if (url.includes('docs.n8n.io') || url.startsWith('/')) { + type = 'documentation'; + } else if (url.includes('api.')) { + type = 'api'; + } + + resources.push({ title, url, type }); + } + + return resources; + } + + /** + * Extract required scopes + */ + private extractRequiredScopes(markdown: string): string[] { + const scopes: string[] = []; + + // Find required scopes section + const scopesMatch = markdown.match(/##\s+(?:Required scopes|Scopes)\s*\n([\s\S]*?)(?=\n##|\n#|$)/i); + if (!scopesMatch) return scopes; + + const scopesText = scopesMatch[1]; + + // Extract scope patterns (common formats) + const scopeRegex = /`([a-z:._-]+)`/gi; + let match; + + while ((match = scopeRegex.exec(scopesText)) !== null) { + const scope = match[1]; + if (scope.includes(':') || scope.includes('.')) { + scopes.push(scope); + } + } + + return [...new Set(scopes)]; // Remove duplicates + } + + /** + * Map language to code example type + */ + private mapLanguageToType(language: string): CodeExample['type'] { + switch (language.toLowerCase()) { + case 'json': + return 'json'; + case 'js': + case 'javascript': + case 'typescript': + case 'ts': + return 'javascript'; + case 'yaml': + case 'yml': + return 'yaml'; + default: + return 'text'; + } + } + + /** + * Check if this is a credential documentation + */ + private isCredentialDoc(filePath: string, content: string): boolean { + return filePath.includes('/credentials/') || + (content.includes('title: ') && + content.includes(' credentials') && + !content.includes(' node documentation')); + } + + /** + * Extract node name from node type + */ + private extractNodeName(nodeType: string): string { + const parts = nodeType.split('.'); + const name = parts[parts.length - 1]; + return name.toLowerCase(); + } + + /** + * Search for node documentation file + */ + private async searchForNodeDoc(nodeType: string): Promise { + try { + // First try exact match with nodeType + let result = execSync( + `find ${this.docsPath}/docs/integrations/builtin -name "${nodeType}.md" -type f | grep -v credentials | head -1`, + { encoding: 'utf-8', stdio: 'pipe' } + ).trim(); + + if (result) return result; + + // Try lowercase nodeType + const lowerNodeType = nodeType.toLowerCase(); + result = execSync( + `find ${this.docsPath}/docs/integrations/builtin -name "${lowerNodeType}.md" -type f | grep -v credentials | head -1`, + { encoding: 'utf-8', stdio: 'pipe' } + ).trim(); + + if (result) return result; + + // Try node name pattern but exclude trigger nodes + const nodeName = this.extractNodeName(nodeType); + result = execSync( + `find ${this.docsPath}/docs/integrations/builtin -name "*${nodeName}.md" -type f | grep -v credentials | grep -v trigger | head -1`, + { encoding: 'utf-8', stdio: 'pipe' } + ).trim(); + + return result || null; + } catch (error) { + return null; + } + } + + /** + * Generate documentation URL from file path + */ + private generateDocUrl(filePath: string): string { + const relativePath = path.relative(this.docsPath, filePath); + const urlPath = relativePath + .replace(/^docs\//, '') + .replace(/\.md$/, '') + .replace(/\\/g, '/'); + + return `https://docs.n8n.io/${urlPath}`; + } + + /** + * Clean up cloned repository + */ + async cleanup(): Promise { + try { + await fs.rm(this.docsPath, { recursive: true, force: true }); + this.cloned = false; + logger.info('Cleaned up documentation repository'); + } catch (error) { + logger.error('Failed to cleanup docs repository:', error); + } + } +} \ No newline at end of file diff --git a/src/utils/example-generator.ts b/src/utils/example-generator.ts index 6469a24..5c132a4 100644 --- a/src/utils/example-generator.ts +++ b/src/utils/example-generator.ts @@ -1,267 +1,140 @@ -import { logger } from './logger'; - -interface NodeExample { - nodes: any[]; - connections: any; - pinData?: any; - meta?: any; -} - -interface NodeParameter { - name: string; - type: string; - default?: any; - options?: any[]; - displayOptions?: any; -} - +/** + * Generates example workflows and parameters for n8n nodes + */ export class ExampleGenerator { /** - * Generate example workflow for a node + * Generate an example workflow from node definition */ - static generateNodeExample(nodeType: string, nodeData: any): NodeExample { - const nodeName = this.getNodeName(nodeType); - const nodeId = this.generateNodeId(); + static generateFromNodeDefinition(nodeDefinition: any): any { + const nodeName = nodeDefinition.displayName || 'Example Node'; + const nodeType = nodeDefinition.name || 'n8n-nodes-base.exampleNode'; - // Base example structure - const example: NodeExample = { - nodes: [{ - parameters: this.generateExampleParameters(nodeType, nodeData), - type: nodeType, - typeVersion: nodeData.typeVersion || 1, - position: [220, 120], - id: nodeId, - name: nodeName - }], - connections: { - [nodeName]: { - main: [[]] - } - }, - pinData: {}, - meta: { - templateCredsSetupCompleted: true, - instanceId: this.generateInstanceId() - } + return { + name: `${nodeName} Example Workflow`, + nodes: [ + { + parameters: this.generateExampleParameters(nodeDefinition), + id: this.generateNodeId(), + name: nodeName, + type: nodeType, + typeVersion: nodeDefinition.version || 1, + position: [250, 300], + }, + ], + connections: {}, + active: false, + settings: {}, + tags: ['example', 'generated'], }; - - // Add specific configurations based on node type - this.addNodeSpecificConfig(nodeType, example, nodeData); - - return example; } /** - * Generate example parameters based on node type + * Generate example parameters based on node properties */ - private static generateExampleParameters(nodeType: string, nodeData: any): any { + static generateExampleParameters(nodeDefinition: any): any { const params: any = {}; - // Extract node name for specific handling - const nodeName = nodeType.split('.').pop()?.toLowerCase() || ''; - - // Common node examples - switch (nodeName) { - case 'if': - return { - conditions: { - options: { - caseSensitive: true, - leftValue: "", - typeValidation: "strict", - version: 2 - }, - conditions: [{ - id: this.generateNodeId(), - leftValue: "={{ $json }}", - rightValue: "", - operator: { - type: "object", - operation: "notEmpty", - singleValue: true - } - }], - combinator: "and" - }, - options: {} - }; - - case 'webhook': - return { - httpMethod: "POST", - path: "webhook-path", - responseMode: "onReceived", - responseData: "allEntries", - options: {} - }; - - case 'httprequest': - return { - method: "GET", - url: "https://api.example.com/data", - authentication: "none", - options: {}, - headerParametersUi: { - parameter: [] - } - }; - - case 'function': - return { - functionCode: "// Add your JavaScript code here\nreturn $input.all();" - }; - - case 'set': - return { - mode: "manual", - duplicateItem: false, - values: { - string: [{ - name: "myField", - value: "myValue" - }] - } - }; - - case 'split': - return { - batchSize: 10, - options: {} - }; - - default: - // Generate generic parameters from node properties - return this.generateGenericParameters(nodeData); - } - } - - /** - * Generate generic parameters from node properties - */ - private static generateGenericParameters(nodeData: any): any { - const params: any = {}; - - if (nodeData.properties) { - for (const prop of nodeData.properties) { - if (prop.default !== undefined) { - params[prop.name] = prop.default; - } else if (prop.type === 'string') { - params[prop.name] = ''; - } else if (prop.type === 'number') { - params[prop.name] = 0; - } else if (prop.type === 'boolean') { - params[prop.name] = false; - } else if (prop.type === 'options' && prop.options?.length > 0) { - params[prop.name] = prop.options[0].value; + // If properties are available, generate examples based on them + if (Array.isArray(nodeDefinition.properties)) { + for (const prop of nodeDefinition.properties) { + if (prop.name && prop.type) { + params[prop.name] = this.generateExampleValue(prop); } } } + // Add common parameters based on node type + if (nodeDefinition.displayName?.toLowerCase().includes('trigger')) { + params.pollTimes = { + item: [ + { + mode: 'everyMinute', + }, + ], + }; + } + return params; } /** - * Add node-specific configurations + * Generate example value based on property definition */ - private static addNodeSpecificConfig(nodeType: string, example: NodeExample, nodeData: any): void { - const nodeName = nodeType.split('.').pop()?.toLowerCase() || ''; - - // Add specific connection structures for different node types - switch (nodeName) { - case 'if': - // IF node has true/false outputs - example.connections[example.nodes[0].name] = { - main: [[], []] // Two outputs: true, false - }; - break; + private static generateExampleValue(property: any): any { + switch (property.type) { + case 'string': + if (property.name.toLowerCase().includes('url')) { + return 'https://example.com'; + } + if (property.name.toLowerCase().includes('email')) { + return 'user@example.com'; + } + if (property.name.toLowerCase().includes('name')) { + return 'Example Name'; + } + return property.default || 'example-value'; - case 'switch': - // Switch node can have multiple outputs - const outputs = nodeData.outputs || 3; - example.connections[example.nodes[0].name] = { - main: Array(outputs).fill([]) - }; - break; + case 'number': + return property.default || 10; - case 'merge': - // Merge node has multiple inputs - example.nodes[0].position = [400, 120]; - // Add dummy input nodes - example.nodes.push({ - parameters: {}, - type: "n8n-nodes-base.noOp", - typeVersion: 1, - position: [200, 60], - id: this.generateNodeId(), - name: "Input 1" - }); - example.nodes.push({ - parameters: {}, - type: "n8n-nodes-base.noOp", - typeVersion: 1, - position: [200, 180], - id: this.generateNodeId(), - name: "Input 2" - }); - example.connections = { - "Input 1": { main: [[{ node: example.nodes[0].name, type: "main", index: 0 }]] }, - "Input 2": { main: [[{ node: example.nodes[0].name, type: "main", index: 1 }]] }, - [example.nodes[0].name]: { main: [[]] } - }; - break; - } - - // Add credentials if needed - if (nodeData.credentials?.length > 0) { - example.nodes[0].credentials = {}; - for (const cred of nodeData.credentials) { - example.nodes[0].credentials[cred.name] = { - id: this.generateNodeId(), - name: `${cred.name} account` - }; - } + case 'boolean': + return property.default !== undefined ? property.default : true; + + case 'options': + if (property.options && property.options.length > 0) { + return property.options[0].value; + } + return property.default || ''; + + case 'collection': + case 'fixedCollection': + return {}; + + default: + return property.default || null; } } /** - * Extract display name from node type - */ - private static getNodeName(nodeType: string): string { - const parts = nodeType.split('.'); - const name = parts[parts.length - 1]; - return name.charAt(0).toUpperCase() + name.slice(1); - } - - /** - * Generate a random node ID + * Generate a unique node ID */ private static generateNodeId(): string { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { - const r = Math.random() * 16 | 0; - const v = c === 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); + return Math.random().toString(36).substring(2, 15) + + Math.random().toString(36).substring(2, 15); } /** - * Generate instance ID + * Generate example based on node operations */ - private static generateInstanceId(): string { - return Array(64).fill(0).map(() => Math.floor(Math.random() * 16).toString(16)).join(''); - } - - /** - * Generate example from node definition - */ - static generateFromNodeDefinition(nodeDefinition: any): NodeExample { - const nodeType = nodeDefinition.description?.name || 'n8n-nodes-base.node'; - const nodeData = { - typeVersion: nodeDefinition.description?.version || 1, - properties: nodeDefinition.description?.properties || [], - credentials: nodeDefinition.description?.credentials || [], - outputs: nodeDefinition.description?.outputs || ['main'] - }; + static generateFromOperations(operations: any[]): any { + const examples: any[] = []; - return this.generateNodeExample(nodeType, nodeData); + if (!operations || operations.length === 0) { + return examples; + } + + // Group operations by resource + const resourceMap = new Map(); + for (const op of operations) { + if (!resourceMap.has(op.resource)) { + resourceMap.set(op.resource, []); + } + resourceMap.get(op.resource)!.push(op); + } + + // Generate example for each resource + for (const [resource, ops] of resourceMap) { + examples.push({ + resource, + operation: ops[0].operation, + description: `Example: ${ops[0].description}`, + parameters: { + resource, + operation: ops[0].operation, + }, + }); + } + + return examples; } } \ No newline at end of file diff --git a/src/utils/node-source-extractor.ts b/src/utils/node-source-extractor.ts index a512e16..7510023 100644 --- a/src/utils/node-source-extractor.ts +++ b/src/utils/node-source-extractor.ts @@ -21,6 +21,8 @@ export class NodeSourceExtractor { '/n8n-modules', // Common n8n installation paths process.env.N8N_CUSTOM_EXTENSIONS || '', + // Additional local path for testing + path.join(process.cwd(), 'node_modules'), ].filter(Boolean); /** @@ -75,35 +77,45 @@ export class NodeSourceExtractor { nodeName: string ): Promise { try { - // First, try standard patterns - const standardPatterns = [ - `${packageName}/dist/nodes/${nodeName}/${nodeName}.node.js`, - `${packageName}/dist/nodes/${nodeName}.node.js`, - `${packageName}/nodes/${nodeName}/${nodeName}.node.js`, - `${packageName}/nodes/${nodeName}.node.js`, - `${nodeName}/${nodeName}.node.js`, - `${nodeName}.node.js`, + // Try both the provided case and capitalized first letter + const nodeNameVariants = [ + nodeName, + nodeName.charAt(0).toUpperCase() + nodeName.slice(1), // Capitalize first letter + nodeName.toLowerCase(), // All lowercase + nodeName.toUpperCase(), // All uppercase ]; + + // First, try standard patterns with all case variants + for (const nameVariant of nodeNameVariants) { + const standardPatterns = [ + `${packageName}/dist/nodes/${nameVariant}/${nameVariant}.node.js`, + `${packageName}/dist/nodes/${nameVariant}.node.js`, + `${packageName}/nodes/${nameVariant}/${nameVariant}.node.js`, + `${packageName}/nodes/${nameVariant}.node.js`, + `${nameVariant}/${nameVariant}.node.js`, + `${nameVariant}.node.js`, + ]; - // Additional patterns for nested node structures (e.g., agents/Agent) - const nestedPatterns = [ - `${packageName}/dist/nodes/*/${nodeName}/${nodeName}.node.js`, - `${packageName}/dist/nodes/**/${nodeName}/${nodeName}.node.js`, - `${packageName}/nodes/*/${nodeName}/${nodeName}.node.js`, - `${packageName}/nodes/**/${nodeName}/${nodeName}.node.js`, - ]; + // Additional patterns for nested node structures (e.g., agents/Agent) + const nestedPatterns = [ + `${packageName}/dist/nodes/*/${nameVariant}/${nameVariant}.node.js`, + `${packageName}/dist/nodes/**/${nameVariant}/${nameVariant}.node.js`, + `${packageName}/nodes/*/${nameVariant}/${nameVariant}.node.js`, + `${packageName}/nodes/**/${nameVariant}/${nameVariant}.node.js`, + ]; - // Try standard patterns first - for (const pattern of standardPatterns) { - const fullPath = path.join(basePath, pattern); - const result = await this.tryLoadNodeFile(fullPath, packageName, nodeName, basePath); - if (result) return result; - } + // Try standard patterns first + for (const pattern of standardPatterns) { + const fullPath = path.join(basePath, pattern); + const result = await this.tryLoadNodeFile(fullPath, packageName, nodeName, basePath); + if (result) return result; + } - // Try nested patterns (with glob-like search) - for (const pattern of nestedPatterns) { - const result = await this.searchWithGlobPattern(basePath, pattern, packageName, nodeName); - if (result) return result; + // Try nested patterns (with glob-like search) + for (const pattern of nestedPatterns) { + const result = await this.searchWithGlobPattern(basePath, pattern, packageName, nodeName); + if (result) return result; + } } // If basePath contains .pnpm, search in pnpm structure @@ -250,13 +262,49 @@ export class NodeSourceExtractor { try { const sourceCode = await fs.readFile(fullPath, 'utf-8'); - // Try to find credential file - const credentialPath = fullPath.replace('.node.js', '.credentials.js'); + // Try to find credential files let credentialCode: string | undefined; + + // First, try alongside the node file + const credentialPath = fullPath.replace('.node.js', '.credentials.js'); try { credentialCode = await fs.readFile(credentialPath, 'utf-8'); } catch { - // Credential file is optional + // Try in the credentials directory + const possibleCredentialPaths = [ + // Standard n8n structure: dist/credentials/NodeNameApi.credentials.js + path.join(packageBasePath, packageName, 'dist/credentials', `${nodeName}Api.credentials.js`), + path.join(packageBasePath, packageName, 'dist/credentials', `${nodeName}OAuth2Api.credentials.js`), + path.join(packageBasePath, packageName, 'credentials', `${nodeName}Api.credentials.js`), + path.join(packageBasePath, packageName, 'credentials', `${nodeName}OAuth2Api.credentials.js`), + // Without packageName in path + path.join(packageBasePath, 'dist/credentials', `${nodeName}Api.credentials.js`), + path.join(packageBasePath, 'dist/credentials', `${nodeName}OAuth2Api.credentials.js`), + path.join(packageBasePath, 'credentials', `${nodeName}Api.credentials.js`), + path.join(packageBasePath, 'credentials', `${nodeName}OAuth2Api.credentials.js`), + // Try relative to node location + path.join(path.dirname(path.dirname(fullPath)), 'credentials', `${nodeName}Api.credentials.js`), + path.join(path.dirname(path.dirname(fullPath)), 'credentials', `${nodeName}OAuth2Api.credentials.js`), + path.join(path.dirname(path.dirname(path.dirname(fullPath))), 'credentials', `${nodeName}Api.credentials.js`), + path.join(path.dirname(path.dirname(path.dirname(fullPath))), 'credentials', `${nodeName}OAuth2Api.credentials.js`), + ]; + + // Try to find any credential file + const allCredentials: string[] = []; + for (const credPath of possibleCredentialPaths) { + try { + const content = await fs.readFile(credPath, 'utf-8'); + allCredentials.push(content); + logger.debug(`Found credential file at: ${credPath}`); + } catch { + // Continue searching + } + } + + // If we found credentials, combine them + if (allCredentials.length > 0) { + credentialCode = allCredentials.join('\n\n// --- Next Credential File ---\n\n'); + } } // Try to get package.json info @@ -266,12 +314,16 @@ export class NodeSourceExtractor { path.join(packageBasePath, packageName, 'package.json'), path.join(path.dirname(path.dirname(fullPath)), 'package.json'), path.join(path.dirname(path.dirname(path.dirname(fullPath))), 'package.json'), + // Try to go up from the node location to find package.json + path.join(fullPath.split('/dist/')[0], 'package.json'), + path.join(fullPath.split('/nodes/')[0], 'package.json'), ]; for (const packageJsonPath of possiblePackageJsonPaths) { try { const packageJson = await fs.readFile(packageJsonPath, 'utf-8'); packageInfo = JSON.parse(packageJson); + logger.debug(`Found package.json at: ${packageJsonPath}`); break; } catch { // Try next path @@ -295,10 +347,26 @@ export class NodeSourceExtractor { */ async listAvailableNodes(category?: string, search?: string): Promise { const nodes: any[] = []; + const seenNodes = new Set(); // Track unique nodes for (const basePath of this.n8nBasePaths) { try { - await this.scanDirectoryForNodes(basePath, nodes, category, search); + // Check for n8n-nodes-base specifically + const n8nNodesBasePath = path.join(basePath, 'n8n-nodes-base', 'dist', 'nodes'); + try { + await fs.access(n8nNodesBasePath); + await this.scanDirectoryForNodes(n8nNodesBasePath, nodes, category, search, seenNodes); + } catch { + // Try without dist + const altPath = path.join(basePath, 'n8n-nodes-base', 'nodes'); + try { + await fs.access(altPath); + await this.scanDirectoryForNodes(altPath, nodes, category, search, seenNodes); + } catch { + // Try the base path directly + await this.scanDirectoryForNodes(basePath, nodes, category, search, seenNodes); + } + } } catch (error) { logger.debug(`Failed to scan ${basePath}: ${error}`); } @@ -314,7 +382,8 @@ export class NodeSourceExtractor { dirPath: string, nodes: any[], category?: string, - search?: string + search?: string, + seenNodes?: Set ): Promise { try { const entries = await fs.readdir(dirPath, { withFileTypes: true }); @@ -330,8 +399,15 @@ export class NodeSourceExtractor { const descriptionMatch = content.match(/description:\s*['"`]([^'"`]+)['"`]/); if (nameMatch) { + const nodeName = entry.name.replace('.node.js', ''); + + // Skip if we've already seen this node + if (seenNodes && seenNodes.has(nodeName)) { + continue; + } + const nodeInfo = { - name: entry.name.replace('.node.js', ''), + name: nodeName, displayName: nameMatch[1], description: descriptionMatch ? descriptionMatch[1] : '', location: fullPath, @@ -347,6 +423,9 @@ export class NodeSourceExtractor { } nodes.push(nodeInfo); + if (seenNodes) { + seenNodes.add(nodeName); + } } } catch { // Skip files we can't read @@ -354,10 +433,10 @@ export class NodeSourceExtractor { } else if (entry.isDirectory()) { // Special handling for .pnpm directories if (entry.name === '.pnpm') { - await this.scanPnpmDirectory(path.join(dirPath, entry.name), nodes, category, search); + await this.scanPnpmDirectory(path.join(dirPath, entry.name), nodes, category, search, seenNodes); } else if (entry.name !== 'node_modules') { // Recursively scan subdirectories - await this.scanDirectoryForNodes(path.join(dirPath, entry.name), nodes, category, search); + await this.scanDirectoryForNodes(path.join(dirPath, entry.name), nodes, category, search, seenNodes); } } } @@ -373,7 +452,8 @@ export class NodeSourceExtractor { pnpmPath: string, nodes: any[], category?: string, - search?: string + search?: string, + seenNodes?: Set ): Promise { try { const entries = await fs.readdir(pnpmPath); @@ -382,7 +462,7 @@ export class NodeSourceExtractor { const entryPath = path.join(pnpmPath, entry, 'node_modules'); try { await fs.access(entryPath); - await this.scanDirectoryForNodes(entryPath, nodes, category, search); + await this.scanDirectoryForNodes(entryPath, nodes, category, search, seenNodes); } catch { // Skip if node_modules doesn't exist } diff --git a/tests/debug-slack-doc.js b/tests/debug-slack-doc.js new file mode 100644 index 0000000..00f9971 --- /dev/null +++ b/tests/debug-slack-doc.js @@ -0,0 +1,51 @@ +#!/usr/bin/env node + +const { execSync } = require('child_process'); +const path = require('path'); + +const tempDir = path.join(process.cwd(), 'temp', 'n8n-docs'); + +console.log('๐Ÿ” Debugging Slack documentation search...\n'); + +// Search for all Slack related files +console.log('All Slack-related markdown files:'); +try { + const allSlackFiles = execSync( + `find ${tempDir}/docs/integrations/builtin -name "*slack*.md" -type f`, + { encoding: 'utf-8' } + ).trim().split('\n'); + + allSlackFiles.forEach(file => { + console.log(` - ${file}`); + }); +} catch (error) { + console.log(' No files found'); +} + +console.log('\n๐Ÿ“„ Checking file paths:'); +const possiblePaths = [ + 'docs/integrations/builtin/app-nodes/n8n-nodes-base.Slack.md', + 'docs/integrations/builtin/app-nodes/n8n-nodes-base.slack.md', + 'docs/integrations/builtin/core-nodes/n8n-nodes-base.Slack.md', + 'docs/integrations/builtin/core-nodes/n8n-nodes-base.slack.md', + 'docs/integrations/builtin/trigger-nodes/n8n-nodes-base.Slack.md', + 'docs/integrations/builtin/trigger-nodes/n8n-nodes-base.slack.md', + 'docs/integrations/builtin/credentials/slack.md', +]; + +const fs = require('fs'); +possiblePaths.forEach(p => { + const fullPath = path.join(tempDir, p); + const exists = fs.existsSync(fullPath); + console.log(` ${exists ? 'โœ“' : 'โœ—'} ${p}`); + + if (exists) { + // Read first few lines + const content = fs.readFileSync(fullPath, 'utf-8'); + const lines = content.split('\n').slice(0, 10); + const title = lines.find(l => l.includes('title:')); + if (title) { + console.log(` Title: ${title.trim()}`); + } + } +}); \ No newline at end of file diff --git a/tests/demo-enhanced-documentation.js b/tests/demo-enhanced-documentation.js new file mode 100644 index 0000000..e31fcb8 --- /dev/null +++ b/tests/demo-enhanced-documentation.js @@ -0,0 +1,112 @@ +#!/usr/bin/env node + +const { EnhancedDocumentationFetcher } = require('../dist/utils/enhanced-documentation-fetcher'); + +async function demoEnhancedDocumentation() { + console.log('=== Enhanced Documentation Parser Demo ===\n'); + console.log('This demo shows how the enhanced DocumentationFetcher extracts rich content from n8n documentation.\n'); + + const fetcher = new EnhancedDocumentationFetcher(); + + try { + // Demo 1: Slack node (complex app node with many operations) + console.log('1. SLACK NODE DOCUMENTATION'); + console.log('=' .repeat(50)); + const slackDoc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.slack'); + + if (slackDoc) { + console.log('\n๐Ÿ“„ Basic Information:'); + console.log(` โ€ข Title: ${slackDoc.title}`); + console.log(` โ€ข Description: ${slackDoc.description}`); + console.log(` โ€ข URL: ${slackDoc.url}`); + + console.log('\n๐Ÿ“Š Content Statistics:'); + console.log(` โ€ข Operations: ${slackDoc.operations?.length || 0} operations across multiple resources`); + console.log(` โ€ข API Methods: ${slackDoc.apiMethods?.length || 0} mapped to Slack API endpoints`); + console.log(` โ€ข Examples: ${slackDoc.examples?.length || 0} code examples`); + console.log(` โ€ข Resources: ${slackDoc.relatedResources?.length || 0} related documentation links`); + console.log(` โ€ข Scopes: ${slackDoc.requiredScopes?.length || 0} OAuth scopes`); + + // Show operations breakdown + if (slackDoc.operations && slackDoc.operations.length > 0) { + console.log('\n๐Ÿ”ง Operations by Resource:'); + const resourceMap = new Map(); + slackDoc.operations.forEach(op => { + if (!resourceMap.has(op.resource)) { + resourceMap.set(op.resource, []); + } + resourceMap.get(op.resource).push(op); + }); + + for (const [resource, ops] of resourceMap) { + console.log(`\n ${resource} (${ops.length} operations):`); + ops.slice(0, 5).forEach(op => { + console.log(` โ€ข ${op.operation}: ${op.description}`); + }); + if (ops.length > 5) { + console.log(` ... and ${ops.length - 5} more`); + } + } + } + + // Show API method mappings + if (slackDoc.apiMethods && slackDoc.apiMethods.length > 0) { + console.log('\n๐Ÿ”— API Method Mappings (sample):'); + slackDoc.apiMethods.slice(0, 5).forEach(api => { + console.log(` โ€ข ${api.resource}.${api.operation} โ†’ ${api.apiMethod}`); + console.log(` URL: ${api.apiUrl}`); + }); + if (slackDoc.apiMethods.length > 5) { + console.log(` ... and ${slackDoc.apiMethods.length - 5} more mappings`); + } + } + } + + // Demo 2: If node (core node with conditions) + console.log('\n\n2. IF NODE DOCUMENTATION'); + console.log('=' .repeat(50)); + const ifDoc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.if'); + + if (ifDoc) { + console.log('\n๐Ÿ“„ Basic Information:'); + console.log(` โ€ข Title: ${ifDoc.title}`); + console.log(` โ€ข Description: ${ifDoc.description}`); + console.log(` โ€ข URL: ${ifDoc.url}`); + + if (ifDoc.relatedResources && ifDoc.relatedResources.length > 0) { + console.log('\n๐Ÿ“š Related Resources:'); + ifDoc.relatedResources.forEach(res => { + console.log(` โ€ข ${res.title} (${res.type})`); + console.log(` ${res.url}`); + }); + } + } + + // Demo 3: Summary of enhanced parsing capabilities + console.log('\n\n3. ENHANCED PARSING CAPABILITIES'); + console.log('=' .repeat(50)); + console.log('\nThe enhanced DocumentationFetcher can extract:'); + console.log(' โœ“ Markdown frontmatter (metadata, tags, priority)'); + console.log(' โœ“ Operations with resource grouping and descriptions'); + console.log(' โœ“ API method mappings from markdown tables'); + console.log(' โœ“ Code examples (JSON, JavaScript, YAML)'); + console.log(' โœ“ Template references'); + console.log(' โœ“ Related resources and documentation links'); + console.log(' โœ“ Required OAuth scopes'); + console.log('\nThis rich content enables AI agents to:'); + console.log(' โ€ข Understand node capabilities in detail'); + console.log(' โ€ข Map operations to actual API endpoints'); + console.log(' โ€ข Provide accurate examples and usage patterns'); + console.log(' โ€ข Navigate related documentation'); + console.log(' โ€ข Understand authentication requirements'); + + } catch (error) { + console.error('\nError:', error); + } finally { + await fetcher.cleanup(); + console.log('\n\nโœ“ Demo completed'); + } +} + +// Run the demo +demoEnhancedDocumentation().catch(console.error); \ No newline at end of file diff --git a/tests/extracted-nodes-db/extraction-report.json b/tests/extracted-nodes-db/extraction-report.json index 28a7d3a..14002b3 100644 --- a/tests/extracted-nodes-db/extraction-report.json +++ b/tests/extracted-nodes-db/extraction-report.json @@ -1,7194 +1,82 @@ -{ - "tested": 12, - "extracted": 8, - "failed": 4, - "nodes": [ - { - "node_type": "n8n-nodes-base.Function", - "name": "Function", - "package_name": "n8n-nodes-base", - "code_hash": "d68f1ab94b190161e2ec2c56ec6631f6c3992826557c100ec578efff5de96a70", - "code_length": 7449, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/Function/Function.node.js", - "has_credentials": false, - "source_code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Function = void 0;\nconst vm2_1 = require(\"@n8n/vm2\");\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst JavaScriptSandbox_1 = require(\"../Code/JavaScriptSandbox\");\nclass Function {\n constructor() {\n this.description = {\n displayName: 'Function',\n name: 'function',\n hidden: true,\n icon: 'fa:code',\n group: ['transform'],\n version: 1,\n description: 'Run custom function code which gets executed once and allows you to add, remove, change and replace items',\n defaults: {\n name: 'Function',\n color: '#FF9922',\n },\n inputs: ['main'],\n outputs: ['main'],\n properties: [\n {\n displayName: 'A newer version of this node type is available, called the โ€˜Codeโ€™ node',\n name: 'notice',\n type: 'notice',\n default: '',\n },\n {\n displayName: 'JavaScript Code',\n name: 'functionCode',\n typeOptions: {\n alwaysOpenEditWindow: true,\n codeAutocomplete: 'function',\n editor: 'code',\n rows: 10,\n },\n type: 'string',\n default: `// Code here will run only once, no matter how many input items there are.\n// More info and help:https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.function/\n// Tip: You can use luxon for dates and $jmespath for querying JSON structures\n\n// Loop over inputs and add a new field called 'myNewField' to the JSON of each one\nfor (item of items) {\n item.json.myNewField = 1;\n}\n\n// You can write logs to the browser console\nconsole.log('Done!');\n\nreturn items;`,\n description: 'The JavaScript code to execute',\n noDataExpression: true,\n },\n ],\n };\n }\n async execute() {\n let items = this.getInputData();\n items = (0, n8n_workflow_1.deepCopy)(items);\n for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n items[itemIndex].index = itemIndex;\n }\n const cleanupData = (inputData) => {\n Object.keys(inputData).map((key) => {\n if (inputData[key] !== null && typeof inputData[key] === 'object') {\n if (inputData[key].constructor.name === 'Object') {\n inputData[key] = cleanupData(inputData[key]);\n }\n else {\n inputData[key] = (0, n8n_workflow_1.deepCopy)(inputData[key]);\n }\n }\n });\n return inputData;\n };\n const sandbox = {\n getNodeParameter: this.getNodeParameter,\n getWorkflowStaticData: this.getWorkflowStaticData,\n helpers: this.helpers,\n items,\n $item: (index) => this.getWorkflowDataProxy(index),\n getBinaryDataAsync: async (item) => {\n var _a;\n if ((item === null || item === void 0 ? void 0 : item.binary) && (item === null || item === void 0 ? void 0 : item.index) !== undefined && (item === null || item === void 0 ? void 0 : item.index) !== null) {\n for (const binaryPropertyName of Object.keys(item.binary)) {\n item.binary[binaryPropertyName].data = (_a = (await this.helpers.getBinaryDataBuffer(item.index, binaryPropertyName))) === null || _a === void 0 ? void 0 : _a.toString('base64');\n }\n }\n return item.binary;\n },\n setBinaryDataAsync: async (item, data) => {\n if (!item) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No item was provided to setBinaryDataAsync (item: INodeExecutionData, data: IBinaryKeyData).');\n }\n if (!data) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No data was provided to setBinaryDataAsync (item: INodeExecutionData, data: IBinaryKeyData).');\n }\n for (const binaryPropertyName of Object.keys(data)) {\n const binaryItem = data[binaryPropertyName];\n data[binaryPropertyName] = await this.helpers.setBinaryDataBuffer(binaryItem, Buffer.from(binaryItem.data, 'base64'));\n }\n item.binary = data;\n },\n };\n Object.assign(sandbox, sandbox.$item(0));\n const mode = this.getMode();\n const options = {\n console: mode === 'manual' ? 'redirect' : 'inherit',\n sandbox,\n require: JavaScriptSandbox_1.vmResolver,\n };\n const vm = new vm2_1.NodeVM(options);\n if (mode === 'manual') {\n vm.on('console.log', this.sendMessageToUI);\n }\n const functionCode = this.getNodeParameter('functionCode', 0);\n try {\n items = await vm.run(`module.exports = async function() {${functionCode}\\n}()`, __dirname);\n items = this.helpers.normalizeItems(items);\n if (items === undefined) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No data got returned. Always return an Array of items!');\n }\n if (!Array.isArray(items)) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Always an Array of items has to be returned!');\n }\n for (const item of items) {\n if (item.json === undefined) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'All returned items have to contain a property named \"json\"!');\n }\n if (typeof item.json !== 'object') {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The json-property has to be an object!');\n }\n item.json = cleanupData(item.json);\n if (item.binary !== undefined) {\n if (Array.isArray(item.binary) || typeof item.binary !== 'object') {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'The binary-property has to be an object!');\n }\n }\n }\n }\n catch (error) {\n if (this.continueOnFail()) {\n items = [{ json: { error: error.message } }];\n }\n else {\n const stackLines = error.stack.split('\\n');\n if (stackLines.length > 0) {\n stackLines.shift();\n const lineParts = stackLines.find((line) => line.includes('Function')).split(':');\n if (lineParts.length > 2) {\n const lineNumber = lineParts.splice(-2, 1);\n if (!isNaN(lineNumber)) {\n error.message = `${error.message} [Line ${lineNumber}]`;\n }\n }\n }\n throw error;\n }\n }\n return [items];\n }\n}\nexports.Function = Function;\n//# sourceMappingURL=Function.node.js.map", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 8, - "extracted_at": "2025-06-07T17:49:22.693Z" - }, - { - "node_type": "n8n-nodes-base.Webhook", - "name": "Webhook", - "package_name": "n8n-nodes-base", - "code_hash": "143d6bbdce335c5a9204112b2c1e8b92e4061d75ba3cb23301845f6fed9e6c71", - "code_length": 10667, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/Webhook/Webhook.node.js", - "has_credentials": false, - "source_code": "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Webhook = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst promises_1 = require(\"stream/promises\");\nconst fs_1 = require(\"fs\");\nconst uuid_1 = require(\"uuid\");\nconst basic_auth_1 = __importDefault(require(\"basic-auth\"));\nconst isbot_1 = __importDefault(require(\"isbot\"));\nconst tmp_promise_1 = require(\"tmp-promise\");\nconst description_1 = require(\"./description\");\nconst error_1 = require(\"./error\");\nclass Webhook extends n8n_workflow_1.Node {\n constructor() {\n super(...arguments);\n this.authPropertyName = 'authentication';\n this.description = {\n displayName: 'Webhook',\n icon: 'file:webhook.svg',\n name: 'webhook',\n group: ['trigger'],\n version: 1,\n description: 'Starts the workflow when a webhook is called',\n eventTriggerDescription: 'Waiting for you to call the Test URL',\n activationMessage: 'You can now make calls to your production webhook URL.',\n defaults: {\n name: 'Webhook',\n },\n triggerPanel: {\n header: '',\n executionsHelp: {\n inactive: 'Webhooks have two modes: test and production.

Use test mode while you build your workflow. Click the \\'listen\\' button, then make a request to the test URL. The executions will show up in the editor.

Use production mode to run your workflow automatically. Activate the workflow, then make requests to the production URL. These executions will show up in the executions list, but not in the editor.',\n active: 'Webhooks have two modes: test and production.

Use test mode while you build your workflow. Click the \\'listen\\' button, then make a request to the test URL. The executions will show up in the editor.

Use production mode to run your workflow automatically. Since the workflow is activated, you can make requests to the production URL. These executions will show up in the executions list, but not in the editor.',\n },\n activationHint: 'Once youโ€™ve finished building your workflow, run it without having to click this button by using the production webhook URL.',\n },\n inputs: [],\n outputs: ['main'],\n credentials: (0, description_1.credentialsProperty)(this.authPropertyName),\n webhooks: [description_1.defaultWebhookDescription],\n properties: [\n (0, description_1.authenticationProperty)(this.authPropertyName),\n description_1.httpMethodsProperty,\n {\n displayName: 'Path',\n name: 'path',\n type: 'string',\n default: '',\n placeholder: 'webhook',\n required: true,\n description: 'The path to listen to',\n },\n description_1.responseModeProperty,\n {\n displayName: 'Insert a \\'Respond to Webhook\\' node to control when and how you respond. More details',\n name: 'webhookNotice',\n type: 'notice',\n displayOptions: {\n show: {\n responseMode: ['responseNode'],\n },\n },\n default: '',\n },\n description_1.responseCodeProperty,\n description_1.responseDataProperty,\n description_1.responseBinaryPropertyNameProperty,\n description_1.optionsProperty,\n ],\n };\n }\n async webhook(context) {\n var _a;\n const options = context.getNodeParameter('options', {});\n const req = context.getRequestObject();\n const resp = context.getResponseObject();\n try {\n if (options.ignoreBots && (0, isbot_1.default)(req.headers['user-agent']))\n throw new error_1.WebhookAuthorizationError(403);\n await this.validateAuth(context);\n }\n catch (error) {\n if (error instanceof error_1.WebhookAuthorizationError) {\n resp.writeHead(error.responseCode, { 'WWW-Authenticate': 'Basic realm=\"Webhook\"' });\n resp.end(error.message);\n return { noWebhookResponse: true };\n }\n throw error;\n }\n if (options.binaryData) {\n return this.handleBinaryData(context);\n }\n if (req.contentType === 'multipart/form-data') {\n return this.handleFormData(context);\n }\n const response = {\n json: {\n headers: req.headers,\n params: req.params,\n query: req.query,\n body: req.body,\n },\n binary: options.rawBody\n ? {\n data: {\n data: req.rawBody.toString(n8n_workflow_1.BINARY_ENCODING),\n mimeType: (_a = req.contentType) !== null && _a !== void 0 ? _a : 'application/json',\n },\n }\n : undefined,\n };\n return {\n webhookResponse: options.responseData,\n workflowData: [[response]],\n };\n }\n async validateAuth(context) {\n const authentication = context.getNodeParameter(this.authPropertyName);\n if (authentication === 'none')\n return;\n const req = context.getRequestObject();\n const headers = context.getHeaderData();\n if (authentication === 'basicAuth') {\n let expectedAuth;\n try {\n expectedAuth = await context.getCredentials('httpBasicAuth');\n }\n catch { }\n if (expectedAuth === undefined || !expectedAuth.user || !expectedAuth.password) {\n throw new error_1.WebhookAuthorizationError(500, 'No authentication data defined on node!');\n }\n const providedAuth = (0, basic_auth_1.default)(req);\n if (!providedAuth)\n throw new error_1.WebhookAuthorizationError(401);\n if (providedAuth.name !== expectedAuth.user || providedAuth.pass !== expectedAuth.password) {\n throw new error_1.WebhookAuthorizationError(403);\n }\n }\n else if (authentication === 'headerAuth') {\n let expectedAuth;\n try {\n expectedAuth = await context.getCredentials('httpHeaderAuth');\n }\n catch { }\n if (expectedAuth === undefined || !expectedAuth.name || !expectedAuth.value) {\n throw new error_1.WebhookAuthorizationError(500, 'No authentication data defined on node!');\n }\n const headerName = expectedAuth.name.toLowerCase();\n const expectedValue = expectedAuth.value;\n if (!headers.hasOwnProperty(headerName) ||\n headers[headerName] !== expectedValue) {\n throw new error_1.WebhookAuthorizationError(403);\n }\n }\n }\n async handleFormData(context) {\n var _a;\n const req = context.getRequestObject();\n const options = context.getNodeParameter('options', {});\n const { data, files } = req.body;\n const returnItem = {\n binary: {},\n json: {\n headers: req.headers,\n params: req.params,\n query: req.query,\n body: data,\n },\n };\n let count = 0;\n for (const key of Object.keys(files)) {\n const processFiles = [];\n let multiFile = false;\n if (Array.isArray(files[key])) {\n processFiles.push(...files[key]);\n multiFile = true;\n }\n else {\n processFiles.push(files[key]);\n }\n let fileCount = 0;\n for (const file of processFiles) {\n let binaryPropertyName = key;\n if (binaryPropertyName.endsWith('[]')) {\n binaryPropertyName = binaryPropertyName.slice(0, -2);\n }\n if (multiFile) {\n binaryPropertyName += fileCount++;\n }\n if (options.binaryPropertyName) {\n binaryPropertyName = `${options.binaryPropertyName}${count}`;\n }\n returnItem.binary[binaryPropertyName] = await context.nodeHelpers.copyBinaryFile(file.filepath, (_a = file.originalFilename) !== null && _a !== void 0 ? _a : file.newFilename, file.mimetype);\n count += 1;\n }\n }\n return { workflowData: [[returnItem]] };\n }\n async handleBinaryData(context) {\n var _a, _b, _c;\n const req = context.getRequestObject();\n const options = context.getNodeParameter('options', {});\n const binaryFile = await (0, tmp_promise_1.file)({ prefix: 'n8n-webhook-' });\n try {\n await (0, promises_1.pipeline)(req, (0, fs_1.createWriteStream)(binaryFile.path));\n const returnItem = {\n binary: {},\n json: {\n headers: req.headers,\n params: req.params,\n query: req.query,\n body: {},\n },\n };\n const binaryPropertyName = (options.binaryPropertyName || 'data');\n const fileName = (_b = (_a = req.contentDisposition) === null || _a === void 0 ? void 0 : _a.filename) !== null && _b !== void 0 ? _b : (0, uuid_1.v4)();\n returnItem.binary[binaryPropertyName] = await context.nodeHelpers.copyBinaryFile(binaryFile.path, fileName, (_c = req.contentType) !== null && _c !== void 0 ? _c : 'application/octet-stream');\n return { workflowData: [[returnItem]] };\n }\n catch (error) {\n throw new n8n_workflow_1.NodeOperationError(context.getNode(), error);\n }\n finally {\n await binaryFile.cleanup();\n }\n }\n}\nexports.Webhook = Webhook;\n//# sourceMappingURL=Webhook.node.js.map", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 12, - "extracted_at": "2025-06-07T17:49:22.708Z" - }, - { - "node_type": "n8n-nodes-base.HttpRequest", - "name": "HttpRequest", - "package_name": "n8n-nodes-base", - "code_hash": "5b5e2328474b7e85361c940dfe942e167b3f0057f38062f56d6b693f0a7ffe7e", - "code_length": 1343, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/HttpRequest/HttpRequest.node.js", - "has_credentials": false, - "source_code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpRequest = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst HttpRequestV1_node_1 = require(\"./V1/HttpRequestV1.node\");\nconst HttpRequestV2_node_1 = require(\"./V2/HttpRequestV2.node\");\nconst HttpRequestV3_node_1 = require(\"./V3/HttpRequestV3.node\");\nclass HttpRequest extends n8n_workflow_1.VersionedNodeType {\n constructor() {\n const baseDescription = {\n displayName: 'HTTP Request',\n name: 'httpRequest',\n icon: 'fa:at',\n group: ['output'],\n subtitle: '={{$parameter[\"requestMethod\"] + \": \" + $parameter[\"url\"]}}',\n description: 'Makes an HTTP request and returns the response data',\n defaultVersion: 4.1,\n };\n const nodeVersions = {\n 1: new HttpRequestV1_node_1.HttpRequestV1(baseDescription),\n 2: new HttpRequestV2_node_1.HttpRequestV2(baseDescription),\n 3: new HttpRequestV3_node_1.HttpRequestV3(baseDescription),\n 4: new HttpRequestV3_node_1.HttpRequestV3(baseDescription),\n 4.1: new HttpRequestV3_node_1.HttpRequestV3(baseDescription),\n };\n super(nodeVersions, baseDescription);\n }\n}\nexports.HttpRequest = HttpRequest;\n//# sourceMappingURL=HttpRequest.node.js.map", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 7, - "extracted_at": "2025-06-07T17:49:22.717Z" - }, - { - "node_type": "n8n-nodes-base.If", - "name": "If", - "package_name": "n8n-nodes-base", - "code_hash": "7910ed9177a946b76f04ca847defb81226c37c698e4cdb63913f038c6c257ee1", - "code_length": 20533, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/If/If.node.js", - "has_credentials": false, - "source_code": "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.If = void 0;\nconst moment_1 = __importDefault(require(\"moment\"));\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nclass If {\n constructor() {\n this.description = {\n displayName: 'IF',\n name: 'if',\n icon: 'fa:map-signs',\n group: ['transform'],\n version: 1,\n description: 'Route items to different branches (true/false)',\n defaults: {\n name: 'IF',\n color: '#408000',\n },\n inputs: ['main'],\n outputs: ['main', 'main'],\n outputNames: ['true', 'false'],\n properties: [\n {\n displayName: 'Conditions',\n name: 'conditions',\n placeholder: 'Add Condition',\n type: 'fixedCollection',\n typeOptions: {\n multipleValues: true,\n sortable: true,\n },\n description: 'The type of values to compare',\n default: {},\n options: [\n {\n name: 'boolean',\n displayName: 'Boolean',\n values: [\n {\n displayName: 'Value 1',\n name: 'value1',\n type: 'boolean',\n default: false,\n description: 'The value to compare with the second one',\n },\n {\n displayName: 'Operation',\n name: 'operation',\n type: 'options',\n options: [\n {\n name: 'Equal',\n value: 'equal',\n },\n {\n name: 'Not Equal',\n value: 'notEqual',\n },\n ],\n default: 'equal',\n description: 'Operation to decide where the the data should be mapped to',\n },\n {\n displayName: 'Value 2',\n name: 'value2',\n type: 'boolean',\n default: false,\n description: 'The value to compare with the first one',\n },\n ],\n },\n {\n name: 'dateTime',\n displayName: 'Date & Time',\n values: [\n {\n displayName: 'Value 1',\n name: 'value1',\n type: 'dateTime',\n default: '',\n description: 'The value to compare with the second one',\n },\n {\n displayName: 'Operation',\n name: 'operation',\n type: 'options',\n options: [\n {\n name: 'Occurred After',\n value: 'after',\n },\n {\n name: 'Occurred Before',\n value: 'before',\n },\n ],\n default: 'after',\n description: 'Operation to decide where the the data should be mapped to',\n },\n {\n displayName: 'Value 2',\n name: 'value2',\n type: 'dateTime',\n default: '',\n description: 'The value to compare with the first one',\n },\n ],\n },\n {\n name: 'number',\n displayName: 'Number',\n values: [\n {\n displayName: 'Value 1',\n name: 'value1',\n type: 'number',\n default: 0,\n description: 'The value to compare with the second one',\n },\n {\n displayName: 'Operation',\n name: 'operation',\n type: 'options',\n noDataExpression: true,\n options: [\n {\n name: 'Smaller',\n value: 'smaller',\n },\n {\n name: 'Smaller or Equal',\n value: 'smallerEqual',\n },\n {\n name: 'Equal',\n value: 'equal',\n },\n {\n name: 'Not Equal',\n value: 'notEqual',\n },\n {\n name: 'Larger',\n value: 'larger',\n },\n {\n name: 'Larger or Equal',\n value: 'largerEqual',\n },\n {\n name: 'Is Empty',\n value: 'isEmpty',\n },\n {\n name: 'Is Not Empty',\n value: 'isNotEmpty',\n },\n ],\n default: 'smaller',\n description: 'Operation to decide where the the data should be mapped to',\n },\n {\n displayName: 'Value 2',\n name: 'value2',\n type: 'number',\n displayOptions: {\n hide: {\n operation: ['isEmpty', 'isNotEmpty'],\n },\n },\n default: 0,\n description: 'The value to compare with the first one',\n },\n ],\n },\n {\n name: 'string',\n displayName: 'String',\n values: [\n {\n displayName: 'Value 1',\n name: 'value1',\n type: 'string',\n default: '',\n description: 'The value to compare with the second one',\n },\n {\n displayName: 'Operation',\n name: 'operation',\n type: 'options',\n noDataExpression: true,\n options: [\n {\n name: 'Contains',\n value: 'contains',\n },\n {\n name: 'Not Contains',\n value: 'notContains',\n },\n {\n name: 'Ends With',\n value: 'endsWith',\n },\n {\n name: 'Not Ends With',\n value: 'notEndsWith',\n },\n {\n name: 'Equal',\n value: 'equal',\n },\n {\n name: 'Not Equal',\n value: 'notEqual',\n },\n {\n name: 'Regex Match',\n value: 'regex',\n },\n {\n name: 'Regex Not Match',\n value: 'notRegex',\n },\n {\n name: 'Starts With',\n value: 'startsWith',\n },\n {\n name: 'Not Starts With',\n value: 'notStartsWith',\n },\n {\n name: 'Is Empty',\n value: 'isEmpty',\n },\n {\n name: 'Is Not Empty',\n value: 'isNotEmpty',\n },\n ],\n default: 'equal',\n description: 'Operation to decide where the the data should be mapped to',\n },\n {\n displayName: 'Value 2',\n name: 'value2',\n type: 'string',\n displayOptions: {\n hide: {\n operation: ['isEmpty', 'isNotEmpty', 'regex', 'notRegex'],\n },\n },\n default: '',\n description: 'The value to compare with the first one',\n },\n {\n displayName: 'Regex',\n name: 'value2',\n type: 'string',\n displayOptions: {\n show: {\n operation: ['regex', 'notRegex'],\n },\n },\n default: '',\n placeholder: '/text/i',\n description: 'The regex which has to match',\n },\n ],\n },\n ],\n },\n {\n displayName: 'Combine',\n name: 'combineOperation',\n type: 'options',\n options: [\n {\n name: 'ALL',\n description: 'Only if all conditions are met it goes into \"true\" branch',\n value: 'all',\n },\n {\n name: 'ANY',\n description: 'If any of the conditions is met it goes into \"true\" branch',\n value: 'any',\n },\n ],\n default: 'all',\n description: 'If multiple rules got set this settings decides if it is true as soon as ANY condition matches or only if ALL get meet',\n },\n ],\n };\n }\n async execute() {\n const returnDataTrue = [];\n const returnDataFalse = [];\n const items = this.getInputData();\n let item;\n let combineOperation;\n const isDateObject = (value) => Object.prototype.toString.call(value) === '[object Date]';\n const isDateInvalid = (value) => (value === null || value === void 0 ? void 0 : value.toString()) === 'Invalid Date';\n const compareOperationFunctions = {\n after: (value1, value2) => (value1 || 0) > (value2 || 0),\n before: (value1, value2) => (value1 || 0) < (value2 || 0),\n contains: (value1, value2) => (value1 || '').toString().includes((value2 || '').toString()),\n notContains: (value1, value2) => !(value1 || '').toString().includes((value2 || '').toString()),\n endsWith: (value1, value2) => value1.endsWith(value2),\n notEndsWith: (value1, value2) => !value1.endsWith(value2),\n equal: (value1, value2) => value1 === value2,\n notEqual: (value1, value2) => value1 !== value2,\n larger: (value1, value2) => (value1 || 0) > (value2 || 0),\n largerEqual: (value1, value2) => (value1 || 0) >= (value2 || 0),\n smaller: (value1, value2) => (value1 || 0) < (value2 || 0),\n smallerEqual: (value1, value2) => (value1 || 0) <= (value2 || 0),\n startsWith: (value1, value2) => value1.startsWith(value2),\n notStartsWith: (value1, value2) => !value1.startsWith(value2),\n isEmpty: (value1) => [undefined, null, '', NaN].includes(value1) ||\n (typeof value1 === 'object' && value1 !== null && !isDateObject(value1)\n ? Object.entries(value1).length === 0\n : false) ||\n (isDateObject(value1) && isDateInvalid(value1)),\n isNotEmpty: (value1) => !([undefined, null, '', NaN].includes(value1) ||\n (typeof value1 === 'object' && value1 !== null && !isDateObject(value1)\n ? Object.entries(value1).length === 0\n : false) ||\n (isDateObject(value1) && isDateInvalid(value1))),\n regex: (value1, value2) => {\n const regexMatch = (value2 || '').toString().match(new RegExp('^/(.*?)/([gimusy]*)$'));\n let regex;\n if (!regexMatch) {\n regex = new RegExp((value2 || '').toString());\n }\n else if (regexMatch.length === 1) {\n regex = new RegExp(regexMatch[1]);\n }\n else {\n regex = new RegExp(regexMatch[1], regexMatch[2]);\n }\n return !!(value1 || '').toString().match(regex);\n },\n notRegex: (value1, value2) => {\n const regexMatch = (value2 || '').toString().match(new RegExp('^/(.*?)/([gimusy]*)$'));\n let regex;\n if (!regexMatch) {\n regex = new RegExp((value2 || '').toString());\n }\n else if (regexMatch.length === 1) {\n regex = new RegExp(regexMatch[1]);\n }\n else {\n regex = new RegExp(regexMatch[1], regexMatch[2]);\n }\n return !(value1 || '').toString().match(regex);\n },\n };\n const convertDateTime = (value) => {\n let returnValue = undefined;\n if (typeof value === 'string') {\n returnValue = new Date(value).getTime();\n }\n else if (typeof value === 'number') {\n returnValue = value;\n }\n if (moment_1.default.isMoment(value)) {\n returnValue = value.unix();\n }\n if (value instanceof Date) {\n returnValue = value.getTime();\n }\n if (returnValue === undefined || isNaN(returnValue)) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The value \"${value}\" is not a valid DateTime.`);\n }\n return returnValue;\n };\n const dataTypes = ['boolean', 'dateTime', 'number', 'string'];\n let dataType;\n let compareOperationResult;\n let value1, value2;\n itemLoop: for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n item = items[itemIndex];\n let compareData;\n combineOperation = this.getNodeParameter('combineOperation', itemIndex);\n for (dataType of dataTypes) {\n for (compareData of this.getNodeParameter(`conditions.${dataType}`, itemIndex, [])) {\n value1 = compareData.value1;\n value2 = compareData.value2;\n if (dataType === 'dateTime') {\n value1 = convertDateTime(value1);\n value2 = convertDateTime(value2);\n }\n compareOperationResult = compareOperationFunctions[compareData.operation](value1, value2);\n if (compareOperationResult && combineOperation === 'any') {\n returnDataTrue.push(item);\n continue itemLoop;\n }\n else if (!compareOperationResult && combineOperation === 'all') {\n returnDataFalse.push(item);\n continue itemLoop;\n }\n }\n }\n if (item.pairedItem === undefined) {\n item.pairedItem = [{ item: itemIndex }];\n }\n if (combineOperation === 'all') {\n returnDataTrue.push(item);\n }\n else {\n returnDataFalse.push(item);\n }\n }\n return [returnDataTrue, returnDataFalse];\n }\n}\nexports.If = If;\n//# sourceMappingURL=If.node.js.map", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 4, - "extracted_at": "2025-06-07T17:49:22.724Z" - }, - { - "node_type": "n8n-nodes-base.SplitInBatches", - "name": "SplitInBatches", - "package_name": "n8n-nodes-base", - "code_hash": "c751422a11e30bf361a6c4803376289740a40434aeb77f90e18cd4dd7ba5c019", - "code_length": 1135, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/SplitInBatches/SplitInBatches.node.js", - "has_credentials": false, - "source_code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SplitInBatches = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst SplitInBatchesV1_node_1 = require(\"./v1/SplitInBatchesV1.node\");\nconst SplitInBatchesV2_node_1 = require(\"./v2/SplitInBatchesV2.node\");\nconst SplitInBatchesV3_node_1 = require(\"./v3/SplitInBatchesV3.node\");\nclass SplitInBatches extends n8n_workflow_1.VersionedNodeType {\n constructor() {\n const baseDescription = {\n displayName: 'Split In Batches',\n name: 'splitInBatches',\n icon: 'fa:th-large',\n group: ['organization'],\n description: 'Split data into batches and iterate over each batch',\n defaultVersion: 3,\n };\n const nodeVersions = {\n 1: new SplitInBatchesV1_node_1.SplitInBatchesV1(),\n 2: new SplitInBatchesV2_node_1.SplitInBatchesV2(),\n 3: new SplitInBatchesV3_node_1.SplitInBatchesV3(),\n };\n super(nodeVersions, baseDescription);\n }\n}\nexports.SplitInBatches = SplitInBatches;\n//# sourceMappingURL=SplitInBatches.node.js.map", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 5, - "extracted_at": "2025-06-07T17:49:22.730Z" - }, - { - "node_type": "n8n-nodes-base.Airtable", - "name": "Airtable", - "package_name": "n8n-nodes-base", - "code_hash": "2d67e72931697178946f5127b43e954649c4c5e7ad9e29764796404ae96e7db5", - "code_length": 936, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/Airtable/Airtable.node.js", - "has_credentials": false, - "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", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 5, - "extracted_at": "2025-06-07T17:49:22.782Z" - }, - { - "node_type": "n8n-nodes-base.Slack", - "name": "Slack", - "package_name": "n8n-nodes-base", - "code_hash": "0ed10d0646f3c595406359edfa2c293dac41991cee59ad4fb3ccf2bb70eca6fc", - "code_length": 1007, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/Slack/Slack.node.js", - "has_credentials": false, - "source_code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Slack = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst SlackV1_node_1 = require(\"./V1/SlackV1.node\");\nconst SlackV2_node_1 = require(\"./V2/SlackV2.node\");\nclass Slack extends n8n_workflow_1.VersionedNodeType {\n constructor() {\n const baseDescription = {\n displayName: 'Slack',\n name: 'slack',\n icon: 'file:slack.svg',\n group: ['output'],\n subtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n description: 'Consume Slack API',\n defaultVersion: 2.1,\n };\n const nodeVersions = {\n 1: new SlackV1_node_1.SlackV1(baseDescription),\n 2: new SlackV2_node_1.SlackV2(baseDescription),\n 2.1: new SlackV2_node_1.SlackV2(baseDescription),\n };\n super(nodeVersions, baseDescription);\n }\n}\nexports.Slack = Slack;\n//# sourceMappingURL=Slack.node.js.map", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 4, - "extracted_at": "2025-06-07T17:49:22.884Z" - }, - { - "node_type": "n8n-nodes-base.Discord", - "name": "Discord", - "package_name": "n8n-nodes-base", - "code_hash": "4995f9ca5c5b57d2486c2e320cc7505238e7f2260861f7e321b44b45ccabeb00", - "code_length": 10049, - "source_location": "node_modules/n8n-nodes-base/dist/nodes/Discord/Discord.node.js", - "has_credentials": false, - "source_code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Discord = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nclass Discord {\n constructor() {\n this.description = {\n displayName: 'Discord',\n name: 'discord',\n icon: 'file:discord.svg',\n group: ['output'],\n version: 1,\n description: 'Sends data to Discord',\n defaults: {\n name: 'Discord',\n },\n inputs: ['main'],\n outputs: ['main'],\n properties: [\n {\n displayName: 'Webhook URL',\n name: 'webhookUri',\n type: 'string',\n required: true,\n default: '',\n placeholder: 'https://discord.com/api/webhooks/ID/TOKEN',\n },\n {\n displayName: 'Content',\n name: 'text',\n type: 'string',\n typeOptions: {\n maxValue: 2000,\n },\n default: '',\n placeholder: 'Hello World!',\n },\n {\n displayName: 'Additional Fields',\n name: 'options',\n type: 'collection',\n placeholder: 'Add Option',\n default: {},\n options: [\n {\n displayName: 'Allowed Mentions',\n name: 'allowedMentions',\n type: 'json',\n typeOptions: { alwaysOpenEditWindow: true, editor: 'code' },\n default: '',\n },\n {\n displayName: 'Attachments',\n name: 'attachments',\n type: 'json',\n typeOptions: { alwaysOpenEditWindow: true, editor: 'code' },\n default: '',\n },\n {\n displayName: 'Avatar URL',\n name: 'avatarUrl',\n type: 'string',\n default: '',\n },\n {\n displayName: 'Components',\n name: 'components',\n type: 'json',\n typeOptions: { alwaysOpenEditWindow: true, editor: 'code' },\n default: '',\n },\n {\n displayName: 'Embeds',\n name: 'embeds',\n type: 'json',\n typeOptions: { alwaysOpenEditWindow: true, editor: 'code' },\n default: '',\n },\n {\n displayName: 'Flags',\n name: 'flags',\n type: 'number',\n default: '',\n },\n {\n displayName: 'JSON Payload',\n name: 'payloadJson',\n type: 'json',\n typeOptions: { alwaysOpenEditWindow: true, editor: 'code' },\n default: '',\n },\n {\n displayName: 'Username',\n name: 'username',\n type: 'string',\n default: '',\n placeholder: 'User',\n },\n {\n displayName: 'TTS',\n name: 'tts',\n type: 'boolean',\n default: false,\n description: 'Whether this message be sent as a Text To Speech message',\n },\n ],\n },\n ],\n };\n }\n async execute() {\n var _a;\n const returnData = [];\n const webhookUri = this.getNodeParameter('webhookUri', 0, '');\n if (!webhookUri)\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Webhook uri is required.');\n const items = this.getInputData();\n const length = items.length;\n for (let i = 0; i < length; i++) {\n const body = {};\n const iterationWebhookUri = this.getNodeParameter('webhookUri', i);\n body.content = this.getNodeParameter('text', i);\n const options = this.getNodeParameter('options', i);\n if (!body.content && !options.embeds) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Either content or embeds must be set.', {\n itemIndex: i,\n });\n }\n if (options.embeds) {\n try {\n body.embeds = JSON.parse(options.embeds);\n }\n catch (e) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Embeds must be valid JSON.', {\n itemIndex: i,\n });\n }\n if (!Array.isArray(body.embeds)) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Embeds must be an array of embeds.', {\n itemIndex: i,\n });\n }\n }\n if (options.username) {\n body.username = options.username;\n }\n if (options.components) {\n try {\n body.components = JSON.parse(options.components);\n }\n catch (e) {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Components must be valid JSON.', {\n itemIndex: i,\n });\n }\n }\n if (options.allowed_mentions) {\n body.allowed_mentions = (0, n8n_workflow_1.jsonParse)(options.allowed_mentions);\n }\n if (options.avatarUrl) {\n body.avatar_url = options.avatarUrl;\n }\n if (options.flags) {\n body.flags = options.flags;\n }\n if (options.tts) {\n body.tts = options.tts;\n }\n if (options.payloadJson) {\n body.payload_json = (0, n8n_workflow_1.jsonParse)(options.payloadJson);\n }\n if (options.attachments) {\n body.attachments = (0, n8n_workflow_1.jsonParse)(options.attachments);\n }\n if (!body.content)\n delete body.content;\n if (!body.username)\n delete body.username;\n if (!body.avatar_url)\n delete body.avatar_url;\n if (!body.embeds)\n delete body.embeds;\n if (!body.allowed_mentions)\n delete body.allowed_mentions;\n if (!body.flags)\n delete body.flags;\n if (!body.components)\n delete body.components;\n if (!body.payload_json)\n delete body.payload_json;\n if (!body.attachments)\n delete body.attachments;\n let requestOptions;\n if (!body.payload_json) {\n requestOptions = {\n resolveWithFullResponse: true,\n method: 'POST',\n body,\n uri: iterationWebhookUri,\n headers: {\n 'content-type': 'application/json; charset=utf-8',\n },\n json: true,\n };\n }\n else {\n requestOptions = {\n resolveWithFullResponse: true,\n method: 'POST',\n body,\n uri: iterationWebhookUri,\n headers: {\n 'content-type': 'multipart/form-data; charset=utf-8',\n },\n };\n }\n let maxTries = 5;\n let response;\n do {\n try {\n response = await this.helpers.request(requestOptions);\n const resetAfter = response.headers['x-ratelimit-reset-after'] * 1000;\n const remainingRatelimit = response.headers['x-ratelimit-remaining'];\n if (!+remainingRatelimit) {\n await (0, n8n_workflow_1.sleep)(resetAfter !== null && resetAfter !== void 0 ? resetAfter : 1000);\n }\n break;\n }\n catch (error) {\n if (error.statusCode === 429) {\n const retryAfter = ((_a = error.response) === null || _a === void 0 ? void 0 : _a.headers['retry-after']) || 1000;\n await (0, n8n_workflow_1.sleep)(+retryAfter);\n continue;\n }\n throw error;\n }\n } while (--maxTries);\n if (maxTries <= 0) {\n throw new n8n_workflow_1.NodeApiError(this.getNode(), {\n error: 'Could not send Webhook message. Max amount of rate-limit retries reached.',\n });\n }\n const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ success: true }), { itemData: { item: i } });\n returnData.push(...executionData);\n }\n return [returnData];\n }\n}\nexports.Discord = Discord;\n//# sourceMappingURL=Discord.node.js.map", - "package_info": { - "name": "n8n-nodes-base", - "version": "1.14.1", - "description": "Base nodes of n8n", - "license": "SEE LICENSE IN LICENSE.md", - "homepage": "https://n8n.io", - "author": { - "name": "Jan Oberhauser", - "email": "jan@n8n.io" - }, - "main": "index.js", - "repository": { - "type": "git", - "url": "git+https://github.com/n8n-io/n8n.git" - }, - "files": [ - "dist" - ], - "n8n": { - "credentials": [ - "dist/credentials/ActionNetworkApi.credentials.js", - "dist/credentials/ActiveCampaignApi.credentials.js", - "dist/credentials/AcuitySchedulingApi.credentials.js", - "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", - "dist/credentials/AdaloApi.credentials.js", - "dist/credentials/AffinityApi.credentials.js", - "dist/credentials/AgileCrmApi.credentials.js", - "dist/credentials/AirtableApi.credentials.js", - "dist/credentials/AirtableOAuth2Api.credentials.js", - "dist/credentials/AirtableTokenApi.credentials.js", - "dist/credentials/AlienVaultApi.credentials.js", - "dist/credentials/Amqp.credentials.js", - "dist/credentials/ApiTemplateIoApi.credentials.js", - "dist/credentials/AsanaApi.credentials.js", - "dist/credentials/AsanaOAuth2Api.credentials.js", - "dist/credentials/Auth0ManagementApi.credentials.js", - "dist/credentials/AutomizyApi.credentials.js", - "dist/credentials/AutopilotApi.credentials.js", - "dist/credentials/Aws.credentials.js", - "dist/credentials/BambooHrApi.credentials.js", - "dist/credentials/BannerbearApi.credentials.js", - "dist/credentials/BaserowApi.credentials.js", - "dist/credentials/BeeminderApi.credentials.js", - "dist/credentials/BitbucketApi.credentials.js", - "dist/credentials/BitlyApi.credentials.js", - "dist/credentials/BitlyOAuth2Api.credentials.js", - "dist/credentials/BitwardenApi.credentials.js", - "dist/credentials/BoxOAuth2Api.credentials.js", - "dist/credentials/BrandfetchApi.credentials.js", - "dist/credentials/BubbleApi.credentials.js", - "dist/credentials/CalApi.credentials.js", - "dist/credentials/CalendlyApi.credentials.js", - "dist/credentials/CarbonBlackApi.credentials.js", - "dist/credentials/ChargebeeApi.credentials.js", - "dist/credentials/CircleCiApi.credentials.js", - "dist/credentials/CiscoMerakiApi.credentials.js", - "dist/credentials/CiscoSecureEndpointApi.credentials.js", - "dist/credentials/CiscoWebexOAuth2Api.credentials.js", - "dist/credentials/CiscoUmbrellaApi.credentials.js", - "dist/credentials/CitrixAdcApi.credentials.js", - "dist/credentials/CloudflareApi.credentials.js", - "dist/credentials/ClearbitApi.credentials.js", - "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClickUpOAuth2Api.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", - "dist/credentials/CockpitApi.credentials.js", - "dist/credentials/CodaApi.credentials.js", - "dist/credentials/ContentfulApi.credentials.js", - "dist/credentials/ConvertKitApi.credentials.js", - "dist/credentials/CopperApi.credentials.js", - "dist/credentials/CortexApi.credentials.js", - "dist/credentials/CrateDb.credentials.js", - "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", - "dist/credentials/CrowdDevApi.credentials.js", - "dist/credentials/CustomerIoApi.credentials.js", - "dist/credentials/DeepLApi.credentials.js", - "dist/credentials/DemioApi.credentials.js", - "dist/credentials/DhlApi.credentials.js", - "dist/credentials/DiscourseApi.credentials.js", - "dist/credentials/DisqusApi.credentials.js", - "dist/credentials/DriftApi.credentials.js", - "dist/credentials/DriftOAuth2Api.credentials.js", - "dist/credentials/DropboxApi.credentials.js", - "dist/credentials/DropboxOAuth2Api.credentials.js", - "dist/credentials/DropcontactApi.credentials.js", - "dist/credentials/EgoiApi.credentials.js", - "dist/credentials/ElasticsearchApi.credentials.js", - "dist/credentials/ElasticSecurityApi.credentials.js", - "dist/credentials/EmeliaApi.credentials.js", - "dist/credentials/ERPNextApi.credentials.js", - "dist/credentials/EventbriteApi.credentials.js", - "dist/credentials/EventbriteOAuth2Api.credentials.js", - "dist/credentials/F5BigIpApi.credentials.js", - "dist/credentials/FacebookGraphApi.credentials.js", - "dist/credentials/FacebookGraphAppApi.credentials.js", - "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", - "dist/credentials/FigmaApi.credentials.js", - "dist/credentials/FileMaker.credentials.js", - "dist/credentials/FlowApi.credentials.js", - "dist/credentials/FormIoApi.credentials.js", - "dist/credentials/FormstackApi.credentials.js", - "dist/credentials/FormstackOAuth2Api.credentials.js", - "dist/credentials/FortiGateApi.credentials.js", - "dist/credentials/FreshdeskApi.credentials.js", - "dist/credentials/FreshserviceApi.credentials.js", - "dist/credentials/FreshworksCrmApi.credentials.js", - "dist/credentials/Ftp.credentials.js", - "dist/credentials/GetResponseApi.credentials.js", - "dist/credentials/GetResponseOAuth2Api.credentials.js", - "dist/credentials/GhostAdminApi.credentials.js", - "dist/credentials/GhostContentApi.credentials.js", - "dist/credentials/GithubApi.credentials.js", - "dist/credentials/GithubOAuth2Api.credentials.js", - "dist/credentials/GitlabApi.credentials.js", - "dist/credentials/GitlabOAuth2Api.credentials.js", - "dist/credentials/GitPassword.credentials.js", - "dist/credentials/GmailOAuth2Api.credentials.js", - "dist/credentials/GoogleAdsOAuth2Api.credentials.js", - "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", - "dist/credentials/GoogleApi.credentials.js", - "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", - "dist/credentials/GoogleBooksOAuth2Api.credentials.js", - "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", - "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", - "dist/credentials/GoogleContactsOAuth2Api.credentials.js", - "dist/credentials/GoogleDocsOAuth2Api.credentials.js", - "dist/credentials/GoogleDriveOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", - "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", - "dist/credentials/GoogleOAuth2Api.credentials.js", - "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", - "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", - "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", - "dist/credentials/GoogleTasksOAuth2Api.credentials.js", - "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", - "dist/credentials/GotifyApi.credentials.js", - "dist/credentials/GoToWebinarOAuth2Api.credentials.js", - "dist/credentials/GristApi.credentials.js", - "dist/credentials/GrafanaApi.credentials.js", - "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", - "dist/credentials/GumroadApi.credentials.js", - "dist/credentials/HaloPSAApi.credentials.js", - "dist/credentials/HarvestApi.credentials.js", - "dist/credentials/HarvestOAuth2Api.credentials.js", - "dist/credentials/HelpScoutOAuth2Api.credentials.js", - "dist/credentials/HighLevelApi.credentials.js", - "dist/credentials/HomeAssistantApi.credentials.js", - "dist/credentials/HttpBasicAuth.credentials.js", - "dist/credentials/HttpDigestAuth.credentials.js", - "dist/credentials/HttpHeaderAuth.credentials.js", - "dist/credentials/HttpCustomAuth.credentials.js", - "dist/credentials/HttpQueryAuth.credentials.js", - "dist/credentials/HubspotApi.credentials.js", - "dist/credentials/HubspotAppToken.credentials.js", - "dist/credentials/HubspotDeveloperApi.credentials.js", - "dist/credentials/HubspotOAuth2Api.credentials.js", - "dist/credentials/HumanticAiApi.credentials.js", - "dist/credentials/HunterApi.credentials.js", - "dist/credentials/HybridAnalysisApi.credentials.js", - "dist/credentials/Imap.credentials.js", - "dist/credentials/ImpervaWafApi.credentials.js", - "dist/credentials/IntercomApi.credentials.js", - "dist/credentials/InvoiceNinjaApi.credentials.js", - "dist/credentials/IterableApi.credentials.js", - "dist/credentials/JenkinsApi.credentials.js", - "dist/credentials/JiraSoftwareCloudApi.credentials.js", - "dist/credentials/JiraSoftwareServerApi.credentials.js", - "dist/credentials/JotFormApi.credentials.js", - "dist/credentials/Kafka.credentials.js", - "dist/credentials/KeapOAuth2Api.credentials.js", - "dist/credentials/KibanaApi.credentials.js", - "dist/credentials/KitemakerApi.credentials.js", - "dist/credentials/KoBoToolboxApi.credentials.js", - "dist/credentials/Ldap.credentials.js", - "dist/credentials/LemlistApi.credentials.js", - "dist/credentials/LinearApi.credentials.js", - "dist/credentials/LinearOAuth2Api.credentials.js", - "dist/credentials/LineNotifyOAuth2Api.credentials.js", - "dist/credentials/LingvaNexApi.credentials.js", - "dist/credentials/LinkedInOAuth2Api.credentials.js", - "dist/credentials/LoneScaleApi.credentials.js", - "dist/credentials/Magento2Api.credentials.js", - "dist/credentials/MailcheckApi.credentials.js", - "dist/credentials/MailchimpApi.credentials.js", - "dist/credentials/MailchimpOAuth2Api.credentials.js", - "dist/credentials/MailerLiteApi.credentials.js", - "dist/credentials/MailgunApi.credentials.js", - "dist/credentials/MailjetEmailApi.credentials.js", - "dist/credentials/MailjetSmsApi.credentials.js", - "dist/credentials/MandrillApi.credentials.js", - "dist/credentials/MarketstackApi.credentials.js", - "dist/credentials/MatrixApi.credentials.js", - "dist/credentials/MattermostApi.credentials.js", - "dist/credentials/MauticApi.credentials.js", - "dist/credentials/MauticOAuth2Api.credentials.js", - "dist/credentials/MediumApi.credentials.js", - "dist/credentials/MediumOAuth2Api.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MessageBirdApi.credentials.js", - "dist/credentials/MetabaseApi.credentials.js", - "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", - "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", - "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", - "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", - "dist/credentials/MicrosoftSql.credentials.js", - "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", - "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", - "dist/credentials/MindeeInvoiceApi.credentials.js", - "dist/credentials/MindeeReceiptApi.credentials.js", - "dist/credentials/MispApi.credentials.js", - "dist/credentials/MistApi.credentials.js", - "dist/credentials/MoceanApi.credentials.js", - "dist/credentials/MondayComApi.credentials.js", - "dist/credentials/MondayComOAuth2Api.credentials.js", - "dist/credentials/MongoDb.credentials.js", - "dist/credentials/MonicaCrmApi.credentials.js", - "dist/credentials/Mqtt.credentials.js", - "dist/credentials/Msg91Api.credentials.js", - "dist/credentials/MySql.credentials.js", - "dist/credentials/N8nApi.credentials.js", - "dist/credentials/NasaApi.credentials.js", - "dist/credentials/NetlifyApi.credentials.js", - "dist/credentials/NextCloudApi.credentials.js", - "dist/credentials/NextCloudOAuth2Api.credentials.js", - "dist/credentials/NocoDb.credentials.js", - "dist/credentials/NocoDbApiToken.credentials.js", - "dist/credentials/NotionApi.credentials.js", - "dist/credentials/NotionOAuth2Api.credentials.js", - "dist/credentials/NpmApi.credentials.js", - "dist/credentials/OAuth1Api.credentials.js", - "dist/credentials/OAuth2Api.credentials.js", - "dist/credentials/OdooApi.credentials.js", - "dist/credentials/OktaApi.credentials.js", - "dist/credentials/OneSimpleApi.credentials.js", - "dist/credentials/OnfleetApi.credentials.js", - "dist/credentials/OpenAiApi.credentials.js", - "dist/credentials/OpenCTIApi.credentials.js", - "dist/credentials/OpenWeatherMapApi.credentials.js", - "dist/credentials/OrbitApi.credentials.js", - "dist/credentials/OuraApi.credentials.js", - "dist/credentials/PaddleApi.credentials.js", - "dist/credentials/PagerDutyApi.credentials.js", - "dist/credentials/PagerDutyOAuth2Api.credentials.js", - "dist/credentials/PayPalApi.credentials.js", - "dist/credentials/PeekalinkApi.credentials.js", - "dist/credentials/PhantombusterApi.credentials.js", - "dist/credentials/PhilipsHueOAuth2Api.credentials.js", - "dist/credentials/PipedriveApi.credentials.js", - "dist/credentials/PipedriveOAuth2Api.credentials.js", - "dist/credentials/PlivoApi.credentials.js", - "dist/credentials/Postgres.credentials.js", - "dist/credentials/PostHogApi.credentials.js", - "dist/credentials/PostmarkApi.credentials.js", - "dist/credentials/ProfitWellApi.credentials.js", - "dist/credentials/PushbulletOAuth2Api.credentials.js", - "dist/credentials/PushcutApi.credentials.js", - "dist/credentials/PushoverApi.credentials.js", - "dist/credentials/QRadarApi.credentials.js", - "dist/credentials/QualysApi.credentials.js", - "dist/credentials/QuestDb.credentials.js", - "dist/credentials/QuickBaseApi.credentials.js", - "dist/credentials/QuickBooksOAuth2Api.credentials.js", - "dist/credentials/RabbitMQ.credentials.js", - "dist/credentials/RaindropOAuth2Api.credentials.js", - "dist/credentials/RecordedFutureApi.credentials.js", - "dist/credentials/RedditOAuth2Api.credentials.js", - "dist/credentials/Redis.credentials.js", - "dist/credentials/RocketchatApi.credentials.js", - "dist/credentials/RundeckApi.credentials.js", - "dist/credentials/S3.credentials.js", - "dist/credentials/SalesforceJwtApi.credentials.js", - "dist/credentials/SalesforceOAuth2Api.credentials.js", - "dist/credentials/SalesmateApi.credentials.js", - "dist/credentials/SeaTableApi.credentials.js", - "dist/credentials/SecurityScorecardApi.credentials.js", - "dist/credentials/SegmentApi.credentials.js", - "dist/credentials/SekoiaApi.credentials.js", - "dist/credentials/SendGridApi.credentials.js", - "dist/credentials/BrevoApi.credentials.js", - "dist/credentials/SendyApi.credentials.js", - "dist/credentials/SentryIoApi.credentials.js", - "dist/credentials/SentryIoOAuth2Api.credentials.js", - "dist/credentials/SentryIoServerApi.credentials.js", - "dist/credentials/ServiceNowOAuth2Api.credentials.js", - "dist/credentials/ServiceNowBasicApi.credentials.js", - "dist/credentials/Sftp.credentials.js", - "dist/credentials/ShopifyApi.credentials.js", - "dist/credentials/ShopifyAccessTokenApi.credentials.js", - "dist/credentials/ShopifyOAuth2Api.credentials.js", - "dist/credentials/Signl4Api.credentials.js", - "dist/credentials/SlackApi.credentials.js", - "dist/credentials/SlackOAuth2Api.credentials.js", - "dist/credentials/Sms77Api.credentials.js", - "dist/credentials/Smtp.credentials.js", - "dist/credentials/Snowflake.credentials.js", - "dist/credentials/SplunkApi.credentials.js", - "dist/credentials/SpontitApi.credentials.js", - "dist/credentials/SpotifyOAuth2Api.credentials.js", - "dist/credentials/ShufflerApi.credentials.js", - "dist/credentials/SshPassword.credentials.js", - "dist/credentials/SshPrivateKey.credentials.js", - "dist/credentials/StackbyApi.credentials.js", - "dist/credentials/StoryblokContentApi.credentials.js", - "dist/credentials/StoryblokManagementApi.credentials.js", - "dist/credentials/StrapiApi.credentials.js", - "dist/credentials/StrapiTokenApi.credentials.js", - "dist/credentials/StravaOAuth2Api.credentials.js", - "dist/credentials/StripeApi.credentials.js", - "dist/credentials/SupabaseApi.credentials.js", - "dist/credentials/SurveyMonkeyApi.credentials.js", - "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", - "dist/credentials/SyncroMspApi.credentials.js", - "dist/credentials/TaigaApi.credentials.js", - "dist/credentials/TapfiliateApi.credentials.js", - "dist/credentials/TelegramApi.credentials.js", - "dist/credentials/TheHiveProjectApi.credentials.js", - "dist/credentials/TheHiveApi.credentials.js", - "dist/credentials/TimescaleDb.credentials.js", - "dist/credentials/TodoistApi.credentials.js", - "dist/credentials/TodoistOAuth2Api.credentials.js", - "dist/credentials/TogglApi.credentials.js", - "dist/credentials/TotpApi.credentials.js", - "dist/credentials/TravisCiApi.credentials.js", - "dist/credentials/TrellixEpoApi.credentials.js", - "dist/credentials/TrelloApi.credentials.js", - "dist/credentials/TwakeCloudApi.credentials.js", - "dist/credentials/TwakeServerApi.credentials.js", - "dist/credentials/TwilioApi.credentials.js", - "dist/credentials/TwistOAuth2Api.credentials.js", - "dist/credentials/TwitterOAuth1Api.credentials.js", - "dist/credentials/TwitterOAuth2Api.credentials.js", - "dist/credentials/TypeformApi.credentials.js", - "dist/credentials/TypeformOAuth2Api.credentials.js", - "dist/credentials/UnleashedSoftwareApi.credentials.js", - "dist/credentials/UpleadApi.credentials.js", - "dist/credentials/UProcApi.credentials.js", - "dist/credentials/UptimeRobotApi.credentials.js", - "dist/credentials/UrlScanIoApi.credentials.js", - "dist/credentials/VeroApi.credentials.js", - "dist/credentials/VirusTotalApi.credentials.js", - "dist/credentials/VonageApi.credentials.js", - "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", - "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", - "dist/credentials/WebflowApi.credentials.js", - "dist/credentials/WebflowOAuth2Api.credentials.js", - "dist/credentials/WekanApi.credentials.js", - "dist/credentials/WhatsAppApi.credentials.js", - "dist/credentials/WiseApi.credentials.js", - "dist/credentials/WooCommerceApi.credentials.js", - "dist/credentials/WordpressApi.credentials.js", - "dist/credentials/WorkableApi.credentials.js", - "dist/credentials/WufooApi.credentials.js", - "dist/credentials/XeroOAuth2Api.credentials.js", - "dist/credentials/YourlsApi.credentials.js", - "dist/credentials/YouTubeOAuth2Api.credentials.js", - "dist/credentials/ZammadBasicAuthApi.credentials.js", - "dist/credentials/ZammadTokenAuthApi.credentials.js", - "dist/credentials/ZendeskApi.credentials.js", - "dist/credentials/ZendeskOAuth2Api.credentials.js", - "dist/credentials/ZohoOAuth2Api.credentials.js", - "dist/credentials/ZoomApi.credentials.js", - "dist/credentials/ZoomOAuth2Api.credentials.js", - "dist/credentials/ZscalerZiaApi.credentials.js", - "dist/credentials/ZulipApi.credentials.js" - ], - "nodes": [ - "dist/nodes/ActionNetwork/ActionNetwork.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", - "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", - "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", - "dist/nodes/Adalo/Adalo.node.js", - "dist/nodes/Affinity/Affinity.node.js", - "dist/nodes/Affinity/AffinityTrigger.node.js", - "dist/nodes/AgileCrm/AgileCrm.node.js", - "dist/nodes/Airtable/Airtable.node.js", - "dist/nodes/Airtable/AirtableTrigger.node.js", - "dist/nodes/Amqp/Amqp.node.js", - "dist/nodes/Amqp/AmqpTrigger.node.js", - "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", - "dist/nodes/Asana/Asana.node.js", - "dist/nodes/Asana/AsanaTrigger.node.js", - "dist/nodes/Automizy/Automizy.node.js", - "dist/nodes/Autopilot/Autopilot.node.js", - "dist/nodes/Autopilot/AutopilotTrigger.node.js", - "dist/nodes/Aws/AwsLambda.node.js", - "dist/nodes/Aws/AwsSns.node.js", - "dist/nodes/Aws/AwsSnsTrigger.node.js", - "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", - "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", - "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", - "dist/nodes/Aws/ELB/AwsElb.node.js", - "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", - "dist/nodes/Aws/S3/AwsS3.node.js", - "dist/nodes/Aws/SES/AwsSes.node.js", - "dist/nodes/Aws/SQS/AwsSqs.node.js", - "dist/nodes/Aws/Textract/AwsTextract.node.js", - "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", - "dist/nodes/BambooHr/BambooHr.node.js", - "dist/nodes/Bannerbear/Bannerbear.node.js", - "dist/nodes/Baserow/Baserow.node.js", - "dist/nodes/Beeminder/Beeminder.node.js", - "dist/nodes/Bitbucket/BitbucketTrigger.node.js", - "dist/nodes/Bitly/Bitly.node.js", - "dist/nodes/Bitwarden/Bitwarden.node.js", - "dist/nodes/Box/Box.node.js", - "dist/nodes/Box/BoxTrigger.node.js", - "dist/nodes/Brandfetch/Brandfetch.node.js", - "dist/nodes/Bubble/Bubble.node.js", - "dist/nodes/Cal/CalTrigger.node.js", - "dist/nodes/Calendly/CalendlyTrigger.node.js", - "dist/nodes/Chargebee/Chargebee.node.js", - "dist/nodes/Chargebee/ChargebeeTrigger.node.js", - "dist/nodes/CircleCi/CircleCi.node.js", - "dist/nodes/Cisco/Webex/CiscoWebex.node.js", - "dist/nodes/Citrix/ADC/CitrixAdc.node.js", - "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", - "dist/nodes/Cloudflare/Cloudflare.node.js", - "dist/nodes/Clearbit/Clearbit.node.js", - "dist/nodes/ClickUp/ClickUp.node.js", - "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/Clockify.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", - "dist/nodes/Cockpit/Cockpit.node.js", - "dist/nodes/Coda/Coda.node.js", - "dist/nodes/Code/Code.node.js", - "dist/nodes/CoinGecko/CoinGecko.node.js", - "dist/nodes/CompareDatasets/CompareDatasets.node.js", - "dist/nodes/Compression/Compression.node.js", - "dist/nodes/Contentful/Contentful.node.js", - "dist/nodes/ConvertKit/ConvertKit.node.js", - "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", - "dist/nodes/Copper/Copper.node.js", - "dist/nodes/Copper/CopperTrigger.node.js", - "dist/nodes/Cortex/Cortex.node.js", - "dist/nodes/CrateDb/CrateDb.node.js", - "dist/nodes/Cron/Cron.node.js", - "dist/nodes/CrowdDev/CrowdDev.node.js", - "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", - "dist/nodes/Crypto/Crypto.node.js", - "dist/nodes/CustomerIo/CustomerIo.node.js", - "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", - "dist/nodes/DateTime/DateTime.node.js", - "dist/nodes/DebugHelper/DebugHelper.node.js", - "dist/nodes/DeepL/DeepL.node.js", - "dist/nodes/Demio/Demio.node.js", - "dist/nodes/Dhl/Dhl.node.js", - "dist/nodes/Discord/Discord.node.js", - "dist/nodes/Discourse/Discourse.node.js", - "dist/nodes/Disqus/Disqus.node.js", - "dist/nodes/Drift/Drift.node.js", - "dist/nodes/Dropbox/Dropbox.node.js", - "dist/nodes/Dropcontact/Dropcontact.node.js", - "dist/nodes/EditImage/EditImage.node.js", - "dist/nodes/E2eTest/E2eTest.node.js", - "dist/nodes/Egoi/Egoi.node.js", - "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", - "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", - "dist/nodes/EmailReadImap/EmailReadImap.node.js", - "dist/nodes/EmailSend/EmailSend.node.js", - "dist/nodes/Emelia/Emelia.node.js", - "dist/nodes/Emelia/EmeliaTrigger.node.js", - "dist/nodes/ERPNext/ERPNext.node.js", - "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", - "dist/nodes/Eventbrite/EventbriteTrigger.node.js", - "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", - "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", - "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", - "dist/nodes/ExecutionData/ExecutionData.node.js", - "dist/nodes/Facebook/FacebookGraphApi.node.js", - "dist/nodes/Facebook/FacebookTrigger.node.js", - "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", - "dist/nodes/Figma/FigmaTrigger.node.js", - "dist/nodes/FileMaker/FileMaker.node.js", - "dist/nodes/Filter/Filter.node.js", - "dist/nodes/Flow/Flow.node.js", - "dist/nodes/Flow/FlowTrigger.node.js", - "dist/nodes/Form/FormTrigger.node.js", - "dist/nodes/FormIo/FormIoTrigger.node.js", - "dist/nodes/Formstack/FormstackTrigger.node.js", - "dist/nodes/Freshdesk/Freshdesk.node.js", - "dist/nodes/Freshservice/Freshservice.node.js", - "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", - "dist/nodes/Ftp/Ftp.node.js", - "dist/nodes/Function/Function.node.js", - "dist/nodes/FunctionItem/FunctionItem.node.js", - "dist/nodes/GetResponse/GetResponse.node.js", - "dist/nodes/GetResponse/GetResponseTrigger.node.js", - "dist/nodes/Ghost/Ghost.node.js", - "dist/nodes/Git/Git.node.js", - "dist/nodes/Github/Github.node.js", - "dist/nodes/Github/GithubTrigger.node.js", - "dist/nodes/Gitlab/Gitlab.node.js", - "dist/nodes/Gitlab/GitlabTrigger.node.js", - "dist/nodes/Google/Ads/GoogleAds.node.js", - "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", - "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", - "dist/nodes/Google/Books/GoogleBooks.node.js", - "dist/nodes/Google/Calendar/GoogleCalendar.node.js", - "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", - "dist/nodes/Google/Chat/GoogleChat.node.js", - "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", - "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", - "dist/nodes/Google/Contacts/GoogleContacts.node.js", - "dist/nodes/Google/Docs/GoogleDocs.node.js", - "dist/nodes/Google/Drive/GoogleDrive.node.js", - "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", - "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", - "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", - "dist/nodes/Google/Gmail/Gmail.node.js", - "dist/nodes/Google/Gmail/GmailTrigger.node.js", - "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", - "dist/nodes/Google/Perspective/GooglePerspective.node.js", - "dist/nodes/Google/Sheet/GoogleSheets.node.js", - "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", - "dist/nodes/Google/Slides/GoogleSlides.node.js", - "dist/nodes/Google/Task/GoogleTasks.node.js", - "dist/nodes/Google/Translate/GoogleTranslate.node.js", - "dist/nodes/Google/YouTube/YouTube.node.js", - "dist/nodes/Gotify/Gotify.node.js", - "dist/nodes/GoToWebinar/GoToWebinar.node.js", - "dist/nodes/Grafana/Grafana.node.js", - "dist/nodes/GraphQL/GraphQL.node.js", - "dist/nodes/Grist/Grist.node.js", - "dist/nodes/Gumroad/GumroadTrigger.node.js", - "dist/nodes/HackerNews/HackerNews.node.js", - "dist/nodes/HaloPSA/HaloPSA.node.js", - "dist/nodes/Harvest/Harvest.node.js", - "dist/nodes/HelpScout/HelpScout.node.js", - "dist/nodes/HelpScout/HelpScoutTrigger.node.js", - "dist/nodes/HighLevel/HighLevel.node.js", - "dist/nodes/HomeAssistant/HomeAssistant.node.js", - "dist/nodes/HtmlExtract/HtmlExtract.node.js", - "dist/nodes/Html/Html.node.js", - "dist/nodes/HttpRequest/HttpRequest.node.js", - "dist/nodes/Hubspot/Hubspot.node.js", - "dist/nodes/Hubspot/HubspotTrigger.node.js", - "dist/nodes/HumanticAI/HumanticAi.node.js", - "dist/nodes/Hunter/Hunter.node.js", - "dist/nodes/ICalendar/ICalendar.node.js", - "dist/nodes/If/If.node.js", - "dist/nodes/Intercom/Intercom.node.js", - "dist/nodes/Interval/Interval.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", - "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", - "dist/nodes/ItemLists/ItemLists.node.js", - "dist/nodes/Iterable/Iterable.node.js", - "dist/nodes/Jenkins/Jenkins.node.js", - "dist/nodes/Jira/Jira.node.js", - "dist/nodes/Jira/JiraTrigger.node.js", - "dist/nodes/JotForm/JotFormTrigger.node.js", - "dist/nodes/Kafka/Kafka.node.js", - "dist/nodes/Kafka/KafkaTrigger.node.js", - "dist/nodes/Keap/Keap.node.js", - "dist/nodes/Keap/KeapTrigger.node.js", - "dist/nodes/Kitemaker/Kitemaker.node.js", - "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", - "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", - "dist/nodes/Ldap/Ldap.node.js", - "dist/nodes/Lemlist/Lemlist.node.js", - "dist/nodes/Lemlist/LemlistTrigger.node.js", - "dist/nodes/Line/Line.node.js", - "dist/nodes/Linear/Linear.node.js", - "dist/nodes/Linear/LinearTrigger.node.js", - "dist/nodes/LingvaNex/LingvaNex.node.js", - "dist/nodes/LinkedIn/LinkedIn.node.js", - "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", - "dist/nodes/LoneScale/LoneScaleTrigger.node.js", - "dist/nodes/LoneScale/LoneScale.node.js", - "dist/nodes/Magento/Magento2.node.js", - "dist/nodes/Mailcheck/Mailcheck.node.js", - "dist/nodes/Mailchimp/Mailchimp.node.js", - "dist/nodes/Mailchimp/MailchimpTrigger.node.js", - "dist/nodes/MailerLite/MailerLite.node.js", - "dist/nodes/MailerLite/MailerLiteTrigger.node.js", - "dist/nodes/Mailgun/Mailgun.node.js", - "dist/nodes/Mailjet/Mailjet.node.js", - "dist/nodes/Mailjet/MailjetTrigger.node.js", - "dist/nodes/Mandrill/Mandrill.node.js", - "dist/nodes/ManualTrigger/ManualTrigger.node.js", - "dist/nodes/Markdown/Markdown.node.js", - "dist/nodes/Marketstack/Marketstack.node.js", - "dist/nodes/Matrix/Matrix.node.js", - "dist/nodes/Mattermost/Mattermost.node.js", - "dist/nodes/Mautic/Mautic.node.js", - "dist/nodes/Mautic/MauticTrigger.node.js", - "dist/nodes/Medium/Medium.node.js", - "dist/nodes/Merge/Merge.node.js", - "dist/nodes/MessageBird/MessageBird.node.js", - "dist/nodes/Metabase/Metabase.node.js", - "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", - "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", - "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", - "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", - "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", - "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", - "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", - "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", - "dist/nodes/Mindee/Mindee.node.js", - "dist/nodes/Misp/Misp.node.js", - "dist/nodes/Mocean/Mocean.node.js", - "dist/nodes/MondayCom/MondayCom.node.js", - "dist/nodes/MongoDb/MongoDb.node.js", - "dist/nodes/MonicaCrm/MonicaCrm.node.js", - "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", - "dist/nodes/MQTT/Mqtt.node.js", - "dist/nodes/MQTT/MqttTrigger.node.js", - "dist/nodes/Msg91/Msg91.node.js", - "dist/nodes/MySql/MySql.node.js", - "dist/nodes/N8n/N8n.node.js", - "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", - "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", - "dist/nodes/N8nTrigger/N8nTrigger.node.js", - "dist/nodes/Nasa/Nasa.node.js", - "dist/nodes/Netlify/Netlify.node.js", - "dist/nodes/Netlify/NetlifyTrigger.node.js", - "dist/nodes/NextCloud/NextCloud.node.js", - "dist/nodes/NocoDB/NocoDB.node.js", - "dist/nodes/Brevo/Brevo.node.js", - "dist/nodes/Brevo/BrevoTrigger.node.js", - "dist/nodes/StickyNote/StickyNote.node.js", - "dist/nodes/NoOp/NoOp.node.js", - "dist/nodes/Onfleet/Onfleet.node.js", - "dist/nodes/Onfleet/OnfleetTrigger.node.js", - "dist/nodes/Notion/Notion.node.js", - "dist/nodes/Notion/NotionTrigger.node.js", - "dist/nodes/Npm/Npm.node.js", - "dist/nodes/Odoo/Odoo.node.js", - "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", - "dist/nodes/OpenAi/OpenAi.node.js", - "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", - "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", - "dist/nodes/Orbit/Orbit.node.js", - "dist/nodes/Oura/Oura.node.js", - "dist/nodes/Paddle/Paddle.node.js", - "dist/nodes/PagerDuty/PagerDuty.node.js", - "dist/nodes/PayPal/PayPal.node.js", - "dist/nodes/PayPal/PayPalTrigger.node.js", - "dist/nodes/Peekalink/Peekalink.node.js", - "dist/nodes/Phantombuster/Phantombuster.node.js", - "dist/nodes/PhilipsHue/PhilipsHue.node.js", - "dist/nodes/Pipedrive/Pipedrive.node.js", - "dist/nodes/Pipedrive/PipedriveTrigger.node.js", - "dist/nodes/Plivo/Plivo.node.js", - "dist/nodes/PostBin/PostBin.node.js", - "dist/nodes/Postgres/Postgres.node.js", - "dist/nodes/Postgres/PostgresTrigger.node.js", - "dist/nodes/PostHog/PostHog.node.js", - "dist/nodes/Postmark/PostmarkTrigger.node.js", - "dist/nodes/ProfitWell/ProfitWell.node.js", - "dist/nodes/Pushbullet/Pushbullet.node.js", - "dist/nodes/Pushcut/Pushcut.node.js", - "dist/nodes/Pushcut/PushcutTrigger.node.js", - "dist/nodes/Pushover/Pushover.node.js", - "dist/nodes/QuestDb/QuestDb.node.js", - "dist/nodes/QuickBase/QuickBase.node.js", - "dist/nodes/QuickBooks/QuickBooks.node.js", - "dist/nodes/QuickChart/QuickChart.node.js", - "dist/nodes/RabbitMQ/RabbitMQ.node.js", - "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", - "dist/nodes/Raindrop/Raindrop.node.js", - "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", - "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", - "dist/nodes/ReadPdf/ReadPDF.node.js", - "dist/nodes/Reddit/Reddit.node.js", - "dist/nodes/Redis/Redis.node.js", - "dist/nodes/Redis/RedisTrigger.node.js", - "dist/nodes/RenameKeys/RenameKeys.node.js", - "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", - "dist/nodes/Rocketchat/Rocketchat.node.js", - "dist/nodes/RssFeedRead/RssFeedRead.node.js", - "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", - "dist/nodes/Rundeck/Rundeck.node.js", - "dist/nodes/S3/S3.node.js", - "dist/nodes/Salesforce/Salesforce.node.js", - "dist/nodes/Salesmate/Salesmate.node.js", - "dist/nodes/Schedule/ScheduleTrigger.node.js", - "dist/nodes/SeaTable/SeaTable.node.js", - "dist/nodes/SeaTable/SeaTableTrigger.node.js", - "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", - "dist/nodes/Segment/Segment.node.js", - "dist/nodes/SendGrid/SendGrid.node.js", - "dist/nodes/Sendy/Sendy.node.js", - "dist/nodes/SentryIo/SentryIo.node.js", - "dist/nodes/ServiceNow/ServiceNow.node.js", - "dist/nodes/Set/Set.node.js", - "dist/nodes/Shopify/Shopify.node.js", - "dist/nodes/Shopify/ShopifyTrigger.node.js", - "dist/nodes/Signl4/Signl4.node.js", - "dist/nodes/Slack/Slack.node.js", - "dist/nodes/Sms77/Sms77.node.js", - "dist/nodes/Snowflake/Snowflake.node.js", - "dist/nodes/SplitInBatches/SplitInBatches.node.js", - "dist/nodes/Splunk/Splunk.node.js", - "dist/nodes/Spontit/Spontit.node.js", - "dist/nodes/Spotify/Spotify.node.js", - "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", - "dist/nodes/SseTrigger/SseTrigger.node.js", - "dist/nodes/Ssh/Ssh.node.js", - "dist/nodes/Stackby/Stackby.node.js", - "dist/nodes/Start/Start.node.js", - "dist/nodes/StopAndError/StopAndError.node.js", - "dist/nodes/Storyblok/Storyblok.node.js", - "dist/nodes/Strapi/Strapi.node.js", - "dist/nodes/Strava/Strava.node.js", - "dist/nodes/Strava/StravaTrigger.node.js", - "dist/nodes/Stripe/Stripe.node.js", - "dist/nodes/Stripe/StripeTrigger.node.js", - "dist/nodes/Supabase/Supabase.node.js", - "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", - "dist/nodes/Switch/Switch.node.js", - "dist/nodes/SyncroMSP/SyncroMsp.node.js", - "dist/nodes/Taiga/Taiga.node.js", - "dist/nodes/Taiga/TaigaTrigger.node.js", - "dist/nodes/Tapfiliate/Tapfiliate.node.js", - "dist/nodes/Telegram/Telegram.node.js", - "dist/nodes/Telegram/TelegramTrigger.node.js", - "dist/nodes/TheHiveProject/TheHiveProject.node.js", - "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", - "dist/nodes/TheHive/TheHive.node.js", - "dist/nodes/TheHive/TheHiveTrigger.node.js", - "dist/nodes/TimescaleDb/TimescaleDb.node.js", - "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Toggl/TogglTrigger.node.js", - "dist/nodes/Totp/Totp.node.js", - "dist/nodes/TravisCi/TravisCi.node.js", - "dist/nodes/Trello/Trello.node.js", - "dist/nodes/Trello/TrelloTrigger.node.js", - "dist/nodes/Twake/Twake.node.js", - "dist/nodes/Twilio/Twilio.node.js", - "dist/nodes/Twist/Twist.node.js", - "dist/nodes/Twitter/Twitter.node.js", - "dist/nodes/Typeform/TypeformTrigger.node.js", - "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", - "dist/nodes/Uplead/Uplead.node.js", - "dist/nodes/UProc/UProc.node.js", - "dist/nodes/UptimeRobot/UptimeRobot.node.js", - "dist/nodes/UrlScanIo/UrlScanIo.node.js", - "dist/nodes/Vero/Vero.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", - "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", - "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", - "dist/nodes/Vonage/Vonage.node.js", - "dist/nodes/Wait/Wait.node.js", - "dist/nodes/Webflow/Webflow.node.js", - "dist/nodes/Webflow/WebflowTrigger.node.js", - "dist/nodes/Webhook/Webhook.node.js", - "dist/nodes/Wekan/Wekan.node.js", - "dist/nodes/WhatsApp/WhatsApp.node.js", - "dist/nodes/Wise/Wise.node.js", - "dist/nodes/Wise/WiseTrigger.node.js", - "dist/nodes/WooCommerce/WooCommerce.node.js", - "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", - "dist/nodes/Wordpress/Wordpress.node.js", - "dist/nodes/Workable/WorkableTrigger.node.js", - "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", - "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", - "dist/nodes/Wufoo/WufooTrigger.node.js", - "dist/nodes/Xero/Xero.node.js", - "dist/nodes/Xml/Xml.node.js", - "dist/nodes/Yourls/Yourls.node.js", - "dist/nodes/Zammad/Zammad.node.js", - "dist/nodes/Zendesk/Zendesk.node.js", - "dist/nodes/Zendesk/ZendeskTrigger.node.js", - "dist/nodes/Zoho/ZohoCrm.node.js", - "dist/nodes/Zoom/Zoom.node.js", - "dist/nodes/Zulip/Zulip.node.js" - ] - }, - "devDependencies": { - "@types/amqplib": "^0.10.1", - "@types/aws4": "^1.5.1", - "@types/basic-auth": "^1.1.3", - "@types/cheerio": "^0.22.15", - "@types/cron": "~1.7.1", - "@types/eventsource": "^1.1.2", - "@types/express": "^4.17.6", - "@types/gm": "^1.25.0", - "@types/imap-simple": "^4.2.0", - "@types/js-nacl": "^1.3.0", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.195", - "@types/lossless-json": "^1.0.0", - "@types/mailparser": "^2.7.3", - "@types/mime-types": "^2.1.0", - "@types/mssql": "^6.0.2", - "@types/node-ssh": "^7.0.1", - "@types/nodemailer": "^6.4.0", - "@types/promise-ftp": "^1.3.4", - "@types/redis": "^2.8.11", - "@types/request-promise-native": "~1.0.15", - "@types/rfc2047": "^2.0.1", - "@types/showdown": "^1.9.4", - "@types/snowflake-sdk": "^1.6.12", - "@types/ssh2-sftp-client": "^5.1.0", - "@types/tmp": "^0.2.0", - "@types/uuid": "^8.3.2", - "@types/xml2js": "^0.4.11", - "eslint-plugin-n8n-nodes-base": "^1.16.0", - "gulp": "^4.0.0", - "n8n-core": "1.14.1" - }, - "dependencies": { - "@kafkajs/confluent-schema-registry": "1.0.6", - "@n8n/vm2": "^3.9.20", - "amqplib": "^0.10.3", - "aws4": "^1.8.0", - "basic-auth": "^2.0.1", - "change-case": "^4.1.1", - "cheerio": "1.0.0-rc.6", - "chokidar": "3.5.2", - "cron": "~1.7.2", - "csv-parse": "^5.5.0", - "currency-codes": "^2.1.0", - "eventsource": "^2.0.2", - "fast-glob": "^3.2.5", - "fflate": "^0.7.0", - "get-system-fonts": "^2.0.2", - "gm": "^1.25.0", - "iconv-lite": "^0.6.2", - "ics": "^2.27.0", - "imap-simple": "^4.3.0", - "isbot": "^3.6.13", - "iso-639-1": "^2.1.3", - "js-nacl": "^1.4.0", - "jsonwebtoken": "^9.0.0", - "kafkajs": "^1.14.0", - "ldapts": "^4.2.6", - "lodash": "^4.17.21", - "lossless-json": "^1.0.4", - "luxon": "^3.3.0", - "mailparser": "^3.2.0", - "minifaker": "^1.34.1", - "moment": "~2.29.2", - "moment-timezone": "^0.5.28", - "mongodb": "^4.17.1", - "mqtt": "^5.0.2", - "mssql": "^8.1.2", - "mysql2": "~2.3.0", - "nanoid": "^3.3.6", - "node-html-markdown": "^1.1.3", - "node-ssh": "^12.0.0", - "nodemailer": "^6.7.1", - "otpauth": "^9.1.1", - "pdfjs-dist": "^2.16.105", - "pg": "^8.3.0", - "pg-promise": "^10.5.8", - "pretty-bytes": "^5.6.0", - "promise-ftp": "^1.3.5", - "pyodide": "^0.23.4", - "redis": "^3.1.1", - "rfc2047": "^4.0.1", - "rhea": "^1.0.11", - "rss-parser": "^3.7.0", - "semver": "^7.5.4", - "showdown": "^2.0.3", - "simple-git": "^3.17.0", - "snowflake-sdk": "^1.8.0", - "ssh2-sftp-client": "^7.0.0", - "tmp-promise": "^3.0.2", - "typedi": "^0.10.0", - "uuid": "^8.3.2", - "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", - "xml2js": "^0.5.0", - "n8n-workflow": "1.14.1" - }, - "scripts": { - "clean": "rimraf dist .turbo", - "dev": "pnpm watch", - "typecheck": "tsc", - "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", - "build:translations": "gulp build:translations", - "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", - "format": "prettier --write . --ignore-path ../../.prettierignore", - "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", - "lintfix": "eslint . --fix", - "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", - "test": "jest" - } - }, - "extraction_time_ms": 3, - "extracted_at": "2025-06-07T17:49:22.888Z" - } - ], - "errors": [ - { - "node": "@n8n/n8n-nodes-langchain.Agent", - "error": "Node source code not found for: @n8n/n8n-nodes-langchain.Agent" - }, - { - "node": "@n8n/n8n-nodes-langchain.OpenAiAssistant", - "error": "Node source code not found for: @n8n/n8n-nodes-langchain.OpenAiAssistant" - }, - { - "node": "@n8n/n8n-nodes-langchain.ChainLlm", - "error": "Node source code not found for: @n8n/n8n-nodes-langchain.ChainLlm" - }, - { - "node": "n8n-nodes-base.GoogleSheets", - "error": "Node source code not found for: n8n-nodes-base.GoogleSheets" - } - ], - "totalSize": 53119 -} \ No newline at end of file +[ + { + "nodeType": "n8n-nodes-base.Slack", + "success": true, + "hasPackageInfo": true, + "hasCredentials": true, + "sourceSize": 1007, + "credentialSize": 7553, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + }, + { + "nodeType": "n8n-nodes-base.Discord", + "success": true, + "hasPackageInfo": true, + "hasCredentials": false, + "sourceSize": 10049, + "credentialSize": 0, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + }, + { + "nodeType": "n8n-nodes-base.HttpRequest", + "success": true, + "hasPackageInfo": true, + "hasCredentials": false, + "sourceSize": 1343, + "credentialSize": 0, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + }, + { + "nodeType": "n8n-nodes-base.Webhook", + "success": true, + "hasPackageInfo": true, + "hasCredentials": false, + "sourceSize": 10667, + "credentialSize": 0, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + }, + { + "nodeType": "n8n-nodes-base.If", + "success": true, + "hasPackageInfo": true, + "hasCredentials": false, + "sourceSize": 20533, + "credentialSize": 0, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + }, + { + "nodeType": "n8n-nodes-base.SplitInBatches", + "success": true, + "hasPackageInfo": true, + "hasCredentials": false, + "sourceSize": 1135, + "credentialSize": 0, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + }, + { + "nodeType": "n8n-nodes-base.Airtable", + "success": true, + "hasPackageInfo": true, + "hasCredentials": true, + "sourceSize": 936, + "credentialSize": 5985, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + }, + { + "nodeType": "n8n-nodes-base.Function", + "success": true, + "hasPackageInfo": true, + "hasCredentials": false, + "sourceSize": 7449, + "credentialSize": 0, + "packageName": "n8n-nodes-base", + "packageVersion": "1.14.1" + } +] \ No newline at end of file diff --git a/tests/test-complete-fix.js b/tests/test-complete-fix.js new file mode 100755 index 0000000..94f6fc6 --- /dev/null +++ b/tests/test-complete-fix.js @@ -0,0 +1,94 @@ +#!/usr/bin/env node + +const { NodeDocumentationService } = require('../dist/services/node-documentation-service'); + +async function testCompleteFix() { + console.log('=== Testing Complete Documentation Fix ===\n'); + + const service = new NodeDocumentationService('./data/test-nodes-v2.db'); + + try { + // First check if we have any nodes + const existingNodes = await service.listNodes(); + console.log(`๐Ÿ“Š Current database has ${existingNodes.length} nodes`); + + if (existingNodes.length === 0) { + console.log('\n๐Ÿ”„ Rebuilding database with fixed documentation fetcher...'); + const stats = await service.rebuildDatabase(); + console.log(`\nโœ… Rebuild complete:`); + console.log(` - Total nodes found: ${stats.total}`); + console.log(` - Successfully processed: ${stats.successful}`); + console.log(` - Failed: ${stats.failed}`); + + if (stats.errors.length > 0) { + console.log('\nโš ๏ธ Errors encountered:'); + stats.errors.slice(0, 5).forEach(err => console.log(` - ${err}`)); + } + } + + // Test specific nodes + console.log('\n๐Ÿ“‹ Testing specific nodes:'); + + const testNodes = ['slack', 'if', 'httpRequest', 'webhook']; + + for (const nodeName of testNodes) { + const nodeInfo = await service.getNodeInfo(`n8n-nodes-base.${nodeName}`); + + if (nodeInfo) { + console.log(`\nโœ… ${nodeInfo.displayName || nodeName}:`); + console.log(` - Type: ${nodeInfo.nodeType}`); + console.log(` - Description: ${nodeInfo.description?.substring(0, 80)}...`); + console.log(` - Has source code: ${!!nodeInfo.sourceCode}`); + console.log(` - Has documentation: ${!!nodeInfo.documentation}`); + console.log(` - Documentation URL: ${nodeInfo.documentationUrl || 'N/A'}`); + console.log(` - Has example: ${!!nodeInfo.exampleWorkflow}`); + console.log(` - Category: ${nodeInfo.category || 'N/A'}`); + + // Check if it's getting the right documentation + if (nodeInfo.documentation) { + const isCredentialDoc = nodeInfo.documentation.includes('credentials') && + !nodeInfo.documentation.includes('node documentation'); + console.log(` - Is credential doc: ${isCredentialDoc} ${isCredentialDoc ? 'โŒ' : 'โœ…'}`); + } + } else { + console.log(`\nโŒ ${nodeName}: Not found in database`); + } + } + + // Test search functionality + console.log('\n๐Ÿ” Testing search functionality:'); + + const searchTests = [ + { query: 'webhook', label: 'Webhook nodes' }, + { query: 'http', label: 'HTTP nodes' }, + { query: 'slack', label: 'Slack nodes' } + ]; + + for (const test of searchTests) { + const results = await service.searchNodes({ query: test.query }); + console.log(`\n ${test.label}: ${results.length} results`); + results.slice(0, 3).forEach(node => { + console.log(` - ${node.displayName} (${node.nodeType})`); + }); + } + + // Get final statistics + console.log('\n๐Ÿ“Š Final database statistics:'); + const stats = service.getStatistics(); + console.log(` - Total nodes: ${stats.totalNodes}`); + console.log(` - Nodes with documentation: ${stats.nodesWithDocs}`); + console.log(` - Nodes with examples: ${stats.nodesWithExamples}`); + console.log(` - Trigger nodes: ${stats.triggerNodes}`); + console.log(` - Webhook nodes: ${stats.webhookNodes}`); + + console.log('\nโœ… All tests completed!'); + + } catch (error) { + console.error('\nโŒ Test failed:', error); + process.exit(1); + } finally { + service.close(); + } +} + +testCompleteFix().catch(console.error); \ No newline at end of file diff --git a/tests/test-debug-enhanced.js b/tests/test-debug-enhanced.js new file mode 100644 index 0000000..dd9dcf2 --- /dev/null +++ b/tests/test-debug-enhanced.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node + +const { EnhancedDocumentationFetcher } = require('../dist/utils/enhanced-documentation-fetcher'); + +async function debugTest() { + console.log('=== Debug Enhanced Documentation ===\n'); + + const fetcher = new EnhancedDocumentationFetcher(); + + try { + await fetcher.ensureDocsRepository(); + + // Test Slack documentation parsing + console.log('Testing Slack documentation...'); + const slackDoc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.slack'); + + if (slackDoc) { + console.log('\nSlack Documentation:'); + console.log('- Operations found:', slackDoc.operations?.length || 0); + + // Show raw markdown around operations section + const operationsIndex = slackDoc.markdown.indexOf('## Operations'); + if (operationsIndex > -1) { + console.log('\nRaw markdown around Operations section:'); + console.log('---'); + console.log(slackDoc.markdown.substring(operationsIndex, operationsIndex + 1000)); + console.log('---'); + } + } + + } catch (error) { + console.error('Error:', error); + } finally { + await fetcher.cleanup(); + } +} + +debugTest().catch(console.error); \ No newline at end of file diff --git a/tests/test-docs-fix.js b/tests/test-docs-fix.js new file mode 100755 index 0000000..0f801bd --- /dev/null +++ b/tests/test-docs-fix.js @@ -0,0 +1,57 @@ +#!/usr/bin/env node + +const { DocumentationFetcher } = require('../dist/utils/documentation-fetcher'); +const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor'); + +async function testDocsFix() { + console.log('=== Testing Documentation Fix ===\n'); + + const docsFetcher = new DocumentationFetcher(); + const extractor = new NodeSourceExtractor(); + + try { + // Test nodes + const testNodes = [ + 'n8n-nodes-base.slack', + 'n8n-nodes-base.if', + 'n8n-nodes-base.httpRequest', + 'n8n-nodes-base.webhook' + ]; + + for (const nodeType of testNodes) { + console.log(`\n๐Ÿ“‹ Testing ${nodeType}:`); + + // Test documentation fetching + const docs = await docsFetcher.getNodeDocumentation(nodeType); + if (docs) { + console.log(` โœ… Documentation found`); + console.log(` ๐Ÿ“„ URL: ${docs.url}`); + const titleMatch = docs.markdown.match(/title:\s*(.+)/); + if (titleMatch) { + console.log(` ๐Ÿ“ Title: ${titleMatch[1]}`); + } + console.log(` ๐Ÿ“ Length: ${docs.markdown.length} characters`); + console.log(` ๐Ÿ”ง Has examples: ${docs.examples && docs.examples.length > 0}`); + } else { + console.log(` โŒ No documentation found`); + } + + // Test source extraction + try { + const source = await extractor.extractNodeSource(nodeType); + console.log(` โœ… Source code found at: ${source.location}`); + } catch (error) { + console.log(` โŒ Source extraction failed: ${error.message}`); + } + } + + console.log('\nโœ… Test completed!'); + + } catch (error) { + console.error('\nโŒ Test failed:', error); + } finally { + await docsFetcher.cleanup(); + } +} + +testDocsFix().catch(console.error); \ No newline at end of file diff --git a/tests/test-enhanced-documentation.js b/tests/test-enhanced-documentation.js new file mode 100644 index 0000000..972a5b2 --- /dev/null +++ b/tests/test-enhanced-documentation.js @@ -0,0 +1,141 @@ +#!/usr/bin/env node + +const { EnhancedDocumentationFetcher } = require('../dist/utils/enhanced-documentation-fetcher'); +const { EnhancedSQLiteStorageService } = require('../dist/services/enhanced-sqlite-storage-service'); +const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor'); + +async function testEnhancedDocumentation() { + console.log('=== Testing Enhanced Documentation Fetcher ===\n'); + + const fetcher = new EnhancedDocumentationFetcher(); + const storage = new EnhancedSQLiteStorageService('./data/test-enhanced.db'); + const extractor = new NodeSourceExtractor(); + + try { + // Test 1: Fetch and parse Slack node documentation + console.log('1. Testing Slack node documentation parsing...'); + const slackDoc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.slack'); + + if (slackDoc) { + console.log('\nโœ“ Slack Documentation Found:'); + console.log(` - Title: ${slackDoc.title}`); + console.log(` - Description: ${slackDoc.description}`); + console.log(` - URL: ${slackDoc.url}`); + console.log(` - Operations: ${slackDoc.operations?.length || 0} found`); + console.log(` - API Methods: ${slackDoc.apiMethods?.length || 0} found`); + console.log(` - Examples: ${slackDoc.examples?.length || 0} found`); + console.log(` - Required Scopes: ${slackDoc.requiredScopes?.length || 0} found`); + + // Show sample operations + if (slackDoc.operations && slackDoc.operations.length > 0) { + console.log('\n Sample Operations:'); + slackDoc.operations.slice(0, 5).forEach(op => { + console.log(` - ${op.resource}.${op.operation}: ${op.description}`); + }); + } + + // Show sample API mappings + if (slackDoc.apiMethods && slackDoc.apiMethods.length > 0) { + console.log('\n Sample API Mappings:'); + slackDoc.apiMethods.slice(0, 5).forEach(api => { + console.log(` - ${api.resource}.${api.operation} โ†’ ${api.apiMethod}`); + }); + } + } else { + console.log('โœ— Slack documentation not found'); + } + + // Test 2: Test with If node (core node) + console.log('\n\n2. Testing If node documentation parsing...'); + const ifDoc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.if'); + + if (ifDoc) { + console.log('\nโœ“ If Documentation Found:'); + console.log(` - Title: ${ifDoc.title}`); + console.log(` - Description: ${ifDoc.description}`); + console.log(` - Examples: ${ifDoc.examples?.length || 0} found`); + console.log(` - Related Resources: ${ifDoc.relatedResources?.length || 0} found`); + } + + // Test 3: Store node with documentation + console.log('\n\n3. Testing node storage with documentation...'); + + // Extract a node + const nodeInfo = await extractor.extractNodeSource('n8n-nodes-base.slack'); + if (nodeInfo) { + const storedNode = await storage.storeNodeWithDocumentation(nodeInfo); + + console.log('\nโœ“ Node stored successfully:'); + console.log(` - Node Type: ${storedNode.nodeType}`); + console.log(` - Has Documentation: ${!!storedNode.documentationMarkdown}`); + console.log(` - Operations: ${storedNode.operationCount}`); + console.log(` - API Methods: ${storedNode.apiMethodCount}`); + console.log(` - Examples: ${storedNode.exampleCount}`); + console.log(` - Resources: ${storedNode.resourceCount}`); + console.log(` - Scopes: ${storedNode.scopeCount}`); + + // Get detailed operations + const operations = await storage.getNodeOperations(storedNode.id); + if (operations.length > 0) { + console.log('\n Stored Operations (first 5):'); + operations.slice(0, 5).forEach(op => { + console.log(` - ${op.resource}.${op.operation}: ${op.description}`); + }); + } + + // Get examples + const examples = await storage.getNodeExamples(storedNode.id); + if (examples.length > 0) { + console.log('\n Stored Examples:'); + examples.forEach(ex => { + console.log(` - ${ex.title || 'Untitled'} (${ex.type}): ${ex.code.length} chars`); + }); + } + } + + // Test 4: Search with enhanced FTS + console.log('\n\n4. Testing enhanced search...'); + + const searchResults = await storage.searchNodes({ query: 'slack message' }); + console.log(`\nโœ“ Search Results for "slack message": ${searchResults.length} nodes found`); + + if (searchResults.length > 0) { + console.log(' First result:'); + const result = searchResults[0]; + console.log(` - ${result.displayName || result.name} (${result.nodeType})`); + console.log(` - Documentation: ${result.documentationTitle || 'No title'}`); + } + + // Test 5: Get statistics + console.log('\n\n5. Getting enhanced statistics...'); + const stats = await storage.getEnhancedStatistics(); + + console.log('\nโœ“ Enhanced Statistics:'); + console.log(` - Total Nodes: ${stats.totalNodes}`); + console.log(` - Nodes with Documentation: ${stats.nodesWithDocumentation}`); + console.log(` - Documentation Coverage: ${stats.documentationCoverage}%`); + console.log(` - Total Operations: ${stats.totalOperations}`); + console.log(` - Total API Methods: ${stats.totalApiMethods}`); + console.log(` - Total Examples: ${stats.totalExamples}`); + console.log(` - Total Resources: ${stats.totalResources}`); + console.log(` - Total Scopes: ${stats.totalScopes}`); + + if (stats.topDocumentedNodes && stats.topDocumentedNodes.length > 0) { + console.log('\n Top Documented Nodes:'); + stats.topDocumentedNodes.slice(0, 3).forEach(node => { + console.log(` - ${node.display_name || node.name}: ${node.operation_count} operations, ${node.example_count} examples`); + }); + } + + } catch (error) { + console.error('Error during testing:', error); + } finally { + // Cleanup + storage.close(); + await fetcher.cleanup(); + console.log('\n\nโœ“ Test completed and cleaned up'); + } +} + +// Run the test +testEnhancedDocumentation().catch(console.error); \ No newline at end of file diff --git a/tests/test-enhanced-final.js b/tests/test-enhanced-final.js new file mode 100644 index 0000000..259c226 --- /dev/null +++ b/tests/test-enhanced-final.js @@ -0,0 +1,156 @@ +#!/usr/bin/env node + +const { EnhancedDocumentationFetcher } = require('../dist/utils/enhanced-documentation-fetcher'); +const { EnhancedSQLiteStorageService } = require('../dist/services/enhanced-sqlite-storage-service'); +const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor'); + +async function testEnhancedDocumentation() { + console.log('=== Enhanced Documentation Parser Test ===\n'); + + const fetcher = new EnhancedDocumentationFetcher(); + const extractor = new NodeSourceExtractor(); + + try { + // Test 1: Parse Slack documentation + console.log('1. Parsing Slack node documentation...'); + const slackDoc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.slack'); + + if (slackDoc) { + console.log('\nโœ“ Slack Documentation Parsed:'); + console.log(` Title: ${slackDoc.title}`); + console.log(` Description: ${slackDoc.description?.substring(0, 100)}...`); + console.log(` URL: ${slackDoc.url}`); + console.log(` Operations: ${slackDoc.operations?.length || 0} found`); + console.log(` API Methods: ${slackDoc.apiMethods?.length || 0} found`); + console.log(` Related Resources: ${slackDoc.relatedResources?.length || 0} found`); + + // Show sample operations + if (slackDoc.operations && slackDoc.operations.length > 0) { + console.log('\n Sample Operations (first 10):'); + slackDoc.operations.slice(0, 10).forEach((op, i) => { + console.log(` ${i + 1}. ${op.resource}.${op.operation}: ${op.description}`); + }); + } + + // Show sample API mappings + if (slackDoc.apiMethods && slackDoc.apiMethods.length > 0) { + console.log('\n Sample API Method Mappings (first 5):'); + slackDoc.apiMethods.slice(0, 5).forEach((api, i) => { + console.log(` ${i + 1}. ${api.resource}.${api.operation} โ†’ ${api.apiMethod} (${api.apiUrl})`); + }); + } + + // Show related resources + if (slackDoc.relatedResources && slackDoc.relatedResources.length > 0) { + console.log('\n Related Resources:'); + slackDoc.relatedResources.forEach((res, i) => { + console.log(` ${i + 1}. ${res.title} (${res.type}): ${res.url}`); + }); + } + } + + // Test 2: Parse HTTP Request documentation (if available) + console.log('\n\n2. Parsing HTTP Request node documentation...'); + const httpDoc = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.httpRequest'); + + if (httpDoc) { + console.log('\nโœ“ HTTP Request Documentation Parsed:'); + console.log(` Title: ${httpDoc.title}`); + console.log(` Examples: ${httpDoc.examples?.length || 0} found`); + + if (httpDoc.examples && httpDoc.examples.length > 0) { + console.log('\n Code Examples:'); + httpDoc.examples.forEach((ex, i) => { + console.log(` ${i + 1}. ${ex.title || 'Example'} (${ex.type}): ${ex.code.length} characters`); + }); + } + } else { + console.log(' HTTP Request documentation not found'); + } + + // Test 3: Database storage test with smaller database + console.log('\n\n3. Testing enhanced database storage...'); + const storage = new EnhancedSQLiteStorageService('./data/demo-enhanced.db'); + + try { + // Store Slack node with documentation + const slackNodeInfo = await extractor.extractNodeSource('n8n-nodes-base.slack'); + if (slackNodeInfo) { + const storedNode = await storage.storeNodeWithDocumentation(slackNodeInfo); + + console.log('\nโœ“ Slack node stored with documentation:'); + console.log(` Node Type: ${storedNode.nodeType}`); + console.log(` Documentation: ${storedNode.documentationTitle || 'No title'}`); + console.log(` Operations stored: ${storedNode.operationCount}`); + console.log(` API methods stored: ${storedNode.apiMethodCount}`); + console.log(` Examples stored: ${storedNode.exampleCount}`); + console.log(` Resources stored: ${storedNode.resourceCount}`); + } + + // Store a few more nodes + const nodeTypes = ['n8n-nodes-base.if', 'n8n-nodes-base.webhook']; + for (const nodeType of nodeTypes) { + try { + const nodeInfo = await extractor.extractNodeSource(nodeType); + if (nodeInfo) { + await storage.storeNodeWithDocumentation(nodeInfo); + console.log(` โœ“ Stored ${nodeType}`); + } + } catch (e) { + console.log(` โœ— Failed to store ${nodeType}: ${e.message}`); + } + } + + // Test search functionality + console.log('\n\n4. Testing enhanced search...'); + + const searchTests = [ + { query: 'slack', description: 'Search for "slack"' }, + { query: 'message send', description: 'Search for "message send"' }, + { query: 'webhook', description: 'Search for "webhook"' } + ]; + + for (const test of searchTests) { + const results = await storage.searchNodes({ query: test.query }); + console.log(`\n ${test.description}: ${results.length} results`); + if (results.length > 0) { + const first = results[0]; + console.log(` Top result: ${first.displayName || first.name} (${first.nodeType})`); + if (first.documentationTitle) { + console.log(` Documentation: ${first.documentationTitle}`); + } + } + } + + // Get final statistics + console.log('\n\n5. Database Statistics:'); + const stats = await storage.getEnhancedStatistics(); + + console.log(` Total Nodes: ${stats.totalNodes}`); + console.log(` Nodes with Documentation: ${stats.nodesWithDocumentation} (${stats.documentationCoverage}% coverage)`); + console.log(` Total Operations: ${stats.totalOperations}`); + console.log(` Total API Methods: ${stats.totalApiMethods}`); + console.log(` Total Examples: ${stats.totalExamples}`); + console.log(` Total Resources: ${stats.totalResources}`); + + if (stats.topDocumentedNodes && stats.topDocumentedNodes.length > 0) { + console.log('\n Best Documented Nodes:'); + stats.topDocumentedNodes.forEach((node, i) => { + console.log(` ${i + 1}. ${node.display_name || node.name}: ${node.operation_count} operations, ${node.example_count} examples`); + }); + } + + } finally { + storage.close(); + } + + } catch (error) { + console.error('\nError:', error); + } finally { + await fetcher.cleanup(); + console.log('\n\nโœ“ Test completed and cleaned up'); + } +} + +// Run the test +testEnhancedDocumentation().catch(console.error); \ No newline at end of file diff --git a/tests/test-enhanced-integration.js b/tests/test-enhanced-integration.js new file mode 100644 index 0000000..c78f157 --- /dev/null +++ b/tests/test-enhanced-integration.js @@ -0,0 +1,163 @@ +#!/usr/bin/env node + +const { DocumentationFetcher } = require('../dist/utils/documentation-fetcher'); +const { NodeDocumentationService } = require('../dist/services/node-documentation-service'); + +async function testEnhancedIntegration() { + console.log('๐Ÿงช Testing Enhanced Documentation Integration...\n'); + + // Test 1: DocumentationFetcher backward compatibility + console.log('1๏ธโƒฃ Testing DocumentationFetcher backward compatibility...'); + const docFetcher = new DocumentationFetcher(); + + try { + // Test getNodeDocumentation (backward compatible method) + const simpleDoc = await docFetcher.getNodeDocumentation('n8n-nodes-base.slack'); + if (simpleDoc) { + console.log(' โœ… Simple documentation format works'); + console.log(` - Has markdown: ${!!simpleDoc.markdown}`); + console.log(` - Has URL: ${!!simpleDoc.url}`); + console.log(` - Has examples: ${simpleDoc.examples?.length || 0}`); + } + + // Test getEnhancedNodeDocumentation (new method) + const enhancedDoc = await docFetcher.getEnhancedNodeDocumentation('n8n-nodes-base.slack'); + if (enhancedDoc) { + console.log(' โœ… Enhanced documentation format works'); + console.log(` - Title: ${enhancedDoc.title || 'N/A'}`); + console.log(` - Operations: ${enhancedDoc.operations?.length || 0}`); + console.log(` - API Methods: ${enhancedDoc.apiMethods?.length || 0}`); + console.log(` - Examples: ${enhancedDoc.examples?.length || 0}`); + console.log(` - Templates: ${enhancedDoc.templates?.length || 0}`); + console.log(` - Related Resources: ${enhancedDoc.relatedResources?.length || 0}`); + } + } catch (error) { + console.error(' โŒ DocumentationFetcher test failed:', error.message); + } + + // Test 2: NodeDocumentationService with enhanced fields + console.log('\n2๏ธโƒฃ Testing NodeDocumentationService enhanced schema...'); + const docService = new NodeDocumentationService('data/test-enhanced-docs.db'); + + try { + // Store a test node with enhanced documentation + const testNode = { + nodeType: 'test.enhanced-node', + name: 'enhanced-node', + displayName: 'Enhanced Test Node', + description: 'A test node with enhanced documentation', + sourceCode: 'const testCode = "example";', + packageName: 'test-package', + documentation: '# Test Documentation', + documentationUrl: 'https://example.com/docs', + documentationTitle: 'Enhanced Test Node Documentation', + operations: [ + { + resource: 'Message', + operation: 'Send', + description: 'Send a message' + } + ], + apiMethods: [ + { + resource: 'Message', + operation: 'Send', + apiMethod: 'chat.postMessage', + apiUrl: 'https://api.slack.com/methods/chat.postMessage' + } + ], + documentationExamples: [ + { + title: 'Send Message Example', + type: 'json', + code: '{"text": "Hello World"}' + } + ], + templates: [ + { + name: 'Basic Message Template', + description: 'Simple message sending template' + } + ], + relatedResources: [ + { + title: 'API Documentation', + url: 'https://api.slack.com', + type: 'api' + } + ], + requiredScopes: ['chat:write'], + hasCredentials: true, + isTrigger: false, + isWebhook: false + }; + + await docService.storeNode(testNode); + console.log(' โœ… Stored node with enhanced documentation'); + + // Retrieve and verify + const retrieved = await docService.getNodeInfo('test.enhanced-node'); + if (retrieved) { + console.log(' โœ… Retrieved node with enhanced fields:'); + console.log(` - Has operations: ${!!retrieved.operations}`); + console.log(` - Has API methods: ${!!retrieved.apiMethods}`); + console.log(` - Has documentation examples: ${!!retrieved.documentationExamples}`); + console.log(` - Has templates: ${!!retrieved.templates}`); + console.log(` - Has related resources: ${!!retrieved.relatedResources}`); + console.log(` - Has required scopes: ${!!retrieved.requiredScopes}`); + } + + // Test search + const searchResults = await docService.searchNodes({ query: 'enhanced' }); + console.log(` โœ… Search found ${searchResults.length} results`); + + } catch (error) { + console.error(' โŒ NodeDocumentationService test failed:', error.message); + } finally { + docService.close(); + } + + // Test 3: MCP Server integration + console.log('\n3๏ธโƒฃ Testing MCP Server integration...'); + try { + const { N8NMCPServer } = require('../dist/mcp/server'); + console.log(' โœ… MCP Server loads with enhanced documentation support'); + + // Check if new tools are available + const { n8nTools } = require('../dist/mcp/tools'); + const enhancedTools = [ + 'get_node_documentation', + 'search_node_documentation', + 'get_node_operations', + 'get_node_examples' + ]; + + const hasAllTools = enhancedTools.every(toolName => + n8nTools.some(tool => tool.name === toolName) + ); + + if (hasAllTools) { + console.log(' โœ… All enhanced documentation tools are available'); + enhancedTools.forEach(toolName => { + const tool = n8nTools.find(t => t.name === toolName); + console.log(` - ${toolName}: ${tool.description}`); + }); + } else { + console.log(' โš ๏ธ Some enhanced tools are missing'); + } + + } catch (error) { + console.error(' โŒ MCP Server integration test failed:', error.message); + } + + console.log('\nโœจ Enhanced documentation integration tests completed!'); + + // Cleanup + await docFetcher.cleanup(); +} + +// Run tests +testEnhancedIntegration().catch(error => { + console.error('Fatal error:', error); + process.exit(1); +}); \ No newline at end of file diff --git a/tests/test-package-info.js b/tests/test-package-info.js new file mode 100644 index 0000000..70de018 --- /dev/null +++ b/tests/test-package-info.js @@ -0,0 +1,30 @@ +#!/usr/bin/env node + +const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor'); + +async function testPackageInfo() { + console.log('๐Ÿงช Testing Package Info Extraction\n'); + + const extractor = new NodeSourceExtractor(); + + const testNodes = [ + 'n8n-nodes-base.Slack', + 'n8n-nodes-base.HttpRequest', + 'n8n-nodes-base.Function' + ]; + + for (const nodeType of testNodes) { + console.log(`\n๐Ÿ“ฆ Testing ${nodeType}:`); + try { + const result = await extractor.extractNodeSource(nodeType); + console.log(` - Source Code: ${result.sourceCode ? 'โœ…' : 'โŒ'} (${result.sourceCode?.length || 0} bytes)`); + console.log(` - Credential Code: ${result.credentialCode ? 'โœ…' : 'โŒ'} (${result.credentialCode?.length || 0} bytes)`); + console.log(` - Package Name: ${result.packageInfo?.name || 'โŒ undefined'}`); + console.log(` - Package Version: ${result.packageInfo?.version || 'โŒ undefined'}`); + } catch (error) { + console.log(` โŒ Error: ${error.message}`); + } + } +} + +testPackageInfo().catch(console.error); \ No newline at end of file diff --git a/tests/test-parsing-operations.js b/tests/test-parsing-operations.js new file mode 100644 index 0000000..24dea86 --- /dev/null +++ b/tests/test-parsing-operations.js @@ -0,0 +1,82 @@ +#!/usr/bin/env node + +const markdown = ` +## Operations + +* **Channel** + * **Archive** a channel. + * **Close** a direct message or multi-person direct message. + * **Create** a public or private channel-based conversation. + * **Get** information about a channel. + * **Get Many**: Get a list of channels in Slack. +* **File** + * **Get** a file. + * **Get Many**: Get and filter team files. + * **Upload**: Create or upload an existing file. + +## Templates and examples +`; + +function extractOperations(markdown) { + const operations = []; + + // Find operations section + const operationsMatch = markdown.match(/##\s+Operations\s*\n([\s\S]*?)(?=\n##|\n#|$)/i); + if (!operationsMatch) { + console.log('No operations section found'); + return operations; + } + + const operationsText = operationsMatch[1]; + console.log('Operations text:', operationsText.substring(0, 200)); + + // Parse operation structure + let currentResource = null; + const lines = operationsText.split('\n'); + + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + const trimmedLine = line.trim(); + + // Resource level (e.g., "* **Channel**") + if (trimmedLine.match(/^\*\s+\*\*([^*]+)\*\*/)) { + currentResource = trimmedLine.match(/^\*\s+\*\*([^*]+)\*\*/)[1].trim(); + console.log(`Found resource: ${currentResource}`); + continue; + } + + // Skip if we don't have a current resource + if (!currentResource) continue; + + // Operation level - look for indented bullets (4 spaces + *) + if (line.match(/^\s{4}\*\s+/)) { + console.log(`Found operation line: "${line}"`); + + // Extract operation name and description + const operationMatch = trimmedLine.match(/^\*\s+\*\*([^*]+)\*\*(.*)$/); + if (operationMatch) { + const operation = operationMatch[1].trim(); + let description = operationMatch[2].trim(); + + // Clean up description + description = description.replace(/^:\s*/, '').replace(/\.$/, '').trim(); + + operations.push({ + resource: currentResource, + operation, + description: description || operation, + }); + console.log(` Parsed: ${operation} - ${description}`); + } + } + } + + return operations; +} + +const operations = extractOperations(markdown); +console.log('\nTotal operations found:', operations.length); +console.log('\nOperations:'); +operations.forEach(op => { + console.log(`- ${op.resource}.${op.operation}: ${op.description}`); +}); \ No newline at end of file diff --git a/tests/test-results/extracted-nodes.json b/tests/test-results/extracted-nodes.json new file mode 100644 index 0000000..6d58e48 --- /dev/null +++ b/tests/test-results/extracted-nodes.json @@ -0,0 +1,5378 @@ +[ + { + "nodeType": "ActionNetwork", + "name": "ActionNetwork", + "codeLength": 15810, + "codeHash": "c0a880f5754b6b532ff787bdb253dc49ffd7f470f28aeddda5be0c73f9f9935f", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/ActionNetwork/ActionNetwork.node.js", + "extractedAt": "2025-06-08T10:57:56.009Z", + "sourceCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActionNetwork = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst GenericFunctions_1 = require(\"./GenericFunctions\");\nconst descriptions_1 = require(\"./descriptions\");\nclass ActionNetwork {\n constructor() {\n this.description = {\n displayName: 'Action Network',\n name: 'actionNetwork',\n icon: 'file:actionNetwork.svg',\n group: ['transform'],\n version: 1,\n subtitle: '={{$parameter[\"resource\"] + \": \" + $parameter[\"operation\"]}}',\n description: 'Consume the Action Network API',\n defaults: {\n name: 'Action Network',\n },\n inputs: ['main'],\n outputs: ['main'],\n credentials: [\n {\n name: 'actionNetworkApi',\n required: true,\n },\n ],\n properties: [\n {\n displayName: 'Resource',\n name: 'resource',\n type: 'options',\n noDataExpression: true,\n options: [\n {\n name: 'Attendance',\n value: 'attendance',\n },\n {\n name: 'Event',\n value: 'event',\n },\n {\n name: 'Person',\n value: 'person',\n },\n {\n name: 'Person Tag',\n value: 'personTag',\n },\n {\n name: 'Petition',\n value: 'petition',\n },\n {\n name: 'Signature',\n value: 'signature',\n },\n {\n name: 'Tag',\n value: 'tag',\n },\n ],\n default: 'attendance',\n },\n ...descriptions_1.attendanceOperations,\n ...descriptions_1.attendanceFields,\n ...descriptions_1.eventOperations,\n ...descriptions_1.eventFields,\n ...descriptions_1.personOperations,\n ...descriptions_1.personFields,\n ...descriptions_1.petitionOperations,\n ...descriptions_1.petitionFields,\n ...descriptions_1.signatureOperations,\n ...descriptions_1.signatureFields,\n ...descriptions_1.tagOperations,\n ...descriptions_1.tagFields,\n ...descriptions_1.personTagOperations,\n ...descriptions_1.personTagFields,\n ],\n };\n this.methods = {\n loadOptions: GenericFunctions_1.resourceLoaders,\n };\n }\n async execute() {\n const items = this.getInputData();\n const returnData = [];\n const resource = this.getNodeParameter('resource', 0);\n const operation = this.getNodeParameter('operation', 0);\n let response;\n for (let i = 0; i < items.length; i++) {\n try {\n if (resource === 'attendance') {\n if (operation === 'create') {\n const personId = this.getNodeParameter('personId', i);\n const eventId = this.getNodeParameter('eventId', i);\n const body = (0, GenericFunctions_1.makeOsdiLink)(personId);\n const endpoint = `/events/${eventId}/attendances`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'POST', endpoint, body);\n }\n else if (operation === 'get') {\n const eventId = this.getNodeParameter('eventId', i);\n const attendanceId = this.getNodeParameter('attendanceId', i);\n const endpoint = `/events/${eventId}/attendances/${attendanceId}`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'GET', endpoint);\n }\n else if (operation === 'getAll') {\n const eventId = this.getNodeParameter('eventId', i);\n const endpoint = `/events/${eventId}/attendances`;\n response = await GenericFunctions_1.handleListing.call(this, 'GET', endpoint);\n }\n }\n else if (resource === 'event') {\n if (operation === 'create') {\n const body = {\n origin_system: this.getNodeParameter('originSystem', i),\n title: this.getNodeParameter('title', i),\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (Object.keys(additionalFields).length) {\n Object.assign(body, (0, GenericFunctions_1.adjustEventPayload)(additionalFields));\n }\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'POST', '/events', body);\n }\n else if (operation === 'get') {\n const eventId = this.getNodeParameter('eventId', i);\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'GET', `/events/${eventId}`);\n }\n else if (operation === 'getAll') {\n response = await GenericFunctions_1.handleListing.call(this, 'GET', '/events');\n }\n }\n else if (resource === 'person') {\n if (operation === 'create') {\n const emailAddresses = this.getNodeParameter('email_addresses', i);\n const body = {\n person: {\n email_addresses: [emailAddresses.email_addresses_fields],\n },\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (Object.keys(additionalFields).length && body.person) {\n Object.assign(body.person, (0, GenericFunctions_1.adjustPersonPayload)(additionalFields));\n }\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'POST', '/people', body);\n }\n else if (operation === 'get') {\n const personId = this.getNodeParameter('personId', i);\n response = (await GenericFunctions_1.actionNetworkApiRequest.call(this, 'GET', `/people/${personId}`));\n }\n else if (operation === 'getAll') {\n response = (await GenericFunctions_1.handleListing.call(this, 'GET', '/people'));\n }\n else if (operation === 'update') {\n const personId = this.getNodeParameter('personId', i);\n const body = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n if (Object.keys(updateFields).length) {\n Object.assign(body, (0, GenericFunctions_1.adjustPersonPayload)(updateFields));\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Please enter at least one field to update for the ${resource}.`, { itemIndex: i });\n }\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'PUT', `/people/${personId}`, body);\n }\n }\n else if (resource === 'petition') {\n if (operation === 'create') {\n const body = {\n origin_system: this.getNodeParameter('originSystem', i),\n title: this.getNodeParameter('title', i),\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (Object.keys(additionalFields).length) {\n Object.assign(body, (0, GenericFunctions_1.adjustPetitionPayload)(additionalFields));\n }\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'POST', '/petitions', body);\n }\n else if (operation === 'get') {\n const petitionId = this.getNodeParameter('petitionId', i);\n const endpoint = `/petitions/${petitionId}`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'GET', endpoint);\n }\n else if (operation === 'getAll') {\n response = await GenericFunctions_1.handleListing.call(this, 'GET', '/petitions');\n }\n else if (operation === 'update') {\n const petitionId = this.getNodeParameter('petitionId', i);\n const body = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n if (Object.keys(updateFields).length) {\n Object.assign(body, (0, GenericFunctions_1.adjustPetitionPayload)(updateFields));\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Please enter at least one field to update for the ${resource}.`, { itemIndex: i });\n }\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'PUT', `/petitions/${petitionId}`, body);\n }\n }\n else if (resource === 'signature') {\n if (operation === 'create') {\n const personId = this.getNodeParameter('personId', i);\n const petitionId = this.getNodeParameter('petitionId', i);\n const body = (0, GenericFunctions_1.makeOsdiLink)(personId);\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (Object.keys(additionalFields).length) {\n Object.assign(body, additionalFields);\n }\n const endpoint = `/petitions/${petitionId}/signatures`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'POST', endpoint, body);\n }\n else if (operation === 'get') {\n const petitionId = this.getNodeParameter('petitionId', i);\n const signatureId = this.getNodeParameter('signatureId', i);\n const endpoint = `/petitions/${petitionId}/signatures/${signatureId}`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'GET', endpoint);\n }\n else if (operation === 'getAll') {\n const petitionId = this.getNodeParameter('petitionId', i);\n const endpoint = `/petitions/${petitionId}/signatures`;\n response = await GenericFunctions_1.handleListing.call(this, 'GET', endpoint);\n }\n else if (operation === 'update') {\n const petitionId = this.getNodeParameter('petitionId', i);\n const signatureId = this.getNodeParameter('signatureId', i);\n const body = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n if (Object.keys(updateFields).length) {\n Object.assign(body, updateFields);\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Please enter at least one field to update for the ${resource}.`, { itemIndex: i });\n }\n const endpoint = `/petitions/${petitionId}/signatures/${signatureId}`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'PUT', endpoint, body);\n }\n }\n else if (resource === 'tag') {\n if (operation === 'create') {\n const body = {\n name: this.getNodeParameter('name', i),\n };\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'POST', '/tags', body);\n }\n else if (operation === 'get') {\n const tagId = this.getNodeParameter('tagId', i);\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'GET', `/tags/${tagId}`);\n }\n else if (operation === 'getAll') {\n response = await GenericFunctions_1.handleListing.call(this, 'GET', '/tags');\n }\n }\n else if (resource === 'personTag') {\n if (operation === 'add') {\n const personId = this.getNodeParameter('personId', i);\n const tagId = this.getNodeParameter('tagId', i);\n const body = (0, GenericFunctions_1.makeOsdiLink)(personId);\n const endpoint = `/tags/${tagId}/taggings`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'POST', endpoint, body);\n }\n else if (operation === 'remove') {\n const tagId = this.getNodeParameter('tagId', i);\n const taggingId = this.getNodeParameter('taggingId', i);\n const endpoint = `/tags/${tagId}/taggings/${taggingId}`;\n response = await GenericFunctions_1.actionNetworkApiRequest.call(this, 'DELETE', endpoint);\n }\n }\n const simplify = this.getNodeParameter('simple', i, false);\n if (simplify) {\n response =\n operation === 'getAll'\n ? response.map((entry) => (0, GenericFunctions_1.simplifyResponse)(entry, resource))\n : (0, GenericFunctions_1.simplifyResponse)(response, resource);\n }\n Array.isArray(response)\n ? returnData.push(...response)\n : returnData.push(response);\n }\n catch (error) {\n if (this.continueOnFail()) {\n returnData.push({ error: error.message });\n continue;\n }\n throw error;\n }\n }\n return [this.helpers.returnJsonArray(returnData)];\n }\n}\nexports.ActionNetwork = ActionNetwork;\n//# sourceMappingURL=ActionNetwork.node.js.map", + "credentialCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActionNetworkApi = void 0;\nclass ActionNetworkApi {\n constructor() {\n this.name = 'actionNetworkApi';\n this.displayName = 'Action Network API';\n this.documentationUrl = 'actionNetwork';\n this.properties = [\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n this.test = {\n request: {\n baseURL: 'https://actionnetwork.org/api/v2',\n url: '/events?per_page=1',\n },\n };\n }\n async authenticate(credentials, requestOptions) {\n requestOptions.headers = { 'OSDI-API-Token': credentials.apiKey };\n return requestOptions;\n }\n}\nexports.ActionNetworkApi = ActionNetworkApi;\n//# sourceMappingURL=ActionNetworkApi.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActionNetworkApi = void 0;\nclass ActionNetworkApi {\n constructor() {\n this.name = 'actionNetworkApi';\n this.displayName = 'Action Network API';\n this.documentationUrl = 'actionNetwork';\n this.properties = [\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n this.test = {\n request: {\n baseURL: 'https://actionnetwork.org/api/v2',\n url: '/events?per_page=1',\n },\n };\n }\n async authenticate(credentials, requestOptions) {\n requestOptions.headers = { 'OSDI-API-Token': credentials.apiKey };\n return requestOptions;\n }\n}\nexports.ActionNetworkApi = ActionNetworkApi;\n//# sourceMappingURL=ActionNetworkApi.credentials.js.map", + "packageInfo": { + "name": "n8n-nodes-base", + "version": "1.14.1", + "description": "Base nodes of n8n", + "license": "SEE LICENSE IN LICENSE.md", + "homepage": "https://n8n.io", + "author": { + "name": "Jan Oberhauser", + "email": "jan@n8n.io" + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/n8n-io/n8n.git" + }, + "files": [ + "dist" + ], + "n8n": { + "credentials": [ + "dist/credentials/ActionNetworkApi.credentials.js", + "dist/credentials/ActiveCampaignApi.credentials.js", + "dist/credentials/AcuitySchedulingApi.credentials.js", + "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", + "dist/credentials/AdaloApi.credentials.js", + "dist/credentials/AffinityApi.credentials.js", + "dist/credentials/AgileCrmApi.credentials.js", + "dist/credentials/AirtableApi.credentials.js", + "dist/credentials/AirtableOAuth2Api.credentials.js", + "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", + "dist/credentials/Amqp.credentials.js", + "dist/credentials/ApiTemplateIoApi.credentials.js", + "dist/credentials/AsanaApi.credentials.js", + "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", + "dist/credentials/AutomizyApi.credentials.js", + "dist/credentials/AutopilotApi.credentials.js", + "dist/credentials/Aws.credentials.js", + "dist/credentials/BambooHrApi.credentials.js", + "dist/credentials/BannerbearApi.credentials.js", + "dist/credentials/BaserowApi.credentials.js", + "dist/credentials/BeeminderApi.credentials.js", + "dist/credentials/BitbucketApi.credentials.js", + "dist/credentials/BitlyApi.credentials.js", + "dist/credentials/BitlyOAuth2Api.credentials.js", + "dist/credentials/BitwardenApi.credentials.js", + "dist/credentials/BoxOAuth2Api.credentials.js", + "dist/credentials/BrandfetchApi.credentials.js", + "dist/credentials/BubbleApi.credentials.js", + "dist/credentials/CalApi.credentials.js", + "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", + "dist/credentials/ChargebeeApi.credentials.js", + "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", + "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", + "dist/credentials/CitrixAdcApi.credentials.js", + "dist/credentials/CloudflareApi.credentials.js", + "dist/credentials/ClearbitApi.credentials.js", + "dist/credentials/ClickUpApi.credentials.js", + "dist/credentials/ClickUpOAuth2Api.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/CockpitApi.credentials.js", + "dist/credentials/CodaApi.credentials.js", + "dist/credentials/ContentfulApi.credentials.js", + "dist/credentials/ConvertKitApi.credentials.js", + "dist/credentials/CopperApi.credentials.js", + "dist/credentials/CortexApi.credentials.js", + "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", + "dist/credentials/CrowdDevApi.credentials.js", + "dist/credentials/CustomerIoApi.credentials.js", + "dist/credentials/DeepLApi.credentials.js", + "dist/credentials/DemioApi.credentials.js", + "dist/credentials/DhlApi.credentials.js", + "dist/credentials/DiscourseApi.credentials.js", + "dist/credentials/DisqusApi.credentials.js", + "dist/credentials/DriftApi.credentials.js", + "dist/credentials/DriftOAuth2Api.credentials.js", + "dist/credentials/DropboxApi.credentials.js", + "dist/credentials/DropboxOAuth2Api.credentials.js", + "dist/credentials/DropcontactApi.credentials.js", + "dist/credentials/EgoiApi.credentials.js", + "dist/credentials/ElasticsearchApi.credentials.js", + "dist/credentials/ElasticSecurityApi.credentials.js", + "dist/credentials/EmeliaApi.credentials.js", + "dist/credentials/ERPNextApi.credentials.js", + "dist/credentials/EventbriteApi.credentials.js", + "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", + "dist/credentials/FacebookGraphApi.credentials.js", + "dist/credentials/FacebookGraphAppApi.credentials.js", + "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", + "dist/credentials/FigmaApi.credentials.js", + "dist/credentials/FileMaker.credentials.js", + "dist/credentials/FlowApi.credentials.js", + "dist/credentials/FormIoApi.credentials.js", + "dist/credentials/FormstackApi.credentials.js", + "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", + "dist/credentials/FreshdeskApi.credentials.js", + "dist/credentials/FreshserviceApi.credentials.js", + "dist/credentials/FreshworksCrmApi.credentials.js", + "dist/credentials/Ftp.credentials.js", + "dist/credentials/GetResponseApi.credentials.js", + "dist/credentials/GetResponseOAuth2Api.credentials.js", + "dist/credentials/GhostAdminApi.credentials.js", + "dist/credentials/GhostContentApi.credentials.js", + "dist/credentials/GithubApi.credentials.js", + "dist/credentials/GithubOAuth2Api.credentials.js", + "dist/credentials/GitlabApi.credentials.js", + "dist/credentials/GitlabOAuth2Api.credentials.js", + "dist/credentials/GitPassword.credentials.js", + "dist/credentials/GmailOAuth2Api.credentials.js", + "dist/credentials/GoogleAdsOAuth2Api.credentials.js", + "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", + "dist/credentials/GoogleApi.credentials.js", + "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", + "dist/credentials/GoogleBooksOAuth2Api.credentials.js", + "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", + "dist/credentials/GoogleContactsOAuth2Api.credentials.js", + "dist/credentials/GoogleDocsOAuth2Api.credentials.js", + "dist/credentials/GoogleDriveOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", + "dist/credentials/GoogleOAuth2Api.credentials.js", + "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", + "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", + "dist/credentials/GoogleTasksOAuth2Api.credentials.js", + "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", + "dist/credentials/GotifyApi.credentials.js", + "dist/credentials/GoToWebinarOAuth2Api.credentials.js", + "dist/credentials/GristApi.credentials.js", + "dist/credentials/GrafanaApi.credentials.js", + "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", + "dist/credentials/GumroadApi.credentials.js", + "dist/credentials/HaloPSAApi.credentials.js", + "dist/credentials/HarvestApi.credentials.js", + "dist/credentials/HarvestOAuth2Api.credentials.js", + "dist/credentials/HelpScoutOAuth2Api.credentials.js", + "dist/credentials/HighLevelApi.credentials.js", + "dist/credentials/HomeAssistantApi.credentials.js", + "dist/credentials/HttpBasicAuth.credentials.js", + "dist/credentials/HttpDigestAuth.credentials.js", + "dist/credentials/HttpHeaderAuth.credentials.js", + "dist/credentials/HttpCustomAuth.credentials.js", + "dist/credentials/HttpQueryAuth.credentials.js", + "dist/credentials/HubspotApi.credentials.js", + "dist/credentials/HubspotAppToken.credentials.js", + "dist/credentials/HubspotDeveloperApi.credentials.js", + "dist/credentials/HubspotOAuth2Api.credentials.js", + "dist/credentials/HumanticAiApi.credentials.js", + "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", + "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", + "dist/credentials/IntercomApi.credentials.js", + "dist/credentials/InvoiceNinjaApi.credentials.js", + "dist/credentials/IterableApi.credentials.js", + "dist/credentials/JenkinsApi.credentials.js", + "dist/credentials/JiraSoftwareCloudApi.credentials.js", + "dist/credentials/JiraSoftwareServerApi.credentials.js", + "dist/credentials/JotFormApi.credentials.js", + "dist/credentials/Kafka.credentials.js", + "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", + "dist/credentials/KitemakerApi.credentials.js", + "dist/credentials/KoBoToolboxApi.credentials.js", + "dist/credentials/Ldap.credentials.js", + "dist/credentials/LemlistApi.credentials.js", + "dist/credentials/LinearApi.credentials.js", + "dist/credentials/LinearOAuth2Api.credentials.js", + "dist/credentials/LineNotifyOAuth2Api.credentials.js", + "dist/credentials/LingvaNexApi.credentials.js", + "dist/credentials/LinkedInOAuth2Api.credentials.js", + "dist/credentials/LoneScaleApi.credentials.js", + "dist/credentials/Magento2Api.credentials.js", + "dist/credentials/MailcheckApi.credentials.js", + "dist/credentials/MailchimpApi.credentials.js", + "dist/credentials/MailchimpOAuth2Api.credentials.js", + "dist/credentials/MailerLiteApi.credentials.js", + "dist/credentials/MailgunApi.credentials.js", + "dist/credentials/MailjetEmailApi.credentials.js", + "dist/credentials/MailjetSmsApi.credentials.js", + "dist/credentials/MandrillApi.credentials.js", + "dist/credentials/MarketstackApi.credentials.js", + "dist/credentials/MatrixApi.credentials.js", + "dist/credentials/MattermostApi.credentials.js", + "dist/credentials/MauticApi.credentials.js", + "dist/credentials/MauticOAuth2Api.credentials.js", + "dist/credentials/MediumApi.credentials.js", + "dist/credentials/MediumOAuth2Api.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MessageBirdApi.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", + "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", + "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSql.credentials.js", + "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", + "dist/credentials/MindeeInvoiceApi.credentials.js", + "dist/credentials/MindeeReceiptApi.credentials.js", + "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", + "dist/credentials/MoceanApi.credentials.js", + "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", + "dist/credentials/MongoDb.credentials.js", + "dist/credentials/MonicaCrmApi.credentials.js", + "dist/credentials/Mqtt.credentials.js", + "dist/credentials/Msg91Api.credentials.js", + "dist/credentials/MySql.credentials.js", + "dist/credentials/N8nApi.credentials.js", + "dist/credentials/NasaApi.credentials.js", + "dist/credentials/NetlifyApi.credentials.js", + "dist/credentials/NextCloudApi.credentials.js", + "dist/credentials/NextCloudOAuth2Api.credentials.js", + "dist/credentials/NocoDb.credentials.js", + "dist/credentials/NocoDbApiToken.credentials.js", + "dist/credentials/NotionApi.credentials.js", + "dist/credentials/NotionOAuth2Api.credentials.js", + "dist/credentials/NpmApi.credentials.js", + "dist/credentials/OAuth1Api.credentials.js", + "dist/credentials/OAuth2Api.credentials.js", + "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", + "dist/credentials/OneSimpleApi.credentials.js", + "dist/credentials/OnfleetApi.credentials.js", + "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", + "dist/credentials/OpenWeatherMapApi.credentials.js", + "dist/credentials/OrbitApi.credentials.js", + "dist/credentials/OuraApi.credentials.js", + "dist/credentials/PaddleApi.credentials.js", + "dist/credentials/PagerDutyApi.credentials.js", + "dist/credentials/PagerDutyOAuth2Api.credentials.js", + "dist/credentials/PayPalApi.credentials.js", + "dist/credentials/PeekalinkApi.credentials.js", + "dist/credentials/PhantombusterApi.credentials.js", + "dist/credentials/PhilipsHueOAuth2Api.credentials.js", + "dist/credentials/PipedriveApi.credentials.js", + "dist/credentials/PipedriveOAuth2Api.credentials.js", + "dist/credentials/PlivoApi.credentials.js", + "dist/credentials/Postgres.credentials.js", + "dist/credentials/PostHogApi.credentials.js", + "dist/credentials/PostmarkApi.credentials.js", + "dist/credentials/ProfitWellApi.credentials.js", + "dist/credentials/PushbulletOAuth2Api.credentials.js", + "dist/credentials/PushcutApi.credentials.js", + "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", + "dist/credentials/QuestDb.credentials.js", + "dist/credentials/QuickBaseApi.credentials.js", + "dist/credentials/QuickBooksOAuth2Api.credentials.js", + "dist/credentials/RabbitMQ.credentials.js", + "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", + "dist/credentials/RedditOAuth2Api.credentials.js", + "dist/credentials/Redis.credentials.js", + "dist/credentials/RocketchatApi.credentials.js", + "dist/credentials/RundeckApi.credentials.js", + "dist/credentials/S3.credentials.js", + "dist/credentials/SalesforceJwtApi.credentials.js", + "dist/credentials/SalesforceOAuth2Api.credentials.js", + "dist/credentials/SalesmateApi.credentials.js", + "dist/credentials/SeaTableApi.credentials.js", + "dist/credentials/SecurityScorecardApi.credentials.js", + "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", + "dist/credentials/SendGridApi.credentials.js", + "dist/credentials/BrevoApi.credentials.js", + "dist/credentials/SendyApi.credentials.js", + "dist/credentials/SentryIoApi.credentials.js", + "dist/credentials/SentryIoOAuth2Api.credentials.js", + "dist/credentials/SentryIoServerApi.credentials.js", + "dist/credentials/ServiceNowOAuth2Api.credentials.js", + "dist/credentials/ServiceNowBasicApi.credentials.js", + "dist/credentials/Sftp.credentials.js", + "dist/credentials/ShopifyApi.credentials.js", + "dist/credentials/ShopifyAccessTokenApi.credentials.js", + "dist/credentials/ShopifyOAuth2Api.credentials.js", + "dist/credentials/Signl4Api.credentials.js", + "dist/credentials/SlackApi.credentials.js", + "dist/credentials/SlackOAuth2Api.credentials.js", + "dist/credentials/Sms77Api.credentials.js", + "dist/credentials/Smtp.credentials.js", + "dist/credentials/Snowflake.credentials.js", + "dist/credentials/SplunkApi.credentials.js", + "dist/credentials/SpontitApi.credentials.js", + "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", + "dist/credentials/SshPassword.credentials.js", + "dist/credentials/SshPrivateKey.credentials.js", + "dist/credentials/StackbyApi.credentials.js", + "dist/credentials/StoryblokContentApi.credentials.js", + "dist/credentials/StoryblokManagementApi.credentials.js", + "dist/credentials/StrapiApi.credentials.js", + "dist/credentials/StrapiTokenApi.credentials.js", + "dist/credentials/StravaOAuth2Api.credentials.js", + "dist/credentials/StripeApi.credentials.js", + "dist/credentials/SupabaseApi.credentials.js", + "dist/credentials/SurveyMonkeyApi.credentials.js", + "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", + "dist/credentials/SyncroMspApi.credentials.js", + "dist/credentials/TaigaApi.credentials.js", + "dist/credentials/TapfiliateApi.credentials.js", + "dist/credentials/TelegramApi.credentials.js", + "dist/credentials/TheHiveProjectApi.credentials.js", + "dist/credentials/TheHiveApi.credentials.js", + "dist/credentials/TimescaleDb.credentials.js", + "dist/credentials/TodoistApi.credentials.js", + "dist/credentials/TodoistOAuth2Api.credentials.js", + "dist/credentials/TogglApi.credentials.js", + "dist/credentials/TotpApi.credentials.js", + "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", + "dist/credentials/TrelloApi.credentials.js", + "dist/credentials/TwakeCloudApi.credentials.js", + "dist/credentials/TwakeServerApi.credentials.js", + "dist/credentials/TwilioApi.credentials.js", + "dist/credentials/TwistOAuth2Api.credentials.js", + "dist/credentials/TwitterOAuth1Api.credentials.js", + "dist/credentials/TwitterOAuth2Api.credentials.js", + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TypeformOAuth2Api.credentials.js", + "dist/credentials/UnleashedSoftwareApi.credentials.js", + "dist/credentials/UpleadApi.credentials.js", + "dist/credentials/UProcApi.credentials.js", + "dist/credentials/UptimeRobotApi.credentials.js", + "dist/credentials/UrlScanIoApi.credentials.js", + "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", + "dist/credentials/VonageApi.credentials.js", + "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", + "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", + "dist/credentials/WebflowApi.credentials.js", + "dist/credentials/WebflowOAuth2Api.credentials.js", + "dist/credentials/WekanApi.credentials.js", + "dist/credentials/WhatsAppApi.credentials.js", + "dist/credentials/WiseApi.credentials.js", + "dist/credentials/WooCommerceApi.credentials.js", + "dist/credentials/WordpressApi.credentials.js", + "dist/credentials/WorkableApi.credentials.js", + "dist/credentials/WufooApi.credentials.js", + "dist/credentials/XeroOAuth2Api.credentials.js", + "dist/credentials/YourlsApi.credentials.js", + "dist/credentials/YouTubeOAuth2Api.credentials.js", + "dist/credentials/ZammadBasicAuthApi.credentials.js", + "dist/credentials/ZammadTokenAuthApi.credentials.js", + "dist/credentials/ZendeskApi.credentials.js", + "dist/credentials/ZendeskOAuth2Api.credentials.js", + "dist/credentials/ZohoOAuth2Api.credentials.js", + "dist/credentials/ZoomApi.credentials.js", + "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", + "dist/credentials/ZulipApi.credentials.js" + ], + "nodes": [ + "dist/nodes/ActionNetwork/ActionNetwork.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", + "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", + "dist/nodes/Adalo/Adalo.node.js", + "dist/nodes/Affinity/Affinity.node.js", + "dist/nodes/Affinity/AffinityTrigger.node.js", + "dist/nodes/AgileCrm/AgileCrm.node.js", + "dist/nodes/Airtable/Airtable.node.js", + "dist/nodes/Airtable/AirtableTrigger.node.js", + "dist/nodes/Amqp/Amqp.node.js", + "dist/nodes/Amqp/AmqpTrigger.node.js", + "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", + "dist/nodes/Asana/Asana.node.js", + "dist/nodes/Asana/AsanaTrigger.node.js", + "dist/nodes/Automizy/Automizy.node.js", + "dist/nodes/Autopilot/Autopilot.node.js", + "dist/nodes/Autopilot/AutopilotTrigger.node.js", + "dist/nodes/Aws/AwsLambda.node.js", + "dist/nodes/Aws/AwsSns.node.js", + "dist/nodes/Aws/AwsSnsTrigger.node.js", + "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", + "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", + "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", + "dist/nodes/Aws/ELB/AwsElb.node.js", + "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", + "dist/nodes/Aws/S3/AwsS3.node.js", + "dist/nodes/Aws/SES/AwsSes.node.js", + "dist/nodes/Aws/SQS/AwsSqs.node.js", + "dist/nodes/Aws/Textract/AwsTextract.node.js", + "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", + "dist/nodes/BambooHr/BambooHr.node.js", + "dist/nodes/Bannerbear/Bannerbear.node.js", + "dist/nodes/Baserow/Baserow.node.js", + "dist/nodes/Beeminder/Beeminder.node.js", + "dist/nodes/Bitbucket/BitbucketTrigger.node.js", + "dist/nodes/Bitly/Bitly.node.js", + "dist/nodes/Bitwarden/Bitwarden.node.js", + "dist/nodes/Box/Box.node.js", + "dist/nodes/Box/BoxTrigger.node.js", + "dist/nodes/Brandfetch/Brandfetch.node.js", + "dist/nodes/Bubble/Bubble.node.js", + "dist/nodes/Cal/CalTrigger.node.js", + "dist/nodes/Calendly/CalendlyTrigger.node.js", + "dist/nodes/Chargebee/Chargebee.node.js", + "dist/nodes/Chargebee/ChargebeeTrigger.node.js", + "dist/nodes/CircleCi/CircleCi.node.js", + "dist/nodes/Cisco/Webex/CiscoWebex.node.js", + "dist/nodes/Citrix/ADC/CitrixAdc.node.js", + "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", + "dist/nodes/Cloudflare/Cloudflare.node.js", + "dist/nodes/Clearbit/Clearbit.node.js", + "dist/nodes/ClickUp/ClickUp.node.js", + "dist/nodes/ClickUp/ClickUpTrigger.node.js", + "dist/nodes/Clockify/Clockify.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Cockpit/Cockpit.node.js", + "dist/nodes/Coda/Coda.node.js", + "dist/nodes/Code/Code.node.js", + "dist/nodes/CoinGecko/CoinGecko.node.js", + "dist/nodes/CompareDatasets/CompareDatasets.node.js", + "dist/nodes/Compression/Compression.node.js", + "dist/nodes/Contentful/Contentful.node.js", + "dist/nodes/ConvertKit/ConvertKit.node.js", + "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", + "dist/nodes/Copper/Copper.node.js", + "dist/nodes/Copper/CopperTrigger.node.js", + "dist/nodes/Cortex/Cortex.node.js", + "dist/nodes/CrateDb/CrateDb.node.js", + "dist/nodes/Cron/Cron.node.js", + "dist/nodes/CrowdDev/CrowdDev.node.js", + "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", + "dist/nodes/Crypto/Crypto.node.js", + "dist/nodes/CustomerIo/CustomerIo.node.js", + "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", + "dist/nodes/DateTime/DateTime.node.js", + "dist/nodes/DebugHelper/DebugHelper.node.js", + "dist/nodes/DeepL/DeepL.node.js", + "dist/nodes/Demio/Demio.node.js", + "dist/nodes/Dhl/Dhl.node.js", + "dist/nodes/Discord/Discord.node.js", + "dist/nodes/Discourse/Discourse.node.js", + "dist/nodes/Disqus/Disqus.node.js", + "dist/nodes/Drift/Drift.node.js", + "dist/nodes/Dropbox/Dropbox.node.js", + "dist/nodes/Dropcontact/Dropcontact.node.js", + "dist/nodes/EditImage/EditImage.node.js", + "dist/nodes/E2eTest/E2eTest.node.js", + "dist/nodes/Egoi/Egoi.node.js", + "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", + "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", + "dist/nodes/EmailReadImap/EmailReadImap.node.js", + "dist/nodes/EmailSend/EmailSend.node.js", + "dist/nodes/Emelia/Emelia.node.js", + "dist/nodes/Emelia/EmeliaTrigger.node.js", + "dist/nodes/ERPNext/ERPNext.node.js", + "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", + "dist/nodes/Eventbrite/EventbriteTrigger.node.js", + "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", + "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", + "dist/nodes/ExecutionData/ExecutionData.node.js", + "dist/nodes/Facebook/FacebookGraphApi.node.js", + "dist/nodes/Facebook/FacebookTrigger.node.js", + "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", + "dist/nodes/Figma/FigmaTrigger.node.js", + "dist/nodes/FileMaker/FileMaker.node.js", + "dist/nodes/Filter/Filter.node.js", + "dist/nodes/Flow/Flow.node.js", + "dist/nodes/Flow/FlowTrigger.node.js", + "dist/nodes/Form/FormTrigger.node.js", + "dist/nodes/FormIo/FormIoTrigger.node.js", + "dist/nodes/Formstack/FormstackTrigger.node.js", + "dist/nodes/Freshdesk/Freshdesk.node.js", + "dist/nodes/Freshservice/Freshservice.node.js", + "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", + "dist/nodes/Ftp/Ftp.node.js", + "dist/nodes/Function/Function.node.js", + "dist/nodes/FunctionItem/FunctionItem.node.js", + "dist/nodes/GetResponse/GetResponse.node.js", + "dist/nodes/GetResponse/GetResponseTrigger.node.js", + "dist/nodes/Ghost/Ghost.node.js", + "dist/nodes/Git/Git.node.js", + "dist/nodes/Github/Github.node.js", + "dist/nodes/Github/GithubTrigger.node.js", + "dist/nodes/Gitlab/Gitlab.node.js", + "dist/nodes/Gitlab/GitlabTrigger.node.js", + "dist/nodes/Google/Ads/GoogleAds.node.js", + "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", + "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", + "dist/nodes/Google/Books/GoogleBooks.node.js", + "dist/nodes/Google/Calendar/GoogleCalendar.node.js", + "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", + "dist/nodes/Google/Chat/GoogleChat.node.js", + "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", + "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", + "dist/nodes/Google/Contacts/GoogleContacts.node.js", + "dist/nodes/Google/Docs/GoogleDocs.node.js", + "dist/nodes/Google/Drive/GoogleDrive.node.js", + "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", + "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", + "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", + "dist/nodes/Google/Gmail/Gmail.node.js", + "dist/nodes/Google/Gmail/GmailTrigger.node.js", + "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", + "dist/nodes/Google/Perspective/GooglePerspective.node.js", + "dist/nodes/Google/Sheet/GoogleSheets.node.js", + "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", + "dist/nodes/Google/Slides/GoogleSlides.node.js", + "dist/nodes/Google/Task/GoogleTasks.node.js", + "dist/nodes/Google/Translate/GoogleTranslate.node.js", + "dist/nodes/Google/YouTube/YouTube.node.js", + "dist/nodes/Gotify/Gotify.node.js", + "dist/nodes/GoToWebinar/GoToWebinar.node.js", + "dist/nodes/Grafana/Grafana.node.js", + "dist/nodes/GraphQL/GraphQL.node.js", + "dist/nodes/Grist/Grist.node.js", + "dist/nodes/Gumroad/GumroadTrigger.node.js", + "dist/nodes/HackerNews/HackerNews.node.js", + "dist/nodes/HaloPSA/HaloPSA.node.js", + "dist/nodes/Harvest/Harvest.node.js", + "dist/nodes/HelpScout/HelpScout.node.js", + "dist/nodes/HelpScout/HelpScoutTrigger.node.js", + "dist/nodes/HighLevel/HighLevel.node.js", + "dist/nodes/HomeAssistant/HomeAssistant.node.js", + "dist/nodes/HtmlExtract/HtmlExtract.node.js", + "dist/nodes/Html/Html.node.js", + "dist/nodes/HttpRequest/HttpRequest.node.js", + "dist/nodes/Hubspot/Hubspot.node.js", + "dist/nodes/Hubspot/HubspotTrigger.node.js", + "dist/nodes/HumanticAI/HumanticAi.node.js", + "dist/nodes/Hunter/Hunter.node.js", + "dist/nodes/ICalendar/ICalendar.node.js", + "dist/nodes/If/If.node.js", + "dist/nodes/Intercom/Intercom.node.js", + "dist/nodes/Interval/Interval.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", + "dist/nodes/ItemLists/ItemLists.node.js", + "dist/nodes/Iterable/Iterable.node.js", + "dist/nodes/Jenkins/Jenkins.node.js", + "dist/nodes/Jira/Jira.node.js", + "dist/nodes/Jira/JiraTrigger.node.js", + "dist/nodes/JotForm/JotFormTrigger.node.js", + "dist/nodes/Kafka/Kafka.node.js", + "dist/nodes/Kafka/KafkaTrigger.node.js", + "dist/nodes/Keap/Keap.node.js", + "dist/nodes/Keap/KeapTrigger.node.js", + "dist/nodes/Kitemaker/Kitemaker.node.js", + "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", + "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", + "dist/nodes/Ldap/Ldap.node.js", + "dist/nodes/Lemlist/Lemlist.node.js", + "dist/nodes/Lemlist/LemlistTrigger.node.js", + "dist/nodes/Line/Line.node.js", + "dist/nodes/Linear/Linear.node.js", + "dist/nodes/Linear/LinearTrigger.node.js", + "dist/nodes/LingvaNex/LingvaNex.node.js", + "dist/nodes/LinkedIn/LinkedIn.node.js", + "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", + "dist/nodes/LoneScale/LoneScaleTrigger.node.js", + "dist/nodes/LoneScale/LoneScale.node.js", + "dist/nodes/Magento/Magento2.node.js", + "dist/nodes/Mailcheck/Mailcheck.node.js", + "dist/nodes/Mailchimp/Mailchimp.node.js", + "dist/nodes/Mailchimp/MailchimpTrigger.node.js", + "dist/nodes/MailerLite/MailerLite.node.js", + "dist/nodes/MailerLite/MailerLiteTrigger.node.js", + "dist/nodes/Mailgun/Mailgun.node.js", + "dist/nodes/Mailjet/Mailjet.node.js", + "dist/nodes/Mailjet/MailjetTrigger.node.js", + "dist/nodes/Mandrill/Mandrill.node.js", + "dist/nodes/ManualTrigger/ManualTrigger.node.js", + "dist/nodes/Markdown/Markdown.node.js", + "dist/nodes/Marketstack/Marketstack.node.js", + "dist/nodes/Matrix/Matrix.node.js", + "dist/nodes/Mattermost/Mattermost.node.js", + "dist/nodes/Mautic/Mautic.node.js", + "dist/nodes/Mautic/MauticTrigger.node.js", + "dist/nodes/Medium/Medium.node.js", + "dist/nodes/Merge/Merge.node.js", + "dist/nodes/MessageBird/MessageBird.node.js", + "dist/nodes/Metabase/Metabase.node.js", + "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", + "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", + "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", + "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", + "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", + "dist/nodes/Mindee/Mindee.node.js", + "dist/nodes/Misp/Misp.node.js", + "dist/nodes/Mocean/Mocean.node.js", + "dist/nodes/MondayCom/MondayCom.node.js", + "dist/nodes/MongoDb/MongoDb.node.js", + "dist/nodes/MonicaCrm/MonicaCrm.node.js", + "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", + "dist/nodes/MQTT/Mqtt.node.js", + "dist/nodes/MQTT/MqttTrigger.node.js", + "dist/nodes/Msg91/Msg91.node.js", + "dist/nodes/MySql/MySql.node.js", + "dist/nodes/N8n/N8n.node.js", + "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", + "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", + "dist/nodes/N8nTrigger/N8nTrigger.node.js", + "dist/nodes/Nasa/Nasa.node.js", + "dist/nodes/Netlify/Netlify.node.js", + "dist/nodes/Netlify/NetlifyTrigger.node.js", + "dist/nodes/NextCloud/NextCloud.node.js", + "dist/nodes/NocoDB/NocoDB.node.js", + "dist/nodes/Brevo/Brevo.node.js", + "dist/nodes/Brevo/BrevoTrigger.node.js", + "dist/nodes/StickyNote/StickyNote.node.js", + "dist/nodes/NoOp/NoOp.node.js", + "dist/nodes/Onfleet/Onfleet.node.js", + "dist/nodes/Onfleet/OnfleetTrigger.node.js", + "dist/nodes/Notion/Notion.node.js", + "dist/nodes/Notion/NotionTrigger.node.js", + "dist/nodes/Npm/Npm.node.js", + "dist/nodes/Odoo/Odoo.node.js", + "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", + "dist/nodes/OpenAi/OpenAi.node.js", + "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", + "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", + "dist/nodes/Orbit/Orbit.node.js", + "dist/nodes/Oura/Oura.node.js", + "dist/nodes/Paddle/Paddle.node.js", + "dist/nodes/PagerDuty/PagerDuty.node.js", + "dist/nodes/PayPal/PayPal.node.js", + "dist/nodes/PayPal/PayPalTrigger.node.js", + "dist/nodes/Peekalink/Peekalink.node.js", + "dist/nodes/Phantombuster/Phantombuster.node.js", + "dist/nodes/PhilipsHue/PhilipsHue.node.js", + "dist/nodes/Pipedrive/Pipedrive.node.js", + "dist/nodes/Pipedrive/PipedriveTrigger.node.js", + "dist/nodes/Plivo/Plivo.node.js", + "dist/nodes/PostBin/PostBin.node.js", + "dist/nodes/Postgres/Postgres.node.js", + "dist/nodes/Postgres/PostgresTrigger.node.js", + "dist/nodes/PostHog/PostHog.node.js", + "dist/nodes/Postmark/PostmarkTrigger.node.js", + "dist/nodes/ProfitWell/ProfitWell.node.js", + "dist/nodes/Pushbullet/Pushbullet.node.js", + "dist/nodes/Pushcut/Pushcut.node.js", + "dist/nodes/Pushcut/PushcutTrigger.node.js", + "dist/nodes/Pushover/Pushover.node.js", + "dist/nodes/QuestDb/QuestDb.node.js", + "dist/nodes/QuickBase/QuickBase.node.js", + "dist/nodes/QuickBooks/QuickBooks.node.js", + "dist/nodes/QuickChart/QuickChart.node.js", + "dist/nodes/RabbitMQ/RabbitMQ.node.js", + "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", + "dist/nodes/Raindrop/Raindrop.node.js", + "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", + "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", + "dist/nodes/ReadPdf/ReadPDF.node.js", + "dist/nodes/Reddit/Reddit.node.js", + "dist/nodes/Redis/Redis.node.js", + "dist/nodes/Redis/RedisTrigger.node.js", + "dist/nodes/RenameKeys/RenameKeys.node.js", + "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", + "dist/nodes/Rocketchat/Rocketchat.node.js", + "dist/nodes/RssFeedRead/RssFeedRead.node.js", + "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", + "dist/nodes/Rundeck/Rundeck.node.js", + "dist/nodes/S3/S3.node.js", + "dist/nodes/Salesforce/Salesforce.node.js", + "dist/nodes/Salesmate/Salesmate.node.js", + "dist/nodes/Schedule/ScheduleTrigger.node.js", + "dist/nodes/SeaTable/SeaTable.node.js", + "dist/nodes/SeaTable/SeaTableTrigger.node.js", + "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", + "dist/nodes/Segment/Segment.node.js", + "dist/nodes/SendGrid/SendGrid.node.js", + "dist/nodes/Sendy/Sendy.node.js", + "dist/nodes/SentryIo/SentryIo.node.js", + "dist/nodes/ServiceNow/ServiceNow.node.js", + "dist/nodes/Set/Set.node.js", + "dist/nodes/Shopify/Shopify.node.js", + "dist/nodes/Shopify/ShopifyTrigger.node.js", + "dist/nodes/Signl4/Signl4.node.js", + "dist/nodes/Slack/Slack.node.js", + "dist/nodes/Sms77/Sms77.node.js", + "dist/nodes/Snowflake/Snowflake.node.js", + "dist/nodes/SplitInBatches/SplitInBatches.node.js", + "dist/nodes/Splunk/Splunk.node.js", + "dist/nodes/Spontit/Spontit.node.js", + "dist/nodes/Spotify/Spotify.node.js", + "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", + "dist/nodes/SseTrigger/SseTrigger.node.js", + "dist/nodes/Ssh/Ssh.node.js", + "dist/nodes/Stackby/Stackby.node.js", + "dist/nodes/Start/Start.node.js", + "dist/nodes/StopAndError/StopAndError.node.js", + "dist/nodes/Storyblok/Storyblok.node.js", + "dist/nodes/Strapi/Strapi.node.js", + "dist/nodes/Strava/Strava.node.js", + "dist/nodes/Strava/StravaTrigger.node.js", + "dist/nodes/Stripe/Stripe.node.js", + "dist/nodes/Stripe/StripeTrigger.node.js", + "dist/nodes/Supabase/Supabase.node.js", + "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", + "dist/nodes/Switch/Switch.node.js", + "dist/nodes/SyncroMSP/SyncroMsp.node.js", + "dist/nodes/Taiga/Taiga.node.js", + "dist/nodes/Taiga/TaigaTrigger.node.js", + "dist/nodes/Tapfiliate/Tapfiliate.node.js", + "dist/nodes/Telegram/Telegram.node.js", + "dist/nodes/Telegram/TelegramTrigger.node.js", + "dist/nodes/TheHiveProject/TheHiveProject.node.js", + "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", + "dist/nodes/TheHive/TheHive.node.js", + "dist/nodes/TheHive/TheHiveTrigger.node.js", + "dist/nodes/TimescaleDb/TimescaleDb.node.js", + "dist/nodes/Todoist/Todoist.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", + "dist/nodes/Totp/Totp.node.js", + "dist/nodes/TravisCi/TravisCi.node.js", + "dist/nodes/Trello/Trello.node.js", + "dist/nodes/Trello/TrelloTrigger.node.js", + "dist/nodes/Twake/Twake.node.js", + "dist/nodes/Twilio/Twilio.node.js", + "dist/nodes/Twist/Twist.node.js", + "dist/nodes/Twitter/Twitter.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", + "dist/nodes/Uplead/Uplead.node.js", + "dist/nodes/UProc/UProc.node.js", + "dist/nodes/UptimeRobot/UptimeRobot.node.js", + "dist/nodes/UrlScanIo/UrlScanIo.node.js", + "dist/nodes/Vero/Vero.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", + "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", + "dist/nodes/Vonage/Vonage.node.js", + "dist/nodes/Wait/Wait.node.js", + "dist/nodes/Webflow/Webflow.node.js", + "dist/nodes/Webflow/WebflowTrigger.node.js", + "dist/nodes/Webhook/Webhook.node.js", + "dist/nodes/Wekan/Wekan.node.js", + "dist/nodes/WhatsApp/WhatsApp.node.js", + "dist/nodes/Wise/Wise.node.js", + "dist/nodes/Wise/WiseTrigger.node.js", + "dist/nodes/WooCommerce/WooCommerce.node.js", + "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", + "dist/nodes/Wordpress/Wordpress.node.js", + "dist/nodes/Workable/WorkableTrigger.node.js", + "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", + "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", + "dist/nodes/Wufoo/WufooTrigger.node.js", + "dist/nodes/Xero/Xero.node.js", + "dist/nodes/Xml/Xml.node.js", + "dist/nodes/Yourls/Yourls.node.js", + "dist/nodes/Zammad/Zammad.node.js", + "dist/nodes/Zendesk/Zendesk.node.js", + "dist/nodes/Zendesk/ZendeskTrigger.node.js", + "dist/nodes/Zoho/ZohoCrm.node.js", + "dist/nodes/Zoom/Zoom.node.js", + "dist/nodes/Zulip/Zulip.node.js" + ] + }, + "devDependencies": { + "@types/amqplib": "^0.10.1", + "@types/aws4": "^1.5.1", + "@types/basic-auth": "^1.1.3", + "@types/cheerio": "^0.22.15", + "@types/cron": "~1.7.1", + "@types/eventsource": "^1.1.2", + "@types/express": "^4.17.6", + "@types/gm": "^1.25.0", + "@types/imap-simple": "^4.2.0", + "@types/js-nacl": "^1.3.0", + "@types/jsonwebtoken": "^9.0.1", + "@types/lodash": "^4.14.195", + "@types/lossless-json": "^1.0.0", + "@types/mailparser": "^2.7.3", + "@types/mime-types": "^2.1.0", + "@types/mssql": "^6.0.2", + "@types/node-ssh": "^7.0.1", + "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", + "@types/redis": "^2.8.11", + "@types/request-promise-native": "~1.0.15", + "@types/rfc2047": "^2.0.1", + "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.6.12", + "@types/ssh2-sftp-client": "^5.1.0", + "@types/tmp": "^0.2.0", + "@types/uuid": "^8.3.2", + "@types/xml2js": "^0.4.11", + "eslint-plugin-n8n-nodes-base": "^1.16.0", + "gulp": "^4.0.0", + "n8n-core": "1.14.1" + }, + "dependencies": { + "@kafkajs/confluent-schema-registry": "1.0.6", + "@n8n/vm2": "^3.9.20", + "amqplib": "^0.10.3", + "aws4": "^1.8.0", + "basic-auth": "^2.0.1", + "change-case": "^4.1.1", + "cheerio": "1.0.0-rc.6", + "chokidar": "3.5.2", + "cron": "~1.7.2", + "csv-parse": "^5.5.0", + "currency-codes": "^2.1.0", + "eventsource": "^2.0.2", + "fast-glob": "^3.2.5", + "fflate": "^0.7.0", + "get-system-fonts": "^2.0.2", + "gm": "^1.25.0", + "iconv-lite": "^0.6.2", + "ics": "^2.27.0", + "imap-simple": "^4.3.0", + "isbot": "^3.6.13", + "iso-639-1": "^2.1.3", + "js-nacl": "^1.4.0", + "jsonwebtoken": "^9.0.0", + "kafkajs": "^1.14.0", + "ldapts": "^4.2.6", + "lodash": "^4.17.21", + "lossless-json": "^1.0.4", + "luxon": "^3.3.0", + "mailparser": "^3.2.0", + "minifaker": "^1.34.1", + "moment": "~2.29.2", + "moment-timezone": "^0.5.28", + "mongodb": "^4.17.1", + "mqtt": "^5.0.2", + "mssql": "^8.1.2", + "mysql2": "~2.3.0", + "nanoid": "^3.3.6", + "node-html-markdown": "^1.1.3", + "node-ssh": "^12.0.0", + "nodemailer": "^6.7.1", + "otpauth": "^9.1.1", + "pdfjs-dist": "^2.16.105", + "pg": "^8.3.0", + "pg-promise": "^10.5.8", + "pretty-bytes": "^5.6.0", + "promise-ftp": "^1.3.5", + "pyodide": "^0.23.4", + "redis": "^3.1.1", + "rfc2047": "^4.0.1", + "rhea": "^1.0.11", + "rss-parser": "^3.7.0", + "semver": "^7.5.4", + "showdown": "^2.0.3", + "simple-git": "^3.17.0", + "snowflake-sdk": "^1.8.0", + "ssh2-sftp-client": "^7.0.0", + "tmp-promise": "^3.0.2", + "typedi": "^0.10.0", + "uuid": "^8.3.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "xml2js": "^0.5.0", + "n8n-workflow": "1.14.1" + }, + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc", + "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", + "build:translations": "gulp build:translations", + "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", + "format": "prettier --write . --ignore-path ../../.prettierignore", + "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", + "lintfix": "eslint . --fix", + "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", + "test": "jest" + } + } + }, + { + "nodeType": "ActiveCampaign", + "name": "ActiveCampaign", + "codeLength": 38399, + "codeHash": "5ea90671718d20eecb6cddae2e21c91470fdb778e8be97106ee2539303422ad2", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "extractedAt": "2025-06-08T10:57:56.032Z", + "sourceCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActiveCampaign = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst GenericFunctions_1 = require(\"./GenericFunctions\");\nconst ContactDescription_1 = require(\"./ContactDescription\");\nconst DealDescription_1 = require(\"./DealDescription\");\nconst EcomOrderDescription_1 = require(\"./EcomOrderDescription\");\nconst EcomCustomerDescription_1 = require(\"./EcomCustomerDescription\");\nconst EcomOrderProductsDescription_1 = require(\"./EcomOrderProductsDescription\");\nconst ConnectionDescription_1 = require(\"./ConnectionDescription\");\nconst AccountDescription_1 = require(\"./AccountDescription\");\nconst TagDescription_1 = require(\"./TagDescription\");\nconst AccountContactDescription_1 = require(\"./AccountContactDescription\");\nconst ContactListDescription_1 = require(\"./ContactListDescription\");\nconst ContactTagDescription_1 = require(\"./ContactTagDescription\");\nconst ListDescription_1 = require(\"./ListDescription\");\nfunction addAdditionalFields(body, additionalFields) {\n for (const key of Object.keys(additionalFields)) {\n if (key === 'customProperties' &&\n additionalFields.customProperties.property !== undefined) {\n for (const customProperty of additionalFields.customProperties\n .property) {\n body[customProperty.name] = customProperty.value;\n }\n }\n else if (key === 'fieldValues' &&\n additionalFields.fieldValues.property !== undefined) {\n body.fieldValues = additionalFields.fieldValues.property;\n }\n else if (key === 'fields' &&\n additionalFields.fields.property !== undefined) {\n body.fields = additionalFields.fields.property;\n }\n else {\n body[key] = additionalFields[key];\n }\n }\n}\nclass ActiveCampaign {\n constructor() {\n this.description = {\n displayName: 'ActiveCampaign',\n name: 'activeCampaign',\n icon: 'file:activeCampaign.png',\n group: ['transform'],\n version: 1,\n subtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n description: 'Create and edit data in ActiveCampaign',\n defaults: {\n name: 'ActiveCampaign',\n },\n inputs: ['main'],\n outputs: ['main'],\n credentials: [\n {\n name: 'activeCampaignApi',\n required: true,\n },\n ],\n properties: [\n {\n displayName: 'Resource',\n name: 'resource',\n type: 'options',\n noDataExpression: true,\n options: [\n {\n name: 'Account',\n value: 'account',\n },\n {\n name: 'Account Contact',\n value: 'accountContact',\n },\n {\n name: 'Connection',\n value: 'connection',\n },\n {\n name: 'Contact',\n value: 'contact',\n },\n {\n name: 'Contact List',\n value: 'contactList',\n },\n {\n name: 'Contact Tag',\n value: 'contactTag',\n },\n {\n name: 'Deal',\n value: 'deal',\n },\n {\n name: 'E-Commerce Customer',\n value: 'ecommerceCustomer',\n },\n {\n name: 'E-Commerce Order',\n value: 'ecommerceOrder',\n },\n {\n name: 'E-Commerce Order Product',\n value: 'ecommerceOrderProducts',\n },\n {\n name: 'List',\n value: 'list',\n },\n {\n name: 'Tag',\n value: 'tag',\n },\n ],\n default: 'contact',\n },\n ...AccountDescription_1.accountOperations,\n ...ContactDescription_1.contactOperations,\n ...AccountContactDescription_1.accountContactOperations,\n ...ContactListDescription_1.contactListOperations,\n ...ContactTagDescription_1.contactTagOperations,\n ...ListDescription_1.listOperations,\n ...TagDescription_1.tagOperations,\n ...DealDescription_1.dealOperations,\n ...ConnectionDescription_1.connectionOperations,\n ...EcomOrderDescription_1.ecomOrderOperations,\n ...EcomCustomerDescription_1.ecomCustomerOperations,\n ...EcomOrderProductsDescription_1.ecomOrderProductsOperations,\n ...TagDescription_1.tagFields,\n ...ListDescription_1.listFields,\n ...ContactTagDescription_1.contactTagFields,\n ...ContactListDescription_1.contactListFields,\n ...AccountDescription_1.accountFields,\n ...AccountContactDescription_1.accountContactFields,\n ...ContactDescription_1.contactFields,\n ...DealDescription_1.dealFields,\n ...ConnectionDescription_1.connectionFields,\n ...EcomOrderDescription_1.ecomOrderFields,\n ...EcomCustomerDescription_1.ecomCustomerFields,\n ...EcomOrderProductsDescription_1.ecomOrderProductsFields,\n ],\n };\n this.methods = {\n loadOptions: {\n async getContactCustomFields() {\n const returnData = [];\n const { fields } = await GenericFunctions_1.activeCampaignApiRequest.call(this, 'GET', '/api/3/fields', {}, { limit: 100 });\n for (const field of fields) {\n const fieldName = field.title;\n const fieldId = field.id;\n returnData.push({\n name: fieldName,\n value: fieldId,\n });\n }\n return returnData;\n },\n async getAccountCustomFields() {\n const returnData = [];\n const { accountCustomFieldMeta: fields } = await GenericFunctions_1.activeCampaignApiRequest.call(this, 'GET', '/api/3/accountCustomFieldMeta', {}, { limit: 100 });\n for (const field of fields) {\n const fieldName = field.fieldLabel;\n const fieldId = field.id;\n returnData.push({\n name: fieldName,\n value: fieldId,\n });\n }\n return returnData;\n },\n async getTags() {\n const returnData = [];\n const { tags } = await GenericFunctions_1.activeCampaignApiRequest.call(this, 'GET', '/api/3/tags', {}, { limit: 100 });\n for (const tag of tags) {\n returnData.push({\n name: tag.tag,\n value: tag.id,\n });\n }\n return returnData;\n },\n },\n };\n }\n async execute() {\n const items = this.getInputData();\n const returnData = [];\n let resource;\n let operation;\n let body;\n let qs;\n let requestMethod;\n let endpoint;\n let returnAll = false;\n let dataKey;\n for (let i = 0; i < items.length; i++) {\n try {\n dataKey = undefined;\n resource = this.getNodeParameter('resource', 0);\n operation = this.getNodeParameter('operation', 0);\n requestMethod = 'GET';\n endpoint = '';\n body = {};\n qs = {};\n if (resource === 'contact') {\n if (operation === 'create') {\n requestMethod = 'POST';\n const updateIfExists = this.getNodeParameter('updateIfExists', i);\n if (updateIfExists) {\n endpoint = '/api/3/contact/sync';\n }\n else {\n endpoint = '/api/3/contacts';\n }\n dataKey = 'contact';\n body.contact = {\n email: this.getNodeParameter('email', i),\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n addAdditionalFields(body.contact, additionalFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const contactId = this.getNodeParameter('contactId', i);\n endpoint = `/api/3/contacts/${contactId}`;\n }\n else if (operation === 'get') {\n requestMethod = 'GET';\n const contactId = this.getNodeParameter('contactId', i);\n endpoint = `/api/3/contacts/${contactId}`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n returnAll = this.getNodeParameter('returnAll', i);\n const simple = this.getNodeParameter('simple', i, true);\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n Object.assign(qs, additionalFields);\n if (qs.orderBy) {\n qs[qs.orderBy] = true;\n delete qs.orderBy;\n }\n if (simple) {\n dataKey = 'contacts';\n }\n endpoint = '/api/3/contacts';\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const contactId = this.getNodeParameter('contactId', i);\n endpoint = `/api/3/contacts/${contactId}`;\n dataKey = 'contact';\n body.contact = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n addAdditionalFields(body.contact, updateFields);\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'account') {\n if (operation === 'create') {\n requestMethod = 'POST';\n endpoint = '/api/3/accounts';\n dataKey = 'account';\n body.account = {\n name: this.getNodeParameter('name', i),\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n addAdditionalFields(body.account, additionalFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const accountId = this.getNodeParameter('accountId', i);\n endpoint = `/api/3/accounts/${accountId}`;\n }\n else if (operation === 'get') {\n requestMethod = 'GET';\n const accountId = this.getNodeParameter('accountId', i);\n endpoint = `/api/3/accounts/${accountId}`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n const simple = this.getNodeParameter('simple', i, true);\n returnAll = this.getNodeParameter('returnAll', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'accounts';\n }\n endpoint = '/api/3/accounts';\n const filters = this.getNodeParameter('filters', i);\n Object.assign(qs, filters);\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const accountId = this.getNodeParameter('accountId', i);\n endpoint = `/api/3/accounts/${accountId}`;\n dataKey = 'account';\n body.account = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n addAdditionalFields(body.account, updateFields);\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'accountContact') {\n if (operation === 'create') {\n requestMethod = 'POST';\n endpoint = '/api/3/accountContacts';\n dataKey = 'accountContact';\n body.accountContact = {\n contact: this.getNodeParameter('contact', i),\n account: this.getNodeParameter('account', i),\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n addAdditionalFields(body.accountContact, additionalFields);\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const accountContactId = this.getNodeParameter('accountContactId', i);\n endpoint = `/api/3/accountContacts/${accountContactId}`;\n dataKey = 'accountContact';\n body.accountContact = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n addAdditionalFields(body.accountContact, updateFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const accountContactId = this.getNodeParameter('accountContactId', i);\n endpoint = `/api/3/accountContacts/${accountContactId}`;\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'contactTag') {\n if (operation === 'add') {\n requestMethod = 'POST';\n endpoint = '/api/3/contactTags';\n dataKey = 'contactTag';\n body.contactTag = {\n contact: this.getNodeParameter('contactId', i),\n tag: this.getNodeParameter('tagId', i),\n };\n }\n else if (operation === 'remove') {\n requestMethod = 'DELETE';\n const contactTagId = this.getNodeParameter('contactTagId', i);\n endpoint = `/api/3/contactTags/${contactTagId}`;\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'contactList') {\n if (operation === 'add') {\n requestMethod = 'POST';\n endpoint = '/api/3/contactLists';\n dataKey = 'contactTag';\n body.contactList = {\n list: this.getNodeParameter('listId', i),\n contact: this.getNodeParameter('contactId', i),\n status: 1,\n };\n }\n else if (operation === 'remove') {\n requestMethod = 'POST';\n endpoint = '/api/3/contactLists';\n body.contactList = {\n list: this.getNodeParameter('listId', i),\n contact: this.getNodeParameter('contactId', i),\n status: 2,\n };\n dataKey = 'contacts';\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'list') {\n if (operation === 'getAll') {\n requestMethod = 'GET';\n returnAll = this.getNodeParameter('returnAll', i);\n const simple = this.getNodeParameter('simple', i, true);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'lists';\n }\n endpoint = '/api/3/lists';\n }\n }\n else if (resource === 'tag') {\n if (operation === 'create') {\n requestMethod = 'POST';\n endpoint = '/api/3/tags';\n dataKey = 'tag';\n body.tag = {\n tag: this.getNodeParameter('name', i),\n tagType: this.getNodeParameter('tagType', i),\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n addAdditionalFields(body.tag, additionalFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const tagId = this.getNodeParameter('tagId', i);\n endpoint = `/api/3/tags/${tagId}`;\n }\n else if (operation === 'get') {\n requestMethod = 'GET';\n const tagId = this.getNodeParameter('tagId', i);\n endpoint = `/api/3/tags/${tagId}`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n const simple = this.getNodeParameter('simple', i, true);\n returnAll = this.getNodeParameter('returnAll', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'tags';\n }\n endpoint = '/api/3/tags';\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const tagId = this.getNodeParameter('tagId', i);\n endpoint = `/api/3/tags/${tagId}`;\n dataKey = 'tag';\n body.tag = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n addAdditionalFields(body.tag, updateFields);\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'deal') {\n if (operation === 'create') {\n requestMethod = 'POST';\n endpoint = '/api/3/deals';\n body.deal = {\n title: this.getNodeParameter('title', i),\n contact: this.getNodeParameter('contact', i),\n value: this.getNodeParameter('value', i),\n currency: this.getNodeParameter('currency', i),\n };\n const group = this.getNodeParameter('group', i);\n if (group !== '') {\n addAdditionalFields(body.deal, { group });\n }\n const owner = this.getNodeParameter('owner', i);\n if (owner !== '') {\n addAdditionalFields(body.deal, { owner });\n }\n const stage = this.getNodeParameter('stage', i);\n if (stage !== '') {\n addAdditionalFields(body.deal, { stage });\n }\n const additionalFields = this.getNodeParameter('additionalFields', i);\n addAdditionalFields(body.deal, additionalFields);\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const dealId = this.getNodeParameter('dealId', i);\n endpoint = `/api/3/deals/${dealId}`;\n body.deal = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n addAdditionalFields(body.deal, updateFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const dealId = this.getNodeParameter('dealId', i);\n endpoint = `/api/3/deals/${dealId}`;\n }\n else if (operation === 'get') {\n requestMethod = 'GET';\n const dealId = this.getNodeParameter('dealId', i);\n endpoint = `/api/3/deals/${dealId}`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n const simple = this.getNodeParameter('simple', i, true);\n returnAll = this.getNodeParameter('returnAll', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'deals';\n }\n endpoint = '/api/3/deals';\n }\n else if (operation === 'createNote') {\n requestMethod = 'POST';\n body.note = {\n note: this.getNodeParameter('dealNote', i),\n };\n const dealId = this.getNodeParameter('dealId', i);\n endpoint = `/api/3/deals/${dealId}/notes`;\n }\n else if (operation === 'updateNote') {\n requestMethod = 'PUT';\n body.note = {\n note: this.getNodeParameter('dealNote', i),\n };\n const dealId = this.getNodeParameter('dealId', i);\n const dealNoteId = this.getNodeParameter('dealNoteId', i);\n endpoint = `/api/3/deals/${dealId}/notes/${dealNoteId}`;\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'connection') {\n if (operation === 'create') {\n requestMethod = 'POST';\n endpoint = '/api/3/connections';\n body.connection = {\n service: this.getNodeParameter('service', i),\n externalid: this.getNodeParameter('externalid', i),\n name: this.getNodeParameter('name', i),\n logoUrl: this.getNodeParameter('logoUrl', i),\n linkUrl: this.getNodeParameter('linkUrl', i),\n };\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const connectionId = this.getNodeParameter('connectionId', i);\n endpoint = `/api/3/connections/${connectionId}`;\n body.connection = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n addAdditionalFields(body.connection, updateFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const connectionId = this.getNodeParameter('connectionId', i);\n endpoint = `/api/3/connections/${connectionId}`;\n }\n else if (operation === 'get') {\n requestMethod = 'GET';\n const connectionId = this.getNodeParameter('connectionId', i);\n endpoint = `/api/3/connections/${connectionId}`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n const simple = this.getNodeParameter('simple', i, true);\n returnAll = this.getNodeParameter('returnAll', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'connections';\n }\n endpoint = '/api/3/connections';\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'ecommerceOrder') {\n if (operation === 'create') {\n requestMethod = 'POST';\n endpoint = '/api/3/ecomOrders';\n body.ecomOrder = {\n source: this.getNodeParameter('source', i),\n email: this.getNodeParameter('email', i),\n totalPrice: this.getNodeParameter('totalPrice', i),\n currency: this.getNodeParameter('currency', i).toString().toUpperCase(),\n externalCreatedDate: this.getNodeParameter('externalCreatedDate', i),\n connectionid: this.getNodeParameter('connectionid', i),\n customerid: this.getNodeParameter('customerid', i),\n };\n const externalid = this.getNodeParameter('externalid', i);\n if (externalid !== '') {\n addAdditionalFields(body.ecomOrder, { externalid });\n }\n const externalcheckoutid = this.getNodeParameter('externalcheckoutid', i);\n if (externalcheckoutid !== '') {\n addAdditionalFields(body.ecomOrder, { externalcheckoutid });\n }\n const abandonedDate = this.getNodeParameter('abandonedDate', i);\n if (abandonedDate !== '') {\n addAdditionalFields(body.ecomOrder, { abandonedDate });\n }\n const orderProducts = this.getNodeParameter('orderProducts', i);\n addAdditionalFields(body.ecomOrder, { orderProducts });\n const additionalFields = this.getNodeParameter('additionalFields', i);\n addAdditionalFields(body.ecomOrder, additionalFields);\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const orderId = this.getNodeParameter('orderId', i);\n endpoint = `/api/3/ecomOrders/${orderId}`;\n body.ecomOrder = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n addAdditionalFields(body.ecomOrder, updateFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const orderId = this.getNodeParameter('orderId', i);\n endpoint = `/api/3/ecomOrders/${orderId}`;\n }\n else if (operation === 'get') {\n requestMethod = 'GET';\n const orderId = this.getNodeParameter('orderId', i);\n endpoint = `/api/3/ecomOrders/${orderId}`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n const simple = this.getNodeParameter('simple', i, true);\n returnAll = this.getNodeParameter('returnAll', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'ecomOrders';\n }\n endpoint = '/api/3/ecomOrders';\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'ecommerceCustomer') {\n if (operation === 'create') {\n requestMethod = 'POST';\n endpoint = '/api/3/ecomCustomers';\n body.ecomCustomer = {\n connectionid: this.getNodeParameter('connectionid', i),\n externalid: this.getNodeParameter('externalid', i),\n email: this.getNodeParameter('email', i),\n };\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (additionalFields.acceptsMarketing !== undefined) {\n if (additionalFields.acceptsMarketing === true) {\n additionalFields.acceptsMarketing = '1';\n }\n else {\n additionalFields.acceptsMarketing = '0';\n }\n }\n addAdditionalFields(body.ecomCustomer, additionalFields);\n }\n else if (operation === 'update') {\n requestMethod = 'PUT';\n const ecommerceCustomerId = this.getNodeParameter('ecommerceCustomerId', i);\n endpoint = `/api/3/ecomCustomers/${ecommerceCustomerId}`;\n body.ecomCustomer = {};\n const updateFields = this.getNodeParameter('updateFields', i);\n if (updateFields.acceptsMarketing !== undefined) {\n if (updateFields.acceptsMarketing === true) {\n updateFields.acceptsMarketing = '1';\n }\n else {\n updateFields.acceptsMarketing = '0';\n }\n }\n addAdditionalFields(body.ecomCustomer, updateFields);\n }\n else if (operation === 'delete') {\n requestMethod = 'DELETE';\n const ecommerceCustomerId = this.getNodeParameter('ecommerceCustomerId', i);\n endpoint = `/api/3/ecomCustomers/${ecommerceCustomerId}`;\n }\n else if (operation === 'get') {\n requestMethod = 'GET';\n const ecommerceCustomerId = this.getNodeParameter('ecommerceCustomerId', i);\n endpoint = `/api/3/ecomCustomers/${ecommerceCustomerId}`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n const simple = this.getNodeParameter('simple', i, true);\n returnAll = this.getNodeParameter('returnAll', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'ecomCustomers';\n }\n endpoint = '/api/3/ecomCustomers';\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else if (resource === 'ecommerceOrderProducts') {\n if (operation === 'getByProductId') {\n requestMethod = 'GET';\n const procuctId = this.getNodeParameter('procuctId', i);\n endpoint = `/api/3/ecomOrderProducts/${procuctId}`;\n }\n else if (operation === 'getByOrderId') {\n requestMethod = 'GET';\n const orderId = this.getNodeParameter('orderId', i);\n endpoint = `/api/3/ecomOrders/${orderId}/orderProducts`;\n }\n else if (operation === 'getAll') {\n requestMethod = 'GET';\n const simple = this.getNodeParameter('simple', i, true);\n returnAll = this.getNodeParameter('returnAll', i);\n if (!returnAll) {\n qs.limit = this.getNodeParameter('limit', i);\n }\n if (simple) {\n dataKey = 'ecomOrderProducts';\n }\n endpoint = '/api/3/ecomOrderProducts';\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation \"${operation}\" is not known`, { itemIndex: i });\n }\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The resource \"${resource}\" is not known!`, {\n itemIndex: i,\n });\n }\n let responseData;\n if (returnAll) {\n responseData = await GenericFunctions_1.activeCampaignApiRequestAllItems.call(this, requestMethod, endpoint, body, qs, dataKey);\n }\n else {\n responseData = await GenericFunctions_1.activeCampaignApiRequest.call(this, requestMethod, endpoint, body, qs, dataKey);\n }\n if (resource === 'contactList' && operation === 'add' && responseData === undefined) {\n responseData = { success: true };\n }\n const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });\n returnData.push(...executionData);\n }\n catch (error) {\n if (this.continueOnFail()) {\n const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } });\n returnData.push(...executionErrorData);\n continue;\n }\n throw error;\n }\n }\n return [returnData];\n }\n}\nexports.ActiveCampaign = ActiveCampaign;\n//# sourceMappingURL=ActiveCampaign.node.js.map", + "credentialCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActiveCampaignApi = void 0;\nclass ActiveCampaignApi {\n constructor() {\n this.name = 'activeCampaignApi';\n this.displayName = 'ActiveCampaign API';\n this.documentationUrl = 'activeCampaign';\n this.properties = [\n {\n displayName: 'API URL',\n name: 'apiUrl',\n type: 'string',\n default: '',\n },\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n this.authenticate = {\n type: 'generic',\n properties: {\n headers: {\n 'Api-Token': '={{$credentials.apiKey}}',\n },\n },\n };\n this.test = {\n request: {\n baseURL: '={{$credentials.apiUrl}}',\n url: '/api/3/fields',\n },\n };\n }\n}\nexports.ActiveCampaignApi = ActiveCampaignApi;\n//# sourceMappingURL=ActiveCampaignApi.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActiveCampaignApi = void 0;\nclass ActiveCampaignApi {\n constructor() {\n this.name = 'activeCampaignApi';\n this.displayName = 'ActiveCampaign API';\n this.documentationUrl = 'activeCampaign';\n this.properties = [\n {\n displayName: 'API URL',\n name: 'apiUrl',\n type: 'string',\n default: '',\n },\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n this.authenticate = {\n type: 'generic',\n properties: {\n headers: {\n 'Api-Token': '={{$credentials.apiKey}}',\n },\n },\n };\n this.test = {\n request: {\n baseURL: '={{$credentials.apiUrl}}',\n url: '/api/3/fields',\n },\n };\n }\n}\nexports.ActiveCampaignApi = ActiveCampaignApi;\n//# sourceMappingURL=ActiveCampaignApi.credentials.js.map", + "packageInfo": { + "name": "n8n-nodes-base", + "version": "1.14.1", + "description": "Base nodes of n8n", + "license": "SEE LICENSE IN LICENSE.md", + "homepage": "https://n8n.io", + "author": { + "name": "Jan Oberhauser", + "email": "jan@n8n.io" + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/n8n-io/n8n.git" + }, + "files": [ + "dist" + ], + "n8n": { + "credentials": [ + "dist/credentials/ActionNetworkApi.credentials.js", + "dist/credentials/ActiveCampaignApi.credentials.js", + "dist/credentials/AcuitySchedulingApi.credentials.js", + "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", + "dist/credentials/AdaloApi.credentials.js", + "dist/credentials/AffinityApi.credentials.js", + "dist/credentials/AgileCrmApi.credentials.js", + "dist/credentials/AirtableApi.credentials.js", + "dist/credentials/AirtableOAuth2Api.credentials.js", + "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", + "dist/credentials/Amqp.credentials.js", + "dist/credentials/ApiTemplateIoApi.credentials.js", + "dist/credentials/AsanaApi.credentials.js", + "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", + "dist/credentials/AutomizyApi.credentials.js", + "dist/credentials/AutopilotApi.credentials.js", + "dist/credentials/Aws.credentials.js", + "dist/credentials/BambooHrApi.credentials.js", + "dist/credentials/BannerbearApi.credentials.js", + "dist/credentials/BaserowApi.credentials.js", + "dist/credentials/BeeminderApi.credentials.js", + "dist/credentials/BitbucketApi.credentials.js", + "dist/credentials/BitlyApi.credentials.js", + "dist/credentials/BitlyOAuth2Api.credentials.js", + "dist/credentials/BitwardenApi.credentials.js", + "dist/credentials/BoxOAuth2Api.credentials.js", + "dist/credentials/BrandfetchApi.credentials.js", + "dist/credentials/BubbleApi.credentials.js", + "dist/credentials/CalApi.credentials.js", + "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", + "dist/credentials/ChargebeeApi.credentials.js", + "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", + "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", + "dist/credentials/CitrixAdcApi.credentials.js", + "dist/credentials/CloudflareApi.credentials.js", + "dist/credentials/ClearbitApi.credentials.js", + "dist/credentials/ClickUpApi.credentials.js", + "dist/credentials/ClickUpOAuth2Api.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/CockpitApi.credentials.js", + "dist/credentials/CodaApi.credentials.js", + "dist/credentials/ContentfulApi.credentials.js", + "dist/credentials/ConvertKitApi.credentials.js", + "dist/credentials/CopperApi.credentials.js", + "dist/credentials/CortexApi.credentials.js", + "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", + "dist/credentials/CrowdDevApi.credentials.js", + "dist/credentials/CustomerIoApi.credentials.js", + "dist/credentials/DeepLApi.credentials.js", + "dist/credentials/DemioApi.credentials.js", + "dist/credentials/DhlApi.credentials.js", + "dist/credentials/DiscourseApi.credentials.js", + "dist/credentials/DisqusApi.credentials.js", + "dist/credentials/DriftApi.credentials.js", + "dist/credentials/DriftOAuth2Api.credentials.js", + "dist/credentials/DropboxApi.credentials.js", + "dist/credentials/DropboxOAuth2Api.credentials.js", + "dist/credentials/DropcontactApi.credentials.js", + "dist/credentials/EgoiApi.credentials.js", + "dist/credentials/ElasticsearchApi.credentials.js", + "dist/credentials/ElasticSecurityApi.credentials.js", + "dist/credentials/EmeliaApi.credentials.js", + "dist/credentials/ERPNextApi.credentials.js", + "dist/credentials/EventbriteApi.credentials.js", + "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", + "dist/credentials/FacebookGraphApi.credentials.js", + "dist/credentials/FacebookGraphAppApi.credentials.js", + "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", + "dist/credentials/FigmaApi.credentials.js", + "dist/credentials/FileMaker.credentials.js", + "dist/credentials/FlowApi.credentials.js", + "dist/credentials/FormIoApi.credentials.js", + "dist/credentials/FormstackApi.credentials.js", + "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", + "dist/credentials/FreshdeskApi.credentials.js", + "dist/credentials/FreshserviceApi.credentials.js", + "dist/credentials/FreshworksCrmApi.credentials.js", + "dist/credentials/Ftp.credentials.js", + "dist/credentials/GetResponseApi.credentials.js", + "dist/credentials/GetResponseOAuth2Api.credentials.js", + "dist/credentials/GhostAdminApi.credentials.js", + "dist/credentials/GhostContentApi.credentials.js", + "dist/credentials/GithubApi.credentials.js", + "dist/credentials/GithubOAuth2Api.credentials.js", + "dist/credentials/GitlabApi.credentials.js", + "dist/credentials/GitlabOAuth2Api.credentials.js", + "dist/credentials/GitPassword.credentials.js", + "dist/credentials/GmailOAuth2Api.credentials.js", + "dist/credentials/GoogleAdsOAuth2Api.credentials.js", + "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", + "dist/credentials/GoogleApi.credentials.js", + "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", + "dist/credentials/GoogleBooksOAuth2Api.credentials.js", + "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", + "dist/credentials/GoogleContactsOAuth2Api.credentials.js", + "dist/credentials/GoogleDocsOAuth2Api.credentials.js", + "dist/credentials/GoogleDriveOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", + "dist/credentials/GoogleOAuth2Api.credentials.js", + "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", + "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", + "dist/credentials/GoogleTasksOAuth2Api.credentials.js", + "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", + "dist/credentials/GotifyApi.credentials.js", + "dist/credentials/GoToWebinarOAuth2Api.credentials.js", + "dist/credentials/GristApi.credentials.js", + "dist/credentials/GrafanaApi.credentials.js", + "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", + "dist/credentials/GumroadApi.credentials.js", + "dist/credentials/HaloPSAApi.credentials.js", + "dist/credentials/HarvestApi.credentials.js", + "dist/credentials/HarvestOAuth2Api.credentials.js", + "dist/credentials/HelpScoutOAuth2Api.credentials.js", + "dist/credentials/HighLevelApi.credentials.js", + "dist/credentials/HomeAssistantApi.credentials.js", + "dist/credentials/HttpBasicAuth.credentials.js", + "dist/credentials/HttpDigestAuth.credentials.js", + "dist/credentials/HttpHeaderAuth.credentials.js", + "dist/credentials/HttpCustomAuth.credentials.js", + "dist/credentials/HttpQueryAuth.credentials.js", + "dist/credentials/HubspotApi.credentials.js", + "dist/credentials/HubspotAppToken.credentials.js", + "dist/credentials/HubspotDeveloperApi.credentials.js", + "dist/credentials/HubspotOAuth2Api.credentials.js", + "dist/credentials/HumanticAiApi.credentials.js", + "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", + "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", + "dist/credentials/IntercomApi.credentials.js", + "dist/credentials/InvoiceNinjaApi.credentials.js", + "dist/credentials/IterableApi.credentials.js", + "dist/credentials/JenkinsApi.credentials.js", + "dist/credentials/JiraSoftwareCloudApi.credentials.js", + "dist/credentials/JiraSoftwareServerApi.credentials.js", + "dist/credentials/JotFormApi.credentials.js", + "dist/credentials/Kafka.credentials.js", + "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", + "dist/credentials/KitemakerApi.credentials.js", + "dist/credentials/KoBoToolboxApi.credentials.js", + "dist/credentials/Ldap.credentials.js", + "dist/credentials/LemlistApi.credentials.js", + "dist/credentials/LinearApi.credentials.js", + "dist/credentials/LinearOAuth2Api.credentials.js", + "dist/credentials/LineNotifyOAuth2Api.credentials.js", + "dist/credentials/LingvaNexApi.credentials.js", + "dist/credentials/LinkedInOAuth2Api.credentials.js", + "dist/credentials/LoneScaleApi.credentials.js", + "dist/credentials/Magento2Api.credentials.js", + "dist/credentials/MailcheckApi.credentials.js", + "dist/credentials/MailchimpApi.credentials.js", + "dist/credentials/MailchimpOAuth2Api.credentials.js", + "dist/credentials/MailerLiteApi.credentials.js", + "dist/credentials/MailgunApi.credentials.js", + "dist/credentials/MailjetEmailApi.credentials.js", + "dist/credentials/MailjetSmsApi.credentials.js", + "dist/credentials/MandrillApi.credentials.js", + "dist/credentials/MarketstackApi.credentials.js", + "dist/credentials/MatrixApi.credentials.js", + "dist/credentials/MattermostApi.credentials.js", + "dist/credentials/MauticApi.credentials.js", + "dist/credentials/MauticOAuth2Api.credentials.js", + "dist/credentials/MediumApi.credentials.js", + "dist/credentials/MediumOAuth2Api.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MessageBirdApi.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", + "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", + "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSql.credentials.js", + "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", + "dist/credentials/MindeeInvoiceApi.credentials.js", + "dist/credentials/MindeeReceiptApi.credentials.js", + "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", + "dist/credentials/MoceanApi.credentials.js", + "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", + "dist/credentials/MongoDb.credentials.js", + "dist/credentials/MonicaCrmApi.credentials.js", + "dist/credentials/Mqtt.credentials.js", + "dist/credentials/Msg91Api.credentials.js", + "dist/credentials/MySql.credentials.js", + "dist/credentials/N8nApi.credentials.js", + "dist/credentials/NasaApi.credentials.js", + "dist/credentials/NetlifyApi.credentials.js", + "dist/credentials/NextCloudApi.credentials.js", + "dist/credentials/NextCloudOAuth2Api.credentials.js", + "dist/credentials/NocoDb.credentials.js", + "dist/credentials/NocoDbApiToken.credentials.js", + "dist/credentials/NotionApi.credentials.js", + "dist/credentials/NotionOAuth2Api.credentials.js", + "dist/credentials/NpmApi.credentials.js", + "dist/credentials/OAuth1Api.credentials.js", + "dist/credentials/OAuth2Api.credentials.js", + "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", + "dist/credentials/OneSimpleApi.credentials.js", + "dist/credentials/OnfleetApi.credentials.js", + "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", + "dist/credentials/OpenWeatherMapApi.credentials.js", + "dist/credentials/OrbitApi.credentials.js", + "dist/credentials/OuraApi.credentials.js", + "dist/credentials/PaddleApi.credentials.js", + "dist/credentials/PagerDutyApi.credentials.js", + "dist/credentials/PagerDutyOAuth2Api.credentials.js", + "dist/credentials/PayPalApi.credentials.js", + "dist/credentials/PeekalinkApi.credentials.js", + "dist/credentials/PhantombusterApi.credentials.js", + "dist/credentials/PhilipsHueOAuth2Api.credentials.js", + "dist/credentials/PipedriveApi.credentials.js", + "dist/credentials/PipedriveOAuth2Api.credentials.js", + "dist/credentials/PlivoApi.credentials.js", + "dist/credentials/Postgres.credentials.js", + "dist/credentials/PostHogApi.credentials.js", + "dist/credentials/PostmarkApi.credentials.js", + "dist/credentials/ProfitWellApi.credentials.js", + "dist/credentials/PushbulletOAuth2Api.credentials.js", + "dist/credentials/PushcutApi.credentials.js", + "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", + "dist/credentials/QuestDb.credentials.js", + "dist/credentials/QuickBaseApi.credentials.js", + "dist/credentials/QuickBooksOAuth2Api.credentials.js", + "dist/credentials/RabbitMQ.credentials.js", + "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", + "dist/credentials/RedditOAuth2Api.credentials.js", + "dist/credentials/Redis.credentials.js", + "dist/credentials/RocketchatApi.credentials.js", + "dist/credentials/RundeckApi.credentials.js", + "dist/credentials/S3.credentials.js", + "dist/credentials/SalesforceJwtApi.credentials.js", + "dist/credentials/SalesforceOAuth2Api.credentials.js", + "dist/credentials/SalesmateApi.credentials.js", + "dist/credentials/SeaTableApi.credentials.js", + "dist/credentials/SecurityScorecardApi.credentials.js", + "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", + "dist/credentials/SendGridApi.credentials.js", + "dist/credentials/BrevoApi.credentials.js", + "dist/credentials/SendyApi.credentials.js", + "dist/credentials/SentryIoApi.credentials.js", + "dist/credentials/SentryIoOAuth2Api.credentials.js", + "dist/credentials/SentryIoServerApi.credentials.js", + "dist/credentials/ServiceNowOAuth2Api.credentials.js", + "dist/credentials/ServiceNowBasicApi.credentials.js", + "dist/credentials/Sftp.credentials.js", + "dist/credentials/ShopifyApi.credentials.js", + "dist/credentials/ShopifyAccessTokenApi.credentials.js", + "dist/credentials/ShopifyOAuth2Api.credentials.js", + "dist/credentials/Signl4Api.credentials.js", + "dist/credentials/SlackApi.credentials.js", + "dist/credentials/SlackOAuth2Api.credentials.js", + "dist/credentials/Sms77Api.credentials.js", + "dist/credentials/Smtp.credentials.js", + "dist/credentials/Snowflake.credentials.js", + "dist/credentials/SplunkApi.credentials.js", + "dist/credentials/SpontitApi.credentials.js", + "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", + "dist/credentials/SshPassword.credentials.js", + "dist/credentials/SshPrivateKey.credentials.js", + "dist/credentials/StackbyApi.credentials.js", + "dist/credentials/StoryblokContentApi.credentials.js", + "dist/credentials/StoryblokManagementApi.credentials.js", + "dist/credentials/StrapiApi.credentials.js", + "dist/credentials/StrapiTokenApi.credentials.js", + "dist/credentials/StravaOAuth2Api.credentials.js", + "dist/credentials/StripeApi.credentials.js", + "dist/credentials/SupabaseApi.credentials.js", + "dist/credentials/SurveyMonkeyApi.credentials.js", + "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", + "dist/credentials/SyncroMspApi.credentials.js", + "dist/credentials/TaigaApi.credentials.js", + "dist/credentials/TapfiliateApi.credentials.js", + "dist/credentials/TelegramApi.credentials.js", + "dist/credentials/TheHiveProjectApi.credentials.js", + "dist/credentials/TheHiveApi.credentials.js", + "dist/credentials/TimescaleDb.credentials.js", + "dist/credentials/TodoistApi.credentials.js", + "dist/credentials/TodoistOAuth2Api.credentials.js", + "dist/credentials/TogglApi.credentials.js", + "dist/credentials/TotpApi.credentials.js", + "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", + "dist/credentials/TrelloApi.credentials.js", + "dist/credentials/TwakeCloudApi.credentials.js", + "dist/credentials/TwakeServerApi.credentials.js", + "dist/credentials/TwilioApi.credentials.js", + "dist/credentials/TwistOAuth2Api.credentials.js", + "dist/credentials/TwitterOAuth1Api.credentials.js", + "dist/credentials/TwitterOAuth2Api.credentials.js", + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TypeformOAuth2Api.credentials.js", + "dist/credentials/UnleashedSoftwareApi.credentials.js", + "dist/credentials/UpleadApi.credentials.js", + "dist/credentials/UProcApi.credentials.js", + "dist/credentials/UptimeRobotApi.credentials.js", + "dist/credentials/UrlScanIoApi.credentials.js", + "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", + "dist/credentials/VonageApi.credentials.js", + "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", + "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", + "dist/credentials/WebflowApi.credentials.js", + "dist/credentials/WebflowOAuth2Api.credentials.js", + "dist/credentials/WekanApi.credentials.js", + "dist/credentials/WhatsAppApi.credentials.js", + "dist/credentials/WiseApi.credentials.js", + "dist/credentials/WooCommerceApi.credentials.js", + "dist/credentials/WordpressApi.credentials.js", + "dist/credentials/WorkableApi.credentials.js", + "dist/credentials/WufooApi.credentials.js", + "dist/credentials/XeroOAuth2Api.credentials.js", + "dist/credentials/YourlsApi.credentials.js", + "dist/credentials/YouTubeOAuth2Api.credentials.js", + "dist/credentials/ZammadBasicAuthApi.credentials.js", + "dist/credentials/ZammadTokenAuthApi.credentials.js", + "dist/credentials/ZendeskApi.credentials.js", + "dist/credentials/ZendeskOAuth2Api.credentials.js", + "dist/credentials/ZohoOAuth2Api.credentials.js", + "dist/credentials/ZoomApi.credentials.js", + "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", + "dist/credentials/ZulipApi.credentials.js" + ], + "nodes": [ + "dist/nodes/ActionNetwork/ActionNetwork.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", + "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", + "dist/nodes/Adalo/Adalo.node.js", + "dist/nodes/Affinity/Affinity.node.js", + "dist/nodes/Affinity/AffinityTrigger.node.js", + "dist/nodes/AgileCrm/AgileCrm.node.js", + "dist/nodes/Airtable/Airtable.node.js", + "dist/nodes/Airtable/AirtableTrigger.node.js", + "dist/nodes/Amqp/Amqp.node.js", + "dist/nodes/Amqp/AmqpTrigger.node.js", + "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", + "dist/nodes/Asana/Asana.node.js", + "dist/nodes/Asana/AsanaTrigger.node.js", + "dist/nodes/Automizy/Automizy.node.js", + "dist/nodes/Autopilot/Autopilot.node.js", + "dist/nodes/Autopilot/AutopilotTrigger.node.js", + "dist/nodes/Aws/AwsLambda.node.js", + "dist/nodes/Aws/AwsSns.node.js", + "dist/nodes/Aws/AwsSnsTrigger.node.js", + "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", + "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", + "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", + "dist/nodes/Aws/ELB/AwsElb.node.js", + "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", + "dist/nodes/Aws/S3/AwsS3.node.js", + "dist/nodes/Aws/SES/AwsSes.node.js", + "dist/nodes/Aws/SQS/AwsSqs.node.js", + "dist/nodes/Aws/Textract/AwsTextract.node.js", + "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", + "dist/nodes/BambooHr/BambooHr.node.js", + "dist/nodes/Bannerbear/Bannerbear.node.js", + "dist/nodes/Baserow/Baserow.node.js", + "dist/nodes/Beeminder/Beeminder.node.js", + "dist/nodes/Bitbucket/BitbucketTrigger.node.js", + "dist/nodes/Bitly/Bitly.node.js", + "dist/nodes/Bitwarden/Bitwarden.node.js", + "dist/nodes/Box/Box.node.js", + "dist/nodes/Box/BoxTrigger.node.js", + "dist/nodes/Brandfetch/Brandfetch.node.js", + "dist/nodes/Bubble/Bubble.node.js", + "dist/nodes/Cal/CalTrigger.node.js", + "dist/nodes/Calendly/CalendlyTrigger.node.js", + "dist/nodes/Chargebee/Chargebee.node.js", + "dist/nodes/Chargebee/ChargebeeTrigger.node.js", + "dist/nodes/CircleCi/CircleCi.node.js", + "dist/nodes/Cisco/Webex/CiscoWebex.node.js", + "dist/nodes/Citrix/ADC/CitrixAdc.node.js", + "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", + "dist/nodes/Cloudflare/Cloudflare.node.js", + "dist/nodes/Clearbit/Clearbit.node.js", + "dist/nodes/ClickUp/ClickUp.node.js", + "dist/nodes/ClickUp/ClickUpTrigger.node.js", + "dist/nodes/Clockify/Clockify.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Cockpit/Cockpit.node.js", + "dist/nodes/Coda/Coda.node.js", + "dist/nodes/Code/Code.node.js", + "dist/nodes/CoinGecko/CoinGecko.node.js", + "dist/nodes/CompareDatasets/CompareDatasets.node.js", + "dist/nodes/Compression/Compression.node.js", + "dist/nodes/Contentful/Contentful.node.js", + "dist/nodes/ConvertKit/ConvertKit.node.js", + "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", + "dist/nodes/Copper/Copper.node.js", + "dist/nodes/Copper/CopperTrigger.node.js", + "dist/nodes/Cortex/Cortex.node.js", + "dist/nodes/CrateDb/CrateDb.node.js", + "dist/nodes/Cron/Cron.node.js", + "dist/nodes/CrowdDev/CrowdDev.node.js", + "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", + "dist/nodes/Crypto/Crypto.node.js", + "dist/nodes/CustomerIo/CustomerIo.node.js", + "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", + "dist/nodes/DateTime/DateTime.node.js", + "dist/nodes/DebugHelper/DebugHelper.node.js", + "dist/nodes/DeepL/DeepL.node.js", + "dist/nodes/Demio/Demio.node.js", + "dist/nodes/Dhl/Dhl.node.js", + "dist/nodes/Discord/Discord.node.js", + "dist/nodes/Discourse/Discourse.node.js", + "dist/nodes/Disqus/Disqus.node.js", + "dist/nodes/Drift/Drift.node.js", + "dist/nodes/Dropbox/Dropbox.node.js", + "dist/nodes/Dropcontact/Dropcontact.node.js", + "dist/nodes/EditImage/EditImage.node.js", + "dist/nodes/E2eTest/E2eTest.node.js", + "dist/nodes/Egoi/Egoi.node.js", + "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", + "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", + "dist/nodes/EmailReadImap/EmailReadImap.node.js", + "dist/nodes/EmailSend/EmailSend.node.js", + "dist/nodes/Emelia/Emelia.node.js", + "dist/nodes/Emelia/EmeliaTrigger.node.js", + "dist/nodes/ERPNext/ERPNext.node.js", + "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", + "dist/nodes/Eventbrite/EventbriteTrigger.node.js", + "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", + "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", + "dist/nodes/ExecutionData/ExecutionData.node.js", + "dist/nodes/Facebook/FacebookGraphApi.node.js", + "dist/nodes/Facebook/FacebookTrigger.node.js", + "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", + "dist/nodes/Figma/FigmaTrigger.node.js", + "dist/nodes/FileMaker/FileMaker.node.js", + "dist/nodes/Filter/Filter.node.js", + "dist/nodes/Flow/Flow.node.js", + "dist/nodes/Flow/FlowTrigger.node.js", + "dist/nodes/Form/FormTrigger.node.js", + "dist/nodes/FormIo/FormIoTrigger.node.js", + "dist/nodes/Formstack/FormstackTrigger.node.js", + "dist/nodes/Freshdesk/Freshdesk.node.js", + "dist/nodes/Freshservice/Freshservice.node.js", + "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", + "dist/nodes/Ftp/Ftp.node.js", + "dist/nodes/Function/Function.node.js", + "dist/nodes/FunctionItem/FunctionItem.node.js", + "dist/nodes/GetResponse/GetResponse.node.js", + "dist/nodes/GetResponse/GetResponseTrigger.node.js", + "dist/nodes/Ghost/Ghost.node.js", + "dist/nodes/Git/Git.node.js", + "dist/nodes/Github/Github.node.js", + "dist/nodes/Github/GithubTrigger.node.js", + "dist/nodes/Gitlab/Gitlab.node.js", + "dist/nodes/Gitlab/GitlabTrigger.node.js", + "dist/nodes/Google/Ads/GoogleAds.node.js", + "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", + "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", + "dist/nodes/Google/Books/GoogleBooks.node.js", + "dist/nodes/Google/Calendar/GoogleCalendar.node.js", + "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", + "dist/nodes/Google/Chat/GoogleChat.node.js", + "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", + "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", + "dist/nodes/Google/Contacts/GoogleContacts.node.js", + "dist/nodes/Google/Docs/GoogleDocs.node.js", + "dist/nodes/Google/Drive/GoogleDrive.node.js", + "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", + "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", + "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", + "dist/nodes/Google/Gmail/Gmail.node.js", + "dist/nodes/Google/Gmail/GmailTrigger.node.js", + "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", + "dist/nodes/Google/Perspective/GooglePerspective.node.js", + "dist/nodes/Google/Sheet/GoogleSheets.node.js", + "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", + "dist/nodes/Google/Slides/GoogleSlides.node.js", + "dist/nodes/Google/Task/GoogleTasks.node.js", + "dist/nodes/Google/Translate/GoogleTranslate.node.js", + "dist/nodes/Google/YouTube/YouTube.node.js", + "dist/nodes/Gotify/Gotify.node.js", + "dist/nodes/GoToWebinar/GoToWebinar.node.js", + "dist/nodes/Grafana/Grafana.node.js", + "dist/nodes/GraphQL/GraphQL.node.js", + "dist/nodes/Grist/Grist.node.js", + "dist/nodes/Gumroad/GumroadTrigger.node.js", + "dist/nodes/HackerNews/HackerNews.node.js", + "dist/nodes/HaloPSA/HaloPSA.node.js", + "dist/nodes/Harvest/Harvest.node.js", + "dist/nodes/HelpScout/HelpScout.node.js", + "dist/nodes/HelpScout/HelpScoutTrigger.node.js", + "dist/nodes/HighLevel/HighLevel.node.js", + "dist/nodes/HomeAssistant/HomeAssistant.node.js", + "dist/nodes/HtmlExtract/HtmlExtract.node.js", + "dist/nodes/Html/Html.node.js", + "dist/nodes/HttpRequest/HttpRequest.node.js", + "dist/nodes/Hubspot/Hubspot.node.js", + "dist/nodes/Hubspot/HubspotTrigger.node.js", + "dist/nodes/HumanticAI/HumanticAi.node.js", + "dist/nodes/Hunter/Hunter.node.js", + "dist/nodes/ICalendar/ICalendar.node.js", + "dist/nodes/If/If.node.js", + "dist/nodes/Intercom/Intercom.node.js", + "dist/nodes/Interval/Interval.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", + "dist/nodes/ItemLists/ItemLists.node.js", + "dist/nodes/Iterable/Iterable.node.js", + "dist/nodes/Jenkins/Jenkins.node.js", + "dist/nodes/Jira/Jira.node.js", + "dist/nodes/Jira/JiraTrigger.node.js", + "dist/nodes/JotForm/JotFormTrigger.node.js", + "dist/nodes/Kafka/Kafka.node.js", + "dist/nodes/Kafka/KafkaTrigger.node.js", + "dist/nodes/Keap/Keap.node.js", + "dist/nodes/Keap/KeapTrigger.node.js", + "dist/nodes/Kitemaker/Kitemaker.node.js", + "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", + "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", + "dist/nodes/Ldap/Ldap.node.js", + "dist/nodes/Lemlist/Lemlist.node.js", + "dist/nodes/Lemlist/LemlistTrigger.node.js", + "dist/nodes/Line/Line.node.js", + "dist/nodes/Linear/Linear.node.js", + "dist/nodes/Linear/LinearTrigger.node.js", + "dist/nodes/LingvaNex/LingvaNex.node.js", + "dist/nodes/LinkedIn/LinkedIn.node.js", + "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", + "dist/nodes/LoneScale/LoneScaleTrigger.node.js", + "dist/nodes/LoneScale/LoneScale.node.js", + "dist/nodes/Magento/Magento2.node.js", + "dist/nodes/Mailcheck/Mailcheck.node.js", + "dist/nodes/Mailchimp/Mailchimp.node.js", + "dist/nodes/Mailchimp/MailchimpTrigger.node.js", + "dist/nodes/MailerLite/MailerLite.node.js", + "dist/nodes/MailerLite/MailerLiteTrigger.node.js", + "dist/nodes/Mailgun/Mailgun.node.js", + "dist/nodes/Mailjet/Mailjet.node.js", + "dist/nodes/Mailjet/MailjetTrigger.node.js", + "dist/nodes/Mandrill/Mandrill.node.js", + "dist/nodes/ManualTrigger/ManualTrigger.node.js", + "dist/nodes/Markdown/Markdown.node.js", + "dist/nodes/Marketstack/Marketstack.node.js", + "dist/nodes/Matrix/Matrix.node.js", + "dist/nodes/Mattermost/Mattermost.node.js", + "dist/nodes/Mautic/Mautic.node.js", + "dist/nodes/Mautic/MauticTrigger.node.js", + "dist/nodes/Medium/Medium.node.js", + "dist/nodes/Merge/Merge.node.js", + "dist/nodes/MessageBird/MessageBird.node.js", + "dist/nodes/Metabase/Metabase.node.js", + "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", + "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", + "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", + "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", + "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", + "dist/nodes/Mindee/Mindee.node.js", + "dist/nodes/Misp/Misp.node.js", + "dist/nodes/Mocean/Mocean.node.js", + "dist/nodes/MondayCom/MondayCom.node.js", + "dist/nodes/MongoDb/MongoDb.node.js", + "dist/nodes/MonicaCrm/MonicaCrm.node.js", + "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", + "dist/nodes/MQTT/Mqtt.node.js", + "dist/nodes/MQTT/MqttTrigger.node.js", + "dist/nodes/Msg91/Msg91.node.js", + "dist/nodes/MySql/MySql.node.js", + "dist/nodes/N8n/N8n.node.js", + "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", + "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", + "dist/nodes/N8nTrigger/N8nTrigger.node.js", + "dist/nodes/Nasa/Nasa.node.js", + "dist/nodes/Netlify/Netlify.node.js", + "dist/nodes/Netlify/NetlifyTrigger.node.js", + "dist/nodes/NextCloud/NextCloud.node.js", + "dist/nodes/NocoDB/NocoDB.node.js", + "dist/nodes/Brevo/Brevo.node.js", + "dist/nodes/Brevo/BrevoTrigger.node.js", + "dist/nodes/StickyNote/StickyNote.node.js", + "dist/nodes/NoOp/NoOp.node.js", + "dist/nodes/Onfleet/Onfleet.node.js", + "dist/nodes/Onfleet/OnfleetTrigger.node.js", + "dist/nodes/Notion/Notion.node.js", + "dist/nodes/Notion/NotionTrigger.node.js", + "dist/nodes/Npm/Npm.node.js", + "dist/nodes/Odoo/Odoo.node.js", + "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", + "dist/nodes/OpenAi/OpenAi.node.js", + "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", + "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", + "dist/nodes/Orbit/Orbit.node.js", + "dist/nodes/Oura/Oura.node.js", + "dist/nodes/Paddle/Paddle.node.js", + "dist/nodes/PagerDuty/PagerDuty.node.js", + "dist/nodes/PayPal/PayPal.node.js", + "dist/nodes/PayPal/PayPalTrigger.node.js", + "dist/nodes/Peekalink/Peekalink.node.js", + "dist/nodes/Phantombuster/Phantombuster.node.js", + "dist/nodes/PhilipsHue/PhilipsHue.node.js", + "dist/nodes/Pipedrive/Pipedrive.node.js", + "dist/nodes/Pipedrive/PipedriveTrigger.node.js", + "dist/nodes/Plivo/Plivo.node.js", + "dist/nodes/PostBin/PostBin.node.js", + "dist/nodes/Postgres/Postgres.node.js", + "dist/nodes/Postgres/PostgresTrigger.node.js", + "dist/nodes/PostHog/PostHog.node.js", + "dist/nodes/Postmark/PostmarkTrigger.node.js", + "dist/nodes/ProfitWell/ProfitWell.node.js", + "dist/nodes/Pushbullet/Pushbullet.node.js", + "dist/nodes/Pushcut/Pushcut.node.js", + "dist/nodes/Pushcut/PushcutTrigger.node.js", + "dist/nodes/Pushover/Pushover.node.js", + "dist/nodes/QuestDb/QuestDb.node.js", + "dist/nodes/QuickBase/QuickBase.node.js", + "dist/nodes/QuickBooks/QuickBooks.node.js", + "dist/nodes/QuickChart/QuickChart.node.js", + "dist/nodes/RabbitMQ/RabbitMQ.node.js", + "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", + "dist/nodes/Raindrop/Raindrop.node.js", + "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", + "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", + "dist/nodes/ReadPdf/ReadPDF.node.js", + "dist/nodes/Reddit/Reddit.node.js", + "dist/nodes/Redis/Redis.node.js", + "dist/nodes/Redis/RedisTrigger.node.js", + "dist/nodes/RenameKeys/RenameKeys.node.js", + "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", + "dist/nodes/Rocketchat/Rocketchat.node.js", + "dist/nodes/RssFeedRead/RssFeedRead.node.js", + "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", + "dist/nodes/Rundeck/Rundeck.node.js", + "dist/nodes/S3/S3.node.js", + "dist/nodes/Salesforce/Salesforce.node.js", + "dist/nodes/Salesmate/Salesmate.node.js", + "dist/nodes/Schedule/ScheduleTrigger.node.js", + "dist/nodes/SeaTable/SeaTable.node.js", + "dist/nodes/SeaTable/SeaTableTrigger.node.js", + "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", + "dist/nodes/Segment/Segment.node.js", + "dist/nodes/SendGrid/SendGrid.node.js", + "dist/nodes/Sendy/Sendy.node.js", + "dist/nodes/SentryIo/SentryIo.node.js", + "dist/nodes/ServiceNow/ServiceNow.node.js", + "dist/nodes/Set/Set.node.js", + "dist/nodes/Shopify/Shopify.node.js", + "dist/nodes/Shopify/ShopifyTrigger.node.js", + "dist/nodes/Signl4/Signl4.node.js", + "dist/nodes/Slack/Slack.node.js", + "dist/nodes/Sms77/Sms77.node.js", + "dist/nodes/Snowflake/Snowflake.node.js", + "dist/nodes/SplitInBatches/SplitInBatches.node.js", + "dist/nodes/Splunk/Splunk.node.js", + "dist/nodes/Spontit/Spontit.node.js", + "dist/nodes/Spotify/Spotify.node.js", + "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", + "dist/nodes/SseTrigger/SseTrigger.node.js", + "dist/nodes/Ssh/Ssh.node.js", + "dist/nodes/Stackby/Stackby.node.js", + "dist/nodes/Start/Start.node.js", + "dist/nodes/StopAndError/StopAndError.node.js", + "dist/nodes/Storyblok/Storyblok.node.js", + "dist/nodes/Strapi/Strapi.node.js", + "dist/nodes/Strava/Strava.node.js", + "dist/nodes/Strava/StravaTrigger.node.js", + "dist/nodes/Stripe/Stripe.node.js", + "dist/nodes/Stripe/StripeTrigger.node.js", + "dist/nodes/Supabase/Supabase.node.js", + "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", + "dist/nodes/Switch/Switch.node.js", + "dist/nodes/SyncroMSP/SyncroMsp.node.js", + "dist/nodes/Taiga/Taiga.node.js", + "dist/nodes/Taiga/TaigaTrigger.node.js", + "dist/nodes/Tapfiliate/Tapfiliate.node.js", + "dist/nodes/Telegram/Telegram.node.js", + "dist/nodes/Telegram/TelegramTrigger.node.js", + "dist/nodes/TheHiveProject/TheHiveProject.node.js", + "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", + "dist/nodes/TheHive/TheHive.node.js", + "dist/nodes/TheHive/TheHiveTrigger.node.js", + "dist/nodes/TimescaleDb/TimescaleDb.node.js", + "dist/nodes/Todoist/Todoist.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", + "dist/nodes/Totp/Totp.node.js", + "dist/nodes/TravisCi/TravisCi.node.js", + "dist/nodes/Trello/Trello.node.js", + "dist/nodes/Trello/TrelloTrigger.node.js", + "dist/nodes/Twake/Twake.node.js", + "dist/nodes/Twilio/Twilio.node.js", + "dist/nodes/Twist/Twist.node.js", + "dist/nodes/Twitter/Twitter.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", + "dist/nodes/Uplead/Uplead.node.js", + "dist/nodes/UProc/UProc.node.js", + "dist/nodes/UptimeRobot/UptimeRobot.node.js", + "dist/nodes/UrlScanIo/UrlScanIo.node.js", + "dist/nodes/Vero/Vero.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", + "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", + "dist/nodes/Vonage/Vonage.node.js", + "dist/nodes/Wait/Wait.node.js", + "dist/nodes/Webflow/Webflow.node.js", + "dist/nodes/Webflow/WebflowTrigger.node.js", + "dist/nodes/Webhook/Webhook.node.js", + "dist/nodes/Wekan/Wekan.node.js", + "dist/nodes/WhatsApp/WhatsApp.node.js", + "dist/nodes/Wise/Wise.node.js", + "dist/nodes/Wise/WiseTrigger.node.js", + "dist/nodes/WooCommerce/WooCommerce.node.js", + "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", + "dist/nodes/Wordpress/Wordpress.node.js", + "dist/nodes/Workable/WorkableTrigger.node.js", + "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", + "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", + "dist/nodes/Wufoo/WufooTrigger.node.js", + "dist/nodes/Xero/Xero.node.js", + "dist/nodes/Xml/Xml.node.js", + "dist/nodes/Yourls/Yourls.node.js", + "dist/nodes/Zammad/Zammad.node.js", + "dist/nodes/Zendesk/Zendesk.node.js", + "dist/nodes/Zendesk/ZendeskTrigger.node.js", + "dist/nodes/Zoho/ZohoCrm.node.js", + "dist/nodes/Zoom/Zoom.node.js", + "dist/nodes/Zulip/Zulip.node.js" + ] + }, + "devDependencies": { + "@types/amqplib": "^0.10.1", + "@types/aws4": "^1.5.1", + "@types/basic-auth": "^1.1.3", + "@types/cheerio": "^0.22.15", + "@types/cron": "~1.7.1", + "@types/eventsource": "^1.1.2", + "@types/express": "^4.17.6", + "@types/gm": "^1.25.0", + "@types/imap-simple": "^4.2.0", + "@types/js-nacl": "^1.3.0", + "@types/jsonwebtoken": "^9.0.1", + "@types/lodash": "^4.14.195", + "@types/lossless-json": "^1.0.0", + "@types/mailparser": "^2.7.3", + "@types/mime-types": "^2.1.0", + "@types/mssql": "^6.0.2", + "@types/node-ssh": "^7.0.1", + "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", + "@types/redis": "^2.8.11", + "@types/request-promise-native": "~1.0.15", + "@types/rfc2047": "^2.0.1", + "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.6.12", + "@types/ssh2-sftp-client": "^5.1.0", + "@types/tmp": "^0.2.0", + "@types/uuid": "^8.3.2", + "@types/xml2js": "^0.4.11", + "eslint-plugin-n8n-nodes-base": "^1.16.0", + "gulp": "^4.0.0", + "n8n-core": "1.14.1" + }, + "dependencies": { + "@kafkajs/confluent-schema-registry": "1.0.6", + "@n8n/vm2": "^3.9.20", + "amqplib": "^0.10.3", + "aws4": "^1.8.0", + "basic-auth": "^2.0.1", + "change-case": "^4.1.1", + "cheerio": "1.0.0-rc.6", + "chokidar": "3.5.2", + "cron": "~1.7.2", + "csv-parse": "^5.5.0", + "currency-codes": "^2.1.0", + "eventsource": "^2.0.2", + "fast-glob": "^3.2.5", + "fflate": "^0.7.0", + "get-system-fonts": "^2.0.2", + "gm": "^1.25.0", + "iconv-lite": "^0.6.2", + "ics": "^2.27.0", + "imap-simple": "^4.3.0", + "isbot": "^3.6.13", + "iso-639-1": "^2.1.3", + "js-nacl": "^1.4.0", + "jsonwebtoken": "^9.0.0", + "kafkajs": "^1.14.0", + "ldapts": "^4.2.6", + "lodash": "^4.17.21", + "lossless-json": "^1.0.4", + "luxon": "^3.3.0", + "mailparser": "^3.2.0", + "minifaker": "^1.34.1", + "moment": "~2.29.2", + "moment-timezone": "^0.5.28", + "mongodb": "^4.17.1", + "mqtt": "^5.0.2", + "mssql": "^8.1.2", + "mysql2": "~2.3.0", + "nanoid": "^3.3.6", + "node-html-markdown": "^1.1.3", + "node-ssh": "^12.0.0", + "nodemailer": "^6.7.1", + "otpauth": "^9.1.1", + "pdfjs-dist": "^2.16.105", + "pg": "^8.3.0", + "pg-promise": "^10.5.8", + "pretty-bytes": "^5.6.0", + "promise-ftp": "^1.3.5", + "pyodide": "^0.23.4", + "redis": "^3.1.1", + "rfc2047": "^4.0.1", + "rhea": "^1.0.11", + "rss-parser": "^3.7.0", + "semver": "^7.5.4", + "showdown": "^2.0.3", + "simple-git": "^3.17.0", + "snowflake-sdk": "^1.8.0", + "ssh2-sftp-client": "^7.0.0", + "tmp-promise": "^3.0.2", + "typedi": "^0.10.0", + "uuid": "^8.3.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "xml2js": "^0.5.0", + "n8n-workflow": "1.14.1" + }, + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc", + "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", + "build:translations": "gulp build:translations", + "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", + "format": "prettier --write . --ignore-path ../../.prettierignore", + "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", + "lintfix": "eslint . --fix", + "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", + "test": "jest" + } + } + }, + { + "nodeType": "Adalo", + "name": "Adalo", + "codeLength": 8234, + "codeHash": "0fbcb0b60141307fdc3394154af1b2c3133fa6181aac336249c6c211fd24846f", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Adalo/Adalo.node.js", + "extractedAt": "2025-06-08T10:57:57.330Z", + "sourceCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Adalo = void 0;\nconst CollectionDescription_1 = require(\"./CollectionDescription\");\nclass Adalo {\n constructor() {\n this.description = {\n displayName: 'Adalo',\n name: 'adalo',\n icon: 'file:adalo.svg',\n group: ['transform'],\n version: 1,\n subtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"collectionId\"]}}',\n description: 'Consume Adalo API',\n defaults: {\n name: 'Adalo',\n },\n inputs: ['main'],\n outputs: ['main'],\n credentials: [\n {\n name: 'adaloApi',\n required: true,\n },\n ],\n requestDefaults: {\n baseURL: '=https://api.adalo.com/v0/apps/{{$credentials.appId}}',\n },\n requestOperations: {\n pagination: {\n type: 'offset',\n properties: {\n limitParameter: 'limit',\n offsetParameter: 'offset',\n pageSize: 100,\n type: 'query',\n },\n },\n },\n properties: [\n {\n displayName: 'Resource',\n name: 'resource',\n type: 'options',\n noDataExpression: true,\n default: 'collection',\n options: [\n {\n name: 'Collection',\n value: 'collection',\n },\n ],\n },\n {\n displayName: 'Operation',\n name: 'operation',\n type: 'options',\n noDataExpression: true,\n options: [\n {\n name: 'Create',\n value: 'create',\n description: 'Create a row',\n routing: {\n send: {\n preSend: [this.presendCreateUpdate],\n },\n request: {\n method: 'POST',\n url: '=/collections/{{$parameter[\"collectionId\"]}}',\n },\n },\n action: 'Create a row',\n },\n {\n name: 'Delete',\n value: 'delete',\n description: 'Delete a row',\n routing: {\n request: {\n method: 'DELETE',\n url: '=/collections/{{$parameter[\"collectionId\"]}}/{{$parameter[\"rowId\"]}}',\n },\n output: {\n postReceive: [\n {\n type: 'set',\n properties: {\n value: '={{ { \"success\": true } }}',\n },\n },\n ],\n },\n },\n action: 'Delete a row',\n },\n {\n name: 'Get',\n value: 'get',\n description: 'Retrieve a row',\n routing: {\n request: {\n method: 'GET',\n url: '=/collections/{{$parameter[\"collectionId\"]}}/{{$parameter[\"rowId\"]}}',\n },\n },\n action: 'Retrieve a row',\n },\n {\n name: 'Get Many',\n value: 'getAll',\n description: 'Retrieve many rows',\n routing: {\n request: {\n method: 'GET',\n url: '=/collections/{{$parameter[\"collectionId\"]}}',\n qs: {\n limit: '={{$parameter[\"limit\"]}}',\n },\n },\n send: {\n paginate: '={{$parameter[\"returnAll\"]}}',\n },\n output: {\n postReceive: [\n {\n type: 'rootProperty',\n properties: {\n property: 'records',\n },\n },\n ],\n },\n },\n action: 'Retrieve all rows',\n },\n {\n name: 'Update',\n value: 'update',\n description: 'Update a row',\n routing: {\n send: {\n preSend: [this.presendCreateUpdate],\n },\n request: {\n method: 'PUT',\n url: '=/collections/{{$parameter[\"collectionId\"]}}/{{$parameter[\"rowId\"]}}',\n },\n },\n action: 'Update a row',\n },\n ],\n default: 'getAll',\n },\n {\n displayName: 'Collection ID',\n name: 'collectionId',\n type: 'string',\n required: true,\n default: '',\n description: 'Open your Adalo application and click on the three buttons beside the collection name, then select API Documentation',\n hint: \"You can find information about app's collections on https://app.adalo.com/apps/your-app-id/api-docs\",\n displayOptions: {\n show: {\n resource: ['collection'],\n },\n },\n },\n ...CollectionDescription_1.collectionFields,\n ],\n };\n }\n async presendCreateUpdate(requestOptions) {\n const dataToSend = this.getNodeParameter('dataToSend', 0);\n requestOptions.body = {};\n if (dataToSend === 'autoMapInputData') {\n const inputData = this.getInputData();\n const rawInputsToIgnore = this.getNodeParameter('inputsToIgnore');\n const inputKeysToIgnore = rawInputsToIgnore.split(',').map((c) => c.trim());\n const inputKeys = Object.keys(inputData.json).filter((key) => !inputKeysToIgnore.includes(key));\n for (const key of inputKeys) {\n requestOptions.body[key] = inputData.json[key];\n }\n }\n else {\n const fields = this.getNodeParameter('fieldsUi.fieldValues');\n for (const field of fields) {\n requestOptions.body[field.fieldId] = field.fieldValue;\n }\n }\n return requestOptions;\n }\n}\nexports.Adalo = Adalo;\n//# sourceMappingURL=Adalo.node.js.map", + "credentialCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AdaloApi = void 0;\nclass AdaloApi {\n constructor() {\n this.name = 'adaloApi';\n this.displayName = 'Adalo API';\n this.documentationUrl = 'adalo';\n this.properties = [\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n description: 'The Adalo API is available on paid Adalo plans, find more information here',\n },\n {\n displayName: 'App ID',\n name: 'appId',\n type: 'string',\n default: '',\n description: 'You can get App ID from the URL of your app. For example, if your app URL is https://app.adalo.com/apps/1234567890/screens, then your App ID is 1234567890.',\n },\n ];\n this.authenticate = {\n type: 'generic',\n properties: {\n headers: {\n Authorization: '=Bearer {{$credentials.apiKey}}',\n },\n },\n };\n }\n}\nexports.AdaloApi = AdaloApi;\n//# sourceMappingURL=AdaloApi.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AdaloApi = void 0;\nclass AdaloApi {\n constructor() {\n this.name = 'adaloApi';\n this.displayName = 'Adalo API';\n this.documentationUrl = 'adalo';\n this.properties = [\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n description: 'The Adalo API is available on paid Adalo plans, find more information here',\n },\n {\n displayName: 'App ID',\n name: 'appId',\n type: 'string',\n default: '',\n description: 'You can get App ID from the URL of your app. For example, if your app URL is https://app.adalo.com/apps/1234567890/screens, then your App ID is 1234567890.',\n },\n ];\n this.authenticate = {\n type: 'generic',\n properties: {\n headers: {\n Authorization: '=Bearer {{$credentials.apiKey}}',\n },\n },\n };\n }\n}\nexports.AdaloApi = AdaloApi;\n//# sourceMappingURL=AdaloApi.credentials.js.map", + "packageInfo": { + "name": "n8n-nodes-base", + "version": "1.14.1", + "description": "Base nodes of n8n", + "license": "SEE LICENSE IN LICENSE.md", + "homepage": "https://n8n.io", + "author": { + "name": "Jan Oberhauser", + "email": "jan@n8n.io" + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/n8n-io/n8n.git" + }, + "files": [ + "dist" + ], + "n8n": { + "credentials": [ + "dist/credentials/ActionNetworkApi.credentials.js", + "dist/credentials/ActiveCampaignApi.credentials.js", + "dist/credentials/AcuitySchedulingApi.credentials.js", + "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", + "dist/credentials/AdaloApi.credentials.js", + "dist/credentials/AffinityApi.credentials.js", + "dist/credentials/AgileCrmApi.credentials.js", + "dist/credentials/AirtableApi.credentials.js", + "dist/credentials/AirtableOAuth2Api.credentials.js", + "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", + "dist/credentials/Amqp.credentials.js", + "dist/credentials/ApiTemplateIoApi.credentials.js", + "dist/credentials/AsanaApi.credentials.js", + "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", + "dist/credentials/AutomizyApi.credentials.js", + "dist/credentials/AutopilotApi.credentials.js", + "dist/credentials/Aws.credentials.js", + "dist/credentials/BambooHrApi.credentials.js", + "dist/credentials/BannerbearApi.credentials.js", + "dist/credentials/BaserowApi.credentials.js", + "dist/credentials/BeeminderApi.credentials.js", + "dist/credentials/BitbucketApi.credentials.js", + "dist/credentials/BitlyApi.credentials.js", + "dist/credentials/BitlyOAuth2Api.credentials.js", + "dist/credentials/BitwardenApi.credentials.js", + "dist/credentials/BoxOAuth2Api.credentials.js", + "dist/credentials/BrandfetchApi.credentials.js", + "dist/credentials/BubbleApi.credentials.js", + "dist/credentials/CalApi.credentials.js", + "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", + "dist/credentials/ChargebeeApi.credentials.js", + "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", + "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", + "dist/credentials/CitrixAdcApi.credentials.js", + "dist/credentials/CloudflareApi.credentials.js", + "dist/credentials/ClearbitApi.credentials.js", + "dist/credentials/ClickUpApi.credentials.js", + "dist/credentials/ClickUpOAuth2Api.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/CockpitApi.credentials.js", + "dist/credentials/CodaApi.credentials.js", + "dist/credentials/ContentfulApi.credentials.js", + "dist/credentials/ConvertKitApi.credentials.js", + "dist/credentials/CopperApi.credentials.js", + "dist/credentials/CortexApi.credentials.js", + "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", + "dist/credentials/CrowdDevApi.credentials.js", + "dist/credentials/CustomerIoApi.credentials.js", + "dist/credentials/DeepLApi.credentials.js", + "dist/credentials/DemioApi.credentials.js", + "dist/credentials/DhlApi.credentials.js", + "dist/credentials/DiscourseApi.credentials.js", + "dist/credentials/DisqusApi.credentials.js", + "dist/credentials/DriftApi.credentials.js", + "dist/credentials/DriftOAuth2Api.credentials.js", + "dist/credentials/DropboxApi.credentials.js", + "dist/credentials/DropboxOAuth2Api.credentials.js", + "dist/credentials/DropcontactApi.credentials.js", + "dist/credentials/EgoiApi.credentials.js", + "dist/credentials/ElasticsearchApi.credentials.js", + "dist/credentials/ElasticSecurityApi.credentials.js", + "dist/credentials/EmeliaApi.credentials.js", + "dist/credentials/ERPNextApi.credentials.js", + "dist/credentials/EventbriteApi.credentials.js", + "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", + "dist/credentials/FacebookGraphApi.credentials.js", + "dist/credentials/FacebookGraphAppApi.credentials.js", + "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", + "dist/credentials/FigmaApi.credentials.js", + "dist/credentials/FileMaker.credentials.js", + "dist/credentials/FlowApi.credentials.js", + "dist/credentials/FormIoApi.credentials.js", + "dist/credentials/FormstackApi.credentials.js", + "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", + "dist/credentials/FreshdeskApi.credentials.js", + "dist/credentials/FreshserviceApi.credentials.js", + "dist/credentials/FreshworksCrmApi.credentials.js", + "dist/credentials/Ftp.credentials.js", + "dist/credentials/GetResponseApi.credentials.js", + "dist/credentials/GetResponseOAuth2Api.credentials.js", + "dist/credentials/GhostAdminApi.credentials.js", + "dist/credentials/GhostContentApi.credentials.js", + "dist/credentials/GithubApi.credentials.js", + "dist/credentials/GithubOAuth2Api.credentials.js", + "dist/credentials/GitlabApi.credentials.js", + "dist/credentials/GitlabOAuth2Api.credentials.js", + "dist/credentials/GitPassword.credentials.js", + "dist/credentials/GmailOAuth2Api.credentials.js", + "dist/credentials/GoogleAdsOAuth2Api.credentials.js", + "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", + "dist/credentials/GoogleApi.credentials.js", + "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", + "dist/credentials/GoogleBooksOAuth2Api.credentials.js", + "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", + "dist/credentials/GoogleContactsOAuth2Api.credentials.js", + "dist/credentials/GoogleDocsOAuth2Api.credentials.js", + "dist/credentials/GoogleDriveOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", + "dist/credentials/GoogleOAuth2Api.credentials.js", + "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", + "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", + "dist/credentials/GoogleTasksOAuth2Api.credentials.js", + "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", + "dist/credentials/GotifyApi.credentials.js", + "dist/credentials/GoToWebinarOAuth2Api.credentials.js", + "dist/credentials/GristApi.credentials.js", + "dist/credentials/GrafanaApi.credentials.js", + "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", + "dist/credentials/GumroadApi.credentials.js", + "dist/credentials/HaloPSAApi.credentials.js", + "dist/credentials/HarvestApi.credentials.js", + "dist/credentials/HarvestOAuth2Api.credentials.js", + "dist/credentials/HelpScoutOAuth2Api.credentials.js", + "dist/credentials/HighLevelApi.credentials.js", + "dist/credentials/HomeAssistantApi.credentials.js", + "dist/credentials/HttpBasicAuth.credentials.js", + "dist/credentials/HttpDigestAuth.credentials.js", + "dist/credentials/HttpHeaderAuth.credentials.js", + "dist/credentials/HttpCustomAuth.credentials.js", + "dist/credentials/HttpQueryAuth.credentials.js", + "dist/credentials/HubspotApi.credentials.js", + "dist/credentials/HubspotAppToken.credentials.js", + "dist/credentials/HubspotDeveloperApi.credentials.js", + "dist/credentials/HubspotOAuth2Api.credentials.js", + "dist/credentials/HumanticAiApi.credentials.js", + "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", + "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", + "dist/credentials/IntercomApi.credentials.js", + "dist/credentials/InvoiceNinjaApi.credentials.js", + "dist/credentials/IterableApi.credentials.js", + "dist/credentials/JenkinsApi.credentials.js", + "dist/credentials/JiraSoftwareCloudApi.credentials.js", + "dist/credentials/JiraSoftwareServerApi.credentials.js", + "dist/credentials/JotFormApi.credentials.js", + "dist/credentials/Kafka.credentials.js", + "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", + "dist/credentials/KitemakerApi.credentials.js", + "dist/credentials/KoBoToolboxApi.credentials.js", + "dist/credentials/Ldap.credentials.js", + "dist/credentials/LemlistApi.credentials.js", + "dist/credentials/LinearApi.credentials.js", + "dist/credentials/LinearOAuth2Api.credentials.js", + "dist/credentials/LineNotifyOAuth2Api.credentials.js", + "dist/credentials/LingvaNexApi.credentials.js", + "dist/credentials/LinkedInOAuth2Api.credentials.js", + "dist/credentials/LoneScaleApi.credentials.js", + "dist/credentials/Magento2Api.credentials.js", + "dist/credentials/MailcheckApi.credentials.js", + "dist/credentials/MailchimpApi.credentials.js", + "dist/credentials/MailchimpOAuth2Api.credentials.js", + "dist/credentials/MailerLiteApi.credentials.js", + "dist/credentials/MailgunApi.credentials.js", + "dist/credentials/MailjetEmailApi.credentials.js", + "dist/credentials/MailjetSmsApi.credentials.js", + "dist/credentials/MandrillApi.credentials.js", + "dist/credentials/MarketstackApi.credentials.js", + "dist/credentials/MatrixApi.credentials.js", + "dist/credentials/MattermostApi.credentials.js", + "dist/credentials/MauticApi.credentials.js", + "dist/credentials/MauticOAuth2Api.credentials.js", + "dist/credentials/MediumApi.credentials.js", + "dist/credentials/MediumOAuth2Api.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MessageBirdApi.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", + "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", + "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSql.credentials.js", + "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", + "dist/credentials/MindeeInvoiceApi.credentials.js", + "dist/credentials/MindeeReceiptApi.credentials.js", + "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", + "dist/credentials/MoceanApi.credentials.js", + "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", + "dist/credentials/MongoDb.credentials.js", + "dist/credentials/MonicaCrmApi.credentials.js", + "dist/credentials/Mqtt.credentials.js", + "dist/credentials/Msg91Api.credentials.js", + "dist/credentials/MySql.credentials.js", + "dist/credentials/N8nApi.credentials.js", + "dist/credentials/NasaApi.credentials.js", + "dist/credentials/NetlifyApi.credentials.js", + "dist/credentials/NextCloudApi.credentials.js", + "dist/credentials/NextCloudOAuth2Api.credentials.js", + "dist/credentials/NocoDb.credentials.js", + "dist/credentials/NocoDbApiToken.credentials.js", + "dist/credentials/NotionApi.credentials.js", + "dist/credentials/NotionOAuth2Api.credentials.js", + "dist/credentials/NpmApi.credentials.js", + "dist/credentials/OAuth1Api.credentials.js", + "dist/credentials/OAuth2Api.credentials.js", + "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", + "dist/credentials/OneSimpleApi.credentials.js", + "dist/credentials/OnfleetApi.credentials.js", + "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", + "dist/credentials/OpenWeatherMapApi.credentials.js", + "dist/credentials/OrbitApi.credentials.js", + "dist/credentials/OuraApi.credentials.js", + "dist/credentials/PaddleApi.credentials.js", + "dist/credentials/PagerDutyApi.credentials.js", + "dist/credentials/PagerDutyOAuth2Api.credentials.js", + "dist/credentials/PayPalApi.credentials.js", + "dist/credentials/PeekalinkApi.credentials.js", + "dist/credentials/PhantombusterApi.credentials.js", + "dist/credentials/PhilipsHueOAuth2Api.credentials.js", + "dist/credentials/PipedriveApi.credentials.js", + "dist/credentials/PipedriveOAuth2Api.credentials.js", + "dist/credentials/PlivoApi.credentials.js", + "dist/credentials/Postgres.credentials.js", + "dist/credentials/PostHogApi.credentials.js", + "dist/credentials/PostmarkApi.credentials.js", + "dist/credentials/ProfitWellApi.credentials.js", + "dist/credentials/PushbulletOAuth2Api.credentials.js", + "dist/credentials/PushcutApi.credentials.js", + "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", + "dist/credentials/QuestDb.credentials.js", + "dist/credentials/QuickBaseApi.credentials.js", + "dist/credentials/QuickBooksOAuth2Api.credentials.js", + "dist/credentials/RabbitMQ.credentials.js", + "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", + "dist/credentials/RedditOAuth2Api.credentials.js", + "dist/credentials/Redis.credentials.js", + "dist/credentials/RocketchatApi.credentials.js", + "dist/credentials/RundeckApi.credentials.js", + "dist/credentials/S3.credentials.js", + "dist/credentials/SalesforceJwtApi.credentials.js", + "dist/credentials/SalesforceOAuth2Api.credentials.js", + "dist/credentials/SalesmateApi.credentials.js", + "dist/credentials/SeaTableApi.credentials.js", + "dist/credentials/SecurityScorecardApi.credentials.js", + "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", + "dist/credentials/SendGridApi.credentials.js", + "dist/credentials/BrevoApi.credentials.js", + "dist/credentials/SendyApi.credentials.js", + "dist/credentials/SentryIoApi.credentials.js", + "dist/credentials/SentryIoOAuth2Api.credentials.js", + "dist/credentials/SentryIoServerApi.credentials.js", + "dist/credentials/ServiceNowOAuth2Api.credentials.js", + "dist/credentials/ServiceNowBasicApi.credentials.js", + "dist/credentials/Sftp.credentials.js", + "dist/credentials/ShopifyApi.credentials.js", + "dist/credentials/ShopifyAccessTokenApi.credentials.js", + "dist/credentials/ShopifyOAuth2Api.credentials.js", + "dist/credentials/Signl4Api.credentials.js", + "dist/credentials/SlackApi.credentials.js", + "dist/credentials/SlackOAuth2Api.credentials.js", + "dist/credentials/Sms77Api.credentials.js", + "dist/credentials/Smtp.credentials.js", + "dist/credentials/Snowflake.credentials.js", + "dist/credentials/SplunkApi.credentials.js", + "dist/credentials/SpontitApi.credentials.js", + "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", + "dist/credentials/SshPassword.credentials.js", + "dist/credentials/SshPrivateKey.credentials.js", + "dist/credentials/StackbyApi.credentials.js", + "dist/credentials/StoryblokContentApi.credentials.js", + "dist/credentials/StoryblokManagementApi.credentials.js", + "dist/credentials/StrapiApi.credentials.js", + "dist/credentials/StrapiTokenApi.credentials.js", + "dist/credentials/StravaOAuth2Api.credentials.js", + "dist/credentials/StripeApi.credentials.js", + "dist/credentials/SupabaseApi.credentials.js", + "dist/credentials/SurveyMonkeyApi.credentials.js", + "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", + "dist/credentials/SyncroMspApi.credentials.js", + "dist/credentials/TaigaApi.credentials.js", + "dist/credentials/TapfiliateApi.credentials.js", + "dist/credentials/TelegramApi.credentials.js", + "dist/credentials/TheHiveProjectApi.credentials.js", + "dist/credentials/TheHiveApi.credentials.js", + "dist/credentials/TimescaleDb.credentials.js", + "dist/credentials/TodoistApi.credentials.js", + "dist/credentials/TodoistOAuth2Api.credentials.js", + "dist/credentials/TogglApi.credentials.js", + "dist/credentials/TotpApi.credentials.js", + "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", + "dist/credentials/TrelloApi.credentials.js", + "dist/credentials/TwakeCloudApi.credentials.js", + "dist/credentials/TwakeServerApi.credentials.js", + "dist/credentials/TwilioApi.credentials.js", + "dist/credentials/TwistOAuth2Api.credentials.js", + "dist/credentials/TwitterOAuth1Api.credentials.js", + "dist/credentials/TwitterOAuth2Api.credentials.js", + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TypeformOAuth2Api.credentials.js", + "dist/credentials/UnleashedSoftwareApi.credentials.js", + "dist/credentials/UpleadApi.credentials.js", + "dist/credentials/UProcApi.credentials.js", + "dist/credentials/UptimeRobotApi.credentials.js", + "dist/credentials/UrlScanIoApi.credentials.js", + "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", + "dist/credentials/VonageApi.credentials.js", + "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", + "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", + "dist/credentials/WebflowApi.credentials.js", + "dist/credentials/WebflowOAuth2Api.credentials.js", + "dist/credentials/WekanApi.credentials.js", + "dist/credentials/WhatsAppApi.credentials.js", + "dist/credentials/WiseApi.credentials.js", + "dist/credentials/WooCommerceApi.credentials.js", + "dist/credentials/WordpressApi.credentials.js", + "dist/credentials/WorkableApi.credentials.js", + "dist/credentials/WufooApi.credentials.js", + "dist/credentials/XeroOAuth2Api.credentials.js", + "dist/credentials/YourlsApi.credentials.js", + "dist/credentials/YouTubeOAuth2Api.credentials.js", + "dist/credentials/ZammadBasicAuthApi.credentials.js", + "dist/credentials/ZammadTokenAuthApi.credentials.js", + "dist/credentials/ZendeskApi.credentials.js", + "dist/credentials/ZendeskOAuth2Api.credentials.js", + "dist/credentials/ZohoOAuth2Api.credentials.js", + "dist/credentials/ZoomApi.credentials.js", + "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", + "dist/credentials/ZulipApi.credentials.js" + ], + "nodes": [ + "dist/nodes/ActionNetwork/ActionNetwork.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", + "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", + "dist/nodes/Adalo/Adalo.node.js", + "dist/nodes/Affinity/Affinity.node.js", + "dist/nodes/Affinity/AffinityTrigger.node.js", + "dist/nodes/AgileCrm/AgileCrm.node.js", + "dist/nodes/Airtable/Airtable.node.js", + "dist/nodes/Airtable/AirtableTrigger.node.js", + "dist/nodes/Amqp/Amqp.node.js", + "dist/nodes/Amqp/AmqpTrigger.node.js", + "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", + "dist/nodes/Asana/Asana.node.js", + "dist/nodes/Asana/AsanaTrigger.node.js", + "dist/nodes/Automizy/Automizy.node.js", + "dist/nodes/Autopilot/Autopilot.node.js", + "dist/nodes/Autopilot/AutopilotTrigger.node.js", + "dist/nodes/Aws/AwsLambda.node.js", + "dist/nodes/Aws/AwsSns.node.js", + "dist/nodes/Aws/AwsSnsTrigger.node.js", + "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", + "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", + "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", + "dist/nodes/Aws/ELB/AwsElb.node.js", + "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", + "dist/nodes/Aws/S3/AwsS3.node.js", + "dist/nodes/Aws/SES/AwsSes.node.js", + "dist/nodes/Aws/SQS/AwsSqs.node.js", + "dist/nodes/Aws/Textract/AwsTextract.node.js", + "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", + "dist/nodes/BambooHr/BambooHr.node.js", + "dist/nodes/Bannerbear/Bannerbear.node.js", + "dist/nodes/Baserow/Baserow.node.js", + "dist/nodes/Beeminder/Beeminder.node.js", + "dist/nodes/Bitbucket/BitbucketTrigger.node.js", + "dist/nodes/Bitly/Bitly.node.js", + "dist/nodes/Bitwarden/Bitwarden.node.js", + "dist/nodes/Box/Box.node.js", + "dist/nodes/Box/BoxTrigger.node.js", + "dist/nodes/Brandfetch/Brandfetch.node.js", + "dist/nodes/Bubble/Bubble.node.js", + "dist/nodes/Cal/CalTrigger.node.js", + "dist/nodes/Calendly/CalendlyTrigger.node.js", + "dist/nodes/Chargebee/Chargebee.node.js", + "dist/nodes/Chargebee/ChargebeeTrigger.node.js", + "dist/nodes/CircleCi/CircleCi.node.js", + "dist/nodes/Cisco/Webex/CiscoWebex.node.js", + "dist/nodes/Citrix/ADC/CitrixAdc.node.js", + "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", + "dist/nodes/Cloudflare/Cloudflare.node.js", + "dist/nodes/Clearbit/Clearbit.node.js", + "dist/nodes/ClickUp/ClickUp.node.js", + "dist/nodes/ClickUp/ClickUpTrigger.node.js", + "dist/nodes/Clockify/Clockify.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Cockpit/Cockpit.node.js", + "dist/nodes/Coda/Coda.node.js", + "dist/nodes/Code/Code.node.js", + "dist/nodes/CoinGecko/CoinGecko.node.js", + "dist/nodes/CompareDatasets/CompareDatasets.node.js", + "dist/nodes/Compression/Compression.node.js", + "dist/nodes/Contentful/Contentful.node.js", + "dist/nodes/ConvertKit/ConvertKit.node.js", + "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", + "dist/nodes/Copper/Copper.node.js", + "dist/nodes/Copper/CopperTrigger.node.js", + "dist/nodes/Cortex/Cortex.node.js", + "dist/nodes/CrateDb/CrateDb.node.js", + "dist/nodes/Cron/Cron.node.js", + "dist/nodes/CrowdDev/CrowdDev.node.js", + "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", + "dist/nodes/Crypto/Crypto.node.js", + "dist/nodes/CustomerIo/CustomerIo.node.js", + "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", + "dist/nodes/DateTime/DateTime.node.js", + "dist/nodes/DebugHelper/DebugHelper.node.js", + "dist/nodes/DeepL/DeepL.node.js", + "dist/nodes/Demio/Demio.node.js", + "dist/nodes/Dhl/Dhl.node.js", + "dist/nodes/Discord/Discord.node.js", + "dist/nodes/Discourse/Discourse.node.js", + "dist/nodes/Disqus/Disqus.node.js", + "dist/nodes/Drift/Drift.node.js", + "dist/nodes/Dropbox/Dropbox.node.js", + "dist/nodes/Dropcontact/Dropcontact.node.js", + "dist/nodes/EditImage/EditImage.node.js", + "dist/nodes/E2eTest/E2eTest.node.js", + "dist/nodes/Egoi/Egoi.node.js", + "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", + "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", + "dist/nodes/EmailReadImap/EmailReadImap.node.js", + "dist/nodes/EmailSend/EmailSend.node.js", + "dist/nodes/Emelia/Emelia.node.js", + "dist/nodes/Emelia/EmeliaTrigger.node.js", + "dist/nodes/ERPNext/ERPNext.node.js", + "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", + "dist/nodes/Eventbrite/EventbriteTrigger.node.js", + "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", + "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", + "dist/nodes/ExecutionData/ExecutionData.node.js", + "dist/nodes/Facebook/FacebookGraphApi.node.js", + "dist/nodes/Facebook/FacebookTrigger.node.js", + "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", + "dist/nodes/Figma/FigmaTrigger.node.js", + "dist/nodes/FileMaker/FileMaker.node.js", + "dist/nodes/Filter/Filter.node.js", + "dist/nodes/Flow/Flow.node.js", + "dist/nodes/Flow/FlowTrigger.node.js", + "dist/nodes/Form/FormTrigger.node.js", + "dist/nodes/FormIo/FormIoTrigger.node.js", + "dist/nodes/Formstack/FormstackTrigger.node.js", + "dist/nodes/Freshdesk/Freshdesk.node.js", + "dist/nodes/Freshservice/Freshservice.node.js", + "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", + "dist/nodes/Ftp/Ftp.node.js", + "dist/nodes/Function/Function.node.js", + "dist/nodes/FunctionItem/FunctionItem.node.js", + "dist/nodes/GetResponse/GetResponse.node.js", + "dist/nodes/GetResponse/GetResponseTrigger.node.js", + "dist/nodes/Ghost/Ghost.node.js", + "dist/nodes/Git/Git.node.js", + "dist/nodes/Github/Github.node.js", + "dist/nodes/Github/GithubTrigger.node.js", + "dist/nodes/Gitlab/Gitlab.node.js", + "dist/nodes/Gitlab/GitlabTrigger.node.js", + "dist/nodes/Google/Ads/GoogleAds.node.js", + "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", + "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", + "dist/nodes/Google/Books/GoogleBooks.node.js", + "dist/nodes/Google/Calendar/GoogleCalendar.node.js", + "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", + "dist/nodes/Google/Chat/GoogleChat.node.js", + "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", + "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", + "dist/nodes/Google/Contacts/GoogleContacts.node.js", + "dist/nodes/Google/Docs/GoogleDocs.node.js", + "dist/nodes/Google/Drive/GoogleDrive.node.js", + "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", + "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", + "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", + "dist/nodes/Google/Gmail/Gmail.node.js", + "dist/nodes/Google/Gmail/GmailTrigger.node.js", + "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", + "dist/nodes/Google/Perspective/GooglePerspective.node.js", + "dist/nodes/Google/Sheet/GoogleSheets.node.js", + "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", + "dist/nodes/Google/Slides/GoogleSlides.node.js", + "dist/nodes/Google/Task/GoogleTasks.node.js", + "dist/nodes/Google/Translate/GoogleTranslate.node.js", + "dist/nodes/Google/YouTube/YouTube.node.js", + "dist/nodes/Gotify/Gotify.node.js", + "dist/nodes/GoToWebinar/GoToWebinar.node.js", + "dist/nodes/Grafana/Grafana.node.js", + "dist/nodes/GraphQL/GraphQL.node.js", + "dist/nodes/Grist/Grist.node.js", + "dist/nodes/Gumroad/GumroadTrigger.node.js", + "dist/nodes/HackerNews/HackerNews.node.js", + "dist/nodes/HaloPSA/HaloPSA.node.js", + "dist/nodes/Harvest/Harvest.node.js", + "dist/nodes/HelpScout/HelpScout.node.js", + "dist/nodes/HelpScout/HelpScoutTrigger.node.js", + "dist/nodes/HighLevel/HighLevel.node.js", + "dist/nodes/HomeAssistant/HomeAssistant.node.js", + "dist/nodes/HtmlExtract/HtmlExtract.node.js", + "dist/nodes/Html/Html.node.js", + "dist/nodes/HttpRequest/HttpRequest.node.js", + "dist/nodes/Hubspot/Hubspot.node.js", + "dist/nodes/Hubspot/HubspotTrigger.node.js", + "dist/nodes/HumanticAI/HumanticAi.node.js", + "dist/nodes/Hunter/Hunter.node.js", + "dist/nodes/ICalendar/ICalendar.node.js", + "dist/nodes/If/If.node.js", + "dist/nodes/Intercom/Intercom.node.js", + "dist/nodes/Interval/Interval.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", + "dist/nodes/ItemLists/ItemLists.node.js", + "dist/nodes/Iterable/Iterable.node.js", + "dist/nodes/Jenkins/Jenkins.node.js", + "dist/nodes/Jira/Jira.node.js", + "dist/nodes/Jira/JiraTrigger.node.js", + "dist/nodes/JotForm/JotFormTrigger.node.js", + "dist/nodes/Kafka/Kafka.node.js", + "dist/nodes/Kafka/KafkaTrigger.node.js", + "dist/nodes/Keap/Keap.node.js", + "dist/nodes/Keap/KeapTrigger.node.js", + "dist/nodes/Kitemaker/Kitemaker.node.js", + "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", + "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", + "dist/nodes/Ldap/Ldap.node.js", + "dist/nodes/Lemlist/Lemlist.node.js", + "dist/nodes/Lemlist/LemlistTrigger.node.js", + "dist/nodes/Line/Line.node.js", + "dist/nodes/Linear/Linear.node.js", + "dist/nodes/Linear/LinearTrigger.node.js", + "dist/nodes/LingvaNex/LingvaNex.node.js", + "dist/nodes/LinkedIn/LinkedIn.node.js", + "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", + "dist/nodes/LoneScale/LoneScaleTrigger.node.js", + "dist/nodes/LoneScale/LoneScale.node.js", + "dist/nodes/Magento/Magento2.node.js", + "dist/nodes/Mailcheck/Mailcheck.node.js", + "dist/nodes/Mailchimp/Mailchimp.node.js", + "dist/nodes/Mailchimp/MailchimpTrigger.node.js", + "dist/nodes/MailerLite/MailerLite.node.js", + "dist/nodes/MailerLite/MailerLiteTrigger.node.js", + "dist/nodes/Mailgun/Mailgun.node.js", + "dist/nodes/Mailjet/Mailjet.node.js", + "dist/nodes/Mailjet/MailjetTrigger.node.js", + "dist/nodes/Mandrill/Mandrill.node.js", + "dist/nodes/ManualTrigger/ManualTrigger.node.js", + "dist/nodes/Markdown/Markdown.node.js", + "dist/nodes/Marketstack/Marketstack.node.js", + "dist/nodes/Matrix/Matrix.node.js", + "dist/nodes/Mattermost/Mattermost.node.js", + "dist/nodes/Mautic/Mautic.node.js", + "dist/nodes/Mautic/MauticTrigger.node.js", + "dist/nodes/Medium/Medium.node.js", + "dist/nodes/Merge/Merge.node.js", + "dist/nodes/MessageBird/MessageBird.node.js", + "dist/nodes/Metabase/Metabase.node.js", + "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", + "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", + "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", + "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", + "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", + "dist/nodes/Mindee/Mindee.node.js", + "dist/nodes/Misp/Misp.node.js", + "dist/nodes/Mocean/Mocean.node.js", + "dist/nodes/MondayCom/MondayCom.node.js", + "dist/nodes/MongoDb/MongoDb.node.js", + "dist/nodes/MonicaCrm/MonicaCrm.node.js", + "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", + "dist/nodes/MQTT/Mqtt.node.js", + "dist/nodes/MQTT/MqttTrigger.node.js", + "dist/nodes/Msg91/Msg91.node.js", + "dist/nodes/MySql/MySql.node.js", + "dist/nodes/N8n/N8n.node.js", + "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", + "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", + "dist/nodes/N8nTrigger/N8nTrigger.node.js", + "dist/nodes/Nasa/Nasa.node.js", + "dist/nodes/Netlify/Netlify.node.js", + "dist/nodes/Netlify/NetlifyTrigger.node.js", + "dist/nodes/NextCloud/NextCloud.node.js", + "dist/nodes/NocoDB/NocoDB.node.js", + "dist/nodes/Brevo/Brevo.node.js", + "dist/nodes/Brevo/BrevoTrigger.node.js", + "dist/nodes/StickyNote/StickyNote.node.js", + "dist/nodes/NoOp/NoOp.node.js", + "dist/nodes/Onfleet/Onfleet.node.js", + "dist/nodes/Onfleet/OnfleetTrigger.node.js", + "dist/nodes/Notion/Notion.node.js", + "dist/nodes/Notion/NotionTrigger.node.js", + "dist/nodes/Npm/Npm.node.js", + "dist/nodes/Odoo/Odoo.node.js", + "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", + "dist/nodes/OpenAi/OpenAi.node.js", + "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", + "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", + "dist/nodes/Orbit/Orbit.node.js", + "dist/nodes/Oura/Oura.node.js", + "dist/nodes/Paddle/Paddle.node.js", + "dist/nodes/PagerDuty/PagerDuty.node.js", + "dist/nodes/PayPal/PayPal.node.js", + "dist/nodes/PayPal/PayPalTrigger.node.js", + "dist/nodes/Peekalink/Peekalink.node.js", + "dist/nodes/Phantombuster/Phantombuster.node.js", + "dist/nodes/PhilipsHue/PhilipsHue.node.js", + "dist/nodes/Pipedrive/Pipedrive.node.js", + "dist/nodes/Pipedrive/PipedriveTrigger.node.js", + "dist/nodes/Plivo/Plivo.node.js", + "dist/nodes/PostBin/PostBin.node.js", + "dist/nodes/Postgres/Postgres.node.js", + "dist/nodes/Postgres/PostgresTrigger.node.js", + "dist/nodes/PostHog/PostHog.node.js", + "dist/nodes/Postmark/PostmarkTrigger.node.js", + "dist/nodes/ProfitWell/ProfitWell.node.js", + "dist/nodes/Pushbullet/Pushbullet.node.js", + "dist/nodes/Pushcut/Pushcut.node.js", + "dist/nodes/Pushcut/PushcutTrigger.node.js", + "dist/nodes/Pushover/Pushover.node.js", + "dist/nodes/QuestDb/QuestDb.node.js", + "dist/nodes/QuickBase/QuickBase.node.js", + "dist/nodes/QuickBooks/QuickBooks.node.js", + "dist/nodes/QuickChart/QuickChart.node.js", + "dist/nodes/RabbitMQ/RabbitMQ.node.js", + "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", + "dist/nodes/Raindrop/Raindrop.node.js", + "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", + "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", + "dist/nodes/ReadPdf/ReadPDF.node.js", + "dist/nodes/Reddit/Reddit.node.js", + "dist/nodes/Redis/Redis.node.js", + "dist/nodes/Redis/RedisTrigger.node.js", + "dist/nodes/RenameKeys/RenameKeys.node.js", + "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", + "dist/nodes/Rocketchat/Rocketchat.node.js", + "dist/nodes/RssFeedRead/RssFeedRead.node.js", + "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", + "dist/nodes/Rundeck/Rundeck.node.js", + "dist/nodes/S3/S3.node.js", + "dist/nodes/Salesforce/Salesforce.node.js", + "dist/nodes/Salesmate/Salesmate.node.js", + "dist/nodes/Schedule/ScheduleTrigger.node.js", + "dist/nodes/SeaTable/SeaTable.node.js", + "dist/nodes/SeaTable/SeaTableTrigger.node.js", + "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", + "dist/nodes/Segment/Segment.node.js", + "dist/nodes/SendGrid/SendGrid.node.js", + "dist/nodes/Sendy/Sendy.node.js", + "dist/nodes/SentryIo/SentryIo.node.js", + "dist/nodes/ServiceNow/ServiceNow.node.js", + "dist/nodes/Set/Set.node.js", + "dist/nodes/Shopify/Shopify.node.js", + "dist/nodes/Shopify/ShopifyTrigger.node.js", + "dist/nodes/Signl4/Signl4.node.js", + "dist/nodes/Slack/Slack.node.js", + "dist/nodes/Sms77/Sms77.node.js", + "dist/nodes/Snowflake/Snowflake.node.js", + "dist/nodes/SplitInBatches/SplitInBatches.node.js", + "dist/nodes/Splunk/Splunk.node.js", + "dist/nodes/Spontit/Spontit.node.js", + "dist/nodes/Spotify/Spotify.node.js", + "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", + "dist/nodes/SseTrigger/SseTrigger.node.js", + "dist/nodes/Ssh/Ssh.node.js", + "dist/nodes/Stackby/Stackby.node.js", + "dist/nodes/Start/Start.node.js", + "dist/nodes/StopAndError/StopAndError.node.js", + "dist/nodes/Storyblok/Storyblok.node.js", + "dist/nodes/Strapi/Strapi.node.js", + "dist/nodes/Strava/Strava.node.js", + "dist/nodes/Strava/StravaTrigger.node.js", + "dist/nodes/Stripe/Stripe.node.js", + "dist/nodes/Stripe/StripeTrigger.node.js", + "dist/nodes/Supabase/Supabase.node.js", + "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", + "dist/nodes/Switch/Switch.node.js", + "dist/nodes/SyncroMSP/SyncroMsp.node.js", + "dist/nodes/Taiga/Taiga.node.js", + "dist/nodes/Taiga/TaigaTrigger.node.js", + "dist/nodes/Tapfiliate/Tapfiliate.node.js", + "dist/nodes/Telegram/Telegram.node.js", + "dist/nodes/Telegram/TelegramTrigger.node.js", + "dist/nodes/TheHiveProject/TheHiveProject.node.js", + "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", + "dist/nodes/TheHive/TheHive.node.js", + "dist/nodes/TheHive/TheHiveTrigger.node.js", + "dist/nodes/TimescaleDb/TimescaleDb.node.js", + "dist/nodes/Todoist/Todoist.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", + "dist/nodes/Totp/Totp.node.js", + "dist/nodes/TravisCi/TravisCi.node.js", + "dist/nodes/Trello/Trello.node.js", + "dist/nodes/Trello/TrelloTrigger.node.js", + "dist/nodes/Twake/Twake.node.js", + "dist/nodes/Twilio/Twilio.node.js", + "dist/nodes/Twist/Twist.node.js", + "dist/nodes/Twitter/Twitter.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", + "dist/nodes/Uplead/Uplead.node.js", + "dist/nodes/UProc/UProc.node.js", + "dist/nodes/UptimeRobot/UptimeRobot.node.js", + "dist/nodes/UrlScanIo/UrlScanIo.node.js", + "dist/nodes/Vero/Vero.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", + "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", + "dist/nodes/Vonage/Vonage.node.js", + "dist/nodes/Wait/Wait.node.js", + "dist/nodes/Webflow/Webflow.node.js", + "dist/nodes/Webflow/WebflowTrigger.node.js", + "dist/nodes/Webhook/Webhook.node.js", + "dist/nodes/Wekan/Wekan.node.js", + "dist/nodes/WhatsApp/WhatsApp.node.js", + "dist/nodes/Wise/Wise.node.js", + "dist/nodes/Wise/WiseTrigger.node.js", + "dist/nodes/WooCommerce/WooCommerce.node.js", + "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", + "dist/nodes/Wordpress/Wordpress.node.js", + "dist/nodes/Workable/WorkableTrigger.node.js", + "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", + "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", + "dist/nodes/Wufoo/WufooTrigger.node.js", + "dist/nodes/Xero/Xero.node.js", + "dist/nodes/Xml/Xml.node.js", + "dist/nodes/Yourls/Yourls.node.js", + "dist/nodes/Zammad/Zammad.node.js", + "dist/nodes/Zendesk/Zendesk.node.js", + "dist/nodes/Zendesk/ZendeskTrigger.node.js", + "dist/nodes/Zoho/ZohoCrm.node.js", + "dist/nodes/Zoom/Zoom.node.js", + "dist/nodes/Zulip/Zulip.node.js" + ] + }, + "devDependencies": { + "@types/amqplib": "^0.10.1", + "@types/aws4": "^1.5.1", + "@types/basic-auth": "^1.1.3", + "@types/cheerio": "^0.22.15", + "@types/cron": "~1.7.1", + "@types/eventsource": "^1.1.2", + "@types/express": "^4.17.6", + "@types/gm": "^1.25.0", + "@types/imap-simple": "^4.2.0", + "@types/js-nacl": "^1.3.0", + "@types/jsonwebtoken": "^9.0.1", + "@types/lodash": "^4.14.195", + "@types/lossless-json": "^1.0.0", + "@types/mailparser": "^2.7.3", + "@types/mime-types": "^2.1.0", + "@types/mssql": "^6.0.2", + "@types/node-ssh": "^7.0.1", + "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", + "@types/redis": "^2.8.11", + "@types/request-promise-native": "~1.0.15", + "@types/rfc2047": "^2.0.1", + "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.6.12", + "@types/ssh2-sftp-client": "^5.1.0", + "@types/tmp": "^0.2.0", + "@types/uuid": "^8.3.2", + "@types/xml2js": "^0.4.11", + "eslint-plugin-n8n-nodes-base": "^1.16.0", + "gulp": "^4.0.0", + "n8n-core": "1.14.1" + }, + "dependencies": { + "@kafkajs/confluent-schema-registry": "1.0.6", + "@n8n/vm2": "^3.9.20", + "amqplib": "^0.10.3", + "aws4": "^1.8.0", + "basic-auth": "^2.0.1", + "change-case": "^4.1.1", + "cheerio": "1.0.0-rc.6", + "chokidar": "3.5.2", + "cron": "~1.7.2", + "csv-parse": "^5.5.0", + "currency-codes": "^2.1.0", + "eventsource": "^2.0.2", + "fast-glob": "^3.2.5", + "fflate": "^0.7.0", + "get-system-fonts": "^2.0.2", + "gm": "^1.25.0", + "iconv-lite": "^0.6.2", + "ics": "^2.27.0", + "imap-simple": "^4.3.0", + "isbot": "^3.6.13", + "iso-639-1": "^2.1.3", + "js-nacl": "^1.4.0", + "jsonwebtoken": "^9.0.0", + "kafkajs": "^1.14.0", + "ldapts": "^4.2.6", + "lodash": "^4.17.21", + "lossless-json": "^1.0.4", + "luxon": "^3.3.0", + "mailparser": "^3.2.0", + "minifaker": "^1.34.1", + "moment": "~2.29.2", + "moment-timezone": "^0.5.28", + "mongodb": "^4.17.1", + "mqtt": "^5.0.2", + "mssql": "^8.1.2", + "mysql2": "~2.3.0", + "nanoid": "^3.3.6", + "node-html-markdown": "^1.1.3", + "node-ssh": "^12.0.0", + "nodemailer": "^6.7.1", + "otpauth": "^9.1.1", + "pdfjs-dist": "^2.16.105", + "pg": "^8.3.0", + "pg-promise": "^10.5.8", + "pretty-bytes": "^5.6.0", + "promise-ftp": "^1.3.5", + "pyodide": "^0.23.4", + "redis": "^3.1.1", + "rfc2047": "^4.0.1", + "rhea": "^1.0.11", + "rss-parser": "^3.7.0", + "semver": "^7.5.4", + "showdown": "^2.0.3", + "simple-git": "^3.17.0", + "snowflake-sdk": "^1.8.0", + "ssh2-sftp-client": "^7.0.0", + "tmp-promise": "^3.0.2", + "typedi": "^0.10.0", + "uuid": "^8.3.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "xml2js": "^0.5.0", + "n8n-workflow": "1.14.1" + }, + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc", + "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", + "build:translations": "gulp build:translations", + "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", + "format": "prettier --write . --ignore-path ../../.prettierignore", + "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", + "lintfix": "eslint . --fix", + "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", + "test": "jest" + } + } + }, + { + "nodeType": "Affinity", + "name": "Affinity", + "codeLength": 16217, + "codeHash": "e605ea187767403dfa55cd374690f7df563a0baa7ca6991d86d522dc101a2846", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Affinity/Affinity.node.js", + "extractedAt": "2025-06-08T10:57:57.343Z", + "sourceCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Affinity = void 0;\nconst GenericFunctions_1 = require(\"./GenericFunctions\");\nconst OrganizationDescription_1 = require(\"./OrganizationDescription\");\nconst PersonDescription_1 = require(\"./PersonDescription\");\nconst ListDescription_1 = require(\"./ListDescription\");\nconst ListEntryDescription_1 = require(\"./ListEntryDescription\");\nclass Affinity {\n constructor() {\n this.description = {\n displayName: 'Affinity',\n name: 'affinity',\n icon: 'file:affinity.png',\n group: ['output'],\n version: 1,\n subtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n description: 'Consume Affinity API',\n defaults: {\n name: 'Affinity',\n },\n inputs: ['main'],\n outputs: ['main'],\n credentials: [\n {\n name: 'affinityApi',\n required: true,\n },\n ],\n properties: [\n {\n displayName: 'Resource',\n name: 'resource',\n type: 'options',\n noDataExpression: true,\n options: [\n {\n name: 'List',\n value: 'list',\n },\n {\n name: 'List Entry',\n value: 'listEntry',\n },\n {\n name: 'Organization',\n value: 'organization',\n },\n {\n name: 'Person',\n value: 'person',\n },\n ],\n default: 'organization',\n },\n ...ListDescription_1.listOperations,\n ...ListDescription_1.listFields,\n ...ListEntryDescription_1.listEntryOperations,\n ...ListEntryDescription_1.listEntryFields,\n ...OrganizationDescription_1.organizationOperations,\n ...OrganizationDescription_1.organizationFields,\n ...PersonDescription_1.personOperations,\n ...PersonDescription_1.personFields,\n ],\n };\n this.methods = {\n loadOptions: {\n async getOrganizations() {\n const returnData = [];\n const organizations = await GenericFunctions_1.affinityApiRequestAllItems.call(this, 'organizations', 'GET', '/organizations', {});\n for (const organization of organizations) {\n const organizationName = organization.name;\n const organizationId = organization.id;\n returnData.push({\n name: organizationName,\n value: organizationId,\n });\n }\n return returnData;\n },\n async getPersons() {\n const returnData = [];\n const persons = await GenericFunctions_1.affinityApiRequestAllItems.call(this, 'persons', 'GET', '/persons', {});\n for (const person of persons) {\n let personName = `${person.first_name} ${person.last_name}`;\n if (person.primary_email !== null) {\n personName += ` (${person.primary_email})`;\n }\n const personId = person.id;\n returnData.push({\n name: personName,\n value: personId,\n });\n }\n return returnData;\n },\n async getLists() {\n const returnData = [];\n const lists = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', '/lists');\n for (const list of lists) {\n returnData.push({\n name: list.name,\n value: list.id,\n });\n }\n return returnData;\n },\n },\n };\n }\n async execute() {\n const items = this.getInputData();\n const returnData = [];\n const length = items.length;\n let responseData;\n const qs = {};\n const resource = this.getNodeParameter('resource', 0);\n const operation = this.getNodeParameter('operation', 0);\n for (let i = 0; i < length; i++) {\n try {\n if (resource === 'list') {\n if (operation === 'get') {\n const listId = this.getNodeParameter('listId', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', `/lists/${listId}`, {}, qs);\n }\n if (operation === 'getAll') {\n const returnAll = this.getNodeParameter('returnAll', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', '/lists', {}, qs);\n if (!returnAll) {\n const limit = this.getNodeParameter('limit', i);\n responseData = responseData.splice(0, limit);\n }\n }\n }\n if (resource === 'listEntry') {\n if (operation === 'create') {\n const listId = this.getNodeParameter('listId', i);\n const entityId = this.getNodeParameter('entityId', i);\n const additionalFields = this.getNodeParameter('additionalFields', i);\n const body = {\n entity_id: parseInt(entityId, 10),\n };\n Object.assign(body, additionalFields);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'POST', `/lists/${listId}/list-entries`, body);\n }\n if (operation === 'get') {\n const listId = this.getNodeParameter('listId', i);\n const listEntryId = this.getNodeParameter('listEntryId', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', `/lists/${listId}/list-entries/${listEntryId}`, {}, qs);\n }\n if (operation === 'getAll') {\n const returnAll = this.getNodeParameter('returnAll', i);\n const listId = this.getNodeParameter('listId', i);\n if (returnAll) {\n responseData = await GenericFunctions_1.affinityApiRequestAllItems.call(this, 'list_entries', 'GET', `/lists/${listId}/list-entries`, {}, qs);\n }\n else {\n qs.page_size = this.getNodeParameter('limit', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', `/lists/${listId}/list-entries`, {}, qs);\n responseData = responseData.list_entries;\n }\n }\n if (operation === 'delete') {\n const listId = this.getNodeParameter('listId', i);\n const listEntryId = this.getNodeParameter('listEntryId', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'DELETE', `/lists/${listId}/list-entries/${listEntryId}`, {}, qs);\n }\n }\n if (resource === 'person') {\n if (operation === 'create') {\n const firstName = this.getNodeParameter('firstName', i);\n const lastName = this.getNodeParameter('lastName', i);\n const emails = this.getNodeParameter('emails', i);\n const additionalFields = this.getNodeParameter('additionalFields', i);\n const body = {\n first_name: firstName,\n last_name: lastName,\n emails,\n };\n if (additionalFields.organizations) {\n body.organization_ids = additionalFields.organizations;\n }\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'POST', '/persons', body);\n }\n if (operation === 'update') {\n const personId = this.getNodeParameter('personId', i);\n const updateFields = this.getNodeParameter('updateFields', i);\n const emails = this.getNodeParameter('emails', i);\n const body = {\n emails,\n };\n if (updateFields.firstName) {\n body.first_name = updateFields.firstName;\n }\n if (updateFields.lastName) {\n body.last_name = updateFields.lastName;\n }\n if (updateFields.organizations) {\n body.organization_ids = updateFields.organizations;\n }\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'PUT', `/persons/${personId}`, body);\n }\n if (operation === 'get') {\n const personId = this.getNodeParameter('personId', i);\n const options = this.getNodeParameter('options', i);\n if (options.withInteractionDates) {\n qs.with_interaction_dates = options.withInteractionDates;\n }\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', `/persons/${personId}`, {}, qs);\n }\n if (operation === 'getAll') {\n const returnAll = this.getNodeParameter('returnAll', i);\n const options = this.getNodeParameter('options', i);\n if (options.term) {\n qs.term = options.term;\n }\n if (options.withInteractionDates) {\n qs.with_interaction_dates = options.withInteractionDates;\n }\n if (returnAll) {\n responseData = await GenericFunctions_1.affinityApiRequestAllItems.call(this, 'persons', 'GET', '/persons', {}, qs);\n }\n else {\n qs.page_size = this.getNodeParameter('limit', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', '/persons', {}, qs);\n responseData = responseData.persons;\n }\n }\n if (operation === 'delete') {\n const personId = this.getNodeParameter('personId', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'DELETE', `/persons/${personId}`, {}, qs);\n }\n }\n if (resource === 'organization') {\n if (operation === 'create') {\n const name = this.getNodeParameter('name', i);\n const domain = this.getNodeParameter('domain', i);\n const additionalFields = this.getNodeParameter('additionalFields', i);\n const body = {\n name,\n domain,\n };\n if (additionalFields.persons) {\n body.person_ids = additionalFields.persons;\n }\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'POST', '/organizations', body);\n }\n if (operation === 'update') {\n const organizationId = this.getNodeParameter('organizationId', i);\n const updateFields = this.getNodeParameter('updateFields', i);\n const body = {};\n if (updateFields.name) {\n body.name = updateFields.name;\n }\n if (updateFields.domain) {\n body.domain = updateFields.domain;\n }\n if (updateFields.persons) {\n body.person_ids = updateFields.persons;\n }\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'PUT', `/organizations/${organizationId}`, body);\n }\n if (operation === 'get') {\n const organizationId = this.getNodeParameter('organizationId', i);\n const options = this.getNodeParameter('options', i);\n if (options.withInteractionDates) {\n qs.with_interaction_dates = options.withInteractionDates;\n }\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', `/organizations/${organizationId}`, {}, qs);\n }\n if (operation === 'getAll') {\n const returnAll = this.getNodeParameter('returnAll', i);\n const options = this.getNodeParameter('options', i);\n if (options.term) {\n qs.term = options.term;\n }\n if (options.withInteractionDates) {\n qs.with_interaction_dates = options.withInteractionDates;\n }\n if (returnAll) {\n responseData = await GenericFunctions_1.affinityApiRequestAllItems.call(this, 'organizations', 'GET', '/organizations', {}, qs);\n }\n else {\n qs.page_size = this.getNodeParameter('limit', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'GET', '/organizations', {}, qs);\n responseData = responseData.organizations;\n }\n }\n if (operation === 'delete') {\n const organizationId = this.getNodeParameter('organizationId', i);\n responseData = await GenericFunctions_1.affinityApiRequest.call(this, 'DELETE', `/organizations/${organizationId}`, {}, qs);\n }\n }\n const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });\n returnData.push(...executionData);\n }\n catch (error) {\n if (this.continueOnFail()) {\n const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } });\n returnData.push(...executionErrorData);\n continue;\n }\n throw error;\n }\n }\n return [returnData];\n }\n}\nexports.Affinity = Affinity;\n//# sourceMappingURL=Affinity.node.js.map", + "credentialCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AffinityApi = void 0;\nclass AffinityApi {\n constructor() {\n this.name = 'affinityApi';\n this.displayName = 'Affinity API';\n this.documentationUrl = 'affinity';\n this.properties = [\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n }\n}\nexports.AffinityApi = AffinityApi;\n//# sourceMappingURL=AffinityApi.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AffinityApi = void 0;\nclass AffinityApi {\n constructor() {\n this.name = 'affinityApi';\n this.displayName = 'Affinity API';\n this.documentationUrl = 'affinity';\n this.properties = [\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n }\n}\nexports.AffinityApi = AffinityApi;\n//# sourceMappingURL=AffinityApi.credentials.js.map", + "packageInfo": { + "name": "n8n-nodes-base", + "version": "1.14.1", + "description": "Base nodes of n8n", + "license": "SEE LICENSE IN LICENSE.md", + "homepage": "https://n8n.io", + "author": { + "name": "Jan Oberhauser", + "email": "jan@n8n.io" + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/n8n-io/n8n.git" + }, + "files": [ + "dist" + ], + "n8n": { + "credentials": [ + "dist/credentials/ActionNetworkApi.credentials.js", + "dist/credentials/ActiveCampaignApi.credentials.js", + "dist/credentials/AcuitySchedulingApi.credentials.js", + "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", + "dist/credentials/AdaloApi.credentials.js", + "dist/credentials/AffinityApi.credentials.js", + "dist/credentials/AgileCrmApi.credentials.js", + "dist/credentials/AirtableApi.credentials.js", + "dist/credentials/AirtableOAuth2Api.credentials.js", + "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", + "dist/credentials/Amqp.credentials.js", + "dist/credentials/ApiTemplateIoApi.credentials.js", + "dist/credentials/AsanaApi.credentials.js", + "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", + "dist/credentials/AutomizyApi.credentials.js", + "dist/credentials/AutopilotApi.credentials.js", + "dist/credentials/Aws.credentials.js", + "dist/credentials/BambooHrApi.credentials.js", + "dist/credentials/BannerbearApi.credentials.js", + "dist/credentials/BaserowApi.credentials.js", + "dist/credentials/BeeminderApi.credentials.js", + "dist/credentials/BitbucketApi.credentials.js", + "dist/credentials/BitlyApi.credentials.js", + "dist/credentials/BitlyOAuth2Api.credentials.js", + "dist/credentials/BitwardenApi.credentials.js", + "dist/credentials/BoxOAuth2Api.credentials.js", + "dist/credentials/BrandfetchApi.credentials.js", + "dist/credentials/BubbleApi.credentials.js", + "dist/credentials/CalApi.credentials.js", + "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", + "dist/credentials/ChargebeeApi.credentials.js", + "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", + "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", + "dist/credentials/CitrixAdcApi.credentials.js", + "dist/credentials/CloudflareApi.credentials.js", + "dist/credentials/ClearbitApi.credentials.js", + "dist/credentials/ClickUpApi.credentials.js", + "dist/credentials/ClickUpOAuth2Api.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/CockpitApi.credentials.js", + "dist/credentials/CodaApi.credentials.js", + "dist/credentials/ContentfulApi.credentials.js", + "dist/credentials/ConvertKitApi.credentials.js", + "dist/credentials/CopperApi.credentials.js", + "dist/credentials/CortexApi.credentials.js", + "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", + "dist/credentials/CrowdDevApi.credentials.js", + "dist/credentials/CustomerIoApi.credentials.js", + "dist/credentials/DeepLApi.credentials.js", + "dist/credentials/DemioApi.credentials.js", + "dist/credentials/DhlApi.credentials.js", + "dist/credentials/DiscourseApi.credentials.js", + "dist/credentials/DisqusApi.credentials.js", + "dist/credentials/DriftApi.credentials.js", + "dist/credentials/DriftOAuth2Api.credentials.js", + "dist/credentials/DropboxApi.credentials.js", + "dist/credentials/DropboxOAuth2Api.credentials.js", + "dist/credentials/DropcontactApi.credentials.js", + "dist/credentials/EgoiApi.credentials.js", + "dist/credentials/ElasticsearchApi.credentials.js", + "dist/credentials/ElasticSecurityApi.credentials.js", + "dist/credentials/EmeliaApi.credentials.js", + "dist/credentials/ERPNextApi.credentials.js", + "dist/credentials/EventbriteApi.credentials.js", + "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", + "dist/credentials/FacebookGraphApi.credentials.js", + "dist/credentials/FacebookGraphAppApi.credentials.js", + "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", + "dist/credentials/FigmaApi.credentials.js", + "dist/credentials/FileMaker.credentials.js", + "dist/credentials/FlowApi.credentials.js", + "dist/credentials/FormIoApi.credentials.js", + "dist/credentials/FormstackApi.credentials.js", + "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", + "dist/credentials/FreshdeskApi.credentials.js", + "dist/credentials/FreshserviceApi.credentials.js", + "dist/credentials/FreshworksCrmApi.credentials.js", + "dist/credentials/Ftp.credentials.js", + "dist/credentials/GetResponseApi.credentials.js", + "dist/credentials/GetResponseOAuth2Api.credentials.js", + "dist/credentials/GhostAdminApi.credentials.js", + "dist/credentials/GhostContentApi.credentials.js", + "dist/credentials/GithubApi.credentials.js", + "dist/credentials/GithubOAuth2Api.credentials.js", + "dist/credentials/GitlabApi.credentials.js", + "dist/credentials/GitlabOAuth2Api.credentials.js", + "dist/credentials/GitPassword.credentials.js", + "dist/credentials/GmailOAuth2Api.credentials.js", + "dist/credentials/GoogleAdsOAuth2Api.credentials.js", + "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", + "dist/credentials/GoogleApi.credentials.js", + "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", + "dist/credentials/GoogleBooksOAuth2Api.credentials.js", + "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", + "dist/credentials/GoogleContactsOAuth2Api.credentials.js", + "dist/credentials/GoogleDocsOAuth2Api.credentials.js", + "dist/credentials/GoogleDriveOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", + "dist/credentials/GoogleOAuth2Api.credentials.js", + "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", + "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", + "dist/credentials/GoogleTasksOAuth2Api.credentials.js", + "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", + "dist/credentials/GotifyApi.credentials.js", + "dist/credentials/GoToWebinarOAuth2Api.credentials.js", + "dist/credentials/GristApi.credentials.js", + "dist/credentials/GrafanaApi.credentials.js", + "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", + "dist/credentials/GumroadApi.credentials.js", + "dist/credentials/HaloPSAApi.credentials.js", + "dist/credentials/HarvestApi.credentials.js", + "dist/credentials/HarvestOAuth2Api.credentials.js", + "dist/credentials/HelpScoutOAuth2Api.credentials.js", + "dist/credentials/HighLevelApi.credentials.js", + "dist/credentials/HomeAssistantApi.credentials.js", + "dist/credentials/HttpBasicAuth.credentials.js", + "dist/credentials/HttpDigestAuth.credentials.js", + "dist/credentials/HttpHeaderAuth.credentials.js", + "dist/credentials/HttpCustomAuth.credentials.js", + "dist/credentials/HttpQueryAuth.credentials.js", + "dist/credentials/HubspotApi.credentials.js", + "dist/credentials/HubspotAppToken.credentials.js", + "dist/credentials/HubspotDeveloperApi.credentials.js", + "dist/credentials/HubspotOAuth2Api.credentials.js", + "dist/credentials/HumanticAiApi.credentials.js", + "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", + "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", + "dist/credentials/IntercomApi.credentials.js", + "dist/credentials/InvoiceNinjaApi.credentials.js", + "dist/credentials/IterableApi.credentials.js", + "dist/credentials/JenkinsApi.credentials.js", + "dist/credentials/JiraSoftwareCloudApi.credentials.js", + "dist/credentials/JiraSoftwareServerApi.credentials.js", + "dist/credentials/JotFormApi.credentials.js", + "dist/credentials/Kafka.credentials.js", + "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", + "dist/credentials/KitemakerApi.credentials.js", + "dist/credentials/KoBoToolboxApi.credentials.js", + "dist/credentials/Ldap.credentials.js", + "dist/credentials/LemlistApi.credentials.js", + "dist/credentials/LinearApi.credentials.js", + "dist/credentials/LinearOAuth2Api.credentials.js", + "dist/credentials/LineNotifyOAuth2Api.credentials.js", + "dist/credentials/LingvaNexApi.credentials.js", + "dist/credentials/LinkedInOAuth2Api.credentials.js", + "dist/credentials/LoneScaleApi.credentials.js", + "dist/credentials/Magento2Api.credentials.js", + "dist/credentials/MailcheckApi.credentials.js", + "dist/credentials/MailchimpApi.credentials.js", + "dist/credentials/MailchimpOAuth2Api.credentials.js", + "dist/credentials/MailerLiteApi.credentials.js", + "dist/credentials/MailgunApi.credentials.js", + "dist/credentials/MailjetEmailApi.credentials.js", + "dist/credentials/MailjetSmsApi.credentials.js", + "dist/credentials/MandrillApi.credentials.js", + "dist/credentials/MarketstackApi.credentials.js", + "dist/credentials/MatrixApi.credentials.js", + "dist/credentials/MattermostApi.credentials.js", + "dist/credentials/MauticApi.credentials.js", + "dist/credentials/MauticOAuth2Api.credentials.js", + "dist/credentials/MediumApi.credentials.js", + "dist/credentials/MediumOAuth2Api.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MessageBirdApi.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", + "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", + "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSql.credentials.js", + "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", + "dist/credentials/MindeeInvoiceApi.credentials.js", + "dist/credentials/MindeeReceiptApi.credentials.js", + "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", + "dist/credentials/MoceanApi.credentials.js", + "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", + "dist/credentials/MongoDb.credentials.js", + "dist/credentials/MonicaCrmApi.credentials.js", + "dist/credentials/Mqtt.credentials.js", + "dist/credentials/Msg91Api.credentials.js", + "dist/credentials/MySql.credentials.js", + "dist/credentials/N8nApi.credentials.js", + "dist/credentials/NasaApi.credentials.js", + "dist/credentials/NetlifyApi.credentials.js", + "dist/credentials/NextCloudApi.credentials.js", + "dist/credentials/NextCloudOAuth2Api.credentials.js", + "dist/credentials/NocoDb.credentials.js", + "dist/credentials/NocoDbApiToken.credentials.js", + "dist/credentials/NotionApi.credentials.js", + "dist/credentials/NotionOAuth2Api.credentials.js", + "dist/credentials/NpmApi.credentials.js", + "dist/credentials/OAuth1Api.credentials.js", + "dist/credentials/OAuth2Api.credentials.js", + "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", + "dist/credentials/OneSimpleApi.credentials.js", + "dist/credentials/OnfleetApi.credentials.js", + "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", + "dist/credentials/OpenWeatherMapApi.credentials.js", + "dist/credentials/OrbitApi.credentials.js", + "dist/credentials/OuraApi.credentials.js", + "dist/credentials/PaddleApi.credentials.js", + "dist/credentials/PagerDutyApi.credentials.js", + "dist/credentials/PagerDutyOAuth2Api.credentials.js", + "dist/credentials/PayPalApi.credentials.js", + "dist/credentials/PeekalinkApi.credentials.js", + "dist/credentials/PhantombusterApi.credentials.js", + "dist/credentials/PhilipsHueOAuth2Api.credentials.js", + "dist/credentials/PipedriveApi.credentials.js", + "dist/credentials/PipedriveOAuth2Api.credentials.js", + "dist/credentials/PlivoApi.credentials.js", + "dist/credentials/Postgres.credentials.js", + "dist/credentials/PostHogApi.credentials.js", + "dist/credentials/PostmarkApi.credentials.js", + "dist/credentials/ProfitWellApi.credentials.js", + "dist/credentials/PushbulletOAuth2Api.credentials.js", + "dist/credentials/PushcutApi.credentials.js", + "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", + "dist/credentials/QuestDb.credentials.js", + "dist/credentials/QuickBaseApi.credentials.js", + "dist/credentials/QuickBooksOAuth2Api.credentials.js", + "dist/credentials/RabbitMQ.credentials.js", + "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", + "dist/credentials/RedditOAuth2Api.credentials.js", + "dist/credentials/Redis.credentials.js", + "dist/credentials/RocketchatApi.credentials.js", + "dist/credentials/RundeckApi.credentials.js", + "dist/credentials/S3.credentials.js", + "dist/credentials/SalesforceJwtApi.credentials.js", + "dist/credentials/SalesforceOAuth2Api.credentials.js", + "dist/credentials/SalesmateApi.credentials.js", + "dist/credentials/SeaTableApi.credentials.js", + "dist/credentials/SecurityScorecardApi.credentials.js", + "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", + "dist/credentials/SendGridApi.credentials.js", + "dist/credentials/BrevoApi.credentials.js", + "dist/credentials/SendyApi.credentials.js", + "dist/credentials/SentryIoApi.credentials.js", + "dist/credentials/SentryIoOAuth2Api.credentials.js", + "dist/credentials/SentryIoServerApi.credentials.js", + "dist/credentials/ServiceNowOAuth2Api.credentials.js", + "dist/credentials/ServiceNowBasicApi.credentials.js", + "dist/credentials/Sftp.credentials.js", + "dist/credentials/ShopifyApi.credentials.js", + "dist/credentials/ShopifyAccessTokenApi.credentials.js", + "dist/credentials/ShopifyOAuth2Api.credentials.js", + "dist/credentials/Signl4Api.credentials.js", + "dist/credentials/SlackApi.credentials.js", + "dist/credentials/SlackOAuth2Api.credentials.js", + "dist/credentials/Sms77Api.credentials.js", + "dist/credentials/Smtp.credentials.js", + "dist/credentials/Snowflake.credentials.js", + "dist/credentials/SplunkApi.credentials.js", + "dist/credentials/SpontitApi.credentials.js", + "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", + "dist/credentials/SshPassword.credentials.js", + "dist/credentials/SshPrivateKey.credentials.js", + "dist/credentials/StackbyApi.credentials.js", + "dist/credentials/StoryblokContentApi.credentials.js", + "dist/credentials/StoryblokManagementApi.credentials.js", + "dist/credentials/StrapiApi.credentials.js", + "dist/credentials/StrapiTokenApi.credentials.js", + "dist/credentials/StravaOAuth2Api.credentials.js", + "dist/credentials/StripeApi.credentials.js", + "dist/credentials/SupabaseApi.credentials.js", + "dist/credentials/SurveyMonkeyApi.credentials.js", + "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", + "dist/credentials/SyncroMspApi.credentials.js", + "dist/credentials/TaigaApi.credentials.js", + "dist/credentials/TapfiliateApi.credentials.js", + "dist/credentials/TelegramApi.credentials.js", + "dist/credentials/TheHiveProjectApi.credentials.js", + "dist/credentials/TheHiveApi.credentials.js", + "dist/credentials/TimescaleDb.credentials.js", + "dist/credentials/TodoistApi.credentials.js", + "dist/credentials/TodoistOAuth2Api.credentials.js", + "dist/credentials/TogglApi.credentials.js", + "dist/credentials/TotpApi.credentials.js", + "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", + "dist/credentials/TrelloApi.credentials.js", + "dist/credentials/TwakeCloudApi.credentials.js", + "dist/credentials/TwakeServerApi.credentials.js", + "dist/credentials/TwilioApi.credentials.js", + "dist/credentials/TwistOAuth2Api.credentials.js", + "dist/credentials/TwitterOAuth1Api.credentials.js", + "dist/credentials/TwitterOAuth2Api.credentials.js", + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TypeformOAuth2Api.credentials.js", + "dist/credentials/UnleashedSoftwareApi.credentials.js", + "dist/credentials/UpleadApi.credentials.js", + "dist/credentials/UProcApi.credentials.js", + "dist/credentials/UptimeRobotApi.credentials.js", + "dist/credentials/UrlScanIoApi.credentials.js", + "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", + "dist/credentials/VonageApi.credentials.js", + "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", + "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", + "dist/credentials/WebflowApi.credentials.js", + "dist/credentials/WebflowOAuth2Api.credentials.js", + "dist/credentials/WekanApi.credentials.js", + "dist/credentials/WhatsAppApi.credentials.js", + "dist/credentials/WiseApi.credentials.js", + "dist/credentials/WooCommerceApi.credentials.js", + "dist/credentials/WordpressApi.credentials.js", + "dist/credentials/WorkableApi.credentials.js", + "dist/credentials/WufooApi.credentials.js", + "dist/credentials/XeroOAuth2Api.credentials.js", + "dist/credentials/YourlsApi.credentials.js", + "dist/credentials/YouTubeOAuth2Api.credentials.js", + "dist/credentials/ZammadBasicAuthApi.credentials.js", + "dist/credentials/ZammadTokenAuthApi.credentials.js", + "dist/credentials/ZendeskApi.credentials.js", + "dist/credentials/ZendeskOAuth2Api.credentials.js", + "dist/credentials/ZohoOAuth2Api.credentials.js", + "dist/credentials/ZoomApi.credentials.js", + "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", + "dist/credentials/ZulipApi.credentials.js" + ], + "nodes": [ + "dist/nodes/ActionNetwork/ActionNetwork.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", + "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", + "dist/nodes/Adalo/Adalo.node.js", + "dist/nodes/Affinity/Affinity.node.js", + "dist/nodes/Affinity/AffinityTrigger.node.js", + "dist/nodes/AgileCrm/AgileCrm.node.js", + "dist/nodes/Airtable/Airtable.node.js", + "dist/nodes/Airtable/AirtableTrigger.node.js", + "dist/nodes/Amqp/Amqp.node.js", + "dist/nodes/Amqp/AmqpTrigger.node.js", + "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", + "dist/nodes/Asana/Asana.node.js", + "dist/nodes/Asana/AsanaTrigger.node.js", + "dist/nodes/Automizy/Automizy.node.js", + "dist/nodes/Autopilot/Autopilot.node.js", + "dist/nodes/Autopilot/AutopilotTrigger.node.js", + "dist/nodes/Aws/AwsLambda.node.js", + "dist/nodes/Aws/AwsSns.node.js", + "dist/nodes/Aws/AwsSnsTrigger.node.js", + "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", + "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", + "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", + "dist/nodes/Aws/ELB/AwsElb.node.js", + "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", + "dist/nodes/Aws/S3/AwsS3.node.js", + "dist/nodes/Aws/SES/AwsSes.node.js", + "dist/nodes/Aws/SQS/AwsSqs.node.js", + "dist/nodes/Aws/Textract/AwsTextract.node.js", + "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", + "dist/nodes/BambooHr/BambooHr.node.js", + "dist/nodes/Bannerbear/Bannerbear.node.js", + "dist/nodes/Baserow/Baserow.node.js", + "dist/nodes/Beeminder/Beeminder.node.js", + "dist/nodes/Bitbucket/BitbucketTrigger.node.js", + "dist/nodes/Bitly/Bitly.node.js", + "dist/nodes/Bitwarden/Bitwarden.node.js", + "dist/nodes/Box/Box.node.js", + "dist/nodes/Box/BoxTrigger.node.js", + "dist/nodes/Brandfetch/Brandfetch.node.js", + "dist/nodes/Bubble/Bubble.node.js", + "dist/nodes/Cal/CalTrigger.node.js", + "dist/nodes/Calendly/CalendlyTrigger.node.js", + "dist/nodes/Chargebee/Chargebee.node.js", + "dist/nodes/Chargebee/ChargebeeTrigger.node.js", + "dist/nodes/CircleCi/CircleCi.node.js", + "dist/nodes/Cisco/Webex/CiscoWebex.node.js", + "dist/nodes/Citrix/ADC/CitrixAdc.node.js", + "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", + "dist/nodes/Cloudflare/Cloudflare.node.js", + "dist/nodes/Clearbit/Clearbit.node.js", + "dist/nodes/ClickUp/ClickUp.node.js", + "dist/nodes/ClickUp/ClickUpTrigger.node.js", + "dist/nodes/Clockify/Clockify.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Cockpit/Cockpit.node.js", + "dist/nodes/Coda/Coda.node.js", + "dist/nodes/Code/Code.node.js", + "dist/nodes/CoinGecko/CoinGecko.node.js", + "dist/nodes/CompareDatasets/CompareDatasets.node.js", + "dist/nodes/Compression/Compression.node.js", + "dist/nodes/Contentful/Contentful.node.js", + "dist/nodes/ConvertKit/ConvertKit.node.js", + "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", + "dist/nodes/Copper/Copper.node.js", + "dist/nodes/Copper/CopperTrigger.node.js", + "dist/nodes/Cortex/Cortex.node.js", + "dist/nodes/CrateDb/CrateDb.node.js", + "dist/nodes/Cron/Cron.node.js", + "dist/nodes/CrowdDev/CrowdDev.node.js", + "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", + "dist/nodes/Crypto/Crypto.node.js", + "dist/nodes/CustomerIo/CustomerIo.node.js", + "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", + "dist/nodes/DateTime/DateTime.node.js", + "dist/nodes/DebugHelper/DebugHelper.node.js", + "dist/nodes/DeepL/DeepL.node.js", + "dist/nodes/Demio/Demio.node.js", + "dist/nodes/Dhl/Dhl.node.js", + "dist/nodes/Discord/Discord.node.js", + "dist/nodes/Discourse/Discourse.node.js", + "dist/nodes/Disqus/Disqus.node.js", + "dist/nodes/Drift/Drift.node.js", + "dist/nodes/Dropbox/Dropbox.node.js", + "dist/nodes/Dropcontact/Dropcontact.node.js", + "dist/nodes/EditImage/EditImage.node.js", + "dist/nodes/E2eTest/E2eTest.node.js", + "dist/nodes/Egoi/Egoi.node.js", + "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", + "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", + "dist/nodes/EmailReadImap/EmailReadImap.node.js", + "dist/nodes/EmailSend/EmailSend.node.js", + "dist/nodes/Emelia/Emelia.node.js", + "dist/nodes/Emelia/EmeliaTrigger.node.js", + "dist/nodes/ERPNext/ERPNext.node.js", + "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", + "dist/nodes/Eventbrite/EventbriteTrigger.node.js", + "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", + "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", + "dist/nodes/ExecutionData/ExecutionData.node.js", + "dist/nodes/Facebook/FacebookGraphApi.node.js", + "dist/nodes/Facebook/FacebookTrigger.node.js", + "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", + "dist/nodes/Figma/FigmaTrigger.node.js", + "dist/nodes/FileMaker/FileMaker.node.js", + "dist/nodes/Filter/Filter.node.js", + "dist/nodes/Flow/Flow.node.js", + "dist/nodes/Flow/FlowTrigger.node.js", + "dist/nodes/Form/FormTrigger.node.js", + "dist/nodes/FormIo/FormIoTrigger.node.js", + "dist/nodes/Formstack/FormstackTrigger.node.js", + "dist/nodes/Freshdesk/Freshdesk.node.js", + "dist/nodes/Freshservice/Freshservice.node.js", + "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", + "dist/nodes/Ftp/Ftp.node.js", + "dist/nodes/Function/Function.node.js", + "dist/nodes/FunctionItem/FunctionItem.node.js", + "dist/nodes/GetResponse/GetResponse.node.js", + "dist/nodes/GetResponse/GetResponseTrigger.node.js", + "dist/nodes/Ghost/Ghost.node.js", + "dist/nodes/Git/Git.node.js", + "dist/nodes/Github/Github.node.js", + "dist/nodes/Github/GithubTrigger.node.js", + "dist/nodes/Gitlab/Gitlab.node.js", + "dist/nodes/Gitlab/GitlabTrigger.node.js", + "dist/nodes/Google/Ads/GoogleAds.node.js", + "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", + "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", + "dist/nodes/Google/Books/GoogleBooks.node.js", + "dist/nodes/Google/Calendar/GoogleCalendar.node.js", + "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", + "dist/nodes/Google/Chat/GoogleChat.node.js", + "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", + "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", + "dist/nodes/Google/Contacts/GoogleContacts.node.js", + "dist/nodes/Google/Docs/GoogleDocs.node.js", + "dist/nodes/Google/Drive/GoogleDrive.node.js", + "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", + "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", + "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", + "dist/nodes/Google/Gmail/Gmail.node.js", + "dist/nodes/Google/Gmail/GmailTrigger.node.js", + "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", + "dist/nodes/Google/Perspective/GooglePerspective.node.js", + "dist/nodes/Google/Sheet/GoogleSheets.node.js", + "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", + "dist/nodes/Google/Slides/GoogleSlides.node.js", + "dist/nodes/Google/Task/GoogleTasks.node.js", + "dist/nodes/Google/Translate/GoogleTranslate.node.js", + "dist/nodes/Google/YouTube/YouTube.node.js", + "dist/nodes/Gotify/Gotify.node.js", + "dist/nodes/GoToWebinar/GoToWebinar.node.js", + "dist/nodes/Grafana/Grafana.node.js", + "dist/nodes/GraphQL/GraphQL.node.js", + "dist/nodes/Grist/Grist.node.js", + "dist/nodes/Gumroad/GumroadTrigger.node.js", + "dist/nodes/HackerNews/HackerNews.node.js", + "dist/nodes/HaloPSA/HaloPSA.node.js", + "dist/nodes/Harvest/Harvest.node.js", + "dist/nodes/HelpScout/HelpScout.node.js", + "dist/nodes/HelpScout/HelpScoutTrigger.node.js", + "dist/nodes/HighLevel/HighLevel.node.js", + "dist/nodes/HomeAssistant/HomeAssistant.node.js", + "dist/nodes/HtmlExtract/HtmlExtract.node.js", + "dist/nodes/Html/Html.node.js", + "dist/nodes/HttpRequest/HttpRequest.node.js", + "dist/nodes/Hubspot/Hubspot.node.js", + "dist/nodes/Hubspot/HubspotTrigger.node.js", + "dist/nodes/HumanticAI/HumanticAi.node.js", + "dist/nodes/Hunter/Hunter.node.js", + "dist/nodes/ICalendar/ICalendar.node.js", + "dist/nodes/If/If.node.js", + "dist/nodes/Intercom/Intercom.node.js", + "dist/nodes/Interval/Interval.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", + "dist/nodes/ItemLists/ItemLists.node.js", + "dist/nodes/Iterable/Iterable.node.js", + "dist/nodes/Jenkins/Jenkins.node.js", + "dist/nodes/Jira/Jira.node.js", + "dist/nodes/Jira/JiraTrigger.node.js", + "dist/nodes/JotForm/JotFormTrigger.node.js", + "dist/nodes/Kafka/Kafka.node.js", + "dist/nodes/Kafka/KafkaTrigger.node.js", + "dist/nodes/Keap/Keap.node.js", + "dist/nodes/Keap/KeapTrigger.node.js", + "dist/nodes/Kitemaker/Kitemaker.node.js", + "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", + "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", + "dist/nodes/Ldap/Ldap.node.js", + "dist/nodes/Lemlist/Lemlist.node.js", + "dist/nodes/Lemlist/LemlistTrigger.node.js", + "dist/nodes/Line/Line.node.js", + "dist/nodes/Linear/Linear.node.js", + "dist/nodes/Linear/LinearTrigger.node.js", + "dist/nodes/LingvaNex/LingvaNex.node.js", + "dist/nodes/LinkedIn/LinkedIn.node.js", + "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", + "dist/nodes/LoneScale/LoneScaleTrigger.node.js", + "dist/nodes/LoneScale/LoneScale.node.js", + "dist/nodes/Magento/Magento2.node.js", + "dist/nodes/Mailcheck/Mailcheck.node.js", + "dist/nodes/Mailchimp/Mailchimp.node.js", + "dist/nodes/Mailchimp/MailchimpTrigger.node.js", + "dist/nodes/MailerLite/MailerLite.node.js", + "dist/nodes/MailerLite/MailerLiteTrigger.node.js", + "dist/nodes/Mailgun/Mailgun.node.js", + "dist/nodes/Mailjet/Mailjet.node.js", + "dist/nodes/Mailjet/MailjetTrigger.node.js", + "dist/nodes/Mandrill/Mandrill.node.js", + "dist/nodes/ManualTrigger/ManualTrigger.node.js", + "dist/nodes/Markdown/Markdown.node.js", + "dist/nodes/Marketstack/Marketstack.node.js", + "dist/nodes/Matrix/Matrix.node.js", + "dist/nodes/Mattermost/Mattermost.node.js", + "dist/nodes/Mautic/Mautic.node.js", + "dist/nodes/Mautic/MauticTrigger.node.js", + "dist/nodes/Medium/Medium.node.js", + "dist/nodes/Merge/Merge.node.js", + "dist/nodes/MessageBird/MessageBird.node.js", + "dist/nodes/Metabase/Metabase.node.js", + "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", + "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", + "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", + "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", + "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", + "dist/nodes/Mindee/Mindee.node.js", + "dist/nodes/Misp/Misp.node.js", + "dist/nodes/Mocean/Mocean.node.js", + "dist/nodes/MondayCom/MondayCom.node.js", + "dist/nodes/MongoDb/MongoDb.node.js", + "dist/nodes/MonicaCrm/MonicaCrm.node.js", + "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", + "dist/nodes/MQTT/Mqtt.node.js", + "dist/nodes/MQTT/MqttTrigger.node.js", + "dist/nodes/Msg91/Msg91.node.js", + "dist/nodes/MySql/MySql.node.js", + "dist/nodes/N8n/N8n.node.js", + "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", + "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", + "dist/nodes/N8nTrigger/N8nTrigger.node.js", + "dist/nodes/Nasa/Nasa.node.js", + "dist/nodes/Netlify/Netlify.node.js", + "dist/nodes/Netlify/NetlifyTrigger.node.js", + "dist/nodes/NextCloud/NextCloud.node.js", + "dist/nodes/NocoDB/NocoDB.node.js", + "dist/nodes/Brevo/Brevo.node.js", + "dist/nodes/Brevo/BrevoTrigger.node.js", + "dist/nodes/StickyNote/StickyNote.node.js", + "dist/nodes/NoOp/NoOp.node.js", + "dist/nodes/Onfleet/Onfleet.node.js", + "dist/nodes/Onfleet/OnfleetTrigger.node.js", + "dist/nodes/Notion/Notion.node.js", + "dist/nodes/Notion/NotionTrigger.node.js", + "dist/nodes/Npm/Npm.node.js", + "dist/nodes/Odoo/Odoo.node.js", + "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", + "dist/nodes/OpenAi/OpenAi.node.js", + "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", + "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", + "dist/nodes/Orbit/Orbit.node.js", + "dist/nodes/Oura/Oura.node.js", + "dist/nodes/Paddle/Paddle.node.js", + "dist/nodes/PagerDuty/PagerDuty.node.js", + "dist/nodes/PayPal/PayPal.node.js", + "dist/nodes/PayPal/PayPalTrigger.node.js", + "dist/nodes/Peekalink/Peekalink.node.js", + "dist/nodes/Phantombuster/Phantombuster.node.js", + "dist/nodes/PhilipsHue/PhilipsHue.node.js", + "dist/nodes/Pipedrive/Pipedrive.node.js", + "dist/nodes/Pipedrive/PipedriveTrigger.node.js", + "dist/nodes/Plivo/Plivo.node.js", + "dist/nodes/PostBin/PostBin.node.js", + "dist/nodes/Postgres/Postgres.node.js", + "dist/nodes/Postgres/PostgresTrigger.node.js", + "dist/nodes/PostHog/PostHog.node.js", + "dist/nodes/Postmark/PostmarkTrigger.node.js", + "dist/nodes/ProfitWell/ProfitWell.node.js", + "dist/nodes/Pushbullet/Pushbullet.node.js", + "dist/nodes/Pushcut/Pushcut.node.js", + "dist/nodes/Pushcut/PushcutTrigger.node.js", + "dist/nodes/Pushover/Pushover.node.js", + "dist/nodes/QuestDb/QuestDb.node.js", + "dist/nodes/QuickBase/QuickBase.node.js", + "dist/nodes/QuickBooks/QuickBooks.node.js", + "dist/nodes/QuickChart/QuickChart.node.js", + "dist/nodes/RabbitMQ/RabbitMQ.node.js", + "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", + "dist/nodes/Raindrop/Raindrop.node.js", + "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", + "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", + "dist/nodes/ReadPdf/ReadPDF.node.js", + "dist/nodes/Reddit/Reddit.node.js", + "dist/nodes/Redis/Redis.node.js", + "dist/nodes/Redis/RedisTrigger.node.js", + "dist/nodes/RenameKeys/RenameKeys.node.js", + "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", + "dist/nodes/Rocketchat/Rocketchat.node.js", + "dist/nodes/RssFeedRead/RssFeedRead.node.js", + "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", + "dist/nodes/Rundeck/Rundeck.node.js", + "dist/nodes/S3/S3.node.js", + "dist/nodes/Salesforce/Salesforce.node.js", + "dist/nodes/Salesmate/Salesmate.node.js", + "dist/nodes/Schedule/ScheduleTrigger.node.js", + "dist/nodes/SeaTable/SeaTable.node.js", + "dist/nodes/SeaTable/SeaTableTrigger.node.js", + "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", + "dist/nodes/Segment/Segment.node.js", + "dist/nodes/SendGrid/SendGrid.node.js", + "dist/nodes/Sendy/Sendy.node.js", + "dist/nodes/SentryIo/SentryIo.node.js", + "dist/nodes/ServiceNow/ServiceNow.node.js", + "dist/nodes/Set/Set.node.js", + "dist/nodes/Shopify/Shopify.node.js", + "dist/nodes/Shopify/ShopifyTrigger.node.js", + "dist/nodes/Signl4/Signl4.node.js", + "dist/nodes/Slack/Slack.node.js", + "dist/nodes/Sms77/Sms77.node.js", + "dist/nodes/Snowflake/Snowflake.node.js", + "dist/nodes/SplitInBatches/SplitInBatches.node.js", + "dist/nodes/Splunk/Splunk.node.js", + "dist/nodes/Spontit/Spontit.node.js", + "dist/nodes/Spotify/Spotify.node.js", + "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", + "dist/nodes/SseTrigger/SseTrigger.node.js", + "dist/nodes/Ssh/Ssh.node.js", + "dist/nodes/Stackby/Stackby.node.js", + "dist/nodes/Start/Start.node.js", + "dist/nodes/StopAndError/StopAndError.node.js", + "dist/nodes/Storyblok/Storyblok.node.js", + "dist/nodes/Strapi/Strapi.node.js", + "dist/nodes/Strava/Strava.node.js", + "dist/nodes/Strava/StravaTrigger.node.js", + "dist/nodes/Stripe/Stripe.node.js", + "dist/nodes/Stripe/StripeTrigger.node.js", + "dist/nodes/Supabase/Supabase.node.js", + "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", + "dist/nodes/Switch/Switch.node.js", + "dist/nodes/SyncroMSP/SyncroMsp.node.js", + "dist/nodes/Taiga/Taiga.node.js", + "dist/nodes/Taiga/TaigaTrigger.node.js", + "dist/nodes/Tapfiliate/Tapfiliate.node.js", + "dist/nodes/Telegram/Telegram.node.js", + "dist/nodes/Telegram/TelegramTrigger.node.js", + "dist/nodes/TheHiveProject/TheHiveProject.node.js", + "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", + "dist/nodes/TheHive/TheHive.node.js", + "dist/nodes/TheHive/TheHiveTrigger.node.js", + "dist/nodes/TimescaleDb/TimescaleDb.node.js", + "dist/nodes/Todoist/Todoist.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", + "dist/nodes/Totp/Totp.node.js", + "dist/nodes/TravisCi/TravisCi.node.js", + "dist/nodes/Trello/Trello.node.js", + "dist/nodes/Trello/TrelloTrigger.node.js", + "dist/nodes/Twake/Twake.node.js", + "dist/nodes/Twilio/Twilio.node.js", + "dist/nodes/Twist/Twist.node.js", + "dist/nodes/Twitter/Twitter.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", + "dist/nodes/Uplead/Uplead.node.js", + "dist/nodes/UProc/UProc.node.js", + "dist/nodes/UptimeRobot/UptimeRobot.node.js", + "dist/nodes/UrlScanIo/UrlScanIo.node.js", + "dist/nodes/Vero/Vero.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", + "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", + "dist/nodes/Vonage/Vonage.node.js", + "dist/nodes/Wait/Wait.node.js", + "dist/nodes/Webflow/Webflow.node.js", + "dist/nodes/Webflow/WebflowTrigger.node.js", + "dist/nodes/Webhook/Webhook.node.js", + "dist/nodes/Wekan/Wekan.node.js", + "dist/nodes/WhatsApp/WhatsApp.node.js", + "dist/nodes/Wise/Wise.node.js", + "dist/nodes/Wise/WiseTrigger.node.js", + "dist/nodes/WooCommerce/WooCommerce.node.js", + "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", + "dist/nodes/Wordpress/Wordpress.node.js", + "dist/nodes/Workable/WorkableTrigger.node.js", + "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", + "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", + "dist/nodes/Wufoo/WufooTrigger.node.js", + "dist/nodes/Xero/Xero.node.js", + "dist/nodes/Xml/Xml.node.js", + "dist/nodes/Yourls/Yourls.node.js", + "dist/nodes/Zammad/Zammad.node.js", + "dist/nodes/Zendesk/Zendesk.node.js", + "dist/nodes/Zendesk/ZendeskTrigger.node.js", + "dist/nodes/Zoho/ZohoCrm.node.js", + "dist/nodes/Zoom/Zoom.node.js", + "dist/nodes/Zulip/Zulip.node.js" + ] + }, + "devDependencies": { + "@types/amqplib": "^0.10.1", + "@types/aws4": "^1.5.1", + "@types/basic-auth": "^1.1.3", + "@types/cheerio": "^0.22.15", + "@types/cron": "~1.7.1", + "@types/eventsource": "^1.1.2", + "@types/express": "^4.17.6", + "@types/gm": "^1.25.0", + "@types/imap-simple": "^4.2.0", + "@types/js-nacl": "^1.3.0", + "@types/jsonwebtoken": "^9.0.1", + "@types/lodash": "^4.14.195", + "@types/lossless-json": "^1.0.0", + "@types/mailparser": "^2.7.3", + "@types/mime-types": "^2.1.0", + "@types/mssql": "^6.0.2", + "@types/node-ssh": "^7.0.1", + "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", + "@types/redis": "^2.8.11", + "@types/request-promise-native": "~1.0.15", + "@types/rfc2047": "^2.0.1", + "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.6.12", + "@types/ssh2-sftp-client": "^5.1.0", + "@types/tmp": "^0.2.0", + "@types/uuid": "^8.3.2", + "@types/xml2js": "^0.4.11", + "eslint-plugin-n8n-nodes-base": "^1.16.0", + "gulp": "^4.0.0", + "n8n-core": "1.14.1" + }, + "dependencies": { + "@kafkajs/confluent-schema-registry": "1.0.6", + "@n8n/vm2": "^3.9.20", + "amqplib": "^0.10.3", + "aws4": "^1.8.0", + "basic-auth": "^2.0.1", + "change-case": "^4.1.1", + "cheerio": "1.0.0-rc.6", + "chokidar": "3.5.2", + "cron": "~1.7.2", + "csv-parse": "^5.5.0", + "currency-codes": "^2.1.0", + "eventsource": "^2.0.2", + "fast-glob": "^3.2.5", + "fflate": "^0.7.0", + "get-system-fonts": "^2.0.2", + "gm": "^1.25.0", + "iconv-lite": "^0.6.2", + "ics": "^2.27.0", + "imap-simple": "^4.3.0", + "isbot": "^3.6.13", + "iso-639-1": "^2.1.3", + "js-nacl": "^1.4.0", + "jsonwebtoken": "^9.0.0", + "kafkajs": "^1.14.0", + "ldapts": "^4.2.6", + "lodash": "^4.17.21", + "lossless-json": "^1.0.4", + "luxon": "^3.3.0", + "mailparser": "^3.2.0", + "minifaker": "^1.34.1", + "moment": "~2.29.2", + "moment-timezone": "^0.5.28", + "mongodb": "^4.17.1", + "mqtt": "^5.0.2", + "mssql": "^8.1.2", + "mysql2": "~2.3.0", + "nanoid": "^3.3.6", + "node-html-markdown": "^1.1.3", + "node-ssh": "^12.0.0", + "nodemailer": "^6.7.1", + "otpauth": "^9.1.1", + "pdfjs-dist": "^2.16.105", + "pg": "^8.3.0", + "pg-promise": "^10.5.8", + "pretty-bytes": "^5.6.0", + "promise-ftp": "^1.3.5", + "pyodide": "^0.23.4", + "redis": "^3.1.1", + "rfc2047": "^4.0.1", + "rhea": "^1.0.11", + "rss-parser": "^3.7.0", + "semver": "^7.5.4", + "showdown": "^2.0.3", + "simple-git": "^3.17.0", + "snowflake-sdk": "^1.8.0", + "ssh2-sftp-client": "^7.0.0", + "tmp-promise": "^3.0.2", + "typedi": "^0.10.0", + "uuid": "^8.3.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "xml2js": "^0.5.0", + "n8n-workflow": "1.14.1" + }, + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc", + "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", + "build:translations": "gulp build:translations", + "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", + "format": "prettier --write . --ignore-path ../../.prettierignore", + "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", + "lintfix": "eslint . --fix", + "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", + "test": "jest" + } + } + }, + { + "nodeType": "AgileCrm", + "name": "AgileCrm", + "codeLength": 28115, + "codeHash": "ce71c3b5dec23a48d24c5775e9bb79006ce395bed62b306c56340b5c772379c2", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/AgileCrm/AgileCrm.node.js", + "extractedAt": "2025-06-08T10:57:57.925Z", + "sourceCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AgileCrm = void 0;\nconst n8n_workflow_1 = require(\"n8n-workflow\");\nconst ContactDescription_1 = require(\"./ContactDescription\");\nconst CompanyDescription_1 = require(\"./CompanyDescription\");\nconst DealDescription_1 = require(\"./DealDescription\");\nconst GenericFunctions_1 = require(\"./GenericFunctions\");\nclass AgileCrm {\n constructor() {\n this.description = {\n displayName: 'Agile CRM',\n name: 'agileCrm',\n icon: 'file:agilecrm.png',\n subtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n group: ['transform'],\n version: 1,\n description: 'Consume Agile CRM API',\n defaults: {\n name: 'Agile CRM',\n },\n inputs: ['main'],\n outputs: ['main'],\n credentials: [\n {\n name: 'agileCrmApi',\n required: true,\n },\n ],\n properties: [\n {\n displayName: 'Resource',\n name: 'resource',\n type: 'options',\n noDataExpression: true,\n options: [\n {\n name: 'Company',\n value: 'company',\n },\n {\n name: 'Contact',\n value: 'contact',\n },\n {\n name: 'Deal',\n value: 'deal',\n },\n ],\n default: 'contact',\n },\n ...ContactDescription_1.contactOperations,\n ...ContactDescription_1.contactFields,\n ...CompanyDescription_1.companyOperations,\n ...CompanyDescription_1.companyFields,\n ...DealDescription_1.dealOperations,\n ...DealDescription_1.dealFields,\n ],\n };\n }\n async execute() {\n const items = this.getInputData();\n const returnData = [];\n let responseData;\n const resource = this.getNodeParameter('resource', 0);\n const operation = this.getNodeParameter('operation', 0);\n for (let i = 0; i < items.length; i++) {\n if (resource === 'contact' || resource === 'company') {\n const idGetter = resource === 'contact' ? 'contactId' : 'companyId';\n if (operation === 'get') {\n const contactId = this.getNodeParameter(idGetter, i);\n const endpoint = `api/contacts/${contactId}`;\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'GET', endpoint, {});\n }\n else if (operation === 'delete') {\n const contactId = this.getNodeParameter(idGetter, i);\n const endpoint = `api/contacts/${contactId}`;\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'DELETE', endpoint, {});\n }\n else if (operation === 'getAll') {\n const simple = this.getNodeParameter('simple', 0);\n const returnAll = this.getNodeParameter('returnAll', 0);\n const filterType = this.getNodeParameter('filterType', i);\n const sort = this.getNodeParameter('options.sort.sort', i, {});\n const body = {};\n const filterJson = {};\n let contactType = '';\n if (resource === 'contact') {\n contactType = 'PERSON';\n }\n else {\n contactType = 'COMPANY';\n }\n filterJson.contact_type = contactType;\n if (filterType === 'manual') {\n const conditions = this.getNodeParameter('filters.conditions', i, []);\n const matchType = this.getNodeParameter('matchType', i);\n let rules;\n if (conditions.length !== 0) {\n rules = (0, GenericFunctions_1.getFilterRules)(conditions, matchType);\n Object.assign(filterJson, rules);\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'At least one condition must be added.', { itemIndex: i });\n }\n }\n else if (filterType === 'json') {\n const filterJsonRules = this.getNodeParameter('filterJson', i);\n if ((0, GenericFunctions_1.validateJSON)(filterJsonRules) !== undefined) {\n Object.assign(filterJson, (0, n8n_workflow_1.jsonParse)(filterJsonRules));\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Filter (JSON) must be a valid json', {\n itemIndex: i,\n });\n }\n }\n body.filterJson = JSON.stringify(filterJson);\n if (sort) {\n if (sort.direction === 'ASC') {\n body.global_sort_key = sort.field;\n }\n else if (sort.direction === 'DESC') {\n body.global_sort_key = `-${sort.field}`;\n }\n }\n if (returnAll) {\n body.page_size = 100;\n responseData = await GenericFunctions_1.agileCrmApiRequestAllItems.call(this, 'POST', 'api/filters/filter/dynamic-filter', body, undefined, undefined, true);\n }\n else {\n body.page_size = this.getNodeParameter('limit', 0);\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'POST', 'api/filters/filter/dynamic-filter', body, undefined, undefined, true);\n }\n if (simple) {\n responseData = (0, GenericFunctions_1.simplifyResponse)(responseData);\n }\n }\n else if (operation === 'create') {\n const jsonParameters = this.getNodeParameter('jsonParameters', i);\n const body = {};\n const properties = [];\n if (jsonParameters) {\n const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i);\n if (additionalFieldsJson !== '') {\n if ((0, GenericFunctions_1.validateJSON)(additionalFieldsJson) !== undefined) {\n Object.assign(body, (0, n8n_workflow_1.jsonParse)(additionalFieldsJson));\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Additional fields must be a valid JSON', { itemIndex: i });\n }\n }\n }\n else {\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (resource === 'company') {\n body.type = 'COMPANY';\n }\n if (additionalFields.starValue) {\n body.star_value = additionalFields.starValue;\n }\n if (additionalFields.tags) {\n body.tags = additionalFields.tags;\n }\n if (resource === 'contact') {\n if (additionalFields.firstName) {\n properties.push({\n type: 'SYSTEM',\n name: 'first_name',\n value: additionalFields.firstName,\n });\n }\n if (additionalFields.lastName) {\n properties.push({\n type: 'SYSTEM',\n name: 'last_name',\n value: additionalFields.lastName,\n });\n }\n if (additionalFields.company) {\n properties.push({\n type: 'SYSTEM',\n name: 'company',\n value: additionalFields.company,\n });\n }\n if (additionalFields.title) {\n properties.push({\n type: 'SYSTEM',\n name: 'title',\n value: additionalFields.title,\n });\n }\n if (additionalFields.emailOptions) {\n additionalFields.emailOptions.emailProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'email',\n value: property.email,\n });\n });\n }\n if (additionalFields.addressOptions) {\n additionalFields.addressOptions.addressProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'address',\n value: property.address,\n });\n });\n }\n if (additionalFields.phoneOptions) {\n additionalFields.phoneOptions.phoneProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'phone',\n value: property.number,\n });\n });\n }\n }\n else if (resource === 'company') {\n if (additionalFields.email) {\n properties.push({\n type: 'SYSTEM',\n name: 'email',\n value: additionalFields.email,\n });\n }\n if (additionalFields.addressOptions) {\n additionalFields.addressOptions.addressProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'address',\n value: property.address,\n });\n });\n }\n if (additionalFields.phone) {\n properties.push({\n type: 'SYSTEM',\n name: 'phone',\n value: additionalFields.phone,\n });\n }\n if (additionalFields.name) {\n properties.push({\n type: 'SYSTEM',\n name: 'name',\n value: additionalFields.name,\n });\n }\n }\n if (additionalFields.websiteOptions) {\n additionalFields.websiteOptions.websiteProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'website',\n value: property.url,\n });\n });\n }\n if (additionalFields.customProperties) {\n additionalFields.customProperties.customProperty.map((property) => {\n properties.push({\n type: 'CUSTOM',\n subtype: property.subtype,\n name: property.name,\n value: property.value,\n });\n });\n }\n body.properties = properties;\n }\n const endpoint = 'api/contacts';\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'POST', endpoint, body);\n }\n else if (operation === 'update') {\n const contactId = this.getNodeParameter(idGetter, i);\n const contactUpdatePayload = { id: contactId };\n const jsonParameters = this.getNodeParameter('jsonParameters', i);\n const body = {};\n const properties = [];\n if (jsonParameters) {\n const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i);\n if (additionalFieldsJson !== '') {\n if ((0, GenericFunctions_1.validateJSON)(additionalFieldsJson) !== undefined) {\n Object.assign(body, (0, n8n_workflow_1.jsonParse)(additionalFieldsJson));\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Additional fields must be a valid JSON', { itemIndex: i });\n }\n }\n }\n else {\n const additionalFields = this.getNodeParameter('additionalFields', i);\n if (additionalFields.starValue) {\n body.star_value = additionalFields.starValue;\n }\n if (additionalFields.tags) {\n body.tags = additionalFields.tags;\n }\n if (resource === 'contact') {\n if (additionalFields.leadScore) {\n body.lead_score = additionalFields.leadScore;\n }\n if (additionalFields.firstName) {\n properties.push({\n type: 'SYSTEM',\n name: 'first_name',\n value: additionalFields.firstName,\n });\n }\n if (additionalFields.lastName) {\n properties.push({\n type: 'SYSTEM',\n name: 'last_name',\n value: additionalFields.lastName,\n });\n }\n if (additionalFields.company) {\n properties.push({\n type: 'SYSTEM',\n name: 'company',\n value: additionalFields.company,\n });\n }\n if (additionalFields.title) {\n properties.push({\n type: 'SYSTEM',\n name: 'title',\n value: additionalFields.title,\n });\n }\n if (additionalFields.emailOptions) {\n additionalFields.emailOptions.emailProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'email',\n value: property.email,\n });\n });\n }\n if (additionalFields.addressOptions) {\n additionalFields.addressOptions.addressProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'address',\n value: property.address,\n });\n });\n }\n if (additionalFields.phoneOptions) {\n additionalFields.phoneOptions.phoneProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'phone',\n value: property.number,\n });\n });\n }\n }\n else if (resource === 'company') {\n if (additionalFields.email) {\n properties.push({\n type: 'SYSTEM',\n name: 'email',\n value: additionalFields.email,\n });\n }\n if (additionalFields.addressOptions) {\n additionalFields.addressOptions.addressProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'address',\n value: property.address,\n });\n });\n }\n if (additionalFields.phone) {\n properties.push({\n type: 'SYSTEM',\n name: 'phone',\n value: additionalFields.phone,\n });\n }\n }\n if (additionalFields.websiteOptions) {\n additionalFields.websiteOptions.websiteProperties.map((property) => {\n properties.push({\n type: 'SYSTEM',\n subtype: property.subtype,\n name: 'website',\n value: property.url,\n });\n });\n }\n if (additionalFields.name) {\n properties.push({\n type: 'SYSTEM',\n name: 'name',\n value: additionalFields.name,\n });\n }\n if (additionalFields.customProperties) {\n additionalFields.customProperties.customProperty.map((property) => {\n properties.push({\n type: 'CUSTOM',\n subtype: property.subtype,\n name: property.name,\n value: property.value,\n });\n });\n }\n body.properties = properties;\n }\n Object.assign(contactUpdatePayload, body);\n responseData = await GenericFunctions_1.agileCrmApiRequestUpdate.call(this, 'PUT', '', contactUpdatePayload);\n }\n }\n else if (resource === 'deal') {\n if (operation === 'get') {\n const dealId = this.getNodeParameter('dealId', i);\n const endpoint = `api/opportunity/${dealId}`;\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'GET', endpoint, {});\n }\n else if (operation === 'delete') {\n const contactId = this.getNodeParameter('dealId', i);\n const endpoint = `api/opportunity/${contactId}`;\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'DELETE', endpoint, {});\n }\n else if (operation === 'getAll') {\n const returnAll = this.getNodeParameter('returnAll', 0);\n const endpoint = 'api/opportunity';\n if (returnAll) {\n const limit = 100;\n responseData = await GenericFunctions_1.agileCrmApiRequestAllItems.call(this, 'GET', endpoint, undefined, {\n page_size: limit,\n });\n }\n else {\n const limit = this.getNodeParameter('limit', 0);\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'GET', endpoint, undefined, {\n page_size: limit,\n });\n }\n }\n else if (operation === 'create') {\n const jsonParameters = this.getNodeParameter('jsonParameters', i);\n const body = {};\n if (jsonParameters) {\n const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i);\n if (additionalFieldsJson !== '') {\n if ((0, GenericFunctions_1.validateJSON)(additionalFieldsJson) !== undefined) {\n Object.assign(body, (0, n8n_workflow_1.jsonParse)(additionalFieldsJson));\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Additional fields must be a valid JSON', { itemIndex: i });\n }\n }\n }\n else {\n const additionalFields = this.getNodeParameter('additionalFields', i);\n body.close_date = new Date(this.getNodeParameter('closeDate', i)).getTime();\n body.expected_value = this.getNodeParameter('expectedValue', i);\n body.milestone = this.getNodeParameter('milestone', i);\n body.probability = this.getNodeParameter('probability', i);\n body.name = this.getNodeParameter('name', i);\n if (additionalFields.contactIds) {\n body.contactIds = additionalFields.contactIds;\n }\n if (additionalFields.customData) {\n body.customData = additionalFields.customData.customProperty;\n }\n }\n const endpoint = 'api/opportunity';\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'POST', endpoint, body);\n }\n else if (operation === 'update') {\n const jsonParameters = this.getNodeParameter('jsonParameters', i);\n const body = {};\n if (jsonParameters) {\n const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i);\n if (additionalFieldsJson !== '') {\n if ((0, GenericFunctions_1.validateJSON)(additionalFieldsJson) !== undefined) {\n Object.assign(body, (0, n8n_workflow_1.jsonParse)(additionalFieldsJson));\n }\n else {\n throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Additional fields must be valid JSON', { itemIndex: i });\n }\n }\n }\n else {\n const additionalFields = this.getNodeParameter('additionalFields', i);\n body.id = this.getNodeParameter('dealId', i);\n if (additionalFields.expectedValue) {\n body.expected_value = additionalFields.expectedValue;\n }\n if (additionalFields.name) {\n body.name = additionalFields.name;\n }\n if (additionalFields.probability) {\n body.probability = additionalFields.probability;\n }\n if (additionalFields.contactIds) {\n body.contactIds = additionalFields.contactIds;\n }\n if (additionalFields.customData) {\n body.customData = additionalFields.customData.customProperty;\n }\n }\n const endpoint = 'api/opportunity/partial-update';\n responseData = await GenericFunctions_1.agileCrmApiRequest.call(this, 'PUT', endpoint, body);\n }\n }\n if (Array.isArray(responseData)) {\n returnData.push.apply(returnData, responseData);\n }\n else {\n returnData.push(responseData);\n }\n }\n return [this.helpers.returnJsonArray(returnData)];\n }\n}\nexports.AgileCrm = AgileCrm;\n//# sourceMappingURL=AgileCrm.node.js.map", + "credentialCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AgileCrmApi = void 0;\nclass AgileCrmApi {\n constructor() {\n this.name = 'agileCrmApi';\n this.displayName = 'AgileCRM API';\n this.documentationUrl = 'agileCrm';\n this.properties = [\n {\n displayName: 'Email',\n name: 'email',\n type: 'string',\n placeholder: 'name@email.com',\n default: '',\n },\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n {\n displayName: 'Subdomain',\n name: 'subdomain',\n type: 'string',\n default: '',\n placeholder: 'example',\n description: 'If the domain is https://example.agilecrm.com \"example\" would have to be entered',\n },\n ];\n }\n}\nexports.AgileCrmApi = AgileCrmApi;\n//# sourceMappingURL=AgileCrmApi.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AgileCrmApi = void 0;\nclass AgileCrmApi {\n constructor() {\n this.name = 'agileCrmApi';\n this.displayName = 'AgileCRM API';\n this.documentationUrl = 'agileCrm';\n this.properties = [\n {\n displayName: 'Email',\n name: 'email',\n type: 'string',\n placeholder: 'name@email.com',\n default: '',\n },\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n {\n displayName: 'Subdomain',\n name: 'subdomain',\n type: 'string',\n default: '',\n placeholder: 'example',\n description: 'If the domain is https://example.agilecrm.com \"example\" would have to be entered',\n },\n ];\n }\n}\nexports.AgileCrmApi = AgileCrmApi;\n//# sourceMappingURL=AgileCrmApi.credentials.js.map", + "packageInfo": { + "name": "n8n-nodes-base", + "version": "1.14.1", + "description": "Base nodes of n8n", + "license": "SEE LICENSE IN LICENSE.md", + "homepage": "https://n8n.io", + "author": { + "name": "Jan Oberhauser", + "email": "jan@n8n.io" + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/n8n-io/n8n.git" + }, + "files": [ + "dist" + ], + "n8n": { + "credentials": [ + "dist/credentials/ActionNetworkApi.credentials.js", + "dist/credentials/ActiveCampaignApi.credentials.js", + "dist/credentials/AcuitySchedulingApi.credentials.js", + "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", + "dist/credentials/AdaloApi.credentials.js", + "dist/credentials/AffinityApi.credentials.js", + "dist/credentials/AgileCrmApi.credentials.js", + "dist/credentials/AirtableApi.credentials.js", + "dist/credentials/AirtableOAuth2Api.credentials.js", + "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", + "dist/credentials/Amqp.credentials.js", + "dist/credentials/ApiTemplateIoApi.credentials.js", + "dist/credentials/AsanaApi.credentials.js", + "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", + "dist/credentials/AutomizyApi.credentials.js", + "dist/credentials/AutopilotApi.credentials.js", + "dist/credentials/Aws.credentials.js", + "dist/credentials/BambooHrApi.credentials.js", + "dist/credentials/BannerbearApi.credentials.js", + "dist/credentials/BaserowApi.credentials.js", + "dist/credentials/BeeminderApi.credentials.js", + "dist/credentials/BitbucketApi.credentials.js", + "dist/credentials/BitlyApi.credentials.js", + "dist/credentials/BitlyOAuth2Api.credentials.js", + "dist/credentials/BitwardenApi.credentials.js", + "dist/credentials/BoxOAuth2Api.credentials.js", + "dist/credentials/BrandfetchApi.credentials.js", + "dist/credentials/BubbleApi.credentials.js", + "dist/credentials/CalApi.credentials.js", + "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", + "dist/credentials/ChargebeeApi.credentials.js", + "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", + "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", + "dist/credentials/CitrixAdcApi.credentials.js", + "dist/credentials/CloudflareApi.credentials.js", + "dist/credentials/ClearbitApi.credentials.js", + "dist/credentials/ClickUpApi.credentials.js", + "dist/credentials/ClickUpOAuth2Api.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/CockpitApi.credentials.js", + "dist/credentials/CodaApi.credentials.js", + "dist/credentials/ContentfulApi.credentials.js", + "dist/credentials/ConvertKitApi.credentials.js", + "dist/credentials/CopperApi.credentials.js", + "dist/credentials/CortexApi.credentials.js", + "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", + "dist/credentials/CrowdDevApi.credentials.js", + "dist/credentials/CustomerIoApi.credentials.js", + "dist/credentials/DeepLApi.credentials.js", + "dist/credentials/DemioApi.credentials.js", + "dist/credentials/DhlApi.credentials.js", + "dist/credentials/DiscourseApi.credentials.js", + "dist/credentials/DisqusApi.credentials.js", + "dist/credentials/DriftApi.credentials.js", + "dist/credentials/DriftOAuth2Api.credentials.js", + "dist/credentials/DropboxApi.credentials.js", + "dist/credentials/DropboxOAuth2Api.credentials.js", + "dist/credentials/DropcontactApi.credentials.js", + "dist/credentials/EgoiApi.credentials.js", + "dist/credentials/ElasticsearchApi.credentials.js", + "dist/credentials/ElasticSecurityApi.credentials.js", + "dist/credentials/EmeliaApi.credentials.js", + "dist/credentials/ERPNextApi.credentials.js", + "dist/credentials/EventbriteApi.credentials.js", + "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", + "dist/credentials/FacebookGraphApi.credentials.js", + "dist/credentials/FacebookGraphAppApi.credentials.js", + "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", + "dist/credentials/FigmaApi.credentials.js", + "dist/credentials/FileMaker.credentials.js", + "dist/credentials/FlowApi.credentials.js", + "dist/credentials/FormIoApi.credentials.js", + "dist/credentials/FormstackApi.credentials.js", + "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", + "dist/credentials/FreshdeskApi.credentials.js", + "dist/credentials/FreshserviceApi.credentials.js", + "dist/credentials/FreshworksCrmApi.credentials.js", + "dist/credentials/Ftp.credentials.js", + "dist/credentials/GetResponseApi.credentials.js", + "dist/credentials/GetResponseOAuth2Api.credentials.js", + "dist/credentials/GhostAdminApi.credentials.js", + "dist/credentials/GhostContentApi.credentials.js", + "dist/credentials/GithubApi.credentials.js", + "dist/credentials/GithubOAuth2Api.credentials.js", + "dist/credentials/GitlabApi.credentials.js", + "dist/credentials/GitlabOAuth2Api.credentials.js", + "dist/credentials/GitPassword.credentials.js", + "dist/credentials/GmailOAuth2Api.credentials.js", + "dist/credentials/GoogleAdsOAuth2Api.credentials.js", + "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", + "dist/credentials/GoogleApi.credentials.js", + "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", + "dist/credentials/GoogleBooksOAuth2Api.credentials.js", + "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", + "dist/credentials/GoogleContactsOAuth2Api.credentials.js", + "dist/credentials/GoogleDocsOAuth2Api.credentials.js", + "dist/credentials/GoogleDriveOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", + "dist/credentials/GoogleOAuth2Api.credentials.js", + "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", + "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", + "dist/credentials/GoogleTasksOAuth2Api.credentials.js", + "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", + "dist/credentials/GotifyApi.credentials.js", + "dist/credentials/GoToWebinarOAuth2Api.credentials.js", + "dist/credentials/GristApi.credentials.js", + "dist/credentials/GrafanaApi.credentials.js", + "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", + "dist/credentials/GumroadApi.credentials.js", + "dist/credentials/HaloPSAApi.credentials.js", + "dist/credentials/HarvestApi.credentials.js", + "dist/credentials/HarvestOAuth2Api.credentials.js", + "dist/credentials/HelpScoutOAuth2Api.credentials.js", + "dist/credentials/HighLevelApi.credentials.js", + "dist/credentials/HomeAssistantApi.credentials.js", + "dist/credentials/HttpBasicAuth.credentials.js", + "dist/credentials/HttpDigestAuth.credentials.js", + "dist/credentials/HttpHeaderAuth.credentials.js", + "dist/credentials/HttpCustomAuth.credentials.js", + "dist/credentials/HttpQueryAuth.credentials.js", + "dist/credentials/HubspotApi.credentials.js", + "dist/credentials/HubspotAppToken.credentials.js", + "dist/credentials/HubspotDeveloperApi.credentials.js", + "dist/credentials/HubspotOAuth2Api.credentials.js", + "dist/credentials/HumanticAiApi.credentials.js", + "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", + "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", + "dist/credentials/IntercomApi.credentials.js", + "dist/credentials/InvoiceNinjaApi.credentials.js", + "dist/credentials/IterableApi.credentials.js", + "dist/credentials/JenkinsApi.credentials.js", + "dist/credentials/JiraSoftwareCloudApi.credentials.js", + "dist/credentials/JiraSoftwareServerApi.credentials.js", + "dist/credentials/JotFormApi.credentials.js", + "dist/credentials/Kafka.credentials.js", + "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", + "dist/credentials/KitemakerApi.credentials.js", + "dist/credentials/KoBoToolboxApi.credentials.js", + "dist/credentials/Ldap.credentials.js", + "dist/credentials/LemlistApi.credentials.js", + "dist/credentials/LinearApi.credentials.js", + "dist/credentials/LinearOAuth2Api.credentials.js", + "dist/credentials/LineNotifyOAuth2Api.credentials.js", + "dist/credentials/LingvaNexApi.credentials.js", + "dist/credentials/LinkedInOAuth2Api.credentials.js", + "dist/credentials/LoneScaleApi.credentials.js", + "dist/credentials/Magento2Api.credentials.js", + "dist/credentials/MailcheckApi.credentials.js", + "dist/credentials/MailchimpApi.credentials.js", + "dist/credentials/MailchimpOAuth2Api.credentials.js", + "dist/credentials/MailerLiteApi.credentials.js", + "dist/credentials/MailgunApi.credentials.js", + "dist/credentials/MailjetEmailApi.credentials.js", + "dist/credentials/MailjetSmsApi.credentials.js", + "dist/credentials/MandrillApi.credentials.js", + "dist/credentials/MarketstackApi.credentials.js", + "dist/credentials/MatrixApi.credentials.js", + "dist/credentials/MattermostApi.credentials.js", + "dist/credentials/MauticApi.credentials.js", + "dist/credentials/MauticOAuth2Api.credentials.js", + "dist/credentials/MediumApi.credentials.js", + "dist/credentials/MediumOAuth2Api.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MessageBirdApi.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", + "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", + "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSql.credentials.js", + "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", + "dist/credentials/MindeeInvoiceApi.credentials.js", + "dist/credentials/MindeeReceiptApi.credentials.js", + "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", + "dist/credentials/MoceanApi.credentials.js", + "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", + "dist/credentials/MongoDb.credentials.js", + "dist/credentials/MonicaCrmApi.credentials.js", + "dist/credentials/Mqtt.credentials.js", + "dist/credentials/Msg91Api.credentials.js", + "dist/credentials/MySql.credentials.js", + "dist/credentials/N8nApi.credentials.js", + "dist/credentials/NasaApi.credentials.js", + "dist/credentials/NetlifyApi.credentials.js", + "dist/credentials/NextCloudApi.credentials.js", + "dist/credentials/NextCloudOAuth2Api.credentials.js", + "dist/credentials/NocoDb.credentials.js", + "dist/credentials/NocoDbApiToken.credentials.js", + "dist/credentials/NotionApi.credentials.js", + "dist/credentials/NotionOAuth2Api.credentials.js", + "dist/credentials/NpmApi.credentials.js", + "dist/credentials/OAuth1Api.credentials.js", + "dist/credentials/OAuth2Api.credentials.js", + "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", + "dist/credentials/OneSimpleApi.credentials.js", + "dist/credentials/OnfleetApi.credentials.js", + "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", + "dist/credentials/OpenWeatherMapApi.credentials.js", + "dist/credentials/OrbitApi.credentials.js", + "dist/credentials/OuraApi.credentials.js", + "dist/credentials/PaddleApi.credentials.js", + "dist/credentials/PagerDutyApi.credentials.js", + "dist/credentials/PagerDutyOAuth2Api.credentials.js", + "dist/credentials/PayPalApi.credentials.js", + "dist/credentials/PeekalinkApi.credentials.js", + "dist/credentials/PhantombusterApi.credentials.js", + "dist/credentials/PhilipsHueOAuth2Api.credentials.js", + "dist/credentials/PipedriveApi.credentials.js", + "dist/credentials/PipedriveOAuth2Api.credentials.js", + "dist/credentials/PlivoApi.credentials.js", + "dist/credentials/Postgres.credentials.js", + "dist/credentials/PostHogApi.credentials.js", + "dist/credentials/PostmarkApi.credentials.js", + "dist/credentials/ProfitWellApi.credentials.js", + "dist/credentials/PushbulletOAuth2Api.credentials.js", + "dist/credentials/PushcutApi.credentials.js", + "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", + "dist/credentials/QuestDb.credentials.js", + "dist/credentials/QuickBaseApi.credentials.js", + "dist/credentials/QuickBooksOAuth2Api.credentials.js", + "dist/credentials/RabbitMQ.credentials.js", + "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", + "dist/credentials/RedditOAuth2Api.credentials.js", + "dist/credentials/Redis.credentials.js", + "dist/credentials/RocketchatApi.credentials.js", + "dist/credentials/RundeckApi.credentials.js", + "dist/credentials/S3.credentials.js", + "dist/credentials/SalesforceJwtApi.credentials.js", + "dist/credentials/SalesforceOAuth2Api.credentials.js", + "dist/credentials/SalesmateApi.credentials.js", + "dist/credentials/SeaTableApi.credentials.js", + "dist/credentials/SecurityScorecardApi.credentials.js", + "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", + "dist/credentials/SendGridApi.credentials.js", + "dist/credentials/BrevoApi.credentials.js", + "dist/credentials/SendyApi.credentials.js", + "dist/credentials/SentryIoApi.credentials.js", + "dist/credentials/SentryIoOAuth2Api.credentials.js", + "dist/credentials/SentryIoServerApi.credentials.js", + "dist/credentials/ServiceNowOAuth2Api.credentials.js", + "dist/credentials/ServiceNowBasicApi.credentials.js", + "dist/credentials/Sftp.credentials.js", + "dist/credentials/ShopifyApi.credentials.js", + "dist/credentials/ShopifyAccessTokenApi.credentials.js", + "dist/credentials/ShopifyOAuth2Api.credentials.js", + "dist/credentials/Signl4Api.credentials.js", + "dist/credentials/SlackApi.credentials.js", + "dist/credentials/SlackOAuth2Api.credentials.js", + "dist/credentials/Sms77Api.credentials.js", + "dist/credentials/Smtp.credentials.js", + "dist/credentials/Snowflake.credentials.js", + "dist/credentials/SplunkApi.credentials.js", + "dist/credentials/SpontitApi.credentials.js", + "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", + "dist/credentials/SshPassword.credentials.js", + "dist/credentials/SshPrivateKey.credentials.js", + "dist/credentials/StackbyApi.credentials.js", + "dist/credentials/StoryblokContentApi.credentials.js", + "dist/credentials/StoryblokManagementApi.credentials.js", + "dist/credentials/StrapiApi.credentials.js", + "dist/credentials/StrapiTokenApi.credentials.js", + "dist/credentials/StravaOAuth2Api.credentials.js", + "dist/credentials/StripeApi.credentials.js", + "dist/credentials/SupabaseApi.credentials.js", + "dist/credentials/SurveyMonkeyApi.credentials.js", + "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", + "dist/credentials/SyncroMspApi.credentials.js", + "dist/credentials/TaigaApi.credentials.js", + "dist/credentials/TapfiliateApi.credentials.js", + "dist/credentials/TelegramApi.credentials.js", + "dist/credentials/TheHiveProjectApi.credentials.js", + "dist/credentials/TheHiveApi.credentials.js", + "dist/credentials/TimescaleDb.credentials.js", + "dist/credentials/TodoistApi.credentials.js", + "dist/credentials/TodoistOAuth2Api.credentials.js", + "dist/credentials/TogglApi.credentials.js", + "dist/credentials/TotpApi.credentials.js", + "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", + "dist/credentials/TrelloApi.credentials.js", + "dist/credentials/TwakeCloudApi.credentials.js", + "dist/credentials/TwakeServerApi.credentials.js", + "dist/credentials/TwilioApi.credentials.js", + "dist/credentials/TwistOAuth2Api.credentials.js", + "dist/credentials/TwitterOAuth1Api.credentials.js", + "dist/credentials/TwitterOAuth2Api.credentials.js", + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TypeformOAuth2Api.credentials.js", + "dist/credentials/UnleashedSoftwareApi.credentials.js", + "dist/credentials/UpleadApi.credentials.js", + "dist/credentials/UProcApi.credentials.js", + "dist/credentials/UptimeRobotApi.credentials.js", + "dist/credentials/UrlScanIoApi.credentials.js", + "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", + "dist/credentials/VonageApi.credentials.js", + "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", + "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", + "dist/credentials/WebflowApi.credentials.js", + "dist/credentials/WebflowOAuth2Api.credentials.js", + "dist/credentials/WekanApi.credentials.js", + "dist/credentials/WhatsAppApi.credentials.js", + "dist/credentials/WiseApi.credentials.js", + "dist/credentials/WooCommerceApi.credentials.js", + "dist/credentials/WordpressApi.credentials.js", + "dist/credentials/WorkableApi.credentials.js", + "dist/credentials/WufooApi.credentials.js", + "dist/credentials/XeroOAuth2Api.credentials.js", + "dist/credentials/YourlsApi.credentials.js", + "dist/credentials/YouTubeOAuth2Api.credentials.js", + "dist/credentials/ZammadBasicAuthApi.credentials.js", + "dist/credentials/ZammadTokenAuthApi.credentials.js", + "dist/credentials/ZendeskApi.credentials.js", + "dist/credentials/ZendeskOAuth2Api.credentials.js", + "dist/credentials/ZohoOAuth2Api.credentials.js", + "dist/credentials/ZoomApi.credentials.js", + "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", + "dist/credentials/ZulipApi.credentials.js" + ], + "nodes": [ + "dist/nodes/ActionNetwork/ActionNetwork.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", + "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", + "dist/nodes/Adalo/Adalo.node.js", + "dist/nodes/Affinity/Affinity.node.js", + "dist/nodes/Affinity/AffinityTrigger.node.js", + "dist/nodes/AgileCrm/AgileCrm.node.js", + "dist/nodes/Airtable/Airtable.node.js", + "dist/nodes/Airtable/AirtableTrigger.node.js", + "dist/nodes/Amqp/Amqp.node.js", + "dist/nodes/Amqp/AmqpTrigger.node.js", + "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", + "dist/nodes/Asana/Asana.node.js", + "dist/nodes/Asana/AsanaTrigger.node.js", + "dist/nodes/Automizy/Automizy.node.js", + "dist/nodes/Autopilot/Autopilot.node.js", + "dist/nodes/Autopilot/AutopilotTrigger.node.js", + "dist/nodes/Aws/AwsLambda.node.js", + "dist/nodes/Aws/AwsSns.node.js", + "dist/nodes/Aws/AwsSnsTrigger.node.js", + "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", + "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", + "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", + "dist/nodes/Aws/ELB/AwsElb.node.js", + "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", + "dist/nodes/Aws/S3/AwsS3.node.js", + "dist/nodes/Aws/SES/AwsSes.node.js", + "dist/nodes/Aws/SQS/AwsSqs.node.js", + "dist/nodes/Aws/Textract/AwsTextract.node.js", + "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", + "dist/nodes/BambooHr/BambooHr.node.js", + "dist/nodes/Bannerbear/Bannerbear.node.js", + "dist/nodes/Baserow/Baserow.node.js", + "dist/nodes/Beeminder/Beeminder.node.js", + "dist/nodes/Bitbucket/BitbucketTrigger.node.js", + "dist/nodes/Bitly/Bitly.node.js", + "dist/nodes/Bitwarden/Bitwarden.node.js", + "dist/nodes/Box/Box.node.js", + "dist/nodes/Box/BoxTrigger.node.js", + "dist/nodes/Brandfetch/Brandfetch.node.js", + "dist/nodes/Bubble/Bubble.node.js", + "dist/nodes/Cal/CalTrigger.node.js", + "dist/nodes/Calendly/CalendlyTrigger.node.js", + "dist/nodes/Chargebee/Chargebee.node.js", + "dist/nodes/Chargebee/ChargebeeTrigger.node.js", + "dist/nodes/CircleCi/CircleCi.node.js", + "dist/nodes/Cisco/Webex/CiscoWebex.node.js", + "dist/nodes/Citrix/ADC/CitrixAdc.node.js", + "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", + "dist/nodes/Cloudflare/Cloudflare.node.js", + "dist/nodes/Clearbit/Clearbit.node.js", + "dist/nodes/ClickUp/ClickUp.node.js", + "dist/nodes/ClickUp/ClickUpTrigger.node.js", + "dist/nodes/Clockify/Clockify.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Cockpit/Cockpit.node.js", + "dist/nodes/Coda/Coda.node.js", + "dist/nodes/Code/Code.node.js", + "dist/nodes/CoinGecko/CoinGecko.node.js", + "dist/nodes/CompareDatasets/CompareDatasets.node.js", + "dist/nodes/Compression/Compression.node.js", + "dist/nodes/Contentful/Contentful.node.js", + "dist/nodes/ConvertKit/ConvertKit.node.js", + "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", + "dist/nodes/Copper/Copper.node.js", + "dist/nodes/Copper/CopperTrigger.node.js", + "dist/nodes/Cortex/Cortex.node.js", + "dist/nodes/CrateDb/CrateDb.node.js", + "dist/nodes/Cron/Cron.node.js", + "dist/nodes/CrowdDev/CrowdDev.node.js", + "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", + "dist/nodes/Crypto/Crypto.node.js", + "dist/nodes/CustomerIo/CustomerIo.node.js", + "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", + "dist/nodes/DateTime/DateTime.node.js", + "dist/nodes/DebugHelper/DebugHelper.node.js", + "dist/nodes/DeepL/DeepL.node.js", + "dist/nodes/Demio/Demio.node.js", + "dist/nodes/Dhl/Dhl.node.js", + "dist/nodes/Discord/Discord.node.js", + "dist/nodes/Discourse/Discourse.node.js", + "dist/nodes/Disqus/Disqus.node.js", + "dist/nodes/Drift/Drift.node.js", + "dist/nodes/Dropbox/Dropbox.node.js", + "dist/nodes/Dropcontact/Dropcontact.node.js", + "dist/nodes/EditImage/EditImage.node.js", + "dist/nodes/E2eTest/E2eTest.node.js", + "dist/nodes/Egoi/Egoi.node.js", + "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", + "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", + "dist/nodes/EmailReadImap/EmailReadImap.node.js", + "dist/nodes/EmailSend/EmailSend.node.js", + "dist/nodes/Emelia/Emelia.node.js", + "dist/nodes/Emelia/EmeliaTrigger.node.js", + "dist/nodes/ERPNext/ERPNext.node.js", + "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", + "dist/nodes/Eventbrite/EventbriteTrigger.node.js", + "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", + "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", + "dist/nodes/ExecutionData/ExecutionData.node.js", + "dist/nodes/Facebook/FacebookGraphApi.node.js", + "dist/nodes/Facebook/FacebookTrigger.node.js", + "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", + "dist/nodes/Figma/FigmaTrigger.node.js", + "dist/nodes/FileMaker/FileMaker.node.js", + "dist/nodes/Filter/Filter.node.js", + "dist/nodes/Flow/Flow.node.js", + "dist/nodes/Flow/FlowTrigger.node.js", + "dist/nodes/Form/FormTrigger.node.js", + "dist/nodes/FormIo/FormIoTrigger.node.js", + "dist/nodes/Formstack/FormstackTrigger.node.js", + "dist/nodes/Freshdesk/Freshdesk.node.js", + "dist/nodes/Freshservice/Freshservice.node.js", + "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", + "dist/nodes/Ftp/Ftp.node.js", + "dist/nodes/Function/Function.node.js", + "dist/nodes/FunctionItem/FunctionItem.node.js", + "dist/nodes/GetResponse/GetResponse.node.js", + "dist/nodes/GetResponse/GetResponseTrigger.node.js", + "dist/nodes/Ghost/Ghost.node.js", + "dist/nodes/Git/Git.node.js", + "dist/nodes/Github/Github.node.js", + "dist/nodes/Github/GithubTrigger.node.js", + "dist/nodes/Gitlab/Gitlab.node.js", + "dist/nodes/Gitlab/GitlabTrigger.node.js", + "dist/nodes/Google/Ads/GoogleAds.node.js", + "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", + "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", + "dist/nodes/Google/Books/GoogleBooks.node.js", + "dist/nodes/Google/Calendar/GoogleCalendar.node.js", + "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", + "dist/nodes/Google/Chat/GoogleChat.node.js", + "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", + "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", + "dist/nodes/Google/Contacts/GoogleContacts.node.js", + "dist/nodes/Google/Docs/GoogleDocs.node.js", + "dist/nodes/Google/Drive/GoogleDrive.node.js", + "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", + "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", + "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", + "dist/nodes/Google/Gmail/Gmail.node.js", + "dist/nodes/Google/Gmail/GmailTrigger.node.js", + "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", + "dist/nodes/Google/Perspective/GooglePerspective.node.js", + "dist/nodes/Google/Sheet/GoogleSheets.node.js", + "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", + "dist/nodes/Google/Slides/GoogleSlides.node.js", + "dist/nodes/Google/Task/GoogleTasks.node.js", + "dist/nodes/Google/Translate/GoogleTranslate.node.js", + "dist/nodes/Google/YouTube/YouTube.node.js", + "dist/nodes/Gotify/Gotify.node.js", + "dist/nodes/GoToWebinar/GoToWebinar.node.js", + "dist/nodes/Grafana/Grafana.node.js", + "dist/nodes/GraphQL/GraphQL.node.js", + "dist/nodes/Grist/Grist.node.js", + "dist/nodes/Gumroad/GumroadTrigger.node.js", + "dist/nodes/HackerNews/HackerNews.node.js", + "dist/nodes/HaloPSA/HaloPSA.node.js", + "dist/nodes/Harvest/Harvest.node.js", + "dist/nodes/HelpScout/HelpScout.node.js", + "dist/nodes/HelpScout/HelpScoutTrigger.node.js", + "dist/nodes/HighLevel/HighLevel.node.js", + "dist/nodes/HomeAssistant/HomeAssistant.node.js", + "dist/nodes/HtmlExtract/HtmlExtract.node.js", + "dist/nodes/Html/Html.node.js", + "dist/nodes/HttpRequest/HttpRequest.node.js", + "dist/nodes/Hubspot/Hubspot.node.js", + "dist/nodes/Hubspot/HubspotTrigger.node.js", + "dist/nodes/HumanticAI/HumanticAi.node.js", + "dist/nodes/Hunter/Hunter.node.js", + "dist/nodes/ICalendar/ICalendar.node.js", + "dist/nodes/If/If.node.js", + "dist/nodes/Intercom/Intercom.node.js", + "dist/nodes/Interval/Interval.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", + "dist/nodes/ItemLists/ItemLists.node.js", + "dist/nodes/Iterable/Iterable.node.js", + "dist/nodes/Jenkins/Jenkins.node.js", + "dist/nodes/Jira/Jira.node.js", + "dist/nodes/Jira/JiraTrigger.node.js", + "dist/nodes/JotForm/JotFormTrigger.node.js", + "dist/nodes/Kafka/Kafka.node.js", + "dist/nodes/Kafka/KafkaTrigger.node.js", + "dist/nodes/Keap/Keap.node.js", + "dist/nodes/Keap/KeapTrigger.node.js", + "dist/nodes/Kitemaker/Kitemaker.node.js", + "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", + "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", + "dist/nodes/Ldap/Ldap.node.js", + "dist/nodes/Lemlist/Lemlist.node.js", + "dist/nodes/Lemlist/LemlistTrigger.node.js", + "dist/nodes/Line/Line.node.js", + "dist/nodes/Linear/Linear.node.js", + "dist/nodes/Linear/LinearTrigger.node.js", + "dist/nodes/LingvaNex/LingvaNex.node.js", + "dist/nodes/LinkedIn/LinkedIn.node.js", + "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", + "dist/nodes/LoneScale/LoneScaleTrigger.node.js", + "dist/nodes/LoneScale/LoneScale.node.js", + "dist/nodes/Magento/Magento2.node.js", + "dist/nodes/Mailcheck/Mailcheck.node.js", + "dist/nodes/Mailchimp/Mailchimp.node.js", + "dist/nodes/Mailchimp/MailchimpTrigger.node.js", + "dist/nodes/MailerLite/MailerLite.node.js", + "dist/nodes/MailerLite/MailerLiteTrigger.node.js", + "dist/nodes/Mailgun/Mailgun.node.js", + "dist/nodes/Mailjet/Mailjet.node.js", + "dist/nodes/Mailjet/MailjetTrigger.node.js", + "dist/nodes/Mandrill/Mandrill.node.js", + "dist/nodes/ManualTrigger/ManualTrigger.node.js", + "dist/nodes/Markdown/Markdown.node.js", + "dist/nodes/Marketstack/Marketstack.node.js", + "dist/nodes/Matrix/Matrix.node.js", + "dist/nodes/Mattermost/Mattermost.node.js", + "dist/nodes/Mautic/Mautic.node.js", + "dist/nodes/Mautic/MauticTrigger.node.js", + "dist/nodes/Medium/Medium.node.js", + "dist/nodes/Merge/Merge.node.js", + "dist/nodes/MessageBird/MessageBird.node.js", + "dist/nodes/Metabase/Metabase.node.js", + "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", + "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", + "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", + "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", + "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", + "dist/nodes/Mindee/Mindee.node.js", + "dist/nodes/Misp/Misp.node.js", + "dist/nodes/Mocean/Mocean.node.js", + "dist/nodes/MondayCom/MondayCom.node.js", + "dist/nodes/MongoDb/MongoDb.node.js", + "dist/nodes/MonicaCrm/MonicaCrm.node.js", + "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", + "dist/nodes/MQTT/Mqtt.node.js", + "dist/nodes/MQTT/MqttTrigger.node.js", + "dist/nodes/Msg91/Msg91.node.js", + "dist/nodes/MySql/MySql.node.js", + "dist/nodes/N8n/N8n.node.js", + "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", + "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", + "dist/nodes/N8nTrigger/N8nTrigger.node.js", + "dist/nodes/Nasa/Nasa.node.js", + "dist/nodes/Netlify/Netlify.node.js", + "dist/nodes/Netlify/NetlifyTrigger.node.js", + "dist/nodes/NextCloud/NextCloud.node.js", + "dist/nodes/NocoDB/NocoDB.node.js", + "dist/nodes/Brevo/Brevo.node.js", + "dist/nodes/Brevo/BrevoTrigger.node.js", + "dist/nodes/StickyNote/StickyNote.node.js", + "dist/nodes/NoOp/NoOp.node.js", + "dist/nodes/Onfleet/Onfleet.node.js", + "dist/nodes/Onfleet/OnfleetTrigger.node.js", + "dist/nodes/Notion/Notion.node.js", + "dist/nodes/Notion/NotionTrigger.node.js", + "dist/nodes/Npm/Npm.node.js", + "dist/nodes/Odoo/Odoo.node.js", + "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", + "dist/nodes/OpenAi/OpenAi.node.js", + "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", + "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", + "dist/nodes/Orbit/Orbit.node.js", + "dist/nodes/Oura/Oura.node.js", + "dist/nodes/Paddle/Paddle.node.js", + "dist/nodes/PagerDuty/PagerDuty.node.js", + "dist/nodes/PayPal/PayPal.node.js", + "dist/nodes/PayPal/PayPalTrigger.node.js", + "dist/nodes/Peekalink/Peekalink.node.js", + "dist/nodes/Phantombuster/Phantombuster.node.js", + "dist/nodes/PhilipsHue/PhilipsHue.node.js", + "dist/nodes/Pipedrive/Pipedrive.node.js", + "dist/nodes/Pipedrive/PipedriveTrigger.node.js", + "dist/nodes/Plivo/Plivo.node.js", + "dist/nodes/PostBin/PostBin.node.js", + "dist/nodes/Postgres/Postgres.node.js", + "dist/nodes/Postgres/PostgresTrigger.node.js", + "dist/nodes/PostHog/PostHog.node.js", + "dist/nodes/Postmark/PostmarkTrigger.node.js", + "dist/nodes/ProfitWell/ProfitWell.node.js", + "dist/nodes/Pushbullet/Pushbullet.node.js", + "dist/nodes/Pushcut/Pushcut.node.js", + "dist/nodes/Pushcut/PushcutTrigger.node.js", + "dist/nodes/Pushover/Pushover.node.js", + "dist/nodes/QuestDb/QuestDb.node.js", + "dist/nodes/QuickBase/QuickBase.node.js", + "dist/nodes/QuickBooks/QuickBooks.node.js", + "dist/nodes/QuickChart/QuickChart.node.js", + "dist/nodes/RabbitMQ/RabbitMQ.node.js", + "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", + "dist/nodes/Raindrop/Raindrop.node.js", + "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", + "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", + "dist/nodes/ReadPdf/ReadPDF.node.js", + "dist/nodes/Reddit/Reddit.node.js", + "dist/nodes/Redis/Redis.node.js", + "dist/nodes/Redis/RedisTrigger.node.js", + "dist/nodes/RenameKeys/RenameKeys.node.js", + "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", + "dist/nodes/Rocketchat/Rocketchat.node.js", + "dist/nodes/RssFeedRead/RssFeedRead.node.js", + "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", + "dist/nodes/Rundeck/Rundeck.node.js", + "dist/nodes/S3/S3.node.js", + "dist/nodes/Salesforce/Salesforce.node.js", + "dist/nodes/Salesmate/Salesmate.node.js", + "dist/nodes/Schedule/ScheduleTrigger.node.js", + "dist/nodes/SeaTable/SeaTable.node.js", + "dist/nodes/SeaTable/SeaTableTrigger.node.js", + "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", + "dist/nodes/Segment/Segment.node.js", + "dist/nodes/SendGrid/SendGrid.node.js", + "dist/nodes/Sendy/Sendy.node.js", + "dist/nodes/SentryIo/SentryIo.node.js", + "dist/nodes/ServiceNow/ServiceNow.node.js", + "dist/nodes/Set/Set.node.js", + "dist/nodes/Shopify/Shopify.node.js", + "dist/nodes/Shopify/ShopifyTrigger.node.js", + "dist/nodes/Signl4/Signl4.node.js", + "dist/nodes/Slack/Slack.node.js", + "dist/nodes/Sms77/Sms77.node.js", + "dist/nodes/Snowflake/Snowflake.node.js", + "dist/nodes/SplitInBatches/SplitInBatches.node.js", + "dist/nodes/Splunk/Splunk.node.js", + "dist/nodes/Spontit/Spontit.node.js", + "dist/nodes/Spotify/Spotify.node.js", + "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", + "dist/nodes/SseTrigger/SseTrigger.node.js", + "dist/nodes/Ssh/Ssh.node.js", + "dist/nodes/Stackby/Stackby.node.js", + "dist/nodes/Start/Start.node.js", + "dist/nodes/StopAndError/StopAndError.node.js", + "dist/nodes/Storyblok/Storyblok.node.js", + "dist/nodes/Strapi/Strapi.node.js", + "dist/nodes/Strava/Strava.node.js", + "dist/nodes/Strava/StravaTrigger.node.js", + "dist/nodes/Stripe/Stripe.node.js", + "dist/nodes/Stripe/StripeTrigger.node.js", + "dist/nodes/Supabase/Supabase.node.js", + "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", + "dist/nodes/Switch/Switch.node.js", + "dist/nodes/SyncroMSP/SyncroMsp.node.js", + "dist/nodes/Taiga/Taiga.node.js", + "dist/nodes/Taiga/TaigaTrigger.node.js", + "dist/nodes/Tapfiliate/Tapfiliate.node.js", + "dist/nodes/Telegram/Telegram.node.js", + "dist/nodes/Telegram/TelegramTrigger.node.js", + "dist/nodes/TheHiveProject/TheHiveProject.node.js", + "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", + "dist/nodes/TheHive/TheHive.node.js", + "dist/nodes/TheHive/TheHiveTrigger.node.js", + "dist/nodes/TimescaleDb/TimescaleDb.node.js", + "dist/nodes/Todoist/Todoist.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", + "dist/nodes/Totp/Totp.node.js", + "dist/nodes/TravisCi/TravisCi.node.js", + "dist/nodes/Trello/Trello.node.js", + "dist/nodes/Trello/TrelloTrigger.node.js", + "dist/nodes/Twake/Twake.node.js", + "dist/nodes/Twilio/Twilio.node.js", + "dist/nodes/Twist/Twist.node.js", + "dist/nodes/Twitter/Twitter.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", + "dist/nodes/Uplead/Uplead.node.js", + "dist/nodes/UProc/UProc.node.js", + "dist/nodes/UptimeRobot/UptimeRobot.node.js", + "dist/nodes/UrlScanIo/UrlScanIo.node.js", + "dist/nodes/Vero/Vero.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", + "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", + "dist/nodes/Vonage/Vonage.node.js", + "dist/nodes/Wait/Wait.node.js", + "dist/nodes/Webflow/Webflow.node.js", + "dist/nodes/Webflow/WebflowTrigger.node.js", + "dist/nodes/Webhook/Webhook.node.js", + "dist/nodes/Wekan/Wekan.node.js", + "dist/nodes/WhatsApp/WhatsApp.node.js", + "dist/nodes/Wise/Wise.node.js", + "dist/nodes/Wise/WiseTrigger.node.js", + "dist/nodes/WooCommerce/WooCommerce.node.js", + "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", + "dist/nodes/Wordpress/Wordpress.node.js", + "dist/nodes/Workable/WorkableTrigger.node.js", + "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", + "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", + "dist/nodes/Wufoo/WufooTrigger.node.js", + "dist/nodes/Xero/Xero.node.js", + "dist/nodes/Xml/Xml.node.js", + "dist/nodes/Yourls/Yourls.node.js", + "dist/nodes/Zammad/Zammad.node.js", + "dist/nodes/Zendesk/Zendesk.node.js", + "dist/nodes/Zendesk/ZendeskTrigger.node.js", + "dist/nodes/Zoho/ZohoCrm.node.js", + "dist/nodes/Zoom/Zoom.node.js", + "dist/nodes/Zulip/Zulip.node.js" + ] + }, + "devDependencies": { + "@types/amqplib": "^0.10.1", + "@types/aws4": "^1.5.1", + "@types/basic-auth": "^1.1.3", + "@types/cheerio": "^0.22.15", + "@types/cron": "~1.7.1", + "@types/eventsource": "^1.1.2", + "@types/express": "^4.17.6", + "@types/gm": "^1.25.0", + "@types/imap-simple": "^4.2.0", + "@types/js-nacl": "^1.3.0", + "@types/jsonwebtoken": "^9.0.1", + "@types/lodash": "^4.14.195", + "@types/lossless-json": "^1.0.0", + "@types/mailparser": "^2.7.3", + "@types/mime-types": "^2.1.0", + "@types/mssql": "^6.0.2", + "@types/node-ssh": "^7.0.1", + "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", + "@types/redis": "^2.8.11", + "@types/request-promise-native": "~1.0.15", + "@types/rfc2047": "^2.0.1", + "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.6.12", + "@types/ssh2-sftp-client": "^5.1.0", + "@types/tmp": "^0.2.0", + "@types/uuid": "^8.3.2", + "@types/xml2js": "^0.4.11", + "eslint-plugin-n8n-nodes-base": "^1.16.0", + "gulp": "^4.0.0", + "n8n-core": "1.14.1" + }, + "dependencies": { + "@kafkajs/confluent-schema-registry": "1.0.6", + "@n8n/vm2": "^3.9.20", + "amqplib": "^0.10.3", + "aws4": "^1.8.0", + "basic-auth": "^2.0.1", + "change-case": "^4.1.1", + "cheerio": "1.0.0-rc.6", + "chokidar": "3.5.2", + "cron": "~1.7.2", + "csv-parse": "^5.5.0", + "currency-codes": "^2.1.0", + "eventsource": "^2.0.2", + "fast-glob": "^3.2.5", + "fflate": "^0.7.0", + "get-system-fonts": "^2.0.2", + "gm": "^1.25.0", + "iconv-lite": "^0.6.2", + "ics": "^2.27.0", + "imap-simple": "^4.3.0", + "isbot": "^3.6.13", + "iso-639-1": "^2.1.3", + "js-nacl": "^1.4.0", + "jsonwebtoken": "^9.0.0", + "kafkajs": "^1.14.0", + "ldapts": "^4.2.6", + "lodash": "^4.17.21", + "lossless-json": "^1.0.4", + "luxon": "^3.3.0", + "mailparser": "^3.2.0", + "minifaker": "^1.34.1", + "moment": "~2.29.2", + "moment-timezone": "^0.5.28", + "mongodb": "^4.17.1", + "mqtt": "^5.0.2", + "mssql": "^8.1.2", + "mysql2": "~2.3.0", + "nanoid": "^3.3.6", + "node-html-markdown": "^1.1.3", + "node-ssh": "^12.0.0", + "nodemailer": "^6.7.1", + "otpauth": "^9.1.1", + "pdfjs-dist": "^2.16.105", + "pg": "^8.3.0", + "pg-promise": "^10.5.8", + "pretty-bytes": "^5.6.0", + "promise-ftp": "^1.3.5", + "pyodide": "^0.23.4", + "redis": "^3.1.1", + "rfc2047": "^4.0.1", + "rhea": "^1.0.11", + "rss-parser": "^3.7.0", + "semver": "^7.5.4", + "showdown": "^2.0.3", + "simple-git": "^3.17.0", + "snowflake-sdk": "^1.8.0", + "ssh2-sftp-client": "^7.0.0", + "tmp-promise": "^3.0.2", + "typedi": "^0.10.0", + "uuid": "^8.3.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "xml2js": "^0.5.0", + "n8n-workflow": "1.14.1" + }, + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc", + "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", + "build:translations": "gulp build:translations", + "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", + "format": "prettier --write . --ignore-path ../../.prettierignore", + "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", + "lintfix": "eslint . --fix", + "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", + "test": "jest" + } + } + }, + { + "nodeType": "Airtable", + "name": "Airtable", + "codeLength": 936, + "codeHash": "2d67e72931697178946f5127b43e954649c4c5e7ad9e29764796404ae96e7db5", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Airtable/Airtable.node.js", + "extractedAt": "2025-06-08T10:57:57.941Z", + "sourceCode": "\"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", + "credentialCode": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AirtableApi = void 0;\nclass AirtableApi {\n constructor() {\n this.name = 'airtableApi';\n this.displayName = 'Airtable API';\n this.documentationUrl = 'airtable';\n this.properties = [\n {\n displayName: 'API Keys will be deprecated by the end of January 2024, see this article for more details. We recommend to use Personal Access Token instead.',\n name: 'deprecated',\n type: 'notice',\n default: '',\n },\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n this.authenticate = {\n type: 'generic',\n properties: {\n qs: {\n api_key: '={{$credentials.apiKey}}',\n },\n },\n };\n }\n}\nexports.AirtableApi = AirtableApi;\n//# sourceMappingURL=AirtableApi.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AirtableOAuth2Api = void 0;\nconst scopes = ['schema.bases:read', 'data.records:read', 'data.records:write'];\nclass AirtableOAuth2Api {\n constructor() {\n this.name = 'airtableOAuth2Api';\n this.extends = ['oAuth2Api'];\n this.displayName = 'Airtable OAuth2 API';\n this.documentationUrl = 'airtable';\n this.properties = [\n {\n displayName: 'Grant Type',\n name: 'grantType',\n type: 'hidden',\n default: 'pkce',\n },\n {\n displayName: 'Authorization URL',\n name: 'authUrl',\n type: 'hidden',\n default: 'https://airtable.com/oauth2/v1/authorize',\n },\n {\n displayName: 'Access Token URL',\n name: 'accessTokenUrl',\n type: 'hidden',\n default: 'https://airtable.com/oauth2/v1/token',\n },\n {\n displayName: 'Scope',\n name: 'scope',\n type: 'hidden',\n default: `${scopes.join(' ')}`,\n },\n {\n displayName: 'Auth URI Query Parameters',\n name: 'authQueryParameters',\n type: 'hidden',\n default: '',\n },\n {\n displayName: 'Authentication',\n name: 'authentication',\n type: 'hidden',\n default: 'header',\n },\n ];\n }\n}\nexports.AirtableOAuth2Api = AirtableOAuth2Api;\n//# sourceMappingURL=AirtableOAuth2Api.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AirtableApi = void 0;\nclass AirtableApi {\n constructor() {\n this.name = 'airtableApi';\n this.displayName = 'Airtable API';\n this.documentationUrl = 'airtable';\n this.properties = [\n {\n displayName: 'API Keys will be deprecated by the end of January 2024, see this article for more details. We recommend to use Personal Access Token instead.',\n name: 'deprecated',\n type: 'notice',\n default: '',\n },\n {\n displayName: 'API Key',\n name: 'apiKey',\n type: 'string',\n typeOptions: { password: true },\n default: '',\n },\n ];\n this.authenticate = {\n type: 'generic',\n properties: {\n qs: {\n api_key: '={{$credentials.apiKey}}',\n },\n },\n };\n }\n}\nexports.AirtableApi = AirtableApi;\n//# sourceMappingURL=AirtableApi.credentials.js.map\n\n// --- Next Credential File ---\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AirtableOAuth2Api = void 0;\nconst scopes = ['schema.bases:read', 'data.records:read', 'data.records:write'];\nclass AirtableOAuth2Api {\n constructor() {\n this.name = 'airtableOAuth2Api';\n this.extends = ['oAuth2Api'];\n this.displayName = 'Airtable OAuth2 API';\n this.documentationUrl = 'airtable';\n this.properties = [\n {\n displayName: 'Grant Type',\n name: 'grantType',\n type: 'hidden',\n default: 'pkce',\n },\n {\n displayName: 'Authorization URL',\n name: 'authUrl',\n type: 'hidden',\n default: 'https://airtable.com/oauth2/v1/authorize',\n },\n {\n displayName: 'Access Token URL',\n name: 'accessTokenUrl',\n type: 'hidden',\n default: 'https://airtable.com/oauth2/v1/token',\n },\n {\n displayName: 'Scope',\n name: 'scope',\n type: 'hidden',\n default: `${scopes.join(' ')}`,\n },\n {\n displayName: 'Auth URI Query Parameters',\n name: 'authQueryParameters',\n type: 'hidden',\n default: '',\n },\n {\n displayName: 'Authentication',\n name: 'authentication',\n type: 'hidden',\n default: 'header',\n },\n ];\n }\n}\nexports.AirtableOAuth2Api = AirtableOAuth2Api;\n//# sourceMappingURL=AirtableOAuth2Api.credentials.js.map", + "packageInfo": { + "name": "n8n-nodes-base", + "version": "1.14.1", + "description": "Base nodes of n8n", + "license": "SEE LICENSE IN LICENSE.md", + "homepage": "https://n8n.io", + "author": { + "name": "Jan Oberhauser", + "email": "jan@n8n.io" + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/n8n-io/n8n.git" + }, + "files": [ + "dist" + ], + "n8n": { + "credentials": [ + "dist/credentials/ActionNetworkApi.credentials.js", + "dist/credentials/ActiveCampaignApi.credentials.js", + "dist/credentials/AcuitySchedulingApi.credentials.js", + "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", + "dist/credentials/AdaloApi.credentials.js", + "dist/credentials/AffinityApi.credentials.js", + "dist/credentials/AgileCrmApi.credentials.js", + "dist/credentials/AirtableApi.credentials.js", + "dist/credentials/AirtableOAuth2Api.credentials.js", + "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", + "dist/credentials/Amqp.credentials.js", + "dist/credentials/ApiTemplateIoApi.credentials.js", + "dist/credentials/AsanaApi.credentials.js", + "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", + "dist/credentials/AutomizyApi.credentials.js", + "dist/credentials/AutopilotApi.credentials.js", + "dist/credentials/Aws.credentials.js", + "dist/credentials/BambooHrApi.credentials.js", + "dist/credentials/BannerbearApi.credentials.js", + "dist/credentials/BaserowApi.credentials.js", + "dist/credentials/BeeminderApi.credentials.js", + "dist/credentials/BitbucketApi.credentials.js", + "dist/credentials/BitlyApi.credentials.js", + "dist/credentials/BitlyOAuth2Api.credentials.js", + "dist/credentials/BitwardenApi.credentials.js", + "dist/credentials/BoxOAuth2Api.credentials.js", + "dist/credentials/BrandfetchApi.credentials.js", + "dist/credentials/BubbleApi.credentials.js", + "dist/credentials/CalApi.credentials.js", + "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", + "dist/credentials/ChargebeeApi.credentials.js", + "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", + "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", + "dist/credentials/CitrixAdcApi.credentials.js", + "dist/credentials/CloudflareApi.credentials.js", + "dist/credentials/ClearbitApi.credentials.js", + "dist/credentials/ClickUpApi.credentials.js", + "dist/credentials/ClickUpOAuth2Api.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/CockpitApi.credentials.js", + "dist/credentials/CodaApi.credentials.js", + "dist/credentials/ContentfulApi.credentials.js", + "dist/credentials/ConvertKitApi.credentials.js", + "dist/credentials/CopperApi.credentials.js", + "dist/credentials/CortexApi.credentials.js", + "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", + "dist/credentials/CrowdDevApi.credentials.js", + "dist/credentials/CustomerIoApi.credentials.js", + "dist/credentials/DeepLApi.credentials.js", + "dist/credentials/DemioApi.credentials.js", + "dist/credentials/DhlApi.credentials.js", + "dist/credentials/DiscourseApi.credentials.js", + "dist/credentials/DisqusApi.credentials.js", + "dist/credentials/DriftApi.credentials.js", + "dist/credentials/DriftOAuth2Api.credentials.js", + "dist/credentials/DropboxApi.credentials.js", + "dist/credentials/DropboxOAuth2Api.credentials.js", + "dist/credentials/DropcontactApi.credentials.js", + "dist/credentials/EgoiApi.credentials.js", + "dist/credentials/ElasticsearchApi.credentials.js", + "dist/credentials/ElasticSecurityApi.credentials.js", + "dist/credentials/EmeliaApi.credentials.js", + "dist/credentials/ERPNextApi.credentials.js", + "dist/credentials/EventbriteApi.credentials.js", + "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", + "dist/credentials/FacebookGraphApi.credentials.js", + "dist/credentials/FacebookGraphAppApi.credentials.js", + "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", + "dist/credentials/FigmaApi.credentials.js", + "dist/credentials/FileMaker.credentials.js", + "dist/credentials/FlowApi.credentials.js", + "dist/credentials/FormIoApi.credentials.js", + "dist/credentials/FormstackApi.credentials.js", + "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", + "dist/credentials/FreshdeskApi.credentials.js", + "dist/credentials/FreshserviceApi.credentials.js", + "dist/credentials/FreshworksCrmApi.credentials.js", + "dist/credentials/Ftp.credentials.js", + "dist/credentials/GetResponseApi.credentials.js", + "dist/credentials/GetResponseOAuth2Api.credentials.js", + "dist/credentials/GhostAdminApi.credentials.js", + "dist/credentials/GhostContentApi.credentials.js", + "dist/credentials/GithubApi.credentials.js", + "dist/credentials/GithubOAuth2Api.credentials.js", + "dist/credentials/GitlabApi.credentials.js", + "dist/credentials/GitlabOAuth2Api.credentials.js", + "dist/credentials/GitPassword.credentials.js", + "dist/credentials/GmailOAuth2Api.credentials.js", + "dist/credentials/GoogleAdsOAuth2Api.credentials.js", + "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", + "dist/credentials/GoogleApi.credentials.js", + "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", + "dist/credentials/GoogleBooksOAuth2Api.credentials.js", + "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", + "dist/credentials/GoogleContactsOAuth2Api.credentials.js", + "dist/credentials/GoogleDocsOAuth2Api.credentials.js", + "dist/credentials/GoogleDriveOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", + "dist/credentials/GoogleOAuth2Api.credentials.js", + "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", + "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", + "dist/credentials/GoogleTasksOAuth2Api.credentials.js", + "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", + "dist/credentials/GotifyApi.credentials.js", + "dist/credentials/GoToWebinarOAuth2Api.credentials.js", + "dist/credentials/GristApi.credentials.js", + "dist/credentials/GrafanaApi.credentials.js", + "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", + "dist/credentials/GumroadApi.credentials.js", + "dist/credentials/HaloPSAApi.credentials.js", + "dist/credentials/HarvestApi.credentials.js", + "dist/credentials/HarvestOAuth2Api.credentials.js", + "dist/credentials/HelpScoutOAuth2Api.credentials.js", + "dist/credentials/HighLevelApi.credentials.js", + "dist/credentials/HomeAssistantApi.credentials.js", + "dist/credentials/HttpBasicAuth.credentials.js", + "dist/credentials/HttpDigestAuth.credentials.js", + "dist/credentials/HttpHeaderAuth.credentials.js", + "dist/credentials/HttpCustomAuth.credentials.js", + "dist/credentials/HttpQueryAuth.credentials.js", + "dist/credentials/HubspotApi.credentials.js", + "dist/credentials/HubspotAppToken.credentials.js", + "dist/credentials/HubspotDeveloperApi.credentials.js", + "dist/credentials/HubspotOAuth2Api.credentials.js", + "dist/credentials/HumanticAiApi.credentials.js", + "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", + "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", + "dist/credentials/IntercomApi.credentials.js", + "dist/credentials/InvoiceNinjaApi.credentials.js", + "dist/credentials/IterableApi.credentials.js", + "dist/credentials/JenkinsApi.credentials.js", + "dist/credentials/JiraSoftwareCloudApi.credentials.js", + "dist/credentials/JiraSoftwareServerApi.credentials.js", + "dist/credentials/JotFormApi.credentials.js", + "dist/credentials/Kafka.credentials.js", + "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", + "dist/credentials/KitemakerApi.credentials.js", + "dist/credentials/KoBoToolboxApi.credentials.js", + "dist/credentials/Ldap.credentials.js", + "dist/credentials/LemlistApi.credentials.js", + "dist/credentials/LinearApi.credentials.js", + "dist/credentials/LinearOAuth2Api.credentials.js", + "dist/credentials/LineNotifyOAuth2Api.credentials.js", + "dist/credentials/LingvaNexApi.credentials.js", + "dist/credentials/LinkedInOAuth2Api.credentials.js", + "dist/credentials/LoneScaleApi.credentials.js", + "dist/credentials/Magento2Api.credentials.js", + "dist/credentials/MailcheckApi.credentials.js", + "dist/credentials/MailchimpApi.credentials.js", + "dist/credentials/MailchimpOAuth2Api.credentials.js", + "dist/credentials/MailerLiteApi.credentials.js", + "dist/credentials/MailgunApi.credentials.js", + "dist/credentials/MailjetEmailApi.credentials.js", + "dist/credentials/MailjetSmsApi.credentials.js", + "dist/credentials/MandrillApi.credentials.js", + "dist/credentials/MarketstackApi.credentials.js", + "dist/credentials/MatrixApi.credentials.js", + "dist/credentials/MattermostApi.credentials.js", + "dist/credentials/MauticApi.credentials.js", + "dist/credentials/MauticOAuth2Api.credentials.js", + "dist/credentials/MediumApi.credentials.js", + "dist/credentials/MediumOAuth2Api.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MessageBirdApi.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", + "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", + "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSql.credentials.js", + "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", + "dist/credentials/MindeeInvoiceApi.credentials.js", + "dist/credentials/MindeeReceiptApi.credentials.js", + "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", + "dist/credentials/MoceanApi.credentials.js", + "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", + "dist/credentials/MongoDb.credentials.js", + "dist/credentials/MonicaCrmApi.credentials.js", + "dist/credentials/Mqtt.credentials.js", + "dist/credentials/Msg91Api.credentials.js", + "dist/credentials/MySql.credentials.js", + "dist/credentials/N8nApi.credentials.js", + "dist/credentials/NasaApi.credentials.js", + "dist/credentials/NetlifyApi.credentials.js", + "dist/credentials/NextCloudApi.credentials.js", + "dist/credentials/NextCloudOAuth2Api.credentials.js", + "dist/credentials/NocoDb.credentials.js", + "dist/credentials/NocoDbApiToken.credentials.js", + "dist/credentials/NotionApi.credentials.js", + "dist/credentials/NotionOAuth2Api.credentials.js", + "dist/credentials/NpmApi.credentials.js", + "dist/credentials/OAuth1Api.credentials.js", + "dist/credentials/OAuth2Api.credentials.js", + "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", + "dist/credentials/OneSimpleApi.credentials.js", + "dist/credentials/OnfleetApi.credentials.js", + "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", + "dist/credentials/OpenWeatherMapApi.credentials.js", + "dist/credentials/OrbitApi.credentials.js", + "dist/credentials/OuraApi.credentials.js", + "dist/credentials/PaddleApi.credentials.js", + "dist/credentials/PagerDutyApi.credentials.js", + "dist/credentials/PagerDutyOAuth2Api.credentials.js", + "dist/credentials/PayPalApi.credentials.js", + "dist/credentials/PeekalinkApi.credentials.js", + "dist/credentials/PhantombusterApi.credentials.js", + "dist/credentials/PhilipsHueOAuth2Api.credentials.js", + "dist/credentials/PipedriveApi.credentials.js", + "dist/credentials/PipedriveOAuth2Api.credentials.js", + "dist/credentials/PlivoApi.credentials.js", + "dist/credentials/Postgres.credentials.js", + "dist/credentials/PostHogApi.credentials.js", + "dist/credentials/PostmarkApi.credentials.js", + "dist/credentials/ProfitWellApi.credentials.js", + "dist/credentials/PushbulletOAuth2Api.credentials.js", + "dist/credentials/PushcutApi.credentials.js", + "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", + "dist/credentials/QuestDb.credentials.js", + "dist/credentials/QuickBaseApi.credentials.js", + "dist/credentials/QuickBooksOAuth2Api.credentials.js", + "dist/credentials/RabbitMQ.credentials.js", + "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", + "dist/credentials/RedditOAuth2Api.credentials.js", + "dist/credentials/Redis.credentials.js", + "dist/credentials/RocketchatApi.credentials.js", + "dist/credentials/RundeckApi.credentials.js", + "dist/credentials/S3.credentials.js", + "dist/credentials/SalesforceJwtApi.credentials.js", + "dist/credentials/SalesforceOAuth2Api.credentials.js", + "dist/credentials/SalesmateApi.credentials.js", + "dist/credentials/SeaTableApi.credentials.js", + "dist/credentials/SecurityScorecardApi.credentials.js", + "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", + "dist/credentials/SendGridApi.credentials.js", + "dist/credentials/BrevoApi.credentials.js", + "dist/credentials/SendyApi.credentials.js", + "dist/credentials/SentryIoApi.credentials.js", + "dist/credentials/SentryIoOAuth2Api.credentials.js", + "dist/credentials/SentryIoServerApi.credentials.js", + "dist/credentials/ServiceNowOAuth2Api.credentials.js", + "dist/credentials/ServiceNowBasicApi.credentials.js", + "dist/credentials/Sftp.credentials.js", + "dist/credentials/ShopifyApi.credentials.js", + "dist/credentials/ShopifyAccessTokenApi.credentials.js", + "dist/credentials/ShopifyOAuth2Api.credentials.js", + "dist/credentials/Signl4Api.credentials.js", + "dist/credentials/SlackApi.credentials.js", + "dist/credentials/SlackOAuth2Api.credentials.js", + "dist/credentials/Sms77Api.credentials.js", + "dist/credentials/Smtp.credentials.js", + "dist/credentials/Snowflake.credentials.js", + "dist/credentials/SplunkApi.credentials.js", + "dist/credentials/SpontitApi.credentials.js", + "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", + "dist/credentials/SshPassword.credentials.js", + "dist/credentials/SshPrivateKey.credentials.js", + "dist/credentials/StackbyApi.credentials.js", + "dist/credentials/StoryblokContentApi.credentials.js", + "dist/credentials/StoryblokManagementApi.credentials.js", + "dist/credentials/StrapiApi.credentials.js", + "dist/credentials/StrapiTokenApi.credentials.js", + "dist/credentials/StravaOAuth2Api.credentials.js", + "dist/credentials/StripeApi.credentials.js", + "dist/credentials/SupabaseApi.credentials.js", + "dist/credentials/SurveyMonkeyApi.credentials.js", + "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", + "dist/credentials/SyncroMspApi.credentials.js", + "dist/credentials/TaigaApi.credentials.js", + "dist/credentials/TapfiliateApi.credentials.js", + "dist/credentials/TelegramApi.credentials.js", + "dist/credentials/TheHiveProjectApi.credentials.js", + "dist/credentials/TheHiveApi.credentials.js", + "dist/credentials/TimescaleDb.credentials.js", + "dist/credentials/TodoistApi.credentials.js", + "dist/credentials/TodoistOAuth2Api.credentials.js", + "dist/credentials/TogglApi.credentials.js", + "dist/credentials/TotpApi.credentials.js", + "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", + "dist/credentials/TrelloApi.credentials.js", + "dist/credentials/TwakeCloudApi.credentials.js", + "dist/credentials/TwakeServerApi.credentials.js", + "dist/credentials/TwilioApi.credentials.js", + "dist/credentials/TwistOAuth2Api.credentials.js", + "dist/credentials/TwitterOAuth1Api.credentials.js", + "dist/credentials/TwitterOAuth2Api.credentials.js", + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TypeformOAuth2Api.credentials.js", + "dist/credentials/UnleashedSoftwareApi.credentials.js", + "dist/credentials/UpleadApi.credentials.js", + "dist/credentials/UProcApi.credentials.js", + "dist/credentials/UptimeRobotApi.credentials.js", + "dist/credentials/UrlScanIoApi.credentials.js", + "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", + "dist/credentials/VonageApi.credentials.js", + "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", + "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", + "dist/credentials/WebflowApi.credentials.js", + "dist/credentials/WebflowOAuth2Api.credentials.js", + "dist/credentials/WekanApi.credentials.js", + "dist/credentials/WhatsAppApi.credentials.js", + "dist/credentials/WiseApi.credentials.js", + "dist/credentials/WooCommerceApi.credentials.js", + "dist/credentials/WordpressApi.credentials.js", + "dist/credentials/WorkableApi.credentials.js", + "dist/credentials/WufooApi.credentials.js", + "dist/credentials/XeroOAuth2Api.credentials.js", + "dist/credentials/YourlsApi.credentials.js", + "dist/credentials/YouTubeOAuth2Api.credentials.js", + "dist/credentials/ZammadBasicAuthApi.credentials.js", + "dist/credentials/ZammadTokenAuthApi.credentials.js", + "dist/credentials/ZendeskApi.credentials.js", + "dist/credentials/ZendeskOAuth2Api.credentials.js", + "dist/credentials/ZohoOAuth2Api.credentials.js", + "dist/credentials/ZoomApi.credentials.js", + "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", + "dist/credentials/ZulipApi.credentials.js" + ], + "nodes": [ + "dist/nodes/ActionNetwork/ActionNetwork.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", + "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", + "dist/nodes/Adalo/Adalo.node.js", + "dist/nodes/Affinity/Affinity.node.js", + "dist/nodes/Affinity/AffinityTrigger.node.js", + "dist/nodes/AgileCrm/AgileCrm.node.js", + "dist/nodes/Airtable/Airtable.node.js", + "dist/nodes/Airtable/AirtableTrigger.node.js", + "dist/nodes/Amqp/Amqp.node.js", + "dist/nodes/Amqp/AmqpTrigger.node.js", + "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", + "dist/nodes/Asana/Asana.node.js", + "dist/nodes/Asana/AsanaTrigger.node.js", + "dist/nodes/Automizy/Automizy.node.js", + "dist/nodes/Autopilot/Autopilot.node.js", + "dist/nodes/Autopilot/AutopilotTrigger.node.js", + "dist/nodes/Aws/AwsLambda.node.js", + "dist/nodes/Aws/AwsSns.node.js", + "dist/nodes/Aws/AwsSnsTrigger.node.js", + "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", + "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", + "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", + "dist/nodes/Aws/ELB/AwsElb.node.js", + "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", + "dist/nodes/Aws/S3/AwsS3.node.js", + "dist/nodes/Aws/SES/AwsSes.node.js", + "dist/nodes/Aws/SQS/AwsSqs.node.js", + "dist/nodes/Aws/Textract/AwsTextract.node.js", + "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", + "dist/nodes/BambooHr/BambooHr.node.js", + "dist/nodes/Bannerbear/Bannerbear.node.js", + "dist/nodes/Baserow/Baserow.node.js", + "dist/nodes/Beeminder/Beeminder.node.js", + "dist/nodes/Bitbucket/BitbucketTrigger.node.js", + "dist/nodes/Bitly/Bitly.node.js", + "dist/nodes/Bitwarden/Bitwarden.node.js", + "dist/nodes/Box/Box.node.js", + "dist/nodes/Box/BoxTrigger.node.js", + "dist/nodes/Brandfetch/Brandfetch.node.js", + "dist/nodes/Bubble/Bubble.node.js", + "dist/nodes/Cal/CalTrigger.node.js", + "dist/nodes/Calendly/CalendlyTrigger.node.js", + "dist/nodes/Chargebee/Chargebee.node.js", + "dist/nodes/Chargebee/ChargebeeTrigger.node.js", + "dist/nodes/CircleCi/CircleCi.node.js", + "dist/nodes/Cisco/Webex/CiscoWebex.node.js", + "dist/nodes/Citrix/ADC/CitrixAdc.node.js", + "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", + "dist/nodes/Cloudflare/Cloudflare.node.js", + "dist/nodes/Clearbit/Clearbit.node.js", + "dist/nodes/ClickUp/ClickUp.node.js", + "dist/nodes/ClickUp/ClickUpTrigger.node.js", + "dist/nodes/Clockify/Clockify.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Cockpit/Cockpit.node.js", + "dist/nodes/Coda/Coda.node.js", + "dist/nodes/Code/Code.node.js", + "dist/nodes/CoinGecko/CoinGecko.node.js", + "dist/nodes/CompareDatasets/CompareDatasets.node.js", + "dist/nodes/Compression/Compression.node.js", + "dist/nodes/Contentful/Contentful.node.js", + "dist/nodes/ConvertKit/ConvertKit.node.js", + "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", + "dist/nodes/Copper/Copper.node.js", + "dist/nodes/Copper/CopperTrigger.node.js", + "dist/nodes/Cortex/Cortex.node.js", + "dist/nodes/CrateDb/CrateDb.node.js", + "dist/nodes/Cron/Cron.node.js", + "dist/nodes/CrowdDev/CrowdDev.node.js", + "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", + "dist/nodes/Crypto/Crypto.node.js", + "dist/nodes/CustomerIo/CustomerIo.node.js", + "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", + "dist/nodes/DateTime/DateTime.node.js", + "dist/nodes/DebugHelper/DebugHelper.node.js", + "dist/nodes/DeepL/DeepL.node.js", + "dist/nodes/Demio/Demio.node.js", + "dist/nodes/Dhl/Dhl.node.js", + "dist/nodes/Discord/Discord.node.js", + "dist/nodes/Discourse/Discourse.node.js", + "dist/nodes/Disqus/Disqus.node.js", + "dist/nodes/Drift/Drift.node.js", + "dist/nodes/Dropbox/Dropbox.node.js", + "dist/nodes/Dropcontact/Dropcontact.node.js", + "dist/nodes/EditImage/EditImage.node.js", + "dist/nodes/E2eTest/E2eTest.node.js", + "dist/nodes/Egoi/Egoi.node.js", + "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", + "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", + "dist/nodes/EmailReadImap/EmailReadImap.node.js", + "dist/nodes/EmailSend/EmailSend.node.js", + "dist/nodes/Emelia/Emelia.node.js", + "dist/nodes/Emelia/EmeliaTrigger.node.js", + "dist/nodes/ERPNext/ERPNext.node.js", + "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", + "dist/nodes/Eventbrite/EventbriteTrigger.node.js", + "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflow.node.js", + "dist/nodes/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", + "dist/nodes/ExecutionData/ExecutionData.node.js", + "dist/nodes/Facebook/FacebookGraphApi.node.js", + "dist/nodes/Facebook/FacebookTrigger.node.js", + "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", + "dist/nodes/Figma/FigmaTrigger.node.js", + "dist/nodes/FileMaker/FileMaker.node.js", + "dist/nodes/Filter/Filter.node.js", + "dist/nodes/Flow/Flow.node.js", + "dist/nodes/Flow/FlowTrigger.node.js", + "dist/nodes/Form/FormTrigger.node.js", + "dist/nodes/FormIo/FormIoTrigger.node.js", + "dist/nodes/Formstack/FormstackTrigger.node.js", + "dist/nodes/Freshdesk/Freshdesk.node.js", + "dist/nodes/Freshservice/Freshservice.node.js", + "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", + "dist/nodes/Ftp/Ftp.node.js", + "dist/nodes/Function/Function.node.js", + "dist/nodes/FunctionItem/FunctionItem.node.js", + "dist/nodes/GetResponse/GetResponse.node.js", + "dist/nodes/GetResponse/GetResponseTrigger.node.js", + "dist/nodes/Ghost/Ghost.node.js", + "dist/nodes/Git/Git.node.js", + "dist/nodes/Github/Github.node.js", + "dist/nodes/Github/GithubTrigger.node.js", + "dist/nodes/Gitlab/Gitlab.node.js", + "dist/nodes/Gitlab/GitlabTrigger.node.js", + "dist/nodes/Google/Ads/GoogleAds.node.js", + "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", + "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", + "dist/nodes/Google/Books/GoogleBooks.node.js", + "dist/nodes/Google/Calendar/GoogleCalendar.node.js", + "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", + "dist/nodes/Google/Chat/GoogleChat.node.js", + "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", + "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", + "dist/nodes/Google/Contacts/GoogleContacts.node.js", + "dist/nodes/Google/Docs/GoogleDocs.node.js", + "dist/nodes/Google/Drive/GoogleDrive.node.js", + "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", + "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", + "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", + "dist/nodes/Google/Gmail/Gmail.node.js", + "dist/nodes/Google/Gmail/GmailTrigger.node.js", + "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", + "dist/nodes/Google/Perspective/GooglePerspective.node.js", + "dist/nodes/Google/Sheet/GoogleSheets.node.js", + "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", + "dist/nodes/Google/Slides/GoogleSlides.node.js", + "dist/nodes/Google/Task/GoogleTasks.node.js", + "dist/nodes/Google/Translate/GoogleTranslate.node.js", + "dist/nodes/Google/YouTube/YouTube.node.js", + "dist/nodes/Gotify/Gotify.node.js", + "dist/nodes/GoToWebinar/GoToWebinar.node.js", + "dist/nodes/Grafana/Grafana.node.js", + "dist/nodes/GraphQL/GraphQL.node.js", + "dist/nodes/Grist/Grist.node.js", + "dist/nodes/Gumroad/GumroadTrigger.node.js", + "dist/nodes/HackerNews/HackerNews.node.js", + "dist/nodes/HaloPSA/HaloPSA.node.js", + "dist/nodes/Harvest/Harvest.node.js", + "dist/nodes/HelpScout/HelpScout.node.js", + "dist/nodes/HelpScout/HelpScoutTrigger.node.js", + "dist/nodes/HighLevel/HighLevel.node.js", + "dist/nodes/HomeAssistant/HomeAssistant.node.js", + "dist/nodes/HtmlExtract/HtmlExtract.node.js", + "dist/nodes/Html/Html.node.js", + "dist/nodes/HttpRequest/HttpRequest.node.js", + "dist/nodes/Hubspot/Hubspot.node.js", + "dist/nodes/Hubspot/HubspotTrigger.node.js", + "dist/nodes/HumanticAI/HumanticAi.node.js", + "dist/nodes/Hunter/Hunter.node.js", + "dist/nodes/ICalendar/ICalendar.node.js", + "dist/nodes/If/If.node.js", + "dist/nodes/Intercom/Intercom.node.js", + "dist/nodes/Interval/Interval.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", + "dist/nodes/ItemLists/ItemLists.node.js", + "dist/nodes/Iterable/Iterable.node.js", + "dist/nodes/Jenkins/Jenkins.node.js", + "dist/nodes/Jira/Jira.node.js", + "dist/nodes/Jira/JiraTrigger.node.js", + "dist/nodes/JotForm/JotFormTrigger.node.js", + "dist/nodes/Kafka/Kafka.node.js", + "dist/nodes/Kafka/KafkaTrigger.node.js", + "dist/nodes/Keap/Keap.node.js", + "dist/nodes/Keap/KeapTrigger.node.js", + "dist/nodes/Kitemaker/Kitemaker.node.js", + "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", + "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", + "dist/nodes/Ldap/Ldap.node.js", + "dist/nodes/Lemlist/Lemlist.node.js", + "dist/nodes/Lemlist/LemlistTrigger.node.js", + "dist/nodes/Line/Line.node.js", + "dist/nodes/Linear/Linear.node.js", + "dist/nodes/Linear/LinearTrigger.node.js", + "dist/nodes/LingvaNex/LingvaNex.node.js", + "dist/nodes/LinkedIn/LinkedIn.node.js", + "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", + "dist/nodes/LoneScale/LoneScaleTrigger.node.js", + "dist/nodes/LoneScale/LoneScale.node.js", + "dist/nodes/Magento/Magento2.node.js", + "dist/nodes/Mailcheck/Mailcheck.node.js", + "dist/nodes/Mailchimp/Mailchimp.node.js", + "dist/nodes/Mailchimp/MailchimpTrigger.node.js", + "dist/nodes/MailerLite/MailerLite.node.js", + "dist/nodes/MailerLite/MailerLiteTrigger.node.js", + "dist/nodes/Mailgun/Mailgun.node.js", + "dist/nodes/Mailjet/Mailjet.node.js", + "dist/nodes/Mailjet/MailjetTrigger.node.js", + "dist/nodes/Mandrill/Mandrill.node.js", + "dist/nodes/ManualTrigger/ManualTrigger.node.js", + "dist/nodes/Markdown/Markdown.node.js", + "dist/nodes/Marketstack/Marketstack.node.js", + "dist/nodes/Matrix/Matrix.node.js", + "dist/nodes/Mattermost/Mattermost.node.js", + "dist/nodes/Mautic/Mautic.node.js", + "dist/nodes/Mautic/MauticTrigger.node.js", + "dist/nodes/Medium/Medium.node.js", + "dist/nodes/Merge/Merge.node.js", + "dist/nodes/MessageBird/MessageBird.node.js", + "dist/nodes/Metabase/Metabase.node.js", + "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", + "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", + "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", + "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", + "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", + "dist/nodes/Mindee/Mindee.node.js", + "dist/nodes/Misp/Misp.node.js", + "dist/nodes/Mocean/Mocean.node.js", + "dist/nodes/MondayCom/MondayCom.node.js", + "dist/nodes/MongoDb/MongoDb.node.js", + "dist/nodes/MonicaCrm/MonicaCrm.node.js", + "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", + "dist/nodes/MQTT/Mqtt.node.js", + "dist/nodes/MQTT/MqttTrigger.node.js", + "dist/nodes/Msg91/Msg91.node.js", + "dist/nodes/MySql/MySql.node.js", + "dist/nodes/N8n/N8n.node.js", + "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", + "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", + "dist/nodes/N8nTrigger/N8nTrigger.node.js", + "dist/nodes/Nasa/Nasa.node.js", + "dist/nodes/Netlify/Netlify.node.js", + "dist/nodes/Netlify/NetlifyTrigger.node.js", + "dist/nodes/NextCloud/NextCloud.node.js", + "dist/nodes/NocoDB/NocoDB.node.js", + "dist/nodes/Brevo/Brevo.node.js", + "dist/nodes/Brevo/BrevoTrigger.node.js", + "dist/nodes/StickyNote/StickyNote.node.js", + "dist/nodes/NoOp/NoOp.node.js", + "dist/nodes/Onfleet/Onfleet.node.js", + "dist/nodes/Onfleet/OnfleetTrigger.node.js", + "dist/nodes/Notion/Notion.node.js", + "dist/nodes/Notion/NotionTrigger.node.js", + "dist/nodes/Npm/Npm.node.js", + "dist/nodes/Odoo/Odoo.node.js", + "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", + "dist/nodes/OpenAi/OpenAi.node.js", + "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", + "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", + "dist/nodes/Orbit/Orbit.node.js", + "dist/nodes/Oura/Oura.node.js", + "dist/nodes/Paddle/Paddle.node.js", + "dist/nodes/PagerDuty/PagerDuty.node.js", + "dist/nodes/PayPal/PayPal.node.js", + "dist/nodes/PayPal/PayPalTrigger.node.js", + "dist/nodes/Peekalink/Peekalink.node.js", + "dist/nodes/Phantombuster/Phantombuster.node.js", + "dist/nodes/PhilipsHue/PhilipsHue.node.js", + "dist/nodes/Pipedrive/Pipedrive.node.js", + "dist/nodes/Pipedrive/PipedriveTrigger.node.js", + "dist/nodes/Plivo/Plivo.node.js", + "dist/nodes/PostBin/PostBin.node.js", + "dist/nodes/Postgres/Postgres.node.js", + "dist/nodes/Postgres/PostgresTrigger.node.js", + "dist/nodes/PostHog/PostHog.node.js", + "dist/nodes/Postmark/PostmarkTrigger.node.js", + "dist/nodes/ProfitWell/ProfitWell.node.js", + "dist/nodes/Pushbullet/Pushbullet.node.js", + "dist/nodes/Pushcut/Pushcut.node.js", + "dist/nodes/Pushcut/PushcutTrigger.node.js", + "dist/nodes/Pushover/Pushover.node.js", + "dist/nodes/QuestDb/QuestDb.node.js", + "dist/nodes/QuickBase/QuickBase.node.js", + "dist/nodes/QuickBooks/QuickBooks.node.js", + "dist/nodes/QuickChart/QuickChart.node.js", + "dist/nodes/RabbitMQ/RabbitMQ.node.js", + "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", + "dist/nodes/Raindrop/Raindrop.node.js", + "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", + "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", + "dist/nodes/ReadPdf/ReadPDF.node.js", + "dist/nodes/Reddit/Reddit.node.js", + "dist/nodes/Redis/Redis.node.js", + "dist/nodes/Redis/RedisTrigger.node.js", + "dist/nodes/RenameKeys/RenameKeys.node.js", + "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", + "dist/nodes/Rocketchat/Rocketchat.node.js", + "dist/nodes/RssFeedRead/RssFeedRead.node.js", + "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", + "dist/nodes/Rundeck/Rundeck.node.js", + "dist/nodes/S3/S3.node.js", + "dist/nodes/Salesforce/Salesforce.node.js", + "dist/nodes/Salesmate/Salesmate.node.js", + "dist/nodes/Schedule/ScheduleTrigger.node.js", + "dist/nodes/SeaTable/SeaTable.node.js", + "dist/nodes/SeaTable/SeaTableTrigger.node.js", + "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", + "dist/nodes/Segment/Segment.node.js", + "dist/nodes/SendGrid/SendGrid.node.js", + "dist/nodes/Sendy/Sendy.node.js", + "dist/nodes/SentryIo/SentryIo.node.js", + "dist/nodes/ServiceNow/ServiceNow.node.js", + "dist/nodes/Set/Set.node.js", + "dist/nodes/Shopify/Shopify.node.js", + "dist/nodes/Shopify/ShopifyTrigger.node.js", + "dist/nodes/Signl4/Signl4.node.js", + "dist/nodes/Slack/Slack.node.js", + "dist/nodes/Sms77/Sms77.node.js", + "dist/nodes/Snowflake/Snowflake.node.js", + "dist/nodes/SplitInBatches/SplitInBatches.node.js", + "dist/nodes/Splunk/Splunk.node.js", + "dist/nodes/Spontit/Spontit.node.js", + "dist/nodes/Spotify/Spotify.node.js", + "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", + "dist/nodes/SseTrigger/SseTrigger.node.js", + "dist/nodes/Ssh/Ssh.node.js", + "dist/nodes/Stackby/Stackby.node.js", + "dist/nodes/Start/Start.node.js", + "dist/nodes/StopAndError/StopAndError.node.js", + "dist/nodes/Storyblok/Storyblok.node.js", + "dist/nodes/Strapi/Strapi.node.js", + "dist/nodes/Strava/Strava.node.js", + "dist/nodes/Strava/StravaTrigger.node.js", + "dist/nodes/Stripe/Stripe.node.js", + "dist/nodes/Stripe/StripeTrigger.node.js", + "dist/nodes/Supabase/Supabase.node.js", + "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", + "dist/nodes/Switch/Switch.node.js", + "dist/nodes/SyncroMSP/SyncroMsp.node.js", + "dist/nodes/Taiga/Taiga.node.js", + "dist/nodes/Taiga/TaigaTrigger.node.js", + "dist/nodes/Tapfiliate/Tapfiliate.node.js", + "dist/nodes/Telegram/Telegram.node.js", + "dist/nodes/Telegram/TelegramTrigger.node.js", + "dist/nodes/TheHiveProject/TheHiveProject.node.js", + "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", + "dist/nodes/TheHive/TheHive.node.js", + "dist/nodes/TheHive/TheHiveTrigger.node.js", + "dist/nodes/TimescaleDb/TimescaleDb.node.js", + "dist/nodes/Todoist/Todoist.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", + "dist/nodes/Totp/Totp.node.js", + "dist/nodes/TravisCi/TravisCi.node.js", + "dist/nodes/Trello/Trello.node.js", + "dist/nodes/Trello/TrelloTrigger.node.js", + "dist/nodes/Twake/Twake.node.js", + "dist/nodes/Twilio/Twilio.node.js", + "dist/nodes/Twist/Twist.node.js", + "dist/nodes/Twitter/Twitter.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", + "dist/nodes/Uplead/Uplead.node.js", + "dist/nodes/UProc/UProc.node.js", + "dist/nodes/UptimeRobot/UptimeRobot.node.js", + "dist/nodes/UrlScanIo/UrlScanIo.node.js", + "dist/nodes/Vero/Vero.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", + "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", + "dist/nodes/Vonage/Vonage.node.js", + "dist/nodes/Wait/Wait.node.js", + "dist/nodes/Webflow/Webflow.node.js", + "dist/nodes/Webflow/WebflowTrigger.node.js", + "dist/nodes/Webhook/Webhook.node.js", + "dist/nodes/Wekan/Wekan.node.js", + "dist/nodes/WhatsApp/WhatsApp.node.js", + "dist/nodes/Wise/Wise.node.js", + "dist/nodes/Wise/WiseTrigger.node.js", + "dist/nodes/WooCommerce/WooCommerce.node.js", + "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", + "dist/nodes/Wordpress/Wordpress.node.js", + "dist/nodes/Workable/WorkableTrigger.node.js", + "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", + "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", + "dist/nodes/Wufoo/WufooTrigger.node.js", + "dist/nodes/Xero/Xero.node.js", + "dist/nodes/Xml/Xml.node.js", + "dist/nodes/Yourls/Yourls.node.js", + "dist/nodes/Zammad/Zammad.node.js", + "dist/nodes/Zendesk/Zendesk.node.js", + "dist/nodes/Zendesk/ZendeskTrigger.node.js", + "dist/nodes/Zoho/ZohoCrm.node.js", + "dist/nodes/Zoom/Zoom.node.js", + "dist/nodes/Zulip/Zulip.node.js" + ] + }, + "devDependencies": { + "@types/amqplib": "^0.10.1", + "@types/aws4": "^1.5.1", + "@types/basic-auth": "^1.1.3", + "@types/cheerio": "^0.22.15", + "@types/cron": "~1.7.1", + "@types/eventsource": "^1.1.2", + "@types/express": "^4.17.6", + "@types/gm": "^1.25.0", + "@types/imap-simple": "^4.2.0", + "@types/js-nacl": "^1.3.0", + "@types/jsonwebtoken": "^9.0.1", + "@types/lodash": "^4.14.195", + "@types/lossless-json": "^1.0.0", + "@types/mailparser": "^2.7.3", + "@types/mime-types": "^2.1.0", + "@types/mssql": "^6.0.2", + "@types/node-ssh": "^7.0.1", + "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", + "@types/redis": "^2.8.11", + "@types/request-promise-native": "~1.0.15", + "@types/rfc2047": "^2.0.1", + "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.6.12", + "@types/ssh2-sftp-client": "^5.1.0", + "@types/tmp": "^0.2.0", + "@types/uuid": "^8.3.2", + "@types/xml2js": "^0.4.11", + "eslint-plugin-n8n-nodes-base": "^1.16.0", + "gulp": "^4.0.0", + "n8n-core": "1.14.1" + }, + "dependencies": { + "@kafkajs/confluent-schema-registry": "1.0.6", + "@n8n/vm2": "^3.9.20", + "amqplib": "^0.10.3", + "aws4": "^1.8.0", + "basic-auth": "^2.0.1", + "change-case": "^4.1.1", + "cheerio": "1.0.0-rc.6", + "chokidar": "3.5.2", + "cron": "~1.7.2", + "csv-parse": "^5.5.0", + "currency-codes": "^2.1.0", + "eventsource": "^2.0.2", + "fast-glob": "^3.2.5", + "fflate": "^0.7.0", + "get-system-fonts": "^2.0.2", + "gm": "^1.25.0", + "iconv-lite": "^0.6.2", + "ics": "^2.27.0", + "imap-simple": "^4.3.0", + "isbot": "^3.6.13", + "iso-639-1": "^2.1.3", + "js-nacl": "^1.4.0", + "jsonwebtoken": "^9.0.0", + "kafkajs": "^1.14.0", + "ldapts": "^4.2.6", + "lodash": "^4.17.21", + "lossless-json": "^1.0.4", + "luxon": "^3.3.0", + "mailparser": "^3.2.0", + "minifaker": "^1.34.1", + "moment": "~2.29.2", + "moment-timezone": "^0.5.28", + "mongodb": "^4.17.1", + "mqtt": "^5.0.2", + "mssql": "^8.1.2", + "mysql2": "~2.3.0", + "nanoid": "^3.3.6", + "node-html-markdown": "^1.1.3", + "node-ssh": "^12.0.0", + "nodemailer": "^6.7.1", + "otpauth": "^9.1.1", + "pdfjs-dist": "^2.16.105", + "pg": "^8.3.0", + "pg-promise": "^10.5.8", + "pretty-bytes": "^5.6.0", + "promise-ftp": "^1.3.5", + "pyodide": "^0.23.4", + "redis": "^3.1.1", + "rfc2047": "^4.0.1", + "rhea": "^1.0.11", + "rss-parser": "^3.7.0", + "semver": "^7.5.4", + "showdown": "^2.0.3", + "simple-git": "^3.17.0", + "snowflake-sdk": "^1.8.0", + "ssh2-sftp-client": "^7.0.0", + "tmp-promise": "^3.0.2", + "typedi": "^0.10.0", + "uuid": "^8.3.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "xml2js": "^0.5.0", + "n8n-workflow": "1.14.1" + }, + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc", + "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && gulp build:icons && gulp build:translations && pnpm build:metadata", + "build:translations": "gulp build:translations", + "build:metadata": "pnpm n8n-generate-known && pnpm n8n-generate-ui-types", + "format": "prettier --write . --ignore-path ../../.prettierignore", + "lint": "eslint . --quiet && node ./scripts/validate-load-options-methods.js", + "lintfix": "eslint . --fix", + "watch": "tsc-watch -p tsconfig.build.json --onCompilationComplete \"tsc-alias -p tsconfig.build.json\" --onSuccess \"pnpm n8n-generate-ui-types\"", + "test": "jest" + } + } + } +] \ No newline at end of file diff --git a/tests/test-results/test-summary.json b/tests/test-results/test-summary.json new file mode 100644 index 0000000..802ac66 --- /dev/null +++ b/tests/test-results/test-summary.json @@ -0,0 +1,760 @@ +{ + "totalTests": 6, + "passed": 6, + "failed": 0, + "startTime": "2025-06-08T10:57:55.233Z", + "endTime": "2025-06-08T10:57:59.249Z", + "tests": [ + { + "name": "Basic Node Extraction", + "status": "passed", + "startTime": "2025-06-08T10:57:55.236Z", + "endTime": "2025-06-08T10:57:55.342Z", + "error": null, + "details": { + "results": [ + { + "nodeType": "@n8n/n8n-nodes-langchain.Agent", + "extracted": false, + "error": "Node source code not found for: @n8n/n8n-nodes-langchain.Agent" + }, + { + "nodeType": "n8n-nodes-base.Function", + "extracted": true, + "codeLength": 7449, + "hasCredentials": false, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Function/Function.node.js" + }, + { + "nodeType": "n8n-nodes-base.Webhook", + "extracted": true, + "codeLength": 10667, + "hasCredentials": false, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Webhook/Webhook.node.js" + } + ], + "successCount": 2, + "totalTested": 3 + } + }, + { + "name": "List Available Nodes", + "status": "passed", + "startTime": "2025-06-08T10:57:55.342Z", + "endTime": "2025-06-08T10:57:55.689Z", + "error": null, + "details": { + "totalNodes": 439, + "packages": [ + "unknown" + ], + "nodesByPackage": { + "unknown": [ + "ActionNetwork", + "ActiveCampaign", + "ActiveCampaignTrigger", + "AcuitySchedulingTrigger", + "Adalo", + "Affinity", + "AffinityTrigger", + "AgileCrm", + "Airtable", + "AirtableTrigger", + "AirtableV1", + "Amqp", + "AmqpTrigger", + "ApiTemplateIo", + "Asana", + "AsanaTrigger", + "Automizy", + "Autopilot", + "AutopilotTrigger", + "AwsLambda", + "AwsSns", + "AwsSnsTrigger", + "AwsCertificateManager", + "AwsComprehend", + "AwsDynamoDB", + "AwsElb", + "AwsRekognition", + "AwsS3", + "AwsS3V1", + "AwsS3V2", + "AwsSes", + "AwsSqs", + "AwsTextract", + "AwsTranscribe", + "Bannerbear", + "Baserow", + "Beeminder", + "BitbucketTrigger", + "Bitly", + "Bitwarden", + "Box", + "BoxTrigger", + "Brandfetch", + "Brevo", + "BrevoTrigger", + "Bubble", + "CalTrigger", + "CalendlyTrigger", + "Chargebee", + "ChargebeeTrigger", + "CircleCi", + "CiscoWebex", + "CiscoWebexTrigger", + "CitrixAdc", + "Clearbit", + "ClickUp", + "ClickUpTrigger", + "Clockify", + "ClockifyTrigger", + "Cloudflare", + "Cockpit", + "Coda", + "Code", + "CoinGecko", + "CompareDatasets", + "Compression", + "Contentful", + "ConvertKit", + "ConvertKitTrigger", + "Copper", + "CopperTrigger", + "Cortex", + "CrateDb", + "Cron", + "CrowdDev", + "CrowdDevTrigger", + "Crypto", + "CustomerIo", + "CustomerIoTrigger", + "DateTime", + "DateTimeV1", + "DateTimeV2", + "DebugHelper", + "DeepL", + "Demio", + "Dhl", + "Discord", + "Discourse", + "Disqus", + "Drift", + "Dropbox", + "Dropcontact", + "E2eTest", + "ERPNext", + "EditImage", + "Egoi", + "ElasticSecurity", + "Elasticsearch", + "EmailReadImap", + "EmailReadImapV1", + "EmailReadImapV2", + "EmailSend", + "EmailSendV1", + "EmailSendV2", + "Emelia", + "EmeliaTrigger", + "ErrorTrigger", + "EventbriteTrigger", + "ExecuteCommand", + "ExecuteWorkflow", + "ExecuteWorkflowTrigger", + "ExecutionData", + "FacebookGraphApi", + "FacebookTrigger", + "FacebookLeadAdsTrigger", + "FigmaTrigger", + "FileMaker", + "Filter", + "Flow", + "FlowTrigger", + "FormTrigger", + "FormIoTrigger", + "FormstackTrigger", + "Freshdesk", + "Freshservice", + "FreshworksCrm", + "Ftp", + "Function", + "FunctionItem", + "GetResponse", + "GetResponseTrigger", + "Ghost", + "Git", + "Github", + "GithubTrigger", + "Gitlab", + "GitlabTrigger", + "GoToWebinar", + "GoogleAds", + "GoogleAnalytics", + "GoogleAnalyticsV1", + "GoogleBigQuery", + "GoogleBigQueryV1", + "GoogleBooks", + "GoogleCalendar", + "GoogleCalendarTrigger", + "GoogleChat", + "GoogleCloudNaturalLanguage", + "GoogleCloudStorage", + "GoogleContacts", + "GoogleDocs", + "GoogleDrive", + "GoogleDriveTrigger", + "GoogleDriveV1", + "GoogleFirebaseCloudFirestore", + "GoogleFirebaseRealtimeDatabase", + "GSuiteAdmin", + "Gmail", + "GmailTrigger", + "GmailV1", + "GmailV2", + "GooglePerspective", + "GoogleSheets", + "GoogleSheetsTrigger", + "GoogleSlides", + "GoogleTasks", + "GoogleTranslate", + "YouTube", + "Gotify", + "Grafana", + "GraphQL", + "Grist", + "GumroadTrigger", + "HackerNews", + "HaloPSA", + "Harvest", + "HelpScout", + "HelpScoutTrigger", + "HighLevel", + "HomeAssistant", + "Html", + "HtmlExtract", + "HttpRequest", + "HttpRequestV1", + "HttpRequestV2", + "HttpRequestV3", + "Hubspot", + "HubspotTrigger", + "HubspotV1", + "HubspotV2", + "HumanticAi", + "Hunter", + "ICalendar", + "If", + "Intercom", + "Interval", + "InvoiceNinja", + "InvoiceNinjaTrigger", + "ItemLists", + "ItemListsV1", + "ItemListsV2", + "Iterable", + "Jenkins", + "Jira", + "JiraTrigger", + "JotFormTrigger", + "Kafka", + "KafkaTrigger", + "Keap", + "KeapTrigger", + "Kitemaker", + "KoBoToolbox", + "KoBoToolboxTrigger", + "Ldap", + "Lemlist", + "LemlistTrigger", + "Line", + "Linear", + "LinearTrigger", + "LingvaNex", + "LinkedIn", + "LocalFileTrigger", + "LoneScale", + "LoneScaleTrigger", + "Mqtt", + "MqttTrigger", + "Magento2", + "Mailcheck", + "Mailchimp", + "MailchimpTrigger", + "MailerLite", + "MailerLiteTrigger", + "Mailgun", + "Mailjet", + "MailjetTrigger", + "Mandrill", + "ManualTrigger", + "Markdown", + "Marketstack", + "Matrix", + "Mattermost", + "Mautic", + "MauticTrigger", + "Medium", + "Merge", + "MergeV1", + "MergeV2", + "MessageBird", + "Metabase", + "MicrosoftDynamicsCrm", + "MicrosoftExcel", + "MicrosoftExcelV1", + "MicrosoftGraphSecurity", + "MicrosoftOneDrive", + "MicrosoftOutlook", + "MicrosoftOutlookV1", + "MicrosoftSql", + "MicrosoftTeams", + "MicrosoftToDo", + "Mindee", + "Misp", + "Mocean", + "MondayCom", + "MongoDb", + "MonicaCrm", + "MoveBinaryData", + "Msg91", + "MySql", + "MySqlV1", + "N8n", + "N8nTrainingCustomerDatastore", + "N8nTrainingCustomerMessenger", + "N8nTrigger", + "Nasa", + "Netlify", + "NetlifyTrigger", + "NextCloud", + "NoOp", + "NocoDB", + "Notion", + "NotionTrigger", + "Npm", + "Odoo", + "OneSimpleApi", + "Onfleet", + "OnfleetTrigger", + "OpenAi", + "OpenThesaurus", + "OpenWeatherMap", + "Orbit", + "Oura", + "Paddle", + "PagerDuty", + "PayPal", + "PayPalTrigger", + "Peekalink", + "Phantombuster", + "PhilipsHue", + "Pipedrive", + "PipedriveTrigger", + "Plivo", + "PostBin", + "PostHog", + "Postgres", + "PostgresTrigger", + "PostgresV1", + "PostmarkTrigger", + "ProfitWell", + "Pushbullet", + "Pushcut", + "PushcutTrigger", + "Pushover", + "QuestDb", + "QuickBase", + "QuickBooks", + "QuickChart", + "RabbitMQ", + "RabbitMQTrigger", + "Raindrop", + "ReadBinaryFile", + "ReadBinaryFiles", + "ReadPDF", + "Reddit", + "Redis", + "RedisTrigger", + "RenameKeys", + "RespondToWebhook", + "Rocketchat", + "RssFeedRead", + "RssFeedReadTrigger", + "Rundeck", + "S3", + "Salesforce", + "Salesmate", + "ScheduleTrigger", + "SeaTable", + "SeaTableTrigger", + "SecurityScorecard", + "Segment", + "SendGrid", + "Sendy", + "SentryIo", + "ServiceNow", + "Set", + "SetV1", + "SetV2", + "Shopify", + "ShopifyTrigger", + "Signl4", + "Slack", + "SlackV1", + "SlackV2", + "Sms77", + "Snowflake", + "SplitInBatches", + "SplitInBatchesV1", + "SplitInBatchesV2", + "SplitInBatchesV3", + "Splunk", + "Spontit", + "Spotify", + "SpreadsheetFile", + "SseTrigger", + "Ssh", + "Stackby", + "Start", + "StickyNote", + "StopAndError", + "Storyblok", + "Strapi", + "Strava", + "StravaTrigger", + "Stripe", + "StripeTrigger", + "Supabase", + "SurveyMonkeyTrigger", + "Switch", + "SwitchV1", + "SwitchV2", + "SyncroMsp", + "Taiga", + "TaigaTrigger", + "Tapfiliate", + "Telegram", + "TelegramTrigger", + "TheHive", + "TheHiveTrigger", + "TheHiveProjectTrigger", + "TimescaleDb", + "Todoist", + "TodoistV1", + "TodoistV2", + "TogglTrigger", + "Totp", + "TravisCi", + "Trello", + "TrelloTrigger", + "Twake", + "Twilio", + "Twist", + "Twitter", + "TwitterV1", + "TwitterV2", + "TypeformTrigger", + "UProc", + "UnleashedSoftware", + "Uplead", + "UptimeRobot", + "UrlScanIo", + "VenafiTlsProtectDatacenter", + "VenafiTlsProtectDatacenterTrigger", + "VenafiTlsProtectCloud", + "VenafiTlsProtectCloudTrigger", + "Vero", + "Vonage", + "Wait", + "Webflow", + "WebflowTrigger", + "Webhook", + "Wekan", + "WhatsApp", + "Wise", + "WiseTrigger", + "WooCommerce", + "WooCommerceTrigger", + "Wordpress", + "WorkableTrigger", + "WorkflowTrigger", + "WriteBinaryFile", + "WufooTrigger", + "Xero", + "Xml", + "Yourls", + "Zammad", + "Zendesk", + "ZendeskTrigger", + "ZohoCrm", + "Zoom", + "Zulip" + ] + }, + "sampleNodes": [ + { + "name": "ActionNetwork", + "displayName": "Action Network", + "description": "Consume the Action Network API", + "location": "node_modules/n8n-nodes-base/dist/nodes/ActionNetwork/ActionNetwork.node.js" + }, + { + "name": "ActiveCampaign", + "displayName": "ActiveCampaign", + "description": "Create and edit data in ActiveCampaign", + "location": "node_modules/n8n-nodes-base/dist/nodes/ActiveCampaign/ActiveCampaign.node.js" + }, + { + "name": "ActiveCampaignTrigger", + "displayName": "ActiveCampaign Trigger", + "description": "Handle ActiveCampaign events via webhooks", + "location": "node_modules/n8n-nodes-base/dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js" + }, + { + "name": "AcuitySchedulingTrigger", + "displayName": "Acuity Scheduling Trigger", + "description": "Handle Acuity Scheduling events via webhooks", + "location": "node_modules/n8n-nodes-base/dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js" + }, + { + "name": "Adalo", + "displayName": "Adalo", + "description": "Consume Adalo API", + "location": "node_modules/n8n-nodes-base/dist/nodes/Adalo/Adalo.node.js" + } + ] + } + }, + { + "name": "Bulk Node Extraction", + "status": "passed", + "startTime": "2025-06-08T10:57:55.689Z", + "endTime": "2025-06-08T10:57:58.574Z", + "error": null, + "details": { + "totalAttempted": 10, + "successCount": 6, + "failureCount": 4, + "timeElapsed": 2581, + "results": [ + { + "success": true, + "data": { + "nodeType": "ActionNetwork", + "name": "ActionNetwork", + "codeLength": 15810, + "codeHash": "c0a880f5754b6b532ff787bdb253dc49ffd7f470f28aeddda5be0c73f9f9935f", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/ActionNetwork/ActionNetwork.node.js", + "extractedAt": "2025-06-08T10:57:56.009Z" + } + }, + { + "success": true, + "data": { + "nodeType": "ActiveCampaign", + "name": "ActiveCampaign", + "codeLength": 38399, + "codeHash": "5ea90671718d20eecb6cddae2e21c91470fdb778e8be97106ee2539303422ad2", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "extractedAt": "2025-06-08T10:57:56.032Z" + } + }, + { + "success": false, + "nodeType": "ActiveCampaignTrigger", + "error": "Node source code not found for: ActiveCampaignTrigger" + }, + { + "success": false, + "nodeType": "AcuitySchedulingTrigger", + "error": "Node source code not found for: AcuitySchedulingTrigger" + }, + { + "success": true, + "data": { + "nodeType": "Adalo", + "name": "Adalo", + "codeLength": 8234, + "codeHash": "0fbcb0b60141307fdc3394154af1b2c3133fa6181aac336249c6c211fd24846f", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Adalo/Adalo.node.js", + "extractedAt": "2025-06-08T10:57:57.330Z" + } + }, + { + "success": true, + "data": { + "nodeType": "Affinity", + "name": "Affinity", + "codeLength": 16217, + "codeHash": "e605ea187767403dfa55cd374690f7df563a0baa7ca6991d86d522dc101a2846", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Affinity/Affinity.node.js", + "extractedAt": "2025-06-08T10:57:57.343Z" + } + }, + { + "success": false, + "nodeType": "AffinityTrigger", + "error": "Node source code not found for: AffinityTrigger" + }, + { + "success": true, + "data": { + "nodeType": "AgileCrm", + "name": "AgileCrm", + "codeLength": 28115, + "codeHash": "ce71c3b5dec23a48d24c5775e9bb79006ce395bed62b306c56340b5c772379c2", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/AgileCrm/AgileCrm.node.js", + "extractedAt": "2025-06-08T10:57:57.925Z" + } + }, + { + "success": true, + "data": { + "nodeType": "Airtable", + "name": "Airtable", + "codeLength": 936, + "codeHash": "2d67e72931697178946f5127b43e954649c4c5e7ad9e29764796404ae96e7db5", + "hasCredentials": true, + "hasPackageInfo": true, + "location": "node_modules/n8n-nodes-base/dist/nodes/Airtable/Airtable.node.js", + "extractedAt": "2025-06-08T10:57:57.941Z" + } + }, + { + "success": false, + "nodeType": "AirtableTrigger", + "error": "Node source code not found for: AirtableTrigger" + } + ] + } + }, + { + "name": "Database Schema Validation", + "status": "passed", + "startTime": "2025-06-08T10:57:58.574Z", + "endTime": "2025-06-08T10:57:58.575Z", + "error": null, + "details": { + "schemaValid": true, + "tablesCount": 4, + "estimatedStoragePerNode": 16834 + } + }, + { + "name": "Error Handling", + "status": "passed", + "startTime": "2025-06-08T10:57:58.575Z", + "endTime": "2025-06-08T10:57:59.244Z", + "error": null, + "details": { + "totalTests": 3, + "passed": 2, + "results": [ + { + "name": "Non-existent node", + "nodeType": "non-existent-package.FakeNode", + "expectedError": "not found", + "passed": true, + "actualError": "Node source code not found for: non-existent-package.FakeNode" + }, + { + "name": "Invalid node type format", + "nodeType": "", + "expectedError": "invalid", + "passed": false, + "actualError": "Node source code not found for: " + }, + { + "name": "Malformed package name", + "nodeType": "@invalid@package.Node", + "expectedError": "not found", + "passed": true, + "actualError": "Node source code not found for: @invalid@package.Node" + } + ] + } + }, + { + "name": "MCP Server Integration", + "status": "passed", + "startTime": "2025-06-08T10:57:59.244Z", + "endTime": "2025-06-08T10:57:59.249Z", + "error": null, + "details": { + "serverCreated": true, + "config": { + "port": 3000, + "host": "0.0.0.0", + "authToken": "test-token" + } + } + } + ], + "extractedNodes": 6, + "databaseSchema": { + "tables": { + "nodes": { + "columns": { + "id": "UUID PRIMARY KEY", + "node_type": "VARCHAR(255) UNIQUE NOT NULL", + "name": "VARCHAR(255) NOT NULL", + "package_name": "VARCHAR(255)", + "display_name": "VARCHAR(255)", + "description": "TEXT", + "version": "VARCHAR(50)", + "code_hash": "VARCHAR(64) NOT NULL", + "code_length": "INTEGER NOT NULL", + "source_location": "TEXT", + "extracted_at": "TIMESTAMP NOT NULL", + "updated_at": "TIMESTAMP" + }, + "indexes": [ + "node_type", + "package_name", + "code_hash" + ] + }, + "node_source_code": { + "columns": { + "id": "UUID PRIMARY KEY", + "node_id": "UUID REFERENCES nodes(id)", + "source_code": "TEXT NOT NULL", + "compiled_code": "TEXT", + "source_map": "TEXT" + } + }, + "node_credentials": { + "columns": { + "id": "UUID PRIMARY KEY", + "node_id": "UUID REFERENCES nodes(id)", + "credential_type": "VARCHAR(255) NOT NULL", + "credential_code": "TEXT NOT NULL", + "required_fields": "JSONB" + } + }, + "node_metadata": { + "columns": { + "id": "UUID PRIMARY KEY", + "node_id": "UUID REFERENCES nodes(id)", + "package_info": "JSONB", + "dependencies": "JSONB", + "icon": "TEXT", + "categories": "TEXT[]", + "documentation_url": "TEXT" + } + } + } + } +} \ No newline at end of file diff --git a/tests/test-slack-docs-issue.js b/tests/test-slack-docs-issue.js new file mode 100755 index 0000000..6e832da --- /dev/null +++ b/tests/test-slack-docs-issue.js @@ -0,0 +1,133 @@ +#!/usr/bin/env node + +const { DocumentationFetcher } = require('../dist/utils/documentation-fetcher'); +const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor'); +const { execSync } = require('child_process'); +const path = require('path'); +const fs = require('fs'); + +async function investigateSlackDocs() { + console.log('=== Investigating Slack Node Documentation Issue ===\n'); + + const docsFetcher = new DocumentationFetcher(); + const extractor = new NodeSourceExtractor(); + + try { + // 1. Ensure docs repo is available + console.log('1๏ธโƒฃ Ensuring documentation repository...'); + await docsFetcher.ensureDocsRepository(); + + // 2. Check what files exist for Slack + console.log('\n2๏ธโƒฃ Searching for Slack documentation files...'); + const docsPath = path.join(process.cwd(), 'temp', 'n8n-docs'); + + try { + const slackFiles = execSync( + `find ${docsPath} -name "*slack*" -type f | grep -v ".git"`, + { encoding: 'utf-8' } + ).trim().split('\n').filter(Boolean); + + console.log(`Found ${slackFiles.length} files with "slack" in the name:`); + slackFiles.forEach(file => { + const relPath = path.relative(docsPath, file); + console.log(` - ${relPath}`); + }); + + // Check content of each file + console.log('\n3๏ธโƒฃ Checking content of Slack-related files...'); + for (const file of slackFiles.slice(0, 5)) { // Check first 5 files + if (file.endsWith('.md')) { + const content = fs.readFileSync(file, 'utf-8'); + const firstLine = content.split('\n')[0]; + const isCredential = content.includes('credential') || content.includes('authentication'); + console.log(`\n ๐Ÿ“„ ${path.basename(file)}`); + console.log(` First line: ${firstLine}`); + console.log(` Is credential doc: ${isCredential}`); + + // Check if it mentions being a node or credential + if (content.includes('# Slack node')) { + console.log(' โœ… This is the Slack NODE documentation!'); + console.log(` Path: ${file}`); + } else if (content.includes('# Slack credentials')) { + console.log(' โš ๏ธ This is the Slack CREDENTIALS documentation'); + } + } + } + } catch (error) { + console.log('Error searching for Slack files:', error.message); + } + + // 4. Test the getNodeDocumentation method + console.log('\n4๏ธโƒฃ Testing getNodeDocumentation for Slack...'); + const slackDocs = await docsFetcher.getNodeDocumentation('n8n-nodes-base.slack'); + + if (slackDocs) { + console.log(' โœ… Found documentation for Slack node'); + console.log(` URL: ${slackDocs.url}`); + console.log(` Content preview: ${slackDocs.markdown.substring(0, 200)}...`); + + // Check if it's credential or node docs + const isCredentialDoc = slackDocs.markdown.includes('credential') || + slackDocs.markdown.includes('authentication') || + slackDocs.markdown.includes('# Slack credentials'); + const isNodeDoc = slackDocs.markdown.includes('# Slack node') || + slackDocs.markdown.includes('## Properties'); + + console.log(` Is credential doc: ${isCredentialDoc}`); + console.log(` Is node doc: ${isNodeDoc}`); + } else { + console.log(' โŒ No documentation found for Slack node'); + } + + // 5. Extract the Slack node source to understand its structure + console.log('\n5๏ธโƒฃ Extracting Slack node source code...'); + try { + const slackNode = await extractor.extractNodeSource('n8n-nodes-base.slack'); + console.log(' โœ… Successfully extracted Slack node'); + console.log(` Location: ${slackNode.location}`); + console.log(` Has credential code: ${!!slackNode.credentialCode}`); + + // Parse the node definition + const descMatch = slackNode.sourceCode.match(/description\s*[:=]\s*({[\s\S]*?})\s*[,;]/); + if (descMatch) { + console.log(' Found node description in source'); + } + } catch (error) { + console.log(' โŒ Failed to extract Slack node:', error.message); + } + + // 6. Check documentation structure + console.log('\n6๏ธโƒฃ Checking n8n-docs repository structure...'); + const docStructure = [ + 'docs/integrations/builtin/app-nodes', + 'docs/integrations/builtin/core-nodes', + 'docs/integrations/builtin/trigger-nodes', + 'docs/integrations/builtin/credentials' + ]; + + for (const dir of docStructure) { + const fullPath = path.join(docsPath, dir); + try { + const files = fs.readdirSync(fullPath); + const slackFile = files.find(f => f.toLowerCase().includes('slack')); + console.log(`\n ๐Ÿ“ ${dir}:`); + if (slackFile) { + console.log(` Found: ${slackFile}`); + } else { + console.log(` No Slack files found`); + } + } catch (error) { + console.log(` Directory doesn't exist`); + } + } + + } catch (error) { + console.error('\nโŒ Investigation failed:', error); + } finally { + // Cleanup + await docsFetcher.cleanup(); + } +} + +// Run investigation +investigateSlackDocs().catch(console.error); \ No newline at end of file diff --git a/tests/test-slack-fix.js b/tests/test-slack-fix.js new file mode 100755 index 0000000..758ad4a --- /dev/null +++ b/tests/test-slack-fix.js @@ -0,0 +1,119 @@ +#!/usr/bin/env node + +const { NodeDocumentationService } = require('../dist/services/node-documentation-service'); +const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor'); +const { DocumentationFetcher } = require('../dist/utils/documentation-fetcher'); + +async function testSlackFix() { + console.log('=== Testing Slack Node Fix ===\n'); + + const extractor = new NodeSourceExtractor(); + const docsFetcher = new DocumentationFetcher(); + + try { + // Test 1: Node source extraction + console.log('1๏ธโƒฃ Testing Slack node source extraction...'); + const slackSource = await extractor.extractNodeSource('n8n-nodes-base.slack'); + console.log(` โœ… Source code found at: ${slackSource.location}`); + console.log(` ๐Ÿ“ Source length: ${slackSource.sourceCode.length} bytes`); + + // Extract display name from source + const displayNameMatch = slackSource.sourceCode.match(/displayName\s*[:=]\s*['"`]([^'"`]+)['"`]/); + console.log(` ๐Ÿ“› Display name: ${displayNameMatch ? displayNameMatch[1] : 'Not found'}`); + + // Test 2: Documentation fetching + console.log('\n2๏ธโƒฃ Testing Slack documentation fetching...'); + const slackDocs = await docsFetcher.getNodeDocumentation('n8n-nodes-base.slack'); + + if (slackDocs) { + console.log(` โœ… Documentation found`); + console.log(` ๐Ÿ“„ URL: ${slackDocs.url}`); + + // Extract title from markdown + const titleMatch = slackDocs.markdown.match(/title:\s*(.+)/); + console.log(` ๐Ÿ“ Title: ${titleMatch ? titleMatch[1] : 'Not found'}`); + + // Check if it's the correct documentation + const isNodeDoc = slackDocs.markdown.includes('Slack node') || + slackDocs.markdown.includes('node documentation'); + const isCredentialDoc = slackDocs.markdown.includes('Slack credentials') && + !slackDocs.markdown.includes('node documentation'); + + console.log(` โœ… Is node documentation: ${isNodeDoc}`); + console.log(` โŒ Is credential documentation: ${isCredentialDoc}`); + + if (isNodeDoc && !isCredentialDoc) { + console.log('\n๐ŸŽ‰ SUCCESS: Slack node documentation is correctly fetched!'); + } else { + console.log('\nโš ๏ธ WARNING: Documentation may not be correct'); + } + + // Show first few lines of content + console.log('\n๐Ÿ“‹ Documentation preview:'); + const lines = slackDocs.markdown.split('\n').slice(0, 15); + lines.forEach(line => console.log(` ${line}`)); + + } else { + console.log(' โŒ No documentation found'); + } + + // Test 3: Complete node info using NodeDocumentationService + console.log('\n3๏ธโƒฃ Testing complete node info storage...'); + const service = new NodeDocumentationService('./data/test-slack-fix.db'); + + try { + // Parse node definition + const nodeDefinition = { + displayName: displayNameMatch ? displayNameMatch[1] : 'Slack', + description: 'Send messages to Slack channels, users and conversations', + category: 'Communication', + icon: 'file:slack.svg', + version: 2 + }; + + // Store node info + await service.storeNode({ + nodeType: 'n8n-nodes-base.slack', + name: 'slack', + displayName: nodeDefinition.displayName, + description: nodeDefinition.description, + category: nodeDefinition.category, + icon: nodeDefinition.icon, + sourceCode: slackSource.sourceCode, + credentialCode: slackSource.credentialCode, + documentation: slackDocs?.markdown, + documentationUrl: slackDocs?.url, + packageName: 'n8n-nodes-base', + version: nodeDefinition.version, + hasCredentials: !!slackSource.credentialCode, + isTrigger: false, + isWebhook: false + }); + + console.log(' โœ… Node info stored successfully'); + + // Retrieve and verify + const retrievedNode = await service.getNodeInfo('n8n-nodes-base.slack'); + if (retrievedNode) { + console.log(' โœ… Node retrieved successfully'); + console.log(` ๐Ÿ“› Display name: ${retrievedNode.displayName}`); + console.log(` ๐Ÿ“ Has documentation: ${!!retrievedNode.documentation}`); + console.log(` ๐Ÿ“„ Documentation URL: ${retrievedNode.documentationUrl || 'N/A'}`); + } + + service.close(); + } catch (error) { + console.error(' โŒ Error with node service:', error.message); + service.close(); + } + + console.log('\nโœ… All tests completed!'); + + } catch (error) { + console.error('\nโŒ Test failed:', error); + } finally { + await docsFetcher.cleanup(); + } +} + +testSlackFix().catch(console.error); \ No newline at end of file diff --git a/tests/test-slack-node-complete.js b/tests/test-slack-node-complete.js new file mode 100644 index 0000000..58c3287 --- /dev/null +++ b/tests/test-slack-node-complete.js @@ -0,0 +1,137 @@ +#!/usr/bin/env node + +const { NodeDocumentationService } = require('../dist/services/node-documentation-service'); +const { EnhancedDocumentationFetcher } = require('../dist/utils/documentation-fetcher'); +const { NodeSourceExtractor } = require('../dist/utils/node-source-extractor'); +const path = require('path'); + +async function testSlackNode() { + console.log('๐Ÿงช Testing Slack Node Complete Information Extraction\n'); + + const dbPath = path.join(__dirname, '../data/test-slack.db'); + const service = new NodeDocumentationService(dbPath); + const fetcher = new EnhancedDocumentationFetcher(); + const extractor = new NodeSourceExtractor(); + + try { + console.log('๐Ÿ“š Fetching Slack node documentation...'); + const docs = await fetcher.getEnhancedNodeDocumentation('n8n-nodes-base.Slack'); + + console.log('\nโœ… Documentation Structure:'); + console.log(`- Title: ${docs.title}`); + console.log(`- Has markdown: ${docs.markdown?.length > 0 ? 'Yes' : 'No'} (${docs.markdown?.length || 0} chars)`); + console.log(`- Operations: ${docs.operations?.length || 0}`); + console.log(`- API Methods: ${docs.apiMethods?.length || 0}`); + console.log(`- Examples: ${docs.examples?.length || 0}`); + console.log(`- Templates: ${docs.templates?.length || 0}`); + console.log(`- Related Resources: ${docs.relatedResources?.length || 0}`); + console.log(`- Required Scopes: ${docs.requiredScopes?.length || 0}`); + + console.log('\n๐Ÿ“‹ Operations by Resource:'); + const resourceMap = new Map(); + if (docs.operations) { + docs.operations.forEach(op => { + if (!resourceMap.has(op.resource)) { + resourceMap.set(op.resource, []); + } + resourceMap.get(op.resource).push(op); + }); + } + + for (const [resource, ops] of resourceMap) { + console.log(`\n ${resource}:`); + ops.forEach(op => { + console.log(` - ${op.operation}: ${op.description}`); + }); + } + + console.log('\n๐Ÿ”Œ Sample API Methods:'); + if (docs.apiMethods) { + docs.apiMethods.slice(0, 5).forEach(method => { + console.log(` - ${method.operation} โ†’ ${method.apiMethod}`); + }); + } + + console.log('\n๐Ÿ’ป Extracting Slack node source code...'); + const sourceInfo = await extractor.extractNodeSource('n8n-nodes-base.Slack'); + + console.log('\nโœ… Source Code Extraction:'); + console.log(`- Has source code: ${sourceInfo.sourceCode ? 'Yes' : 'No'} (${sourceInfo.sourceCode?.length || 0} chars)`); + console.log(`- Has credential code: ${sourceInfo.credentialCode ? 'Yes' : 'No'} (${sourceInfo.credentialCode?.length || 0} chars)`); + console.log(`- Package name: ${sourceInfo.packageInfo?.name}`); + console.log(`- Package version: ${sourceInfo.packageInfo?.version}`); + + // Store in database + console.log('\n๐Ÿ’พ Storing in database...'); + await service.storeNode({ + nodeType: 'n8n-nodes-base.Slack', + name: 'Slack', + displayName: 'Slack', + description: 'Send and receive messages, manage channels, and more', + category: 'Communication', + documentationUrl: docs?.url || 'https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/', + documentationMarkdown: docs?.markdown, + documentationTitle: docs?.title, + operations: docs?.operations, + apiMethods: docs?.apiMethods, + documentationExamples: docs?.examples, + templates: docs?.templates, + relatedResources: docs?.relatedResources, + requiredScopes: docs?.requiredScopes, + sourceCode: sourceInfo.sourceCode || '', + credentialCode: sourceInfo.credentialCode, + packageName: sourceInfo.packageInfo?.name || 'n8n-nodes-base', + version: sourceInfo.packageInfo?.version, + hasCredentials: true, + isTrigger: false, + isWebhook: false + }); + + // Retrieve and verify + console.log('\n๐Ÿ” Retrieving from database...'); + const storedNode = await service.getNodeInfo('n8n-nodes-base.Slack'); + + console.log('\nโœ… Verification Results:'); + console.log(`- Node found: ${storedNode ? 'Yes' : 'No'}`); + if (storedNode) { + console.log(`- Has operations: ${storedNode.operations?.length > 0 ? 'Yes' : 'No'} (${storedNode.operations?.length || 0})`); + console.log(`- Has API methods: ${storedNode.apiMethods?.length > 0 ? 'Yes' : 'No'} (${storedNode.apiMethods?.length || 0})`); + console.log(`- Has examples: ${storedNode.documentationExamples?.length > 0 ? 'Yes' : 'No'} (${storedNode.documentationExamples?.length || 0})`); + console.log(`- Has source code: ${storedNode.sourceCode ? 'Yes' : 'No'}`); + console.log(`- Has credential code: ${storedNode.credentialCode ? 'Yes' : 'No'}`); + } + + // Test search + console.log('\n๐Ÿ” Testing search...'); + const searchResults = await service.searchNodes('message send'); + const slackInResults = searchResults.some(r => r.nodeType === 'n8n-nodes-base.Slack'); + console.log(`- Slack found in search results: ${slackInResults ? 'Yes' : 'No'}`); + + console.log('\nโœ… Complete Information Test Summary:'); + const hasCompleteInfo = + storedNode && + storedNode.operations?.length > 0 && + storedNode.apiMethods?.length > 0 && + storedNode.sourceCode && + storedNode.documentationMarkdown; + + console.log(`- Has complete information: ${hasCompleteInfo ? 'โœ… YES' : 'โŒ NO'}`); + + if (!hasCompleteInfo) { + console.log('\nโŒ Missing Information:'); + if (!storedNode) console.log(' - Node not stored properly'); + if (!storedNode?.operations?.length) console.log(' - No operations extracted'); + if (!storedNode?.apiMethods?.length) console.log(' - No API methods extracted'); + if (!storedNode?.sourceCode) console.log(' - No source code extracted'); + if (!storedNode?.documentationMarkdown) console.log(' - No documentation extracted'); + } + + } catch (error) { + console.error('โŒ Test failed:', error); + } finally { + await service.close(); + } +} + +// Run the test +testSlackNode().catch(console.error); \ No newline at end of file