n8n-nodes-base 1.90.0 → 1.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credentials/GSuiteAdminOAuth2Api.credentials.js +3 -1
- package/dist/credentials/GSuiteAdminOAuth2Api.credentials.js.map +1 -1
- package/dist/methods/defined.json +2 -1
- package/dist/methods/referenced.json +1 -0
- package/dist/nodes/Calendly/CalendlyTrigger.node.js +11 -0
- package/dist/nodes/Calendly/CalendlyTrigger.node.js.map +1 -1
- package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js +2 -2
- package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js.map +1 -1
- package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js +2 -2
- package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js.map +1 -1
- package/dist/nodes/Files/ReadWriteFile/actions/read.operation.js +0 -1
- package/dist/nodes/Files/ReadWriteFile/actions/read.operation.js.map +1 -1
- package/dist/nodes/Form/utils.js.map +1 -1
- package/dist/nodes/Google/GSuiteAdmin/DeviceDescription.js +381 -0
- package/dist/nodes/Google/GSuiteAdmin/DeviceDescription.js.map +1 -0
- package/dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js +395 -88
- package/dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js.map +1 -1
- package/dist/nodes/Google/GSuiteAdmin/GenericFunctions.js +6 -2
- package/dist/nodes/Google/GSuiteAdmin/GenericFunctions.js.map +1 -1
- package/dist/nodes/Google/GSuiteAdmin/GroupDescripion.js +112 -88
- package/dist/nodes/Google/GSuiteAdmin/GroupDescripion.js.map +1 -1
- package/dist/nodes/Google/GSuiteAdmin/SearchFunctions.js +101 -0
- package/dist/nodes/Google/GSuiteAdmin/SearchFunctions.js.map +1 -0
- package/dist/nodes/Google/GSuiteAdmin/UserDescription.js +538 -195
- package/dist/nodes/Google/GSuiteAdmin/UserDescription.js.map +1 -1
- package/dist/nodes/Google/GSuiteAdmin/gSuiteAdmin.svg +1 -0
- package/dist/nodes/HttpRequest/V2/HttpRequestV2.node.js +11 -0
- package/dist/nodes/HttpRequest/V2/HttpRequestV2.node.js.map +1 -1
- package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js +8 -0
- package/dist/nodes/HttpRequest/V3/HttpRequestV3.node.js.map +1 -1
- package/dist/nodes/Jira/GenericFunctions.js +25 -12
- package/dist/nodes/Jira/GenericFunctions.js.map +1 -1
- package/dist/nodes/Jira/Jira.node.js +11 -7
- package/dist/nodes/Jira/Jira.node.js.map +1 -1
- package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js +2 -2
- package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js.map +1 -1
- package/dist/nodes/MQTT/MqttTrigger.node.js +2 -2
- package/dist/nodes/MQTT/MqttTrigger.node.js.map +1 -1
- package/dist/nodes/Postgres/PostgresTrigger.node.js +2 -2
- package/dist/nodes/Postgres/PostgresTrigger.node.js.map +1 -1
- package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js +2 -2
- package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js.map +1 -1
- package/dist/nodes/SeaTable/v2/actions/asset/upload.operation.js.map +1 -1
- package/dist/nodes/SeaTable/v2/actions/row/get.operation.js.map +1 -1
- package/dist/nodes/SeaTable/v2/actions/row/list.operation.js.map +1 -1
- package/dist/nodes/SeaTable/v2/actions/row/search.operation.js.map +1 -1
- package/dist/nodes/SseTrigger/SseTrigger.node.js +2 -2
- package/dist/nodes/SseTrigger/SseTrigger.node.js.map +1 -1
- package/dist/nodes/Transform/Summarize/utils.js +7 -7
- package/dist/nodes/Transform/Summarize/utils.js.map +1 -1
- package/dist/test/nodes/Helpers.d.ts +5 -0
- package/dist/test/nodes/Helpers.js +16 -170
- package/dist/test/nodes/Helpers.js.map +1 -1
- package/dist/types/credentials.json +1 -1
- package/dist/types/nodes.json +11 -11
- package/package.json +4 -4
- package/dist/nodes/Google/GSuiteAdmin/google-workspace-admin.png +0 -0
- package/dist/test/nodes/ExecuteWorkflow.js +0 -120
- package/dist/test/nodes/ExecuteWorkflow.js.map +0 -1
- package/dist/test/nodes/credential-types.js +0 -57
- package/dist/test/nodes/credential-types.js.map +0 -1
- package/dist/test/nodes/credentials-helper.js +0 -76
- package/dist/test/nodes/credentials-helper.js.map +0 -1
- package/dist/test/nodes/load-nodes-and-credentials.js +0 -68
- package/dist/test/nodes/load-nodes-and-credentials.js.map +0 -1
- package/dist/test/nodes/node-types.js +0 -56
- package/dist/test/nodes/node-types.js.map +0 -1
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,183 +15,31 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
19
|
var Helpers_exports = {};
|
|
30
20
|
__export(Helpers_exports, {
|
|
31
|
-
createMockExecuteFunction: () => createMockExecuteFunction
|
|
32
|
-
createTemporaryDir: () => createTemporaryDir,
|
|
33
|
-
equalityTest: () => equalityTest,
|
|
34
|
-
getResultNodeData: () => getResultNodeData,
|
|
35
|
-
getWorkflowFilenames: () => getWorkflowFilenames,
|
|
36
|
-
readJsonFileSync: () => readJsonFileSync,
|
|
37
|
-
testWorkflows: () => testWorkflows,
|
|
38
|
-
workflowToTests: () => workflowToTests
|
|
21
|
+
createMockExecuteFunction: () => createMockExecuteFunction
|
|
39
22
|
});
|
|
40
23
|
module.exports = __toCommonJS(Helpers_exports);
|
|
41
|
-
var import_di = require("@n8n/di");
|
|
42
|
-
var import_fs = require("fs");
|
|
43
24
|
var import_lodash = require("lodash");
|
|
44
|
-
var import_lodash2 = require("lodash");
|
|
45
25
|
var import_n8n_core = require("n8n-core");
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return (0, import_fs.mkdtempSync)(import_path.default.join((0, import_os.tmpdir)(), prefix));
|
|
60
|
-
}
|
|
61
|
-
function getResultNodeData(result, testData) {
|
|
62
|
-
return Object.keys(testData.output.nodeData).map((nodeName) => {
|
|
63
|
-
const error = result.data.resultData.error;
|
|
64
|
-
if (error?.cause) throw error.cause;
|
|
65
|
-
if (error) throw error;
|
|
66
|
-
if (result.data.resultData.runData[nodeName] === void 0) {
|
|
67
|
-
Object.keys(result.data.resultData.runData).forEach((key) => {
|
|
68
|
-
const error2 = result.data.resultData.runData[key][0]?.error;
|
|
69
|
-
if (error2) {
|
|
70
|
-
console.log(`Node ${key}
|
|
71
|
-
`, error2);
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
throw new import_n8n_workflow.ApplicationError(`Data for node "${nodeName}" is missing!`, { level: "warning" });
|
|
75
|
-
}
|
|
76
|
-
const resultData = result.data.resultData.runData[nodeName].map((nodeData) => {
|
|
77
|
-
if (nodeData.data === void 0) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
return nodeData.data.main[0].map((entry) => {
|
|
81
|
-
if (entry.binary && (0, import_lodash2.isEmpty)(entry.binary)) delete entry.binary;
|
|
82
|
-
delete entry.pairedItem;
|
|
83
|
-
return entry;
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
return {
|
|
87
|
-
nodeName,
|
|
88
|
-
resultData
|
|
89
|
-
};
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
const equalityTest = async (testData) => {
|
|
93
|
-
const { result } = await (0, import_ExecuteWorkflow.executeWorkflow)(testData);
|
|
94
|
-
const resultNodeData = getResultNodeData(result, testData);
|
|
95
|
-
resultNodeData.forEach(({ nodeName, resultData }) => {
|
|
96
|
-
const msg = `Equality failed for "${testData.description}" at node "${nodeName}"`;
|
|
97
|
-
resultData.forEach((item) => {
|
|
98
|
-
item?.forEach(({ binary, json }) => {
|
|
99
|
-
if (binary) {
|
|
100
|
-
delete binary.data.data;
|
|
101
|
-
delete binary.data.directory;
|
|
102
|
-
}
|
|
103
|
-
if (json?.error instanceof Error) {
|
|
104
|
-
json.error = JSON.parse(
|
|
105
|
-
JSON.stringify(json.error, ["message", "name", "description", "context"])
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
return expect(resultData, msg).toEqual(testData.output.nodeData[nodeName]);
|
|
111
|
-
});
|
|
112
|
-
expect(result.finished || result.status === "waiting").toEqual(true);
|
|
113
|
-
};
|
|
114
|
-
const preparePinData = (pinData) => {
|
|
115
|
-
const returnData = Object.keys(pinData).reduce(
|
|
116
|
-
(acc, key) => {
|
|
117
|
-
const data = pinData[key];
|
|
118
|
-
acc[key] = [data];
|
|
119
|
-
return acc;
|
|
120
|
-
},
|
|
121
|
-
{}
|
|
122
|
-
);
|
|
123
|
-
return returnData;
|
|
124
|
-
};
|
|
125
|
-
const workflowToTests = (workflowFiles, credentials) => {
|
|
126
|
-
const testCases = [];
|
|
127
|
-
for (const filePath of workflowFiles) {
|
|
128
|
-
const description = filePath.replace(".json", "");
|
|
129
|
-
const workflowData = readJsonFileSync(
|
|
130
|
-
filePath
|
|
131
|
-
);
|
|
132
|
-
const testDir = import_path.default.join(baseDir, import_path.default.dirname(filePath));
|
|
133
|
-
workflowData.nodes.forEach((node) => {
|
|
134
|
-
if (node.parameters) {
|
|
135
|
-
node.parameters = JSON.parse(
|
|
136
|
-
JSON.stringify(node.parameters).replace(/"C:\\\\Test\\\\(.*)"/, `"${testDir}/$1"`)
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
if (workflowData.pinData === void 0) {
|
|
141
|
-
throw new import_n8n_workflow.ApplicationError("Workflow data does not contain pinData", { level: "warning" });
|
|
142
|
-
}
|
|
143
|
-
const nodeData = preparePinData(workflowData.pinData);
|
|
144
|
-
delete workflowData.pinData;
|
|
145
|
-
const { trigger } = workflowData;
|
|
146
|
-
delete workflowData.trigger;
|
|
147
|
-
const input = { workflowData };
|
|
148
|
-
const output = { nodeData };
|
|
149
|
-
testCases.push({ description, input, output, trigger, credentials });
|
|
150
|
-
}
|
|
151
|
-
return testCases;
|
|
152
|
-
};
|
|
153
|
-
const testWorkflows = (workflows, credentials) => {
|
|
154
|
-
const tests = workflowToTests(workflows, credentials);
|
|
155
|
-
for (const testData of tests) {
|
|
156
|
-
test(testData.description, async () => await equalityTest(testData));
|
|
26
|
+
const createMockExecuteFunction = (nodeParameters, nodeMock, continueBool = false) => ({
|
|
27
|
+
getNodeParameter(parameterName, _itemIndex, fallbackValue, options) {
|
|
28
|
+
const parameter = options?.extractValue ? `${parameterName}.value` : parameterName;
|
|
29
|
+
return (0, import_lodash.get)(nodeParameters, parameter, fallbackValue);
|
|
30
|
+
},
|
|
31
|
+
getNode() {
|
|
32
|
+
return nodeMock;
|
|
33
|
+
},
|
|
34
|
+
continueOnFail() {
|
|
35
|
+
return continueBool;
|
|
36
|
+
},
|
|
37
|
+
helpers: {
|
|
38
|
+
constructExecutionMetaData: import_n8n_core.constructExecutionMetaData
|
|
157
39
|
}
|
|
158
|
-
};
|
|
159
|
-
const getWorkflowFilenames = (dirname) => {
|
|
160
|
-
const workflows = [];
|
|
161
|
-
const filenames = (0, import_fs.readdirSync)(dirname);
|
|
162
|
-
const testFolder = dirname.split(`${import_path.default.sep}nodes-base${import_path.default.sep}`)[1];
|
|
163
|
-
filenames.forEach((file) => {
|
|
164
|
-
if (file.endsWith(".json")) {
|
|
165
|
-
workflows.push(import_path.default.join(testFolder, file));
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
return workflows;
|
|
169
|
-
};
|
|
170
|
-
const createMockExecuteFunction = (nodeParameters, nodeMock, continueBool = false) => {
|
|
171
|
-
const fakeExecuteFunction = {
|
|
172
|
-
getNodeParameter(parameterName, _itemIndex, fallbackValue, options) {
|
|
173
|
-
const parameter = options?.extractValue ? `${parameterName}.value` : parameterName;
|
|
174
|
-
return (0, import_lodash.get)(nodeParameters, parameter, fallbackValue);
|
|
175
|
-
},
|
|
176
|
-
getNode() {
|
|
177
|
-
return nodeMock;
|
|
178
|
-
},
|
|
179
|
-
continueOnFail() {
|
|
180
|
-
return continueBool;
|
|
181
|
-
},
|
|
182
|
-
helpers: {
|
|
183
|
-
constructExecutionMetaData: import_n8n_core.constructExecutionMetaData
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
return fakeExecuteFunction;
|
|
187
|
-
};
|
|
40
|
+
});
|
|
188
41
|
// Annotate the CommonJS export names for ESM import in node:
|
|
189
42
|
0 && (module.exports = {
|
|
190
|
-
createMockExecuteFunction
|
|
191
|
-
createTemporaryDir,
|
|
192
|
-
equalityTest,
|
|
193
|
-
getResultNodeData,
|
|
194
|
-
getWorkflowFilenames,
|
|
195
|
-
readJsonFileSync,
|
|
196
|
-
testWorkflows,
|
|
197
|
-
workflowToTests
|
|
43
|
+
createMockExecuteFunction
|
|
198
44
|
});
|
|
199
45
|
//# sourceMappingURL=Helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../test/nodes/Helpers.ts"],"sourcesContent":["import { Container } from '@n8n/di';\nimport { readFileSync, readdirSync, mkdtempSync } from 'fs';\nimport { get } from 'lodash';\nimport { isEmpty } from 'lodash';\nimport { constructExecutionMetaData } from 'n8n-core';\nimport type {\n\tICredentialDataDecryptedObject,\n\tIDataObject,\n\tIExecuteFunctions,\n\tIGetNodeParameterOptions,\n\tINode,\n\tIRun,\n\tIWorkflowBase,\n\tWorkflowTestData,\n} from 'n8n-workflow';\nimport { ApplicationError } from 'n8n-workflow';\nimport nock from 'nock';\nimport { tmpdir } from 'os';\nimport path from 'path';\n\nimport { executeWorkflow } from './ExecuteWorkflow';\nimport { LoadNodesAndCredentials } from './load-nodes-and-credentials';\n\nconst baseDir = path.resolve(__dirname, '../..');\n\nexport const readJsonFileSync = <T = any>(filePath: string) =>\n\tJSON.parse(readFileSync(path.join(baseDir, filePath), 'utf-8')) as T;\n\nconst loadNodesAndCredentials = new LoadNodesAndCredentials(baseDir);\nContainer.set(LoadNodesAndCredentials, loadNodesAndCredentials);\n\nbeforeAll(async () => await loadNodesAndCredentials.init());\nbeforeEach(() => nock.disableNetConnect());\n\nexport function createTemporaryDir(prefix = 'n8n') {\n\treturn mkdtempSync(path.join(tmpdir(), prefix));\n}\n\nexport function getResultNodeData(result: IRun, testData: WorkflowTestData) {\n\treturn Object.keys(testData.output.nodeData).map((nodeName) => {\n\t\tconst error = result.data.resultData.error;\n\t\t// If there was an error running the workflow throw it for easier debugging\n\t\t// and to surface all issues\n\t\tif (error?.cause) throw error.cause;\n\t\tif (error) throw error;\n\n\t\tif (result.data.resultData.runData[nodeName] === undefined) {\n\t\t\t// log errors from other nodes\n\t\t\tObject.keys(result.data.resultData.runData).forEach((key) => {\n\t\t\t\tconst error = result.data.resultData.runData[key][0]?.error;\n\t\t\t\tif (error) {\n\t\t\t\t\tconsole.log(`Node ${key}\\n`, error);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthrow new ApplicationError(`Data for node \"${nodeName}\" is missing!`, { level: 'warning' });\n\t\t}\n\t\tconst resultData = result.data.resultData.runData[nodeName].map((nodeData) => {\n\t\t\tif (nodeData.data === undefined) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn nodeData.data.main[0]!.map((entry) => {\n\t\t\t\tif (entry.binary && isEmpty(entry.binary)) delete entry.binary;\n\t\t\t\tdelete entry.pairedItem;\n\t\t\t\treturn entry;\n\t\t\t});\n\t\t});\n\t\treturn {\n\t\t\tnodeName,\n\t\t\tresultData,\n\t\t};\n\t});\n}\n\nexport const equalityTest = async (testData: WorkflowTestData) => {\n\t// execute workflow\n\tconst { result } = await executeWorkflow(testData);\n\n\t// check if result node data matches expected test data\n\tconst resultNodeData = getResultNodeData(result, testData);\n\tresultNodeData.forEach(({ nodeName, resultData }) => {\n\t\tconst msg = `Equality failed for \"${testData.description}\" at node \"${nodeName}\"`;\n\t\tresultData.forEach((item) => {\n\t\t\titem?.forEach(({ binary, json }) => {\n\t\t\t\tif (binary) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tdelete binary.data.data;\n\t\t\t\t\tdelete binary.data.directory;\n\t\t\t\t}\n\n\t\t\t\t// Convert errors to JSON so tests can compare\n\t\t\t\tif (json?.error instanceof Error) {\n\t\t\t\t\tjson.error = JSON.parse(\n\t\t\t\t\t\tJSON.stringify(json.error, ['message', 'name', 'description', 'context']),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn expect(resultData, msg).toEqual(testData.output.nodeData[nodeName]);\n\t});\n\n\texpect(result.finished || result.status === 'waiting').toEqual(true);\n};\n\nconst preparePinData = (pinData: IDataObject) => {\n\tconst returnData = Object.keys(pinData).reduce(\n\t\t(acc, key) => {\n\t\t\tconst data = pinData[key] as IDataObject[];\n\t\t\tacc[key] = [data];\n\t\t\treturn acc;\n\t\t},\n\t\t{} as {\n\t\t\t[key: string]: IDataObject[][];\n\t\t},\n\t);\n\treturn returnData;\n};\n\nexport const workflowToTests = (\n\tworkflowFiles: string[],\n\tcredentials?: Record<string, ICredentialDataDecryptedObject>,\n) => {\n\tconst testCases: WorkflowTestData[] = [];\n\tfor (const filePath of workflowFiles) {\n\t\tconst description = filePath.replace('.json', '');\n\t\tconst workflowData = readJsonFileSync<IWorkflowBase & Pick<WorkflowTestData, 'trigger'>>(\n\t\t\tfilePath,\n\t\t);\n\t\tconst testDir = path.join(baseDir, path.dirname(filePath));\n\t\tworkflowData.nodes.forEach((node) => {\n\t\t\tif (node.parameters) {\n\t\t\t\tnode.parameters = JSON.parse(\n\t\t\t\t\tJSON.stringify(node.parameters).replace(/\"C:\\\\\\\\Test\\\\\\\\(.*)\"/, `\"${testDir}/$1\"`),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\tif (workflowData.pinData === undefined) {\n\t\t\tthrow new ApplicationError('Workflow data does not contain pinData', { level: 'warning' });\n\t\t}\n\n\t\tconst nodeData = preparePinData(workflowData.pinData);\n\t\tdelete workflowData.pinData;\n\n\t\tconst { trigger } = workflowData;\n\t\tdelete workflowData.trigger;\n\n\t\tconst input = { workflowData };\n\t\tconst output = { nodeData };\n\n\t\ttestCases.push({ description, input, output, trigger, credentials });\n\t}\n\treturn testCases;\n};\n\nexport const testWorkflows = (\n\tworkflows: string[],\n\tcredentials?: Record<string, ICredentialDataDecryptedObject>,\n) => {\n\tconst tests = workflowToTests(workflows, credentials);\n\n\tfor (const testData of tests) {\n\t\ttest(testData.description, async () => await equalityTest(testData));\n\t}\n};\n\nexport const getWorkflowFilenames = (dirname: string) => {\n\tconst workflows: string[] = [];\n\n\tconst filenames = readdirSync(dirname);\n\tconst testFolder = dirname.split(`${path.sep}nodes-base${path.sep}`)[1];\n\tfilenames.forEach((file) => {\n\t\tif (file.endsWith('.json')) {\n\t\t\tworkflows.push(path.join(testFolder, file));\n\t\t}\n\t});\n\n\treturn workflows;\n};\n\nexport const createMockExecuteFunction = <T = IExecuteFunctions>(\n\tnodeParameters: IDataObject,\n\tnodeMock: INode,\n\tcontinueBool = false,\n) => {\n\tconst fakeExecuteFunction = {\n\t\tgetNodeParameter(\n\t\t\tparameterName: string,\n\t\t\t_itemIndex: number,\n\t\t\tfallbackValue?: IDataObject | undefined,\n\t\t\toptions?: IGetNodeParameterOptions | undefined,\n\t\t) {\n\t\t\tconst parameter = options?.extractValue ? `${parameterName}.value` : parameterName;\n\t\t\treturn get(nodeParameters, parameter, fallbackValue);\n\t\t},\n\t\tgetNode() {\n\t\t\treturn nodeMock;\n\t\t},\n\t\tcontinueOnFail() {\n\t\t\treturn continueBool;\n\t\t},\n\t\thelpers: {\n\t\t\tconstructExecutionMetaData,\n\t\t},\n\t} as unknown as T;\n\treturn fakeExecuteFunction;\n};\n"],"mappings":"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","names":["import_lodash","path","nock","error"]}
|
|
1
|
+
{"version":3,"sources":["../../../test/nodes/Helpers.ts"],"sourcesContent":["import { get } from 'lodash';\nimport { constructExecutionMetaData } from 'n8n-core';\nimport type { IDataObject, IExecuteFunctions, IGetNodeParameterOptions, INode } from 'n8n-workflow';\n\nexport const createMockExecuteFunction = <T = IExecuteFunctions>(\n\tnodeParameters: IDataObject,\n\tnodeMock: INode,\n\tcontinueBool = false,\n) =>\n\t({\n\t\tgetNodeParameter(\n\t\t\tparameterName: string,\n\t\t\t_itemIndex: number,\n\t\t\tfallbackValue?: IDataObject | undefined,\n\t\t\toptions?: IGetNodeParameterOptions | undefined,\n\t\t) {\n\t\t\tconst parameter = options?.extractValue ? `${parameterName}.value` : parameterName;\n\t\t\treturn get(nodeParameters, parameter, fallbackValue);\n\t\t},\n\t\tgetNode() {\n\t\t\treturn nodeMock;\n\t\t},\n\t\tcontinueOnFail() {\n\t\t\treturn continueBool;\n\t\t},\n\t\thelpers: {\n\t\t\tconstructExecutionMetaData,\n\t\t},\n\t}) as unknown as T;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAoB;AACpB,sBAA2C;AAGpC,MAAM,4BAA4B,CACxC,gBACA,UACA,eAAe,WAEd;AAAA,EACA,iBACC,eACA,YACA,eACA,SACC;AACD,UAAM,YAAY,SAAS,eAAe,GAAG,aAAa,WAAW;AACrE,eAAO,mBAAI,gBAAgB,WAAW,aAAa;AAAA,EACpD;AAAA,EACA,UAAU;AACT,WAAO;AAAA,EACR;AAAA,EACA,iBAAiB;AAChB,WAAO;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACR;AAAA,EACD;AACD;","names":[]}
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
{"name":"goToWebinarOAuth2Api","extends":["oAuth2Api"],"displayName":"GoToWebinar OAuth2 API","documentationUrl":"goToWebinar","properties":[{"displayName":"Grant Type","name":"grantType","type":"hidden","default":"authorizationCode"},{"displayName":"Authorization URL","name":"authUrl","type":"hidden","default":"https://api.getgo.com/oauth/v2/authorize"},{"displayName":"Access Token URL","name":"accessTokenUrl","type":"hidden","default":"https://api.getgo.com/oauth/v2/token"},{"displayName":"Scope","name":"scope","type":"hidden","default":""},{"displayName":"Auth URI Query Parameters","name":"authQueryParameters","type":"hidden","default":""},{"displayName":"Authentication","name":"authentication","type":"hidden","default":"header"}],"supportedNodes":["goToWebinar"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/GoToWebinar/gotowebinar.svg"},
|
|
136
136
|
{"name":"gristApi","displayName":"Grist API","documentationUrl":"grist","properties":[{"displayName":"API Key","name":"apiKey","type":"string","typeOptions":{"password":true},"default":"","required":true},{"displayName":"Plan Type","name":"planType","type":"options","default":"free","options":[{"name":"Free","value":"free"},{"name":"Paid","value":"paid"},{"name":"Self-Hosted","value":"selfHosted"}]},{"displayName":"Custom Subdomain","name":"customSubdomain","type":"string","default":"","required":true,"description":"Custom subdomain of your team","displayOptions":{"show":{"planType":["paid"]}}},{"displayName":"Self-Hosted URL","name":"selfHostedUrl","type":"string","default":"","placeholder":"http://localhost:8484","required":true,"description":"URL of your Grist instance. Include http/https without /api and no trailing slash.","displayOptions":{"show":{"planType":["selfHosted"]}}}],"supportedNodes":["grist"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Grist/grist.svg"},
|
|
137
137
|
{"name":"grafanaApi","displayName":"Grafana API","documentationUrl":"grafana","properties":[{"displayName":"API Key","name":"apiKey","type":"string","typeOptions":{"password":true},"default":"","required":true},{"displayName":"Base URL","name":"baseUrl","type":"string","default":"","description":"Base URL of your Grafana instance","placeholder":"e.g. https://n8n.grafana.net/","required":true}],"authenticate":{"type":"generic","properties":{"headers":{"Authorization":"=Bearer {{$credentials.apiKey}}"}}},"test":{"request":{"baseURL":"={{$credentials.baseUrl.replace(new RegExp(\"/$\"), \"\") + \"/api\" }}","url":"/folders"}},"supportedNodes":["grafana"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Grafana/grafana.svg"},
|
|
138
|
-
{"name":"gSuiteAdminOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Workspace Admin OAuth2 API","documentationUrl":"google","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.domain.readonly https://www.googleapis.com/auth/admin.directory.userschema.readonly"}],"supportedNodes":["gSuiteAdmin"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Google/GSuiteAdmin/
|
|
138
|
+
{"name":"gSuiteAdminOAuth2Api","extends":["googleOAuth2Api"],"displayName":"Google Workspace Admin OAuth2 API","documentationUrl":"google","properties":[{"displayName":"Scope","name":"scope","type":"hidden","default":"https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.domain.readonly https://www.googleapis.com/auth/admin.directory.userschema.readonly https://www.googleapis.com/auth/admin.directory.device.chromeos https://www.googleapis.com/auth/admin.directory.orgunit.readonly"}],"supportedNodes":["gSuiteAdmin"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Google/GSuiteAdmin/gSuiteAdmin.svg"},
|
|
139
139
|
{"name":"gumroadApi","displayName":"Gumroad API","documentationUrl":"gumroad","properties":[{"displayName":"Access Token","name":"accessToken","type":"string","typeOptions":{"password":true},"default":""}],"supportedNodes":["gumroadTrigger"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Gumroad/gumroad.png"},
|
|
140
140
|
{"name":"haloPSAApi","displayName":"HaloPSA API","documentationUrl":"halopsa","properties":[{"displayName":"Hosting Type","name":"hostingType","type":"options","options":[{"name":"On-Premise Solution","value":"onPremise"},{"name":"Hosted Solution Of Halo","value":"hostedHalo"}],"default":"onPremise"},{"displayName":"HaloPSA Authorisation Server URL","name":"authUrl","type":"string","default":"","required":true},{"displayName":"Resource Server","name":"resourceApiUrl","type":"string","default":"","required":true,"description":"The Resource server is available at your \"Halo Web Application URL/api\""},{"displayName":"Client ID","name":"client_id","type":"string","default":"","required":true,"description":"Must be your application client ID"},{"displayName":"Client Secret","name":"client_secret","type":"string","typeOptions":{"password":true},"default":"","required":true,"description":"Must be your application client secret"},{"displayName":"Tenant","name":"tenant","type":"string","displayOptions":{"show":{"hostingType":["hostedHalo"]}},"default":"","description":"An additional tenant parameter for HaloPSA hosted solution"},{"displayName":"Scope","name":"scope","type":"hidden","default":"admin edit:tickets edit:customers","required":true}],"supportedNodes":["haloPSA"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/HaloPSA/halopsa.svg"},
|
|
141
141
|
{"name":"harvestApi","displayName":"Harvest API","documentationUrl":"harvest","properties":[{"displayName":"Access Token","name":"accessToken","type":"string","typeOptions":{"password":true},"default":"","description":"Visit your account details page, and grab the Access Token. See <a href=\"https://help.getharvest.com/api-v2/authentication-api/authentication/authentication/\">Harvest Personal Access Tokens</a>."}],"supportedNodes":["harvest"],"iconUrl":"icons/n8n-nodes-base/dist/nodes/Harvest/harvest.png"},
|