fix: 修复TypeScript配置错误并更新项目文档

详细说明:
- 修复了@n8n/config包的TypeScript配置错误
- 移除了不存在的jest-expect-message类型引用
- 清理了所有TypeScript构建缓存
- 更新了可行性分析文档,添加了技术实施方案
- 更新了Agent prompt文档
- 添加了会展策划工作流文档
- 包含了n8n-chinese-translation子项目
- 添加了exhibition-demo展示系统框架
This commit is contained in:
Yep_Q
2025-09-08 10:49:45 +08:00
parent 8cf9d36d81
commit 3db7af209c
426 changed files with 71699 additions and 4401 deletions

View File

@@ -0,0 +1,13 @@
![n8n.io - Workflow Automation](https://user-images.githubusercontent.com/65276001/173571060-9f2f6d7b-bac0-43b6-bdb2-001da9694058.png)
# n8n-nodes-base
The nodes which are included by default in n8n
```
npm install n8n-nodes-base -g
```
## License
You can find the license information [here](https://github.com/n8n-io/n8n/blob/master/README.md#license)

View File

@@ -0,0 +1,10 @@
// Avoid tests failing because of difference between local and GitHub actions timezone
process.env.TZ = 'UTC';
/** @type {import('jest').Config} */
module.exports = {
...require('../../jest.config'),
collectCoverageFrom: ['credentials/**/*.ts', 'nodes/**/*.ts', 'utils/**/*.ts'],
globalSetup: '<rootDir>/test/globalSetup.ts',
setupFilesAfterEnv: ['jest-expect-message', '<rootDir>/test/setup.ts'],
};

View File

@@ -1,137 +0,0 @@
import { NodeTestHarness } from '@nodes-testing/node-test-harness';
import { mock } from 'jest-mock-extended';
import { DateTime } from 'luxon';
import { NodeOperationError, type IExecuteFunctions } from 'n8n-workflow';
import { Wait } from '../Wait.node';
describe('Execute Wait Node', () => {
let timer: NodeJS.Timeout;
const { clearInterval, setInterval } = global;
const nextDay = DateTime.now().startOf('day').plus({ days: 1 });
beforeAll(() => {
timer = setInterval(() => jest.advanceTimersByTime(1000), 10);
jest.useFakeTimers().setSystemTime(new Date('2025-01-01'));
});
afterAll(() => {
clearInterval(timer);
jest.useRealTimers();
});
test.each([
{ value: 'invalid_date', isValid: false },
{
value: nextDay.toISO(),
isValid: true,
expectedWaitTill: nextDay.toJSDate(),
},
{
value: nextDay.toISO({ includeOffset: true }),
isValid: true,
expectedWaitTill: nextDay.toUTC().toJSDate(),
},
{
value: nextDay.toJSDate(),
isValid: true,
expectedWaitTill: nextDay.toJSDate(),
},
{
value: nextDay,
isValid: true,
expectedWaitTill: nextDay.toJSDate(),
},
])(
'Test Wait Node with specificTime $value and isValid $isValid',
async ({ value, isValid, expectedWaitTill }) => {
const putExecutionToWaitSpy = jest.fn();
const waitNode = new Wait();
const executeFunctionsMock = mock<IExecuteFunctions>({
getNodeParameter: jest.fn().mockImplementation((paramName: string) => {
if (paramName === 'resume') return 'specificTime';
if (paramName === 'dateTime') return value;
}),
getTimezone: jest.fn().mockReturnValue('UTC'),
putExecutionToWait: putExecutionToWaitSpy,
getInputData: jest.fn(),
getNode: jest.fn(),
});
if (isValid) {
await expect(waitNode.execute(executeFunctionsMock)).resolves.not.toThrow();
expect(putExecutionToWaitSpy).toHaveBeenCalledWith(expectedWaitTill);
} else {
await expect(waitNode.execute(executeFunctionsMock)).rejects.toThrow(NodeOperationError);
}
},
);
describe('Validation', () => {
describe('Time interval', () => {
it.each([
{
unit: 'seconds',
amount: 300,
expectedWaitTill: () => DateTime.now().plus({ seconds: 300 }).toJSDate(),
},
{
unit: 'minutes',
amount: 2,
expectedWaitTill: () => DateTime.now().plus({ minutes: 2 }).toJSDate(),
},
{
unit: 'hours',
amount: 1,
expectedWaitTill: () => DateTime.now().plus({ hours: 1 }).toJSDate(),
},
{
unit: 'days',
amount: 10,
expectedWaitTill: () => DateTime.now().plus({ days: 10 }).toJSDate(),
},
{
unit: 'seconds',
amount: -10,
error: 'Invalid wait amount. It must be a positive number.',
},
{
unit: 'years',
amount: 10,
error: "Invalid wait unit. Valid units are 'seconds', 'minutes', 'hours', or 'days'.",
},
{
unit: 'minutes',
amount: 'test',
error: 'Invalid wait amount. It must be a positive number.',
},
])(
'Validate wait unit: $unit, amount: $amount',
async ({ unit, amount, expectedWaitTill, error }) => {
const putExecutionToWaitSpy = jest.fn();
const waitNode = new Wait();
const executeFunctionsMock = mock<IExecuteFunctions>({
getNodeParameter: jest.fn().mockImplementation((paramName: string) => {
if (paramName === 'resume') return 'timeInterval';
if (paramName === 'amount') return amount;
if (paramName === 'unit') return unit;
}),
getTimezone: jest.fn().mockReturnValue('UTC'),
putExecutionToWait: putExecutionToWaitSpy,
getInputData: jest.fn(),
getNode: jest.fn(),
});
if (!error) {
await expect(waitNode.execute(executeFunctionsMock)).resolves.not.toThrow();
expect(putExecutionToWaitSpy).toHaveBeenCalledWith(expectedWaitTill?.());
} else {
await expect(waitNode.execute(executeFunctionsMock)).rejects.toThrowError(error);
}
},
);
});
});
new NodeTestHarness().setupTests();
});

View File

@@ -1,162 +0,0 @@
{
"name": "[Unit Test] Wait Node",
"nodes": [
{
"parameters": {},
"id": "76e5dcfd-fdc7-472f-8832-bccc0eb122c0",
"name": "When clicking \"Execute Workflow\"",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [120, 420]
},
{
"parameters": {
"amount": 42,
"unit": "seconds"
},
"id": "37f2c758-6fb2-43ce-86ae-ca11ec957cbd",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"typeVersion": 1,
"position": [560, 420],
"webhookId": "35edc971-c3e4-48cf-835d-4d73a4fd1fd8"
},
{
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ parseInt($json.afterTimestamp) }}",
"operation": "largerEqual",
"value2": "={{ parseInt($json.startTimestamp) + 42 }}"
}
]
}
},
"id": "c5c53934-2677-4adf-a4df-b32f3b0642a2",
"name": "IF",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [960, 420]
},
{
"parameters": {
"keepOnlySet": true,
"values": {
"boolean": [
{
"name": "success",
"value": true
}
]
},
"options": {}
},
"id": "a78417b6-d3f5-4bbc-916a-d4b9d46961cc",
"name": "Set1",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [1180, 400]
},
{
"parameters": {
"value": "={{ $now }}",
"dataPropertyName": "afterTimestamp",
"toFormat": "X",
"options": {}
},
"id": "94f042ea-49d5-44ea-9ccf-93dac8d27d4a",
"name": "After",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 1,
"position": [760, 420]
},
{
"parameters": {
"value": "={{ $now }}",
"dataPropertyName": "startTimestamp",
"toFormat": "X",
"options": {}
},
"id": "43f8a396-1bf7-484e-962c-120f677dfa51",
"name": "Before",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 1,
"position": [360, 420]
}
],
"pinData": {
"Set1": [
{
"json": {
"success": true
}
}
]
},
"connections": {
"When clicking \"Execute Workflow\"": {
"main": [
[
{
"node": "Before",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "After",
"type": "main",
"index": 0
}
]
]
},
"IF": {
"main": [
[
{
"node": "Set1",
"type": "main",
"index": 0
}
]
]
},
"After": {
"main": [
[
{
"node": "IF",
"type": "main",
"index": 0
}
]
]
},
"Before": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {},
"versionId": "8ed794a0-5c04-4b8a-9a49-02c2c7f8003f",
"id": "500",
"meta": {
"instanceId": "8c8c5237b8e37b006a7adce87f4369350c58e41f3ca9de16196d3197f69eabcd"
},
"tags": []
}

View File

@@ -1,60 +0,0 @@
{
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "test",
"options": {
"binaryData": false
}
},
"id": "ec188f16-b2c5-44e3-bd83-259a94f15c94",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"webhookId": "a59a3be7-6d43-47e7-951d-86b8172c2006"
}
],
"connections": {
"Webhook": {
"main": [[]]
}
},
"trigger": {
"mode": "webhook",
"input": {
"json": {
"headers": {
"host": "localhost:5678",
"user-agent": "curl/8.2.0",
"accept": "*/*",
"content-length": "137",
"content-type": "multipart/form-data; boundary=--boundary"
},
"params": { "path": "test" },
"query": {},
"body": { "a": ["b"] }
}
}
},
"pinData": {
"Webhook": [
{
"json": {
"headers": {
"host": "localhost:5678",
"user-agent": "curl/8.2.0",
"accept": "*/*",
"content-length": "137",
"content-type": "multipart/form-data; boundary=--boundary"
},
"params": { "path": "test" },
"query": {},
"body": {
"a": ["b"]
}
}
}
]
}
}

View File

@@ -1,137 +0,0 @@
import { NodeTestHarness } from '@nodes-testing/node-test-harness';
import type { Request, Response } from 'express';
import fs from 'fs/promises';
import { mock } from 'jest-mock-extended';
import type { IWebhookFunctions } from 'n8n-workflow';
import { Webhook } from '../Webhook.node';
jest.mock('fs/promises');
const mockFs = jest.mocked(fs);
describe('Test Webhook Node', () => {
new NodeTestHarness().setupTests();
describe('handleFormData', () => {
const node = new Webhook();
const context = mock<IWebhookFunctions>({
nodeHelpers: mock(),
});
context.getNodeParameter.calledWith('options').mockReturnValue({});
context.getNode.calledWith().mockReturnValue({
type: 'n8n-nodes-base.webhook',
typeVersion: 1.1,
} as any);
const req = mock<Request>();
req.contentType = 'multipart/form-data';
context.getRequestObject.mockReturnValue(req);
it('should handle when no files are present', async () => {
req.body = {
files: {},
};
const returnData = await node.webhook(context);
expect(returnData.workflowData?.[0][0].binary).toBeUndefined();
expect(context.nodeHelpers.copyBinaryFile).not.toHaveBeenCalled();
});
it('should handle when files are present', async () => {
req.body = {
files: { file1: { filepath: '/tmp/test.txt' } },
};
const returnData = await node.webhook(context);
expect(returnData.workflowData?.[0][0].binary).not.toBeUndefined();
expect(context.nodeHelpers.copyBinaryFile).toHaveBeenCalled();
expect(mockFs.rm).toHaveBeenCalledWith('/tmp/test.txt', { force: true });
});
});
describe('streaming response mode', () => {
const node = new Webhook();
const context = mock<IWebhookFunctions>({
nodeHelpers: mock(),
});
const req = mock<Request>();
const res = mock<Response>();
beforeEach(() => {
jest.clearAllMocks();
context.getRequestObject.mockReturnValue(req);
context.getResponseObject.mockReturnValue(res);
context.getChildNodes.mockReturnValue([]);
context.getNode.mockReturnValue({
type: 'n8n-nodes-base.webhook',
typeVersion: 2,
name: 'Webhook',
} as any);
context.getNodeParameter.mockImplementation((paramName: string) => {
if (paramName === 'options') return {};
if (paramName === 'responseMode') return 'streaming';
return undefined;
});
req.headers = {};
req.params = {};
req.query = {};
req.body = { message: 'test' };
Object.defineProperty(req, 'ips', { value: [], configurable: true });
Object.defineProperty(req, 'ip', { value: '127.0.0.1', configurable: true });
res.writeHead.mockImplementation(() => res);
res.flushHeaders.mockImplementation(() => undefined);
});
it('should enable streaming when responseMode is "streaming"', async () => {
const result = await node.webhook(context);
// Verify streaming headers are set
expect(res.writeHead).toHaveBeenCalledWith(200, {
'Content-Type': 'application/json; charset=utf-8',
'Transfer-Encoding': 'chunked',
'Cache-Control': 'no-cache',
Connection: 'keep-alive',
});
expect(res.flushHeaders).toHaveBeenCalled();
// Verify response structure for streaming
expect(result).toEqual({
noWebhookResponse: true,
workflowData: expect.any(Array),
});
});
it('should not enable streaming when responseMode is not "streaming"', async () => {
context.getNodeParameter.mockImplementation((paramName: string) => {
if (paramName === 'options') return {};
if (paramName === 'responseMode') return 'onReceived';
return undefined;
});
const result = await node.webhook(context);
// Verify streaming headers are NOT set
expect(res.writeHead).not.toHaveBeenCalled();
expect(res.flushHeaders).not.toHaveBeenCalled();
// Verify normal response structure
expect(result).toEqual({
webhookResponse: undefined,
workflowData: expect.any(Array),
});
});
it('should handle multipart form data with streaming enabled', async () => {
req.contentType = 'multipart/form-data';
req.body = {
data: { message: 'Hello' },
files: {},
};
const result = await node.webhook(context);
// For multipart form data, streaming is handled in handleFormData method
// The current implementation returns normal workflowData for form data
expect(result).toEqual({
workflowData: expect.any(Array),
});
});
});
});

View File

@@ -1,474 +0,0 @@
import jwt from 'jsonwebtoken';
import { ApplicationError, type IWebhookFunctions } from 'n8n-workflow';
import type { WebhookParameters } from '../utils';
import {
checkResponseModeConfiguration,
configuredOutputs,
getResponseCode,
getResponseData,
isIpWhitelisted,
setupOutputConnection,
validateWebhookAuthentication,
} from '../utils';
jest.mock('jsonwebtoken', () => ({
verify: jest.fn(),
}));
describe('Webhook Utils', () => {
describe('getResponseCode', () => {
it('should return the response code if it exists', () => {
const parameters: WebhookParameters = {
responseCode: 404,
httpMethod: '',
responseMode: '',
responseData: '',
};
const responseCode = getResponseCode(parameters);
expect(responseCode).toBe(404);
});
it('should return the custom response code if it exists', () => {
const parameters: WebhookParameters = {
options: {
responseCode: {
values: {
responseCode: 200,
customCode: 201,
},
},
},
httpMethod: '',
responseMode: '',
responseData: '',
};
const responseCode = getResponseCode(parameters);
expect(responseCode).toBe(201);
});
it('should return the default response code if no response code is provided', () => {
const parameters: WebhookParameters = {
httpMethod: '',
responseMode: '',
responseData: '',
};
const responseCode = getResponseCode(parameters);
expect(responseCode).toBe(200);
});
});
describe('getResponseData', () => {
it('should return the response data if it exists', () => {
const parameters: WebhookParameters = {
responseData: 'Hello World',
httpMethod: '',
responseMode: '',
};
const responseData = getResponseData(parameters);
expect(responseData).toBe('Hello World');
});
it('should return the options response data if response mode is "onReceived"', () => {
const parameters: WebhookParameters = {
responseMode: 'onReceived',
options: {
responseData: 'Hello World',
},
httpMethod: '',
responseData: '',
};
const responseData = getResponseData(parameters);
expect(responseData).toBe('Hello World');
});
it('should return "noData" if options noResponseBody is true', () => {
const parameters: WebhookParameters = {
responseMode: 'onReceived',
options: {
noResponseBody: true,
},
httpMethod: '',
responseData: '',
};
const responseData = getResponseData(parameters);
expect(responseData).toBe('noData');
});
it('should return undefined if no response data is provided', () => {
const parameters: WebhookParameters = {
responseMode: 'onReceived',
httpMethod: '',
responseData: '',
};
const responseData = getResponseData(parameters);
expect(responseData).toBeUndefined();
});
});
describe('configuredOutputs', () => {
it('should return an array with a single output if httpMethod is not an array', () => {
const parameters: WebhookParameters = {
httpMethod: 'GET',
responseMode: '',
responseData: '',
};
const outputs = configuredOutputs(parameters);
expect(outputs).toEqual([
{
type: 'main',
displayName: 'GET',
},
]);
});
it('should return an array of outputs if httpMethod is an array', () => {
const parameters: WebhookParameters = {
httpMethod: ['GET', 'POST'],
responseMode: '',
responseData: '',
};
const outputs = configuredOutputs(parameters);
expect(outputs).toEqual([
{
type: 'main',
displayName: 'GET',
},
{
type: 'main',
displayName: 'POST',
},
]);
});
});
describe('setupOutputConnection', () => {
it('should return a function that sets the webhookUrl and executionMode in the output data', () => {
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('GET'),
getNodeWebhookUrl: jest.fn().mockReturnValue('https://example.com/webhook/'),
getMode: jest.fn().mockReturnValue('manual'),
};
const method = 'GET';
const additionalData = {
jwtPayload: {
userId: '123',
},
};
const outputData = {
json: {},
};
const setupOutput = setupOutputConnection(ctx as IWebhookFunctions, method, additionalData);
const result = setupOutput(outputData);
expect(result).toEqual([
[
{
json: {
webhookUrl: 'https://example.com/webhook-test/',
executionMode: 'test',
jwtPayload: { userId: '123' },
},
},
],
]);
});
it('should return a function that sets the webhookUrl and executionMode in the output data for multiple methods', () => {
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue(['GET', 'POST']),
getNodeWebhookUrl: jest.fn().mockReturnValue('https://example.com/webhook/'),
getMode: jest.fn().mockReturnValue('manual'),
};
const method = 'POST';
const additionalData = {
jwtPayload: {
userId: '123',
},
};
const outputData = {
json: {},
};
const setupOutput = setupOutputConnection(ctx as IWebhookFunctions, method, additionalData);
const result = setupOutput(outputData);
expect(result).toEqual([
[],
[
{
json: {
webhookUrl: 'https://example.com/webhook-test/',
executionMode: 'test',
jwtPayload: { userId: '123' },
},
},
],
]);
});
});
describe('isIpWhitelisted', () => {
it('should return true if whitelist is undefined', () => {
expect(isIpWhitelisted(undefined, ['192.168.1.1'], '192.168.1.1')).toBe(true);
});
it('should return true if whitelist is an empty string', () => {
expect(isIpWhitelisted('', ['192.168.1.1'], '192.168.1.1')).toBe(true);
});
it('should return true if ip is in the whitelist', () => {
expect(isIpWhitelisted('192.168.1.1', ['192.168.1.2'], '192.168.1.1')).toBe(true);
});
it('should return true if any ip in ips is in the whitelist', () => {
expect(isIpWhitelisted('192.168.1.1', ['192.168.1.1', '192.168.1.2'])).toBe(true);
});
it('should return false if ip and ips are not in the whitelist', () => {
expect(isIpWhitelisted('192.168.1.3', ['192.168.1.1', '192.168.1.2'], '192.168.1.4')).toBe(
false,
);
});
it('should return true if any ip in ips matches any address in the whitelist array', () => {
expect(isIpWhitelisted(['192.168.1.1', '192.168.1.2'], ['192.168.1.2', '192.168.1.3'])).toBe(
true,
);
});
it('should return true if ip matches any address in the whitelist array', () => {
expect(isIpWhitelisted(['192.168.1.1', '192.168.1.2'], ['192.168.1.3'], '192.168.1.2')).toBe(
true,
);
});
it('should return false if ip and ips do not match any address in the whitelist array', () => {
expect(
isIpWhitelisted(
['192.168.1.4', '192.168.1.5'],
['192.168.1.1', '192.168.1.2'],
'192.168.1.3',
),
).toBe(false);
});
it('should handle comma-separated whitelist string', () => {
expect(isIpWhitelisted('192.168.1.1, 192.168.1.2', ['192.168.1.3'], '192.168.1.2')).toBe(
true,
);
});
it('should trim whitespace in comma-separated whitelist string', () => {
expect(isIpWhitelisted(' 192.168.1.1 , 192.168.1.2 ', ['192.168.1.3'], '192.168.1.2')).toBe(
true,
);
});
});
describe('checkResponseModeConfiguration', () => {
it('should throw an error if response mode is "responseNode" but no Respond to Webhook node is found', () => {
const context: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('responseNode'),
getChildNodes: jest.fn().mockReturnValue([]),
getNode: jest.fn().mockReturnValue({ name: 'Webhook' }),
};
expect(() => {
checkResponseModeConfiguration(context as IWebhookFunctions);
}).toThrowError('No Respond to Webhook node found in the workflow');
});
it('should throw an error if response mode is not "responseNode" but a Respond to Webhook node is found', () => {
const context: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('onReceived'),
getChildNodes: jest.fn().mockReturnValue([{ type: 'n8n-nodes-base.respondToWebhook' }]),
getNode: jest.fn().mockReturnValue({ name: 'Webhook' }),
};
expect(() => {
checkResponseModeConfiguration(context as IWebhookFunctions);
}).toThrowError('Webhook node not correctly configured');
});
});
describe('validateWebhookAuthentication', () => {
it('should return early if authentication is "none"', async () => {
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('none'),
};
const authPropertyName = 'authentication';
const result = await validateWebhookAuthentication(
ctx as IWebhookFunctions,
authPropertyName,
);
expect(result).toBeUndefined();
});
it('should throw an error if basicAuth is enabled but no authentication data is defined on the node', async () => {
const headers = {
authorization: 'Basic some-token',
};
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('basicAuth'),
getCredentials: jest.fn().mockRejectedValue(new Error()),
getRequestObject: jest.fn().mockReturnValue({
headers,
}),
getHeaderData: jest.fn().mockReturnValue(headers),
};
const authPropertyName = 'authentication';
await expect(
validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName),
).rejects.toThrowError('No authentication data defined on node!');
});
it('should throw an error if basicAuth is enabled but the provided authentication data is wrong', async () => {
const headers = {
authorization: 'Basic some-token',
};
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('basicAuth'),
getCredentials: jest.fn().mockResolvedValue({
user: 'admin',
password: 'password',
}),
getRequestObject: jest.fn().mockReturnValue({
headers,
}),
getHeaderData: jest.fn().mockReturnValue(headers),
};
const authPropertyName = 'authentication';
await expect(
validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName),
).rejects.toThrowError('Authorization is required!');
});
it('should throw an error if headerAuth is enabled but no authentication data is defined on the node', async () => {
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('headerAuth'),
getCredentials: jest
.fn()
.mockRejectedValue(new Error('No authentication data defined on node!')),
getRequestObject: jest.fn().mockReturnValue({
headers: {},
}),
getHeaderData: jest.fn().mockReturnValue({}),
};
const authPropertyName = 'authentication';
await expect(
validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName),
).rejects.toThrowError('No authentication data defined on node!');
});
it('should throw an error if headerAuth is enabled but the provided authentication data is wrong', async () => {
const headers = {
authorization: 'Bearer invalid-token',
};
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('headerAuth'),
getCredentials: jest.fn().mockResolvedValue({
name: 'Authorization',
value: 'Bearer token',
}),
getRequestObject: jest.fn().mockReturnValue({
headers,
}),
getHeaderData: jest.fn().mockReturnValue(headers),
};
const authPropertyName = 'authentication';
await expect(
validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName),
).rejects.toThrowError('Authorization data is wrong!');
});
it('should throw an error if jwtAuth is enabled but no authentication data is defined on the node', async () => {
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('jwtAuth'),
getCredentials: jest
.fn()
.mockRejectedValue(new Error('No authentication data defined on node!')),
getRequestObject: jest.fn().mockReturnValue({}),
getHeaderData: jest.fn().mockReturnValue({}),
};
const authPropertyName = 'authentication';
await expect(
validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName),
).rejects.toThrowError('No authentication data defined on node!');
});
it('should throw an error if jwtAuth is enabled but no token is provided', async () => {
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('jwtAuth'),
getCredentials: jest.fn().mockResolvedValue({
keyType: 'passphrase',
publicKey: '',
secret: 'secret',
algorithm: 'HS256',
}),
getRequestObject: jest.fn().mockReturnValue({
headers: {},
}),
getHeaderData: jest.fn().mockReturnValue({}),
};
const authPropertyName = 'authentication';
await expect(
validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName),
).rejects.toThrowError('No token provided');
});
it('should throw an error if jwtAuth is enabled but the provided token is invalid', async () => {
const headers = {
authorization: 'Bearer invalid-token',
};
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('jwtAuth'),
getCredentials: jest.fn().mockResolvedValue({
keyType: 'passphrase',
publicKey: '',
secret: 'secret',
algorithm: 'HS256',
}),
getRequestObject: jest.fn().mockReturnValue({
headers,
}),
getHeaderData: jest.fn().mockReturnValue(headers),
};
(jwt.verify as jest.Mock).mockImplementationOnce(() => {
throw new ApplicationError('jwt malformed');
});
const authPropertyName = 'authentication';
await expect(
validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName),
).rejects.toThrowError('jwt malformed');
});
it('should return the decoded JWT payload if jwtAuth is enabled and the token is valid', async () => {
const decodedPayload = {
sub: '1234567890',
name: 'John Doe',
iat: 1516239022,
};
(jwt.verify as jest.Mock).mockReturnValue(decodedPayload);
const headers = {
authorization:
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c',
};
const ctx: Partial<IWebhookFunctions> = {
getNodeParameter: jest.fn().mockReturnValue('jwtAuth'),
getCredentials: jest.fn().mockResolvedValue({
keyType: 'passphrase',
publicKey: '',
secret: 'secret',
algorithm: 'HS256',
}),
getRequestObject: jest.fn().mockReturnValue({
headers,
}),
getHeaderData: jest.fn().mockReturnValue(headers),
};
const authPropertyName = 'authentication';
const result = await validateWebhookAuthentication(
ctx as IWebhookFunctions,
authPropertyName,
);
expect(result).toEqual(decodedPayload);
});
});
});

View File

@@ -1,60 +0,0 @@
{
"type": "object",
"properties": {
"active": {
"type": "boolean"
},
"balances": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"type": "object",
"properties": {
"currency": {
"type": "string"
}
}
},
"balanceType": {
"type": "string"
},
"currency": {
"type": "string"
},
"id": {
"type": "integer"
},
"reservedAmount": {
"type": "object",
"properties": {
"currency": {
"type": "string"
}
}
}
}
}
},
"creationTime": {
"type": "string"
},
"eligible": {
"type": "boolean"
},
"id": {
"type": "integer"
},
"modificationTime": {
"type": "string"
},
"profileId": {
"type": "integer"
},
"recipientId": {
"type": "integer"
}
},
"version": 1
}

View File

@@ -1,18 +0,0 @@
{
"type": "object",
"properties": {
"rate": {
"type": "number"
},
"source": {
"type": "string"
},
"target": {
"type": "string"
},
"time": {
"type": "string"
}
},
"version": 2
}

View File

@@ -1,225 +0,0 @@
import type { INodeProperties } from 'n8n-workflow';
import { customerCreateFields, customerUpdateFields } from './shared';
export const customerOperations: INodeProperties[] = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['customer'],
},
},
options: [
{
name: 'Create',
value: 'create',
description: 'Create a customer',
action: 'Create a customer',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete a customer',
action: 'Delete a customer',
},
{
name: 'Get',
value: 'get',
description: 'Retrieve a customer',
action: 'Get a customer',
},
{
name: 'Get Many',
value: 'getAll',
description: 'Retrieve many customers',
action: 'Get many customers',
},
{
name: 'Update',
value: 'update',
description: 'Update a customer',
action: 'Update a customer',
},
],
default: 'create',
},
];
export const customerFields: INodeProperties[] = [
// ----------------------------------------
// customer: create
// ----------------------------------------
{
displayName: 'Email',
name: 'email',
type: 'string',
placeholder: 'name@email.com',
required: true,
default: '',
displayOptions: {
show: {
resource: ['customer'],
operation: ['create'],
},
},
},
customerCreateFields,
// ----------------------------------------
// customer: delete
// ----------------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
description: 'ID of the customer to delete',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['customer'],
operation: ['delete'],
},
},
},
// ----------------------------------------
// customer: get
// ----------------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
description: 'ID of the customer to retrieve',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['customer'],
operation: ['get'],
},
},
},
// ----------------------------------------
// customer: getAll
// ----------------------------------------
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
description: 'Whether to return all results or only up to a given limit',
displayOptions: {
show: {
resource: ['customer'],
operation: ['getAll'],
},
},
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 50,
description: 'Max number of results to return',
typeOptions: {
minValue: 1,
},
displayOptions: {
show: {
resource: ['customer'],
operation: ['getAll'],
returnAll: [false],
},
},
},
{
displayName: 'Filters',
name: 'filters',
type: 'collection',
placeholder: 'Add Filter',
default: {},
displayOptions: {
show: {
resource: ['customer'],
operation: ['getAll'],
},
},
options: [
{
displayName: 'Email',
name: 'email',
type: 'string',
placeholder: 'name@email.com',
default: '',
description: 'Email address to filter customers by',
},
{
displayName: 'Sort Order',
name: 'order',
description: 'Order to sort customers in',
type: 'options',
options: [
{
name: 'Ascending',
value: 'asc',
},
{
name: 'Descending',
value: 'desc',
},
],
default: 'asc',
},
{
displayName: 'Order By',
name: 'orderby',
description: 'Field to sort customers by',
type: 'options',
options: [
{
name: 'ID',
value: 'id',
},
{
name: 'Include',
value: 'include',
},
{
name: 'Name',
value: 'name',
},
{
name: 'Registered Date',
value: 'registered_date',
},
],
default: 'id',
},
],
},
// ----------------------------------------
// customer: update
// ----------------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
description: 'ID of the customer to update',
type: 'string',
required: true,
default: '',
displayOptions: {
show: {
resource: ['customer'],
operation: ['update'],
},
},
},
customerUpdateFields,
];

View File

@@ -1 +0,0 @@
export * from './CustomerDescription';

View File

@@ -1,185 +0,0 @@
import type { INodeProperties } from 'n8n-workflow';
const customerAddressOptions: INodeProperties[] = [
{
displayName: 'First Name',
name: 'first_name',
type: 'string',
default: '',
},
{
displayName: 'Last Name',
name: 'last_name',
type: 'string',
default: '',
},
{
displayName: 'Company',
name: 'company',
type: 'string',
default: '',
},
{
displayName: 'Address 1',
name: 'address_1',
type: 'string',
default: '',
},
{
displayName: 'Address 2',
name: 'address_2',
type: 'string',
default: '',
},
{
displayName: 'City',
name: 'city',
type: 'string',
default: '',
},
{
displayName: 'State',
name: 'state',
type: 'string',
default: '',
},
{
displayName: 'Postcode',
name: 'postcode',
type: 'string',
default: '',
},
{
displayName: 'Country',
name: 'country',
type: 'string',
default: '',
},
{
displayName: 'Email',
name: 'email',
type: 'string',
placeholder: 'name@email.com',
default: '',
},
{
displayName: 'Phone',
name: 'phone',
type: 'string',
default: '',
},
];
const customerUpdateOptions: INodeProperties[] = [
{
displayName: 'Billing Address',
name: 'billing',
type: 'collection',
default: {},
placeholder: 'Add Field',
options: customerAddressOptions,
},
{
displayName: 'First Name',
name: 'first_name',
type: 'string',
default: '',
},
{
displayName: 'Last Name',
name: 'last_name',
type: 'string',
default: '',
},
{
displayName: 'Metadata',
name: 'meta_data',
type: 'fixedCollection',
typeOptions: {
multipleValues: true,
},
default: {},
placeholder: 'Add Metadata Field',
options: [
{
displayName: 'Metadata Fields',
name: 'meta_data_fields',
values: [
{
displayName: 'Key',
name: 'key',
type: 'string',
default: '',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Password',
name: 'password',
type: 'string',
typeOptions: { password: true },
displayOptions: {
show: {
'/resource': ['customer'],
'/operation': ['create'],
},
},
default: '',
},
{
displayName: 'Shipping Address',
name: 'shipping',
type: 'collection',
default: {},
placeholder: 'Add Field',
options: customerAddressOptions,
},
];
const customerCreateOptions: INodeProperties[] = [
...customerUpdateOptions,
{
displayName: 'Username',
name: 'username',
type: 'string',
default: '',
},
];
export const customerCreateFields: INodeProperties = {
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: ['customer'],
operation: ['create'],
},
},
options: customerCreateOptions,
};
export const customerUpdateFields: INodeProperties = {
displayName: 'Update Fields',
name: 'updateFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: ['customer'],
operation: ['update'],
},
},
options: customerUpdateOptions,
};

View File

@@ -1,76 +0,0 @@
{
"type": "object",
"properties": {
"Addresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"AddressType": {
"type": "string"
},
"City": {
"type": "string"
},
"Country": {
"type": "string"
},
"PostalCode": {
"type": "string"
},
"Region": {
"type": "string"
}
}
}
},
"BankAccountDetails": {
"type": "string"
},
"ContactID": {
"type": "string"
},
"ContactStatus": {
"type": "string"
},
"EmailAddress": {
"type": "string"
},
"HasValidationErrors": {
"type": "boolean"
},
"IsCustomer": {
"type": "boolean"
},
"IsSupplier": {
"type": "boolean"
},
"Name": {
"type": "string"
},
"Phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PhoneAreaCode": {
"type": "string"
},
"PhoneCountryCode": {
"type": "string"
},
"PhoneNumber": {
"type": "string"
},
"PhoneType": {
"type": "string"
}
}
}
},
"UpdatedDateUTC": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,122 +0,0 @@
{
"type": "object",
"properties": {
"Addresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"AddressLine1": {
"type": "string"
},
"AddressType": {
"type": "string"
},
"City": {
"type": "string"
},
"Country": {
"type": "string"
},
"PostalCode": {
"type": "string"
},
"Region": {
"type": "string"
}
}
}
},
"BankAccountDetails": {
"type": "string"
},
"ContactGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ContactGroupID": {
"type": "string"
},
"HasValidationErrors": {
"type": "boolean"
},
"Name": {
"type": "string"
},
"Status": {
"type": "string"
}
}
}
},
"ContactID": {
"type": "string"
},
"ContactPersons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"EmailAddress": {
"type": "string"
},
"FirstName": {
"type": "string"
},
"IncludeInEmails": {
"type": "boolean"
},
"LastName": {
"type": "string"
}
}
}
},
"ContactStatus": {
"type": "string"
},
"EmailAddress": {
"type": "string"
},
"HasAttachments": {
"type": "boolean"
},
"HasValidationErrors": {
"type": "boolean"
},
"IsCustomer": {
"type": "boolean"
},
"IsSupplier": {
"type": "boolean"
},
"Name": {
"type": "string"
},
"Phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PhoneAreaCode": {
"type": "string"
},
"PhoneCountryCode": {
"type": "string"
},
"PhoneNumber": {
"type": "string"
},
"PhoneType": {
"type": "string"
}
}
}
},
"UpdatedDateUTC": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,79 +0,0 @@
{
"type": "object",
"properties": {
"Addresses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"AddressType": {
"type": "string"
},
"City": {
"type": "string"
},
"Country": {
"type": "string"
},
"PostalCode": {
"type": "string"
},
"Region": {
"type": "string"
}
}
}
},
"BankAccountDetails": {
"type": "string"
},
"ContactID": {
"type": "string"
},
"ContactStatus": {
"type": "string"
},
"EmailAddress": {
"type": "string"
},
"HasAttachments": {
"type": "boolean"
},
"HasValidationErrors": {
"type": "boolean"
},
"IsCustomer": {
"type": "boolean"
},
"IsSupplier": {
"type": "boolean"
},
"Name": {
"type": "string"
},
"Phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PhoneAreaCode": {
"type": "string"
},
"PhoneCountryCode": {
"type": "string"
},
"PhoneNumber": {
"type": "string"
},
"PhoneType": {
"type": "string"
}
}
}
},
"UpdatedDateUTC": {
"type": "string"
}
},
"version": 2
}

View File

@@ -1,147 +0,0 @@
{
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$is_duplicate": {
"type": "boolean"
},
"$layout_id": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"Account_Name": {
"type": "string"
},
"Account_Number": {
"type": "string"
},
"Created_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Modified_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Parent_Account": {
"type": "null"
}
},
"version": 1
}

View File

@@ -1,124 +0,0 @@
{
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$is_duplicate": {
"type": "boolean"
},
"$layout_id": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"Account_Name": {
"type": "string"
},
"Account_Number": {
"type": "string"
},
"id": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Tag": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
},
"version": 1
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,194 +0,0 @@
{
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$is_duplicate": {
"type": "boolean"
},
"$layout_id": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"Created_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"Email_Opt_Out": {
"type": "boolean"
},
"Fax": {
"type": "null"
},
"Full_Name": {
"type": "string"
},
"Home_Phone": {
"type": "null"
},
"id": {
"type": "string"
},
"Last_Name": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Modified_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
},
"Other_City": {
"type": "null"
},
"Other_Country": {
"type": "null"
},
"Other_State": {
"type": "null"
},
"Other_Street": {
"type": "null"
},
"Other_Zip": {
"type": "null"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Reporting_To": {
"type": "null"
},
"Tag": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"Unsubscribed_Mode": {
"type": "null"
},
"Unsubscribed_Time": {
"type": "null"
},
"Vendor_Name": {
"type": "null"
}
},
"version": 1
}

View File

@@ -1,165 +0,0 @@
{
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$is_duplicate": {
"type": "boolean"
},
"$layout_id": {
"type": "object",
"properties": {
"display_label": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"Created_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"Email_Opt_Out": {
"type": "boolean"
},
"Full_Name": {
"type": "string"
},
"Home_Phone": {
"type": "null"
},
"id": {
"type": "string"
},
"Last_Name": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Modified_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
},
"Other_Phone": {
"type": "null"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Unsubscribed_Mode": {
"type": "null"
},
"Unsubscribed_Time": {
"type": "null"
},
"Vendor_Name": {
"type": "null"
}
},
"version": 6
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,169 +0,0 @@
{
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$canvas_id": {
"type": "null"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"Account_Name": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Contact_Name": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"Deal_Name": {
"type": "string"
},
"id": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Modified_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Probability": {
"type": "integer"
},
"Tag": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
},
"version": 1
}

View File

@@ -1,169 +0,0 @@
{
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$layout_id": {
"type": "object",
"properties": {
"display_label": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"Account_Name": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"Deal_Name": {
"type": "string"
},
"id": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Modified_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Probability": {
"type": "integer"
},
"Tag": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
}
},
"version": 2
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,179 +0,0 @@
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$converted": {
"type": "boolean"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"$zia_owner_assignment": {
"type": "string"
},
"Created_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"Email_Opt_Out": {
"type": "boolean"
},
"Fax": {
"type": "null"
},
"Full_Name": {
"type": "string"
},
"id": {
"type": "string"
},
"Last_Name": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Modified_By": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
},
"No_of_Employees": {
"type": "null"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Rating": {
"type": "null"
},
"Secondary_Email": {
"type": "null"
},
"Tag": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"Unsubscribed_Mode": {
"type": "null"
},
"Unsubscribed_Time": {
"type": "null"
}
}
}
}
},
"version": 1
}

View File

@@ -1,139 +0,0 @@
{
"type": "object",
"properties": {
"$approval": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"delegate": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
},
"takeover": {
"type": "boolean"
}
}
},
"$approval_state": {
"type": "string"
},
"$approved": {
"type": "boolean"
},
"$converted": {
"type": "boolean"
},
"$currency_symbol": {
"type": "string"
},
"$editable": {
"type": "boolean"
},
"$field_states": {
"type": "null"
},
"$in_merge": {
"type": "boolean"
},
"$layout_id": {
"type": "object",
"properties": {
"display_label": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"$locked_for_me": {
"type": "boolean"
},
"$process_flow": {
"type": "boolean"
},
"$review": {
"type": "null"
},
"$review_process": {
"type": "object",
"properties": {
"approve": {
"type": "boolean"
},
"reject": {
"type": "boolean"
},
"resubmit": {
"type": "boolean"
}
}
},
"$state": {
"type": "string"
},
"Created_Time": {
"type": "string"
},
"Email_Opt_Out": {
"type": "boolean"
},
"Full_Name": {
"type": "string"
},
"id": {
"type": "string"
},
"Last_Name": {
"type": "string"
},
"Locked__s": {
"type": "boolean"
},
"Owner": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Tag": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}
},
"Unsubscribed_Mode": {
"type": "null"
},
"Unsubscribed_Time": {
"type": "null"
}
},
"version": 5
}

View File

@@ -1,120 +0,0 @@
{
"type": "object",
"properties": {
"api_name": {
"type": "string"
},
"association_details": {
"type": "null"
},
"businesscard_supported": {
"type": "boolean"
},
"convert_mapping": {
"type": "object",
"properties": {
"Deals": {
"type": "null"
}
}
},
"created_source": {
"type": "string"
},
"crypt": {
"type": "null"
},
"custom_field": {
"type": "boolean"
},
"data_type": {
"type": "string"
},
"decimal_place": {
"type": "null"
},
"display_label": {
"type": "string"
},
"external": {
"type": "null"
},
"field_label": {
"type": "string"
},
"field_read_only": {
"type": "boolean"
},
"history_tracking": {
"type": "boolean"
},
"id": {
"type": "string"
},
"json_type": {
"type": "string"
},
"length": {
"type": "integer"
},
"mass_update": {
"type": "boolean"
},
"pick_list_values": {
"type": "array",
"items": {
"type": "object",
"properties": {
"actual_value": {
"type": "string"
},
"display_value": {
"type": "string"
},
"reference_value": {
"type": "string"
}
}
}
},
"quick_sequence_number": {
"type": "string"
},
"read_only": {
"type": "boolean"
},
"subform": {
"type": "null"
},
"system_mandatory": {
"type": "boolean"
},
"ui_type": {
"type": "integer"
},
"view_type": {
"type": "object",
"properties": {
"create": {
"type": "boolean"
},
"edit": {
"type": "boolean"
},
"quick_create": {
"type": "boolean"
},
"view": {
"type": "boolean"
}
}
},
"visible": {
"type": "boolean"
},
"webhook": {
"type": "boolean"
}
},
"version": 1
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,37 +0,0 @@
{
"type": "object",
"properties": {
"Created_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Created_Time": {
"type": "string"
},
"id": {
"type": "string"
},
"Modified_By": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"Modified_Time": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,223 +0,0 @@
{
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"creation_source": {
"type": "string"
},
"duration": {
"type": "integer"
},
"encrypted_password": {
"type": "string"
},
"h323_password": {
"type": "string"
},
"host_email": {
"type": "string"
},
"host_id": {
"type": "string"
},
"id": {
"type": "integer"
},
"join_url": {
"type": "string"
},
"password": {
"type": "string"
},
"pre_schedule": {
"type": "boolean"
},
"pstn_password": {
"type": "string"
},
"settings": {
"type": "object",
"properties": {
"allow_host_control_participant_mute_state": {
"type": "boolean"
},
"allow_multiple_devices": {
"type": "boolean"
},
"alternative_host_update_polls": {
"type": "boolean"
},
"alternative_hosts": {
"type": "string"
},
"alternative_hosts_email_notification": {
"type": "boolean"
},
"approval_type": {
"type": "integer"
},
"approved_or_denied_countries_or_regions": {
"type": "object",
"properties": {
"enable": {
"type": "boolean"
}
}
},
"audio": {
"type": "string"
},
"auto_recording": {
"type": "string"
},
"breakout_room": {
"type": "object",
"properties": {
"enable": {
"type": "boolean"
}
}
},
"close_registration": {
"type": "boolean"
},
"cn_meeting": {
"type": "boolean"
},
"continuous_meeting_chat": {
"type": "object",
"properties": {
"auto_add_invited_external_users": {
"type": "boolean"
},
"auto_add_meeting_participants": {
"type": "boolean"
},
"channel_id": {
"type": "string"
},
"enable": {
"type": "boolean"
}
}
},
"device_testing": {
"type": "boolean"
},
"email_in_attendee_report": {
"type": "boolean"
},
"email_notification": {
"type": "boolean"
},
"encryption_type": {
"type": "string"
},
"enforce_login": {
"type": "boolean"
},
"enforce_login_domains": {
"type": "string"
},
"focus_mode": {
"type": "boolean"
},
"host_save_video_order": {
"type": "boolean"
},
"host_video": {
"type": "boolean"
},
"in_meeting": {
"type": "boolean"
},
"internal_meeting": {
"type": "boolean"
},
"jbh_time": {
"type": "integer"
},
"join_before_host": {
"type": "boolean"
},
"meeting_authentication": {
"type": "boolean"
},
"mute_upon_entry": {
"type": "boolean"
},
"participant_focused_meeting": {
"type": "boolean"
},
"participant_video": {
"type": "boolean"
},
"private_meeting": {
"type": "boolean"
},
"push_change_to_calendar": {
"type": "boolean"
},
"registrants_confirmation_email": {
"type": "boolean"
},
"registrants_email_notification": {
"type": "boolean"
},
"request_permission_to_unmute_participants": {
"type": "boolean"
},
"show_join_info": {
"type": "boolean"
},
"show_share_button": {
"type": "boolean"
},
"sign_language_interpretation": {
"type": "object",
"properties": {
"enable": {
"type": "boolean"
}
}
},
"use_pmi": {
"type": "boolean"
},
"waiting_room": {
"type": "boolean"
},
"watermark": {
"type": "boolean"
}
}
},
"start_time": {
"type": "string"
},
"start_url": {
"type": "string"
},
"status": {
"type": "string"
},
"supportGoLive": {
"type": "boolean"
},
"timezone": {
"type": "string"
},
"topic": {
"type": "string"
},
"type": {
"type": "integer"
},
"uuid": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,254 +0,0 @@
{
"type": "object",
"properties": {
"agenda": {
"type": "string"
},
"assistant_id": {
"type": "string"
},
"created_at": {
"type": "string"
},
"duration": {
"type": "integer"
},
"host_email": {
"type": "string"
},
"host_id": {
"type": "string"
},
"id": {
"type": "integer"
},
"join_url": {
"type": "string"
},
"pre_schedule": {
"type": "boolean"
},
"settings": {
"type": "object",
"properties": {
"allow_multiple_devices": {
"type": "boolean"
},
"alternative_host_update_polls": {
"type": "boolean"
},
"alternative_hosts": {
"type": "string"
},
"alternative_hosts_email_notification": {
"type": "boolean"
},
"approval_type": {
"type": "integer"
},
"approved_or_denied_countries_or_regions": {
"type": "object",
"properties": {
"enable": {
"type": "boolean"
}
}
},
"audio": {
"type": "string"
},
"auto_recording": {
"type": "string"
},
"auto_start_ai_companion_questions": {
"type": "boolean"
},
"auto_start_meeting_summary": {
"type": "boolean"
},
"breakout_room": {
"type": "object",
"properties": {
"enable": {
"type": "boolean"
}
}
},
"close_registration": {
"type": "boolean"
},
"cn_meeting": {
"type": "boolean"
},
"continuous_meeting_chat": {
"type": "object",
"properties": {
"auto_add_invited_external_users": {
"type": "boolean"
},
"channel_id": {
"type": "string"
},
"enable": {
"type": "boolean"
}
}
},
"device_testing": {
"type": "boolean"
},
"email_in_attendee_report": {
"type": "boolean"
},
"email_notification": {
"type": "boolean"
},
"enable_dedicated_group_chat": {
"type": "boolean"
},
"encryption_type": {
"type": "string"
},
"enforce_login": {
"type": "boolean"
},
"enforce_login_domains": {
"type": "string"
},
"focus_mode": {
"type": "boolean"
},
"global_dial_in_countries": {
"type": "array",
"items": {
"type": "string"
}
},
"global_dial_in_numbers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"country": {
"type": "string"
},
"country_name": {
"type": "string"
},
"number": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
},
"host_save_video_order": {
"type": "boolean"
},
"host_video": {
"type": "boolean"
},
"in_meeting": {
"type": "boolean"
},
"internal_meeting": {
"type": "boolean"
},
"jbh_time": {
"type": "integer"
},
"join_before_host": {
"type": "boolean"
},
"meeting_authentication": {
"type": "boolean"
},
"meeting_invitees": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string"
}
}
}
},
"mute_upon_entry": {
"type": "boolean"
},
"participant_focused_meeting": {
"type": "boolean"
},
"participant_video": {
"type": "boolean"
},
"private_meeting": {
"type": "boolean"
},
"push_change_to_calendar": {
"type": "boolean"
},
"registrants_confirmation_email": {
"type": "boolean"
},
"registrants_email_notification": {
"type": "boolean"
},
"request_permission_to_unmute_participants": {
"type": "boolean"
},
"show_join_info": {
"type": "boolean"
},
"show_share_button": {
"type": "boolean"
},
"sign_language_interpretation": {
"type": "object",
"properties": {
"enable": {
"type": "boolean"
}
}
},
"use_pmi": {
"type": "boolean"
},
"waiting_room": {
"type": "boolean"
},
"watermark": {
"type": "boolean"
}
}
},
"start_time": {
"type": "string"
},
"start_url": {
"type": "string"
},
"status": {
"type": "string"
},
"timezone": {
"type": "string"
},
"topic": {
"type": "string"
},
"type": {
"type": "integer"
},
"uuid": {
"type": "string"
}
},
"version": 1
}

View File

@@ -1,36 +0,0 @@
{
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"duration": {
"type": "integer"
},
"host_id": {
"type": "string"
},
"id": {
"type": "integer"
},
"join_url": {
"type": "string"
},
"start_time": {
"type": "string"
},
"timezone": {
"type": "string"
},
"topic": {
"type": "string"
},
"type": {
"type": "integer"
},
"uuid": {
"type": "string"
}
},
"version": 2
}

View File

@@ -0,0 +1,954 @@
{
"name": "n8n-nodes-base",
"version": "1.107.0",
"description": "Base nodes of n8n",
"main": "index.js",
"scripts": {
"clean": "rimraf dist .turbo",
"copy-nodes-json": "node scripts/copy-nodes-json.js .",
"dev": "pnpm watch",
"typecheck": "tsc --noEmit",
"build": "tsc --build tsconfig.build.cjs.json && pnpm copy-nodes-json && tsc-alias -p tsconfig.build.cjs.json && pnpm n8n-copy-static-files && pnpm n8n-generate-translations && pnpm n8n-generate-metadata",
"format": "biome format --write .",
"format:check": "biome ci .",
"lint": "eslint nodes credentials utils test --quiet && node ./scripts/validate-load-options-methods.js",
"lint:fix": "eslint nodes credentials utils test --fix",
"watch": "tsc-watch -p tsconfig.build.cjs.json --onCompilationComplete \"pnpm copy-nodes-json && tsc-alias -p tsconfig.build.cjs.json\" --onSuccess \"pnpm n8n-generate-metadata\"",
"test": "jest",
"test:dev": "jest --watch"
},
"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/AirtopApi.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/AzureStorageOAuth2Api.credentials.js",
"dist/credentials/AzureStorageSharedKeyApi.credentials.js",
"dist/credentials/BambooHrApi.credentials.js",
"dist/credentials/BannerbearApi.credentials.js",
"dist/credentials/BaserowApi.credentials.js",
"dist/credentials/BeeminderApi.credentials.js",
"dist/credentials/BeeminderOAuth2Api.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/CalendlyOAuth2Api.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/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/ConvertApi.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/DatadogApi.credentials.js",
"dist/credentials/DeepLApi.credentials.js",
"dist/credentials/DemioApi.credentials.js",
"dist/credentials/DfirIrisApi.credentials.js",
"dist/credentials/DhlApi.credentials.js",
"dist/credentials/DiscordBotApi.credentials.js",
"dist/credentials/DiscordOAuth2Api.credentials.js",
"dist/credentials/DiscordWebhookApi.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/DynatraceApi.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/FilescanApi.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/GongApi.credentials.js",
"dist/credentials/GongOAuth2Api.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/GoogleChatOAuth2Api.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/GoogleBusinessProfileOAuth2Api.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/HighLevelOAuth2Api.credentials.js",
"dist/credentials/HomeAssistantApi.credentials.js",
"dist/credentials/HttpBasicAuth.credentials.js",
"dist/credentials/HttpBearerAuth.credentials.js",
"dist/credentials/HttpDigestAuth.credentials.js",
"dist/credentials/HttpHeaderAuth.credentials.js",
"dist/credentials/HttpCustomAuth.credentials.js",
"dist/credentials/HttpQueryAuth.credentials.js",
"dist/credentials/HttpSslAuth.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/JinaAiApi.credentials.js",
"dist/credentials/JiraSoftwareCloudApi.credentials.js",
"dist/credentials/JiraSoftwareServerApi.credentials.js",
"dist/credentials/JiraSoftwareServerPatApi.credentials.js",
"dist/credentials/JotFormApi.credentials.js",
"dist/credentials/JwtAuth.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/LinkedInCommunityManagementOAuth2Api.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/MalcoreApi.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/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js",
"dist/credentials/MicrosoftAzureMonitorOAuth2Api.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/MicrosoftSharePointOAuth2Api.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/MiroOAuth2Api.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/NetscalerAdcApi.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/PerplexityApi.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/Rapid7InsightVmApi.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/SolarWindsIpamApi.credentials.js",
"dist/credentials/SolarWindsObservabilityApi.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/SysdigApi.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/VerticaApi.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/WhatsAppTriggerApi.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/ZabbixApi.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/Airtop/Airtop.node.js",
"dist/nodes/AiTransform/AiTransform.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/Cognito/AwsCognito.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/IAM/AwsIam.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/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/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js",
"dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js",
"dist/nodes/Eventbrite/EventbriteTrigger.node.js",
"dist/nodes/ExecuteCommand/ExecuteCommand.node.js",
"dist/nodes/ExecuteWorkflow/ExecuteWorkflow/ExecuteWorkflow.node.js",
"dist/nodes/ExecuteWorkflow/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/Files/ReadWriteFile/ReadWriteFile.node.js",
"dist/nodes/Files/ConvertToFile/ConvertToFile.node.js",
"dist/nodes/Files/ExtractFromFile/ExtractFromFile.node.js",
"dist/nodes/Filter/Filter.node.js",
"dist/nodes/Flow/Flow.node.js",
"dist/nodes/Flow/FlowTrigger.node.js",
"dist/nodes/Form/Form.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/Gong/Gong.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/BusinessProfile/GoogleBusinessProfile.node.js",
"dist/nodes/Google/BusinessProfile/GoogleBusinessProfileTrigger.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/JinaAI/JinaAi.node.js",
"dist/nodes/Jira/Jira.node.js",
"dist/nodes/Jira/JiraTrigger.node.js",
"dist/nodes/JotForm/JotFormTrigger.node.js",
"dist/nodes/Jwt/Jwt.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/AzureCosmosDb/AzureCosmosDb.node.js",
"dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js",
"dist/nodes/Microsoft/Entra/MicrosoftEntra.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/OneDrive/MicrosoftOneDriveTrigger.node.js",
"dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js",
"dist/nodes/Microsoft/Outlook/MicrosoftOutlookTrigger.node.js",
"dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js",
"dist/nodes/Microsoft/Sql/MicrosoftSql.node.js",
"dist/nodes/Microsoft/Storage/AzureStorage.node.js",
"dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js",
"dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js",
"dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js",
"dist/nodes/Mindee/Mindee.node.js",
"dist/nodes/Misp/Misp.node.js",
"dist/nodes/MistralAI/MistralAi.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/Netscaler/ADC/NetscalerAdc.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/Okta/Okta.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/Perplexity/Perplexity.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/Salesforce/SalesforceTrigger.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/Simulate/Simulate.node.js",
"dist/nodes/Simulate/SimulateTrigger.node.js",
"dist/nodes/Slack/Slack.node.js",
"dist/nodes/Slack/SlackTrigger.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/Twilio/TwilioTrigger.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/WhatsAppTrigger.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",
"dist/nodes/Transform/Aggregate/Aggregate.node.js",
"dist/nodes/Transform/Limit/Limit.node.js",
"dist/nodes/Transform/RemoveDuplicates/RemoveDuplicates.node.js",
"dist/nodes/Transform/SplitOut/SplitOut.node.js",
"dist/nodes/Transform/Sort/Sort.node.js",
"dist/nodes/Transform/Summarize/Summarize.node.js"
]
},
"devDependencies": {
"@n8n/typescript-config": "workspace:*",
"@types/amqplib": "^0.10.1",
"@types/aws4": "^1.5.1",
"@types/basic-auth": "catalog:",
"@types/cheerio": "^0.22.15",
"@types/eventsource": "^1.1.2",
"@types/express": "catalog:",
"@types/gm": "^1.25.0",
"@types/html-to-text": "^9.0.1",
"@types/js-nacl": "^1.3.0",
"@types/jsonwebtoken": "catalog:",
"@types/lodash": "catalog:",
"@types/lossless-json": "^1.0.0",
"@types/mailparser": "^3.4.4",
"@types/mime-types": "^2.1.0",
"@types/mssql": "^9.1.5",
"@types/nodemailer": "^6.4.14",
"@types/promise-ftp": "^1.3.4",
"@types/rfc2047": "^2.0.1",
"@types/sanitize-html": "^2.11.0",
"@types/showdown": "^1.9.4",
"@types/ssh2-sftp-client": "^9.0.5",
"@types/uuid": "catalog:",
"@types/xml2js": "catalog:",
"eslint-plugin-n8n-nodes-base": "^1.16.3",
"n8n-core": "workspace:*"
},
"dependencies": {
"@aws-sdk/client-sso-oidc": "3.808.0",
"@kafkajs/confluent-schema-registry": "3.8.0",
"@mozilla/readability": "0.6.0",
"@n8n/config": "workspace:*",
"@n8n/di": "workspace:*",
"@n8n/errors": "workspace:^",
"@n8n/imap": "workspace:*",
"@n8n/vm2": "3.9.25",
"alasql": "4.4.0",
"amqplib": "0.10.6",
"aws4": "1.11.0",
"basic-auth": "catalog:",
"change-case": "4.1.2",
"cheerio": "1.0.0-rc.6",
"chokidar": "catalog:",
"cron": "3.1.7",
"csv-parse": "5.5.0",
"currency-codes": "2.1.0",
"eventsource": "2.0.2",
"fast-glob": "catalog:",
"fastest-levenshtein": "^1.0.16",
"fflate": "0.7.4",
"generate-schema": "2.6.0",
"get-system-fonts": "2.0.2",
"gm": "1.25.1",
"html-to-text": "9.0.5",
"iconv-lite": "catalog:",
"ics": "2.40.0",
"isbot": "3.6.13",
"iso-639-1": "2.1.15",
"js-nacl": "1.4.0",
"jsdom": "23.0.1",
"jsonwebtoken": "catalog:",
"kafkajs": "2.2.4",
"ldapts": "4.2.6",
"lodash": "catalog:",
"lossless-json": "1.0.5",
"luxon": "catalog:",
"mailparser": "3.6.7",
"minifaker": "1.34.1",
"moment-timezone": "0.5.48",
"mongodb": "6.11.0",
"mqtt": "5.7.2",
"mssql": "10.0.2",
"mysql2": "3.11.0",
"n8n-workflow": "workspace:*",
"node-html-markdown": "1.2.0",
"node-ssh": "13.2.0",
"nodemailer": "6.9.9",
"otpauth": "9.1.1",
"pdfjs-dist": "5.3.31",
"pg": "8.12.0",
"pg-promise": "11.9.1",
"promise-ftp": "1.3.5",
"pyodide": "0.28.0",
"redis": "4.6.14",
"rfc2047": "4.0.1",
"rhea": "1.0.24",
"rrule": "2.8.1",
"rss-parser": "3.13.0",
"sanitize-html": "2.12.1",
"semver": "7.5.4",
"showdown": "2.1.0",
"simple-git": "3.17.0",
"snowflake-sdk": "2.1.0",
"ssh2-sftp-client": "12.0.1",
"tmp-promise": "3.0.3",
"ts-ics": "1.2.2",
"uuid": "catalog:",
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz",
"xml2js": "catalog:",
"xmlhttprequest-ssl": "3.1.0"
}
}

View File

@@ -0,0 +1,12 @@
const glob = require('fast-glob');
const fs = require('fs');
const path = require('path');
function copyJsonFiles(baseDir) {
const files = glob.sync('nodes/**/*.node.json', { cwd: baseDir });
for (const file of files) {
fs.copyFileSync(path.resolve(baseDir, file), path.resolve(baseDir, 'dist', file));
}
}
copyJsonFiles(process.argv[2]);

View File

@@ -0,0 +1,43 @@
let referencedMethods;
let definedMethods;
try {
referencedMethods = require('../dist/methods/referenced.json');
definedMethods = require('../dist/methods/defined.json');
} catch (error) {
console.error(
'Failed to find methods to validate. Please run `npm run n8n-generate-metadata` first.',
);
process.exit(1);
}
const compareMethods = (base, other) => {
const result = [];
for (const [nodeName, methods] of Object.entries(base)) {
if (nodeName in other) {
const found = methods.filter((item) => !other[nodeName].includes(item));
if (found.length > 0) result.push({ [nodeName]: found });
}
}
return result;
};
const referencedButUndefined = compareMethods(referencedMethods, definedMethods);
if (referencedButUndefined.length > 0) {
console.error('ERROR: The following load options methods are referenced but undefined.');
console.error('Please fix or remove the references or define the methods.');
console.error(referencedButUndefined);
process.exit(1);
}
const definedButUnused = compareMethods(definedMethods, referencedMethods);
if (definedButUnused.length > 0) {
console.warn('Warning: The following load options methods are defined but unused.');
console.warn('Please consider using or removing the methods.');
console.warn(definedButUnused);
}

View File

@@ -0,0 +1 @@
declare module 'minifaker';

View File

@@ -0,0 +1,24 @@
{
"extends": ["./tsconfig.json", "@n8n/typescript-config/modern/tsconfig.cjs.json"],
"compilerOptions": {
"outDir": "dist",
"module": "commonjs",
"tsBuildInfoFile": "dist/typecheck.tsbuildinfo"
},
"include": [
"credentials/**/*.ts",
"credentials/translations/**/*.json",
"nodes/**/*.ts",
"nodes/**/*.json",
"types/**/*.ts",
"utils/**/*.ts"
],
"exclude": [
"node_modules",
"nodes/**/*.test.ts",
"credentials/**/*.test.ts",
"utils/**/*.test.ts",
"test/**",
"../core/nodes-testing"
]
}