n8n-nodes-base 1.86.0 → 1.87.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/HttpBearerAuth.credentials.js +63 -0
- package/dist/credentials/HttpBearerAuth.credentials.js.map +1 -0
- package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js +109 -0
- package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js.map +1 -0
- package/dist/known/credentials.json +11 -0
- package/dist/known/nodes.json +4 -0
- package/dist/nodes/Code/Pyodide.js +3 -1
- package/dist/nodes/Code/Pyodide.js.map +1 -1
- package/dist/nodes/EmailReadImap/v2/utils.js +4 -1
- package/dist/nodes/EmailReadImap/v2/utils.js.map +1 -1
- package/dist/nodes/Form/Form.node.js +2 -2
- package/dist/nodes/Form/Form.node.js.map +1 -1
- package/dist/nodes/Form/v2/FormTriggerV2.node.js +2 -2
- package/dist/nodes/Form/v2/FormTriggerV2.node.js.map +1 -1
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js +87 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.json +18 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.svg +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/common.js +163 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/common.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/Container.resource.js +141 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/Container.resource.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/create.operation.js +166 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/create.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/delete.operation.js +40 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/delete.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/get.operation.js +47 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/get.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/getAll.operation.js +47 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/getAll.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/index.js +42 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/index.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/Item.resource.js +210 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/Item.resource.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/create.operation.js +72 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/create.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/delete.operation.js +64 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/delete.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/get.operation.js +77 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/get.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/getAll.operation.js +48 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/getAll.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/query.operation.js +102 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/query.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/update.operation.js +83 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/update.operation.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/constants.js +52 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/constants.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/errorHandler.js +108 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/errorHandler.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/interfaces.js +17 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/interfaces.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/utils.js +200 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/helpers/utils.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/index.js +39 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/index.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/listSearch.js +75 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/methods/listSearch.js.map +1 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/transport/index.js +43 -0
- package/dist/nodes/Microsoft/AzureCosmosDb/transport/index.js.map +1 -0
- package/dist/nodes/Wait/Wait.node.js +2 -2
- package/dist/nodes/Wait/Wait.node.js.map +1 -1
- package/dist/nodes/Webhook/error.d.ts +8 -0
- package/dist/nodes/Webhook/utils.d.ts +32 -0
- package/dist/nodes/Webhook/utils.js +13 -0
- package/dist/nodes/Webhook/utils.js.map +1 -1
- package/dist/test/nodes/FakeCredentialsMap.js +6 -0
- package/dist/test/nodes/FakeCredentialsMap.js.map +1 -1
- package/dist/types/credentials.json +2 -0
- package/dist/types/nodes.json +6 -5
- package/package.json +10 -7
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
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
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var methods_exports = {};
|
|
30
|
+
__export(methods_exports, {
|
|
31
|
+
listSearch: () => listSearch
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(methods_exports);
|
|
34
|
+
var listSearch = __toESM(require("./listSearch"));
|
|
35
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
36
|
+
0 && (module.exports = {
|
|
37
|
+
listSearch
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Microsoft/AzureCosmosDb/methods/index.ts"],"sourcesContent":["export * as listSearch from './listSearch';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA4B;","names":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var listSearch_exports = {};
|
|
20
|
+
__export(listSearch_exports, {
|
|
21
|
+
searchContainers: () => searchContainers,
|
|
22
|
+
searchItems: () => searchItems
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(listSearch_exports);
|
|
25
|
+
var import_constants = require("../helpers/constants");
|
|
26
|
+
var import_transport = require("../transport");
|
|
27
|
+
function formatResults(items, filter) {
|
|
28
|
+
return items.map(({ id }) => ({
|
|
29
|
+
name: String(id).replace(/ /g, ""),
|
|
30
|
+
value: String(id)
|
|
31
|
+
})).filter(({ name }) => !filter || name.includes(filter)).sort((a, b) => a.name.localeCompare(b.name));
|
|
32
|
+
}
|
|
33
|
+
async function searchContainers(filter, paginationToken) {
|
|
34
|
+
const headers = paginationToken ? { [import_constants.HeaderConstants.X_MS_CONTINUATION]: paginationToken } : {};
|
|
35
|
+
const responseData = await import_transport.azureCosmosDbApiRequest.call(
|
|
36
|
+
this,
|
|
37
|
+
"GET",
|
|
38
|
+
"/colls",
|
|
39
|
+
{},
|
|
40
|
+
{},
|
|
41
|
+
headers,
|
|
42
|
+
true
|
|
43
|
+
);
|
|
44
|
+
const containers = responseData.body.DocumentCollections;
|
|
45
|
+
return {
|
|
46
|
+
results: formatResults(containers, filter),
|
|
47
|
+
paginationToken: responseData.headers[import_constants.HeaderConstants.X_MS_CONTINUATION]
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async function searchItems(filter, paginationToken) {
|
|
51
|
+
const container = this.getCurrentNodeParameter("container", {
|
|
52
|
+
extractValue: true
|
|
53
|
+
});
|
|
54
|
+
const headers = paginationToken ? { [import_constants.HeaderConstants.X_MS_CONTINUATION]: paginationToken } : {};
|
|
55
|
+
const responseData = await import_transport.azureCosmosDbApiRequest.call(
|
|
56
|
+
this,
|
|
57
|
+
"GET",
|
|
58
|
+
`/colls/${container}/docs`,
|
|
59
|
+
{},
|
|
60
|
+
{},
|
|
61
|
+
headers,
|
|
62
|
+
true
|
|
63
|
+
);
|
|
64
|
+
const items = responseData.body.Documents;
|
|
65
|
+
return {
|
|
66
|
+
results: formatResults(items, filter),
|
|
67
|
+
paginationToken: responseData.headers[import_constants.HeaderConstants.X_MS_CONTINUATION]
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
71
|
+
0 && (module.exports = {
|
|
72
|
+
searchContainers,
|
|
73
|
+
searchItems
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=listSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Microsoft/AzureCosmosDb/methods/listSearch.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tILoadOptionsFunctions,\n\tINodeListSearchResult,\n\tINodeListSearchItems,\n} from 'n8n-workflow';\n\nimport { HeaderConstants } from '../helpers/constants';\nimport { azureCosmosDbApiRequest } from '../transport';\n\nfunction formatResults(items: IDataObject[], filter?: string): INodeListSearchItems[] {\n\treturn items\n\t\t.map(({ id }) => ({\n\t\t\tname: String(id).replace(/ /g, ''),\n\t\t\tvalue: String(id),\n\t\t}))\n\t\t.filter(({ name }) => !filter || name.includes(filter))\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function searchContainers(\n\tthis: ILoadOptionsFunctions,\n\tfilter?: string,\n\tpaginationToken?: string,\n): Promise<INodeListSearchResult> {\n\tconst headers = paginationToken ? { [HeaderConstants.X_MS_CONTINUATION]: paginationToken } : {};\n\tconst responseData = (await azureCosmosDbApiRequest.call(\n\t\tthis,\n\t\t'GET',\n\t\t'/colls',\n\t\t{},\n\t\t{},\n\t\theaders,\n\t\ttrue,\n\t)) as {\n\t\tbody: IDataObject;\n\t\theaders: IDataObject;\n\t};\n\n\tconst containers = responseData.body.DocumentCollections as IDataObject[];\n\n\treturn {\n\t\tresults: formatResults(containers, filter),\n\t\tpaginationToken: responseData.headers[HeaderConstants.X_MS_CONTINUATION],\n\t};\n}\n\nexport async function searchItems(\n\tthis: ILoadOptionsFunctions,\n\tfilter?: string,\n\tpaginationToken?: string,\n): Promise<INodeListSearchResult> {\n\tconst container = this.getCurrentNodeParameter('container', {\n\t\textractValue: true,\n\t}) as string;\n\tconst headers = paginationToken ? { [HeaderConstants.X_MS_CONTINUATION]: paginationToken } : {};\n\tconst responseData = (await azureCosmosDbApiRequest.call(\n\t\tthis,\n\t\t'GET',\n\t\t`/colls/${container}/docs`,\n\t\t{},\n\t\t{},\n\t\theaders,\n\t\ttrue,\n\t)) as {\n\t\tbody: IDataObject;\n\t\theaders: IDataObject;\n\t};\n\n\tconst items = responseData.body.Documents as IDataObject[];\n\n\treturn {\n\t\tresults: formatResults(items, filter),\n\t\tpaginationToken: responseData.headers[HeaderConstants.X_MS_CONTINUATION],\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,uBAAgC;AAChC,uBAAwC;AAExC,SAAS,cAAc,OAAsB,QAAyC;AACrF,SAAO,MACL,IAAI,CAAC,EAAE,GAAG,OAAO;AAAA,IACjB,MAAM,OAAO,EAAE,EAAE,QAAQ,MAAM,EAAE;AAAA,IACjC,OAAO,OAAO,EAAE;AAAA,EACjB,EAAE,EACD,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,KAAK,SAAS,MAAM,CAAC,EACrD,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAC9C;AAEA,eAAsB,iBAErB,QACA,iBACiC;AACjC,QAAM,UAAU,kBAAkB,EAAE,CAAC,iCAAgB,iBAAiB,GAAG,gBAAgB,IAAI,CAAC;AAC9F,QAAM,eAAgB,MAAM,yCAAwB;AAAA,IACnD;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC;AAAA,IACD,CAAC;AAAA,IACD;AAAA,IACA;AAAA,EACD;AAKA,QAAM,aAAa,aAAa,KAAK;AAErC,SAAO;AAAA,IACN,SAAS,cAAc,YAAY,MAAM;AAAA,IACzC,iBAAiB,aAAa,QAAQ,iCAAgB,iBAAiB;AAAA,EACxE;AACD;AAEA,eAAsB,YAErB,QACA,iBACiC;AACjC,QAAM,YAAY,KAAK,wBAAwB,aAAa;AAAA,IAC3D,cAAc;AAAA,EACf,CAAC;AACD,QAAM,UAAU,kBAAkB,EAAE,CAAC,iCAAgB,iBAAiB,GAAG,gBAAgB,IAAI,CAAC;AAC9F,QAAM,eAAgB,MAAM,yCAAwB;AAAA,IACnD;AAAA,IACA;AAAA,IACA,UAAU,SAAS;AAAA,IACnB,CAAC;AAAA,IACD,CAAC;AAAA,IACD;AAAA,IACA;AAAA,EACD;AAKA,QAAM,QAAQ,aAAa,KAAK;AAEhC,SAAO;AAAA,IACN,SAAS,cAAc,OAAO,MAAM;AAAA,IACpC,iBAAiB,aAAa,QAAQ,iCAAgB,iBAAiB;AAAA,EACxE;AACD;","names":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var transport_exports = {};
|
|
20
|
+
__export(transport_exports, {
|
|
21
|
+
azureCosmosDbApiRequest: () => azureCosmosDbApiRequest
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(transport_exports);
|
|
24
|
+
async function azureCosmosDbApiRequest(method, endpoint, body = {}, qs, headers, returnFullResponse = false) {
|
|
25
|
+
const credentialsType = "microsoftAzureCosmosDbSharedKeyApi";
|
|
26
|
+
const credentials = await this.getCredentials(credentialsType);
|
|
27
|
+
const baseUrl = `https://${credentials.account}.documents.azure.com/dbs/${credentials.database}`;
|
|
28
|
+
const options = {
|
|
29
|
+
method,
|
|
30
|
+
url: `${baseUrl}${endpoint}`,
|
|
31
|
+
json: true,
|
|
32
|
+
headers,
|
|
33
|
+
body,
|
|
34
|
+
qs,
|
|
35
|
+
returnFullResponse
|
|
36
|
+
};
|
|
37
|
+
return await this.helpers.httpRequestWithAuthentication.call(this, credentialsType, options);
|
|
38
|
+
}
|
|
39
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
40
|
+
0 && (module.exports = {
|
|
41
|
+
azureCosmosDbApiRequest
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Microsoft/AzureCosmosDb/transport/index.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIHttpRequestOptions,\n\tIHttpRequestMethods,\n\tILoadOptionsFunctions,\n\tIExecuteSingleFunctions,\n} from 'n8n-workflow';\n\nimport type { ICosmosDbCredentials } from '../helpers/interfaces';\n\nexport async function azureCosmosDbApiRequest(\n\tthis: IExecuteSingleFunctions | ILoadOptionsFunctions,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\tbody: IDataObject = {},\n\tqs?: IDataObject,\n\theaders?: IDataObject,\n\treturnFullResponse: boolean = false,\n): Promise<any> {\n\tconst credentialsType = 'microsoftAzureCosmosDbSharedKeyApi';\n\tconst credentials = await this.getCredentials<ICosmosDbCredentials>(credentialsType);\n\tconst baseUrl = `https://${credentials.account}.documents.azure.com/dbs/${credentials.database}`;\n\n\tconst options: IHttpRequestOptions = {\n\t\tmethod,\n\t\turl: `${baseUrl}${endpoint}`,\n\t\tjson: true,\n\t\theaders,\n\t\tbody,\n\t\tqs,\n\t\treturnFullResponse,\n\t};\n\n\treturn await this.helpers.httpRequestWithAuthentication.call(this, credentialsType, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,eAAsB,wBAErB,QACA,UACA,OAAoB,CAAC,GACrB,IACA,SACA,qBAA8B,OACf;AACf,QAAM,kBAAkB;AACxB,QAAM,cAAc,MAAM,KAAK,eAAqC,eAAe;AACnF,QAAM,UAAU,WAAW,YAAY,OAAO,4BAA4B,YAAY,QAAQ;AAE9F,QAAM,UAA+B;AAAA,IACpC;AAAA,IACA,KAAK,GAAG,OAAO,GAAG,QAAQ;AAAA,IAC1B,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,SAAO,MAAM,KAAK,QAAQ,8BAA8B,KAAK,MAAM,iBAAiB,OAAO;AAC5F;","names":[]}
|
|
@@ -236,7 +236,7 @@ class Wait extends import_Webhook.Webhook {
|
|
|
236
236
|
path: webhookPath,
|
|
237
237
|
restartWebhook: true,
|
|
238
238
|
isFullPath: true,
|
|
239
|
-
|
|
239
|
+
nodeType: "form"
|
|
240
240
|
},
|
|
241
241
|
{
|
|
242
242
|
name: "default",
|
|
@@ -246,7 +246,7 @@ class Wait extends import_Webhook.Webhook {
|
|
|
246
246
|
path: webhookPath,
|
|
247
247
|
restartWebhook: true,
|
|
248
248
|
isFullPath: true,
|
|
249
|
-
|
|
249
|
+
nodeType: "form"
|
|
250
250
|
}
|
|
251
251
|
],
|
|
252
252
|
properties: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../nodes/Wait/Wait.node.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport type {\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeTypeDescription,\n\tINodeProperties,\n\tIDisplayOptions,\n\tIWebhookFunctions,\n} from 'n8n-workflow';\nimport {\n\tNodeOperationError,\n\tNodeConnectionTypes,\n\tWAIT_INDEFINITELY,\n\tFORM_TRIGGER_NODE_TYPE,\n} from 'n8n-workflow';\n\nimport { updateDisplayOptions } from '../../utils/utilities';\nimport {\n\tformDescription,\n\tformFields,\n\trespondWithOptions,\n\tformRespondMode,\n\tformTitle,\n\tappendAttributionToForm,\n} from '../Form/common.descriptions';\nimport { formWebhook } from '../Form/utils';\nimport {\n\tauthenticationProperty,\n\tcredentialsProperty,\n\tdefaultWebhookDescription,\n\thttpMethodsProperty,\n\toptionsProperty,\n\tresponseBinaryPropertyNameProperty,\n\tresponseCodeProperty,\n\tresponseDataProperty,\n\tresponseModeProperty,\n} from '../Webhook/description';\nimport { Webhook } from '../Webhook/Webhook.node';\n\nconst toWaitAmount: INodeProperties = {\n\tdisplayName: 'Wait Amount',\n\tname: 'amount',\n\ttype: 'number',\n\ttypeOptions: {\n\t\tminValue: 0,\n\t\tnumberPrecision: 2,\n\t},\n\tdefault: 1,\n\tdescription: 'The time to wait',\n};\n\nconst unitSelector: INodeProperties = {\n\tdisplayName: 'Wait Unit',\n\tname: 'unit',\n\ttype: 'options',\n\toptions: [\n\t\t{\n\t\t\tname: 'Seconds',\n\t\t\tvalue: 'seconds',\n\t\t},\n\t\t{\n\t\t\tname: 'Minutes',\n\t\t\tvalue: 'minutes',\n\t\t},\n\t\t{\n\t\t\tname: 'Hours',\n\t\t\tvalue: 'hours',\n\t\t},\n\t\t{\n\t\t\tname: 'Days',\n\t\t\tvalue: 'days',\n\t\t},\n\t],\n\tdefault: 'hours',\n\tdescription: 'The time unit of the Wait Amount value',\n};\n\nconst waitTimeProperties: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Limit Wait Time',\n\t\tname: 'limitWaitTime',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tdescription:\n\t\t\t'Whether to limit the time this node should wait for a user response before execution resumes',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Limit Type',\n\t\tname: 'limitType',\n\t\ttype: 'options',\n\t\tdefault: 'afterTimeInterval',\n\t\tdescription:\n\t\t\t'Sets the condition for the execution to resume. Can be a specified date or after some time.',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'After Time Interval',\n\t\t\t\tdescription: 'Waits for a certain amount of time',\n\t\t\t\tvalue: 'afterTimeInterval',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'At Specified Time',\n\t\t\t\tdescription: 'Waits until the set date and time to continue',\n\t\t\t\tvalue: 'atSpecifiedTime',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Amount',\n\t\tname: 'resumeAmount',\n\t\ttype: 'number',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitType: ['afterTimeInterval'],\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\ttypeOptions: {\n\t\t\tminValue: 0,\n\t\t\tnumberPrecision: 2,\n\t\t},\n\t\tdefault: 1,\n\t\tdescription: 'The time to wait',\n\t},\n\t{\n\t\tdisplayName: 'Unit',\n\t\tname: 'resumeUnit',\n\t\ttype: 'options',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitType: ['afterTimeInterval'],\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Seconds',\n\t\t\t\tvalue: 'seconds',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Minutes',\n\t\t\t\tvalue: 'minutes',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Hours',\n\t\t\t\tvalue: 'hours',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Days',\n\t\t\t\tvalue: 'days',\n\t\t\t},\n\t\t],\n\t\tdefault: 'hours',\n\t\tdescription: 'Unit of the interval value',\n\t},\n\t{\n\t\tdisplayName: 'Max Date and Time',\n\t\tname: 'maxDateAndTime',\n\t\ttype: 'dateTime',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitType: ['atSpecifiedTime'],\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'Continue execution after the specified date and time',\n\t},\n];\n\nconst webhookSuffix: INodeProperties = {\n\tdisplayName: 'Webhook Suffix',\n\tname: 'webhookSuffix',\n\ttype: 'string',\n\tdefault: '',\n\tplaceholder: 'webhook',\n\tnoDataExpression: true,\n\tdescription:\n\t\t'This suffix path will be appended to the restart URL. Helpful when using multiple wait nodes.',\n};\n\nconst displayOnWebhook: IDisplayOptions = {\n\tshow: {\n\t\tresume: ['webhook'],\n\t},\n};\n\nconst displayOnFormSubmission = {\n\tshow: {\n\t\tresume: ['form'],\n\t},\n};\n\nconst onFormSubmitProperties = updateDisplayOptions(displayOnFormSubmission, [\n\tformTitle,\n\tformDescription,\n\tformFields,\n\tformRespondMode,\n]);\n\nconst onWebhookCallProperties = updateDisplayOptions(displayOnWebhook, [\n\t{\n\t\t...httpMethodsProperty,\n\t\tdescription: 'The HTTP method of the Webhook call',\n\t},\n\tresponseCodeProperty,\n\tresponseModeProperty,\n\tresponseDataProperty,\n\tresponseBinaryPropertyNameProperty,\n]);\n\nconst webhookPath = '={{$parameter[\"options\"][\"webhookSuffix\"] || \"\"}}';\n\nexport class Wait extends Webhook {\n\tauthPropertyName = 'incomingAuthentication';\n\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Wait',\n\t\tname: 'wait',\n\t\ticon: 'fa:pause-circle',\n\t\ticonColor: 'crimson',\n\t\tgroup: ['organization'],\n\t\tversion: [1, 1.1],\n\t\tdescription: 'Wait before continue with execution',\n\t\tdefaults: {\n\t\t\tname: 'Wait',\n\t\t\tcolor: '#804050',\n\t\t},\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: credentialsProperty(this.authPropertyName),\n\t\twebhooks: [\n\t\t\t{\n\t\t\t\t...defaultWebhookDescription,\n\t\t\t\tresponseData: '={{$parameter[\"responseData\"]}}',\n\t\t\t\tpath: webhookPath,\n\t\t\t\trestartWebhook: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'default',\n\t\t\t\thttpMethod: 'GET',\n\t\t\t\tresponseMode: 'onReceived',\n\t\t\t\tpath: webhookPath,\n\t\t\t\trestartWebhook: true,\n\t\t\t\tisFullPath: true,\n\t\t\t\tisForm: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'default',\n\t\t\t\thttpMethod: 'POST',\n\t\t\t\tresponseMode: '={{$parameter[\"responseMode\"]}}',\n\t\t\t\tresponseData: '={{$parameter[\"responseMode\"] === \"lastNode\" ? \"noData\" : undefined}}',\n\t\t\t\tpath: webhookPath,\n\t\t\t\trestartWebhook: true,\n\t\t\t\tisFullPath: true,\n\t\t\t\tisForm: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resume',\n\t\t\t\tname: 'resume',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'After Time Interval',\n\t\t\t\t\t\tvalue: 'timeInterval',\n\t\t\t\t\t\tdescription: 'Waits for a certain amount of time',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'At Specified Time',\n\t\t\t\t\t\tvalue: 'specificTime',\n\t\t\t\t\t\tdescription: 'Waits until a specific date and time to continue',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'On Webhook Call',\n\t\t\t\t\t\tvalue: 'webhook',\n\t\t\t\t\t\tdescription: 'Waits for a webhook call before continuing',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'On Form Submitted',\n\t\t\t\t\t\tvalue: 'form',\n\t\t\t\t\t\tdescription: 'Waits for a form submission before continuing',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'timeInterval',\n\t\t\t\tdescription: 'Determines the waiting mode to use before the workflow continues',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Authentication',\n\t\t\t\tname: 'incomingAuthentication',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Basic Auth',\n\t\t\t\t\t\tvalue: 'basicAuth',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'None',\n\t\t\t\t\t\tvalue: 'none',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'none',\n\t\t\t\tdescription:\n\t\t\t\t\t'If and how incoming resume-webhook-requests to $execution.resumeFormUrl should be authenticated for additional security',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['form'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...authenticationProperty(this.authPropertyName),\n\t\t\t\tdescription:\n\t\t\t\t\t'If and how incoming resume-webhook-requests to $execution.resumeUrl should be authenticated for additional security',\n\t\t\t\tdisplayOptions: displayOnWebhook,\n\t\t\t},\n\n\t\t\t// ----------------------------------\n\t\t\t// resume:specificTime\n\t\t\t// ----------------------------------\n\t\t\t{\n\t\t\t\tdisplayName: 'Date and Time',\n\t\t\t\tname: 'dateTime',\n\t\t\t\ttype: 'dateTime',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['specificTime'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'The date and time to wait for before continuing',\n\t\t\t\trequired: true,\n\t\t\t},\n\n\t\t\t// ----------------------------------\n\t\t\t// resume:timeInterval\n\t\t\t// ----------------------------------\n\t\t\t{\n\t\t\t\t...toWaitAmount,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...toWaitAmount,\n\t\t\t\tdefault: 5,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...unitSelector,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...unitSelector,\n\t\t\t\tdefault: 'seconds',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// ----------------------------------\n\t\t\t// resume:webhook & form\n\t\t\t// ----------------------------------\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'The webhook URL will be generated at run time. It can be referenced with the <strong>$execution.resumeUrl</strong> variable. Send it somewhere before getting to this node. <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=n8n-nodes-base.wait\" target=\"_blank\">More info</a>',\n\t\t\t\tname: 'webhookNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdisplayOptions: displayOnWebhook,\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'The form url will be generated at run time. It can be referenced with the <strong>$execution.resumeFormUrl</strong> variable. Send it somewhere before getting to this node. <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=n8n-nodes-base.wait\" target=\"_blank\">More info</a>',\n\t\t\t\tname: 'formNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdisplayOptions: displayOnFormSubmission,\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t...onFormSubmitProperties,\n\t\t\t...onWebhookCallProperties,\n\t\t\t...waitTimeProperties,\n\t\t\t{\n\t\t\t\t...optionsProperty,\n\t\t\t\tdisplayOptions: displayOnWebhook,\n\t\t\t\toptions: [...(optionsProperty.options as INodeProperties[]), webhookSuffix],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['form'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\tresponseMode: ['responseNode'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [appendAttributionToForm, respondWithOptions, webhookSuffix],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['form'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\tresponseMode: ['onReceived', 'lastNode'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [appendAttributionToForm, webhookSuffix],\n\t\t\t},\n\t\t],\n\t};\n\n\tasync webhook(context: IWebhookFunctions) {\n\t\tconst resume = context.getNodeParameter('resume', 0) as string;\n\t\tif (resume === 'form') return await formWebhook(context, this.authPropertyName);\n\t\treturn await super.webhook(context);\n\t}\n\n\tasync execute(context: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst resume = context.getNodeParameter('resume', 0) as string;\n\n\t\tif (['webhook', 'form'].includes(resume)) {\n\t\t\tlet hasFormTrigger = false;\n\n\t\t\tif (resume === 'form') {\n\t\t\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\t\t\thasFormTrigger = parentNodes.some((node) => node.type === FORM_TRIGGER_NODE_TYPE);\n\t\t\t}\n\n\t\t\tconst returnData = await this.configureAndPutToWait(context);\n\n\t\t\tif (resume === 'form' && hasFormTrigger) {\n\t\t\t\tcontext.sendResponse({\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tlocation: context.evaluateExpression('{{ $execution.resumeFormUrl }}', 0),\n\t\t\t\t\t},\n\t\t\t\t\tstatusCode: 307,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn returnData;\n\t\t}\n\n\t\tlet waitTill: Date;\n\t\tif (resume === 'timeInterval') {\n\t\t\tconst unit = context.getNodeParameter('unit', 0) as string;\n\n\t\t\tlet waitAmount = context.getNodeParameter('amount', 0) as number;\n\t\t\tif (unit === 'minutes') {\n\t\t\t\twaitAmount *= 60;\n\t\t\t}\n\t\t\tif (unit === 'hours') {\n\t\t\t\twaitAmount *= 60 * 60;\n\t\t\t}\n\t\t\tif (unit === 'days') {\n\t\t\t\twaitAmount *= 60 * 60 * 24;\n\t\t\t}\n\n\t\t\twaitAmount *= 1000;\n\n\t\t\t// Timezone does not change relative dates, since they are just\n\t\t\t// a number of seconds added to the current timestamp\n\t\t\twaitTill = new Date(new Date().getTime() + waitAmount);\n\t\t} else {\n\t\t\tconst dateTimeStr = context.getNodeParameter('dateTime', 0) as string;\n\n\t\t\tif (isNaN(Date.parse(dateTimeStr))) {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tcontext.getNode(),\n\t\t\t\t\t'[Wait node] Cannot put execution to wait because `dateTime` parameter is not a valid date. Please pick a specific date and time to wait until.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twaitTill = DateTime.fromFormat(dateTimeStr, \"yyyy-MM-dd'T'HH:mm:ss\", {\n\t\t\t\tzone: context.getTimezone(),\n\t\t\t})\n\t\t\t\t.toUTC()\n\t\t\t\t.toJSDate();\n\t\t}\n\n\t\tconst waitValue = Math.max(waitTill.getTime() - new Date().getTime(), 0);\n\n\t\tif (waitValue < 65000) {\n\t\t\t// If wait time is shorter than 65 seconds leave execution active because\n\t\t\t// we just check the database every 60 seconds.\n\t\t\treturn await new Promise((resolve) => {\n\t\t\t\tconst timer = setTimeout(() => resolve([context.getInputData()]), waitValue);\n\t\t\t\tcontext.onExecutionCancellation(() => clearTimeout(timer));\n\t\t\t});\n\t\t}\n\n\t\t// If longer than 65 seconds put execution to wait\n\t\treturn await this.putToWait(context, waitTill);\n\t}\n\n\tprivate async configureAndPutToWait(context: IExecuteFunctions) {\n\t\tlet waitTill = WAIT_INDEFINITELY;\n\t\tconst limitWaitTime = context.getNodeParameter('limitWaitTime', 0);\n\n\t\tif (limitWaitTime === true) {\n\t\t\tconst limitType = context.getNodeParameter('limitType', 0);\n\n\t\t\tif (limitType === 'afterTimeInterval') {\n\t\t\t\tlet waitAmount = context.getNodeParameter('resumeAmount', 0) as number;\n\t\t\t\tconst resumeUnit = context.getNodeParameter('resumeUnit', 0);\n\n\t\t\t\tif (resumeUnit === 'minutes') {\n\t\t\t\t\twaitAmount *= 60;\n\t\t\t\t}\n\t\t\t\tif (resumeUnit === 'hours') {\n\t\t\t\t\twaitAmount *= 60 * 60;\n\t\t\t\t}\n\t\t\t\tif (resumeUnit === 'days') {\n\t\t\t\t\twaitAmount *= 60 * 60 * 24;\n\t\t\t\t}\n\n\t\t\t\twaitAmount *= 1000;\n\t\t\t\twaitTill = new Date(new Date().getTime() + waitAmount);\n\t\t\t} else {\n\t\t\t\twaitTill = new Date(context.getNodeParameter('maxDateAndTime', 0) as string);\n\t\t\t}\n\t\t}\n\n\t\treturn await this.putToWait(context, waitTill);\n\t}\n\n\tprivate async putToWait(context: IExecuteFunctions, waitTill: Date) {\n\t\tawait context.putExecutionToWait(waitTill);\n\t\treturn [context.getInputData()];\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../nodes/Wait/Wait.node.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport type {\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeTypeDescription,\n\tINodeProperties,\n\tIDisplayOptions,\n\tIWebhookFunctions,\n} from 'n8n-workflow';\nimport {\n\tNodeOperationError,\n\tNodeConnectionTypes,\n\tWAIT_INDEFINITELY,\n\tFORM_TRIGGER_NODE_TYPE,\n} from 'n8n-workflow';\n\nimport { updateDisplayOptions } from '../../utils/utilities';\nimport {\n\tformDescription,\n\tformFields,\n\trespondWithOptions,\n\tformRespondMode,\n\tformTitle,\n\tappendAttributionToForm,\n} from '../Form/common.descriptions';\nimport { formWebhook } from '../Form/utils';\nimport {\n\tauthenticationProperty,\n\tcredentialsProperty,\n\tdefaultWebhookDescription,\n\thttpMethodsProperty,\n\toptionsProperty,\n\tresponseBinaryPropertyNameProperty,\n\tresponseCodeProperty,\n\tresponseDataProperty,\n\tresponseModeProperty,\n} from '../Webhook/description';\nimport { Webhook } from '../Webhook/Webhook.node';\n\nconst toWaitAmount: INodeProperties = {\n\tdisplayName: 'Wait Amount',\n\tname: 'amount',\n\ttype: 'number',\n\ttypeOptions: {\n\t\tminValue: 0,\n\t\tnumberPrecision: 2,\n\t},\n\tdefault: 1,\n\tdescription: 'The time to wait',\n};\n\nconst unitSelector: INodeProperties = {\n\tdisplayName: 'Wait Unit',\n\tname: 'unit',\n\ttype: 'options',\n\toptions: [\n\t\t{\n\t\t\tname: 'Seconds',\n\t\t\tvalue: 'seconds',\n\t\t},\n\t\t{\n\t\t\tname: 'Minutes',\n\t\t\tvalue: 'minutes',\n\t\t},\n\t\t{\n\t\t\tname: 'Hours',\n\t\t\tvalue: 'hours',\n\t\t},\n\t\t{\n\t\t\tname: 'Days',\n\t\t\tvalue: 'days',\n\t\t},\n\t],\n\tdefault: 'hours',\n\tdescription: 'The time unit of the Wait Amount value',\n};\n\nconst waitTimeProperties: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Limit Wait Time',\n\t\tname: 'limitWaitTime',\n\t\ttype: 'boolean',\n\t\tdefault: false,\n\t\tdescription:\n\t\t\t'Whether to limit the time this node should wait for a user response before execution resumes',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdisplayName: 'Limit Type',\n\t\tname: 'limitType',\n\t\ttype: 'options',\n\t\tdefault: 'afterTimeInterval',\n\t\tdescription:\n\t\t\t'Sets the condition for the execution to resume. Can be a specified date or after some time.',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'After Time Interval',\n\t\t\t\tdescription: 'Waits for a certain amount of time',\n\t\t\t\tvalue: 'afterTimeInterval',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'At Specified Time',\n\t\t\t\tdescription: 'Waits until the set date and time to continue',\n\t\t\t\tvalue: 'atSpecifiedTime',\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tdisplayName: 'Amount',\n\t\tname: 'resumeAmount',\n\t\ttype: 'number',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitType: ['afterTimeInterval'],\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\ttypeOptions: {\n\t\t\tminValue: 0,\n\t\t\tnumberPrecision: 2,\n\t\t},\n\t\tdefault: 1,\n\t\tdescription: 'The time to wait',\n\t},\n\t{\n\t\tdisplayName: 'Unit',\n\t\tname: 'resumeUnit',\n\t\ttype: 'options',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitType: ['afterTimeInterval'],\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Seconds',\n\t\t\t\tvalue: 'seconds',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Minutes',\n\t\t\t\tvalue: 'minutes',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Hours',\n\t\t\t\tvalue: 'hours',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Days',\n\t\t\t\tvalue: 'days',\n\t\t\t},\n\t\t],\n\t\tdefault: 'hours',\n\t\tdescription: 'Unit of the interval value',\n\t},\n\t{\n\t\tdisplayName: 'Max Date and Time',\n\t\tname: 'maxDateAndTime',\n\t\ttype: 'dateTime',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tlimitType: ['atSpecifiedTime'],\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t\tresume: ['webhook', 'form'],\n\t\t\t},\n\t\t},\n\t\tdefault: '',\n\t\tdescription: 'Continue execution after the specified date and time',\n\t},\n];\n\nconst webhookSuffix: INodeProperties = {\n\tdisplayName: 'Webhook Suffix',\n\tname: 'webhookSuffix',\n\ttype: 'string',\n\tdefault: '',\n\tplaceholder: 'webhook',\n\tnoDataExpression: true,\n\tdescription:\n\t\t'This suffix path will be appended to the restart URL. Helpful when using multiple wait nodes.',\n};\n\nconst displayOnWebhook: IDisplayOptions = {\n\tshow: {\n\t\tresume: ['webhook'],\n\t},\n};\n\nconst displayOnFormSubmission = {\n\tshow: {\n\t\tresume: ['form'],\n\t},\n};\n\nconst onFormSubmitProperties = updateDisplayOptions(displayOnFormSubmission, [\n\tformTitle,\n\tformDescription,\n\tformFields,\n\tformRespondMode,\n]);\n\nconst onWebhookCallProperties = updateDisplayOptions(displayOnWebhook, [\n\t{\n\t\t...httpMethodsProperty,\n\t\tdescription: 'The HTTP method of the Webhook call',\n\t},\n\tresponseCodeProperty,\n\tresponseModeProperty,\n\tresponseDataProperty,\n\tresponseBinaryPropertyNameProperty,\n]);\n\nconst webhookPath = '={{$parameter[\"options\"][\"webhookSuffix\"] || \"\"}}';\n\nexport class Wait extends Webhook {\n\tauthPropertyName = 'incomingAuthentication';\n\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Wait',\n\t\tname: 'wait',\n\t\ticon: 'fa:pause-circle',\n\t\ticonColor: 'crimson',\n\t\tgroup: ['organization'],\n\t\tversion: [1, 1.1],\n\t\tdescription: 'Wait before continue with execution',\n\t\tdefaults: {\n\t\t\tname: 'Wait',\n\t\t\tcolor: '#804050',\n\t\t},\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: credentialsProperty(this.authPropertyName),\n\t\twebhooks: [\n\t\t\t{\n\t\t\t\t...defaultWebhookDescription,\n\t\t\t\tresponseData: '={{$parameter[\"responseData\"]}}',\n\t\t\t\tpath: webhookPath,\n\t\t\t\trestartWebhook: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'default',\n\t\t\t\thttpMethod: 'GET',\n\t\t\t\tresponseMode: 'onReceived',\n\t\t\t\tpath: webhookPath,\n\t\t\t\trestartWebhook: true,\n\t\t\t\tisFullPath: true,\n\t\t\t\tnodeType: 'form',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'default',\n\t\t\t\thttpMethod: 'POST',\n\t\t\t\tresponseMode: '={{$parameter[\"responseMode\"]}}',\n\t\t\t\tresponseData: '={{$parameter[\"responseMode\"] === \"lastNode\" ? \"noData\" : undefined}}',\n\t\t\t\tpath: webhookPath,\n\t\t\t\trestartWebhook: true,\n\t\t\t\tisFullPath: true,\n\t\t\t\tnodeType: 'form',\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resume',\n\t\t\t\tname: 'resume',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'After Time Interval',\n\t\t\t\t\t\tvalue: 'timeInterval',\n\t\t\t\t\t\tdescription: 'Waits for a certain amount of time',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'At Specified Time',\n\t\t\t\t\t\tvalue: 'specificTime',\n\t\t\t\t\t\tdescription: 'Waits until a specific date and time to continue',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'On Webhook Call',\n\t\t\t\t\t\tvalue: 'webhook',\n\t\t\t\t\t\tdescription: 'Waits for a webhook call before continuing',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'On Form Submitted',\n\t\t\t\t\t\tvalue: 'form',\n\t\t\t\t\t\tdescription: 'Waits for a form submission before continuing',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'timeInterval',\n\t\t\t\tdescription: 'Determines the waiting mode to use before the workflow continues',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Authentication',\n\t\t\t\tname: 'incomingAuthentication',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Basic Auth',\n\t\t\t\t\t\tvalue: 'basicAuth',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'None',\n\t\t\t\t\t\tvalue: 'none',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'none',\n\t\t\t\tdescription:\n\t\t\t\t\t'If and how incoming resume-webhook-requests to $execution.resumeFormUrl should be authenticated for additional security',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['form'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...authenticationProperty(this.authPropertyName),\n\t\t\t\tdescription:\n\t\t\t\t\t'If and how incoming resume-webhook-requests to $execution.resumeUrl should be authenticated for additional security',\n\t\t\t\tdisplayOptions: displayOnWebhook,\n\t\t\t},\n\n\t\t\t// ----------------------------------\n\t\t\t// resume:specificTime\n\t\t\t// ----------------------------------\n\t\t\t{\n\t\t\t\tdisplayName: 'Date and Time',\n\t\t\t\tname: 'dateTime',\n\t\t\t\ttype: 'dateTime',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['specificTime'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefault: '',\n\t\t\t\tdescription: 'The date and time to wait for before continuing',\n\t\t\t\trequired: true,\n\t\t\t},\n\n\t\t\t// ----------------------------------\n\t\t\t// resume:timeInterval\n\t\t\t// ----------------------------------\n\t\t\t{\n\t\t\t\t...toWaitAmount,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...toWaitAmount,\n\t\t\t\tdefault: 5,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...unitSelector,\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\t...unitSelector,\n\t\t\t\tdefault: 'seconds',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['timeInterval'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\t'@version': [1],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// ----------------------------------\n\t\t\t// resume:webhook & form\n\t\t\t// ----------------------------------\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'The webhook URL will be generated at run time. It can be referenced with the <strong>$execution.resumeUrl</strong> variable. Send it somewhere before getting to this node. <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=n8n-nodes-base.wait\" target=\"_blank\">More info</a>',\n\t\t\t\tname: 'webhookNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdisplayOptions: displayOnWebhook,\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'The form url will be generated at run time. It can be referenced with the <strong>$execution.resumeFormUrl</strong> variable. Send it somewhere before getting to this node. <a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.wait/?utm_source=n8n_app&utm_medium=node_settings_modal-credential_link&utm_campaign=n8n-nodes-base.wait\" target=\"_blank\">More info</a>',\n\t\t\t\tname: 'formNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdisplayOptions: displayOnFormSubmission,\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t...onFormSubmitProperties,\n\t\t\t...onWebhookCallProperties,\n\t\t\t...waitTimeProperties,\n\t\t\t{\n\t\t\t\t...optionsProperty,\n\t\t\t\tdisplayOptions: displayOnWebhook,\n\t\t\t\toptions: [...(optionsProperty.options as INodeProperties[]), webhookSuffix],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['form'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\tresponseMode: ['responseNode'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [appendAttributionToForm, respondWithOptions, webhookSuffix],\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Options',\n\t\t\t\tname: 'options',\n\t\t\t\ttype: 'collection',\n\t\t\t\tplaceholder: 'Add option',\n\t\t\t\tdefault: {},\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tresume: ['form'],\n\t\t\t\t\t},\n\t\t\t\t\thide: {\n\t\t\t\t\t\tresponseMode: ['onReceived', 'lastNode'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toptions: [appendAttributionToForm, webhookSuffix],\n\t\t\t},\n\t\t],\n\t};\n\n\tasync webhook(context: IWebhookFunctions) {\n\t\tconst resume = context.getNodeParameter('resume', 0) as string;\n\t\tif (resume === 'form') return await formWebhook(context, this.authPropertyName);\n\t\treturn await super.webhook(context);\n\t}\n\n\tasync execute(context: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst resume = context.getNodeParameter('resume', 0) as string;\n\n\t\tif (['webhook', 'form'].includes(resume)) {\n\t\t\tlet hasFormTrigger = false;\n\n\t\t\tif (resume === 'form') {\n\t\t\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\t\t\thasFormTrigger = parentNodes.some((node) => node.type === FORM_TRIGGER_NODE_TYPE);\n\t\t\t}\n\n\t\t\tconst returnData = await this.configureAndPutToWait(context);\n\n\t\t\tif (resume === 'form' && hasFormTrigger) {\n\t\t\t\tcontext.sendResponse({\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tlocation: context.evaluateExpression('{{ $execution.resumeFormUrl }}', 0),\n\t\t\t\t\t},\n\t\t\t\t\tstatusCode: 307,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn returnData;\n\t\t}\n\n\t\tlet waitTill: Date;\n\t\tif (resume === 'timeInterval') {\n\t\t\tconst unit = context.getNodeParameter('unit', 0) as string;\n\n\t\t\tlet waitAmount = context.getNodeParameter('amount', 0) as number;\n\t\t\tif (unit === 'minutes') {\n\t\t\t\twaitAmount *= 60;\n\t\t\t}\n\t\t\tif (unit === 'hours') {\n\t\t\t\twaitAmount *= 60 * 60;\n\t\t\t}\n\t\t\tif (unit === 'days') {\n\t\t\t\twaitAmount *= 60 * 60 * 24;\n\t\t\t}\n\n\t\t\twaitAmount *= 1000;\n\n\t\t\t// Timezone does not change relative dates, since they are just\n\t\t\t// a number of seconds added to the current timestamp\n\t\t\twaitTill = new Date(new Date().getTime() + waitAmount);\n\t\t} else {\n\t\t\tconst dateTimeStr = context.getNodeParameter('dateTime', 0) as string;\n\n\t\t\tif (isNaN(Date.parse(dateTimeStr))) {\n\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\tcontext.getNode(),\n\t\t\t\t\t'[Wait node] Cannot put execution to wait because `dateTime` parameter is not a valid date. Please pick a specific date and time to wait until.',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twaitTill = DateTime.fromFormat(dateTimeStr, \"yyyy-MM-dd'T'HH:mm:ss\", {\n\t\t\t\tzone: context.getTimezone(),\n\t\t\t})\n\t\t\t\t.toUTC()\n\t\t\t\t.toJSDate();\n\t\t}\n\n\t\tconst waitValue = Math.max(waitTill.getTime() - new Date().getTime(), 0);\n\n\t\tif (waitValue < 65000) {\n\t\t\t// If wait time is shorter than 65 seconds leave execution active because\n\t\t\t// we just check the database every 60 seconds.\n\t\t\treturn await new Promise((resolve) => {\n\t\t\t\tconst timer = setTimeout(() => resolve([context.getInputData()]), waitValue);\n\t\t\t\tcontext.onExecutionCancellation(() => clearTimeout(timer));\n\t\t\t});\n\t\t}\n\n\t\t// If longer than 65 seconds put execution to wait\n\t\treturn await this.putToWait(context, waitTill);\n\t}\n\n\tprivate async configureAndPutToWait(context: IExecuteFunctions) {\n\t\tlet waitTill = WAIT_INDEFINITELY;\n\t\tconst limitWaitTime = context.getNodeParameter('limitWaitTime', 0);\n\n\t\tif (limitWaitTime === true) {\n\t\t\tconst limitType = context.getNodeParameter('limitType', 0);\n\n\t\t\tif (limitType === 'afterTimeInterval') {\n\t\t\t\tlet waitAmount = context.getNodeParameter('resumeAmount', 0) as number;\n\t\t\t\tconst resumeUnit = context.getNodeParameter('resumeUnit', 0);\n\n\t\t\t\tif (resumeUnit === 'minutes') {\n\t\t\t\t\twaitAmount *= 60;\n\t\t\t\t}\n\t\t\t\tif (resumeUnit === 'hours') {\n\t\t\t\t\twaitAmount *= 60 * 60;\n\t\t\t\t}\n\t\t\t\tif (resumeUnit === 'days') {\n\t\t\t\t\twaitAmount *= 60 * 60 * 24;\n\t\t\t\t}\n\n\t\t\t\twaitAmount *= 1000;\n\t\t\t\twaitTill = new Date(new Date().getTime() + waitAmount);\n\t\t\t} else {\n\t\t\t\twaitTill = new Date(context.getNodeParameter('maxDateAndTime', 0) as string);\n\t\t\t}\n\t\t}\n\n\t\treturn await this.putToWait(context, waitTill);\n\t}\n\n\tprivate async putToWait(context: IExecuteFunctions, waitTill: Date) {\n\t\tawait context.putExecutionToWait(waitTill);\n\t\treturn [context.getInputData()];\n\t}\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { IWebhookFunctions, IDataObject, INodeExecutionData } from 'n8n-workflow';
|
|
2
|
+
|
|
3
|
+
type WebhookParameters = {
|
|
4
|
+
httpMethod: string | string[];
|
|
5
|
+
responseMode: string;
|
|
6
|
+
responseData: string;
|
|
7
|
+
responseCode?: number;
|
|
8
|
+
options?: {
|
|
9
|
+
responseData?: string;
|
|
10
|
+
responseCode?: {
|
|
11
|
+
values?: {
|
|
12
|
+
responseCode: number;
|
|
13
|
+
customCode?: number;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
noResponseBody?: boolean;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
declare const getResponseCode: (parameters: WebhookParameters) => number;
|
|
20
|
+
declare const getResponseData: (parameters: WebhookParameters) => string | undefined;
|
|
21
|
+
declare const configuredOutputs: (parameters: WebhookParameters) => {
|
|
22
|
+
type: string;
|
|
23
|
+
displayName: string;
|
|
24
|
+
}[];
|
|
25
|
+
declare const setupOutputConnection: (ctx: IWebhookFunctions, method: string, additionalData: {
|
|
26
|
+
jwtPayload?: IDataObject;
|
|
27
|
+
}) => (outputData: INodeExecutionData) => INodeExecutionData[][];
|
|
28
|
+
declare const isIpWhitelisted: (whitelist: string | string[] | undefined, ips: string[], ip?: string) => boolean;
|
|
29
|
+
declare const checkResponseModeConfiguration: (context: IWebhookFunctions) => void;
|
|
30
|
+
declare function validateWebhookAuthentication(ctx: IWebhookFunctions, authPropertyName: string): Promise<IDataObject | undefined>;
|
|
31
|
+
|
|
32
|
+
export { type WebhookParameters, checkResponseModeConfiguration, configuredOutputs, getResponseCode, getResponseData, isIpWhitelisted, setupOutputConnection, validateWebhookAuthentication };
|
|
@@ -173,6 +173,19 @@ async function validateWebhookAuthentication(ctx, authPropertyName) {
|
|
|
173
173
|
if (providedAuth.name !== expectedAuth.user || providedAuth.pass !== expectedAuth.password) {
|
|
174
174
|
throw new import_error.WebhookAuthorizationError(403);
|
|
175
175
|
}
|
|
176
|
+
} else if (authentication === "bearerAuth") {
|
|
177
|
+
let expectedAuth;
|
|
178
|
+
try {
|
|
179
|
+
expectedAuth = await ctx.getCredentials("httpBearerAuth");
|
|
180
|
+
} catch {
|
|
181
|
+
}
|
|
182
|
+
const expectedToken = expectedAuth?.token;
|
|
183
|
+
if (!expectedToken) {
|
|
184
|
+
throw new import_error.WebhookAuthorizationError(500, "No authentication data defined on node!");
|
|
185
|
+
}
|
|
186
|
+
if (headers.authorization !== `Bearer ${expectedToken}`) {
|
|
187
|
+
throw new import_error.WebhookAuthorizationError(403);
|
|
188
|
+
}
|
|
176
189
|
} else if (authentication === "headerAuth") {
|
|
177
190
|
let expectedAuth;
|
|
178
191
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../nodes/Webhook/utils.ts"],"sourcesContent":["import basicAuth from 'basic-auth';\nimport jwt from 'jsonwebtoken';\nimport { NodeOperationError } from 'n8n-workflow';\nimport type {\n\tIWebhookFunctions,\n\tINodeExecutionData,\n\tIDataObject,\n\tICredentialDataDecryptedObject,\n} from 'n8n-workflow';\n\nimport { WebhookAuthorizationError } from './error';\nimport { formatPrivateKey } from '../../utils/utilities';\n\nexport type WebhookParameters = {\n\thttpMethod: string | string[];\n\tresponseMode: string;\n\tresponseData: string;\n\tresponseCode?: number; //typeVersion <= 1.1\n\toptions?: {\n\t\tresponseData?: string;\n\t\tresponseCode?: {\n\t\t\tvalues?: {\n\t\t\t\tresponseCode: number;\n\t\t\t\tcustomCode?: number;\n\t\t\t};\n\t\t};\n\t\tnoResponseBody?: boolean;\n\t};\n};\n\nexport const getResponseCode = (parameters: WebhookParameters) => {\n\tif (parameters.responseCode) {\n\t\treturn parameters.responseCode;\n\t}\n\tconst responseCodeOptions = parameters.options;\n\tif (responseCodeOptions?.responseCode?.values) {\n\t\tconst { responseCode, customCode } = responseCodeOptions.responseCode.values;\n\n\t\tif (customCode) {\n\t\t\treturn customCode;\n\t\t}\n\n\t\treturn responseCode;\n\t}\n\treturn 200;\n};\n\nexport const getResponseData = (parameters: WebhookParameters) => {\n\tconst { responseData, responseMode, options } = parameters;\n\tif (responseData) return responseData;\n\n\tif (responseMode === 'onReceived') {\n\t\tconst data = options?.responseData;\n\t\tif (data) return data;\n\t}\n\n\tif (options?.noResponseBody) return 'noData';\n\n\treturn undefined;\n};\n\nexport const configuredOutputs = (parameters: WebhookParameters) => {\n\tconst httpMethod = parameters.httpMethod;\n\n\tif (!Array.isArray(httpMethod))\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: 'main',\n\t\t\t\tdisplayName: httpMethod,\n\t\t\t},\n\t\t];\n\n\tconst outputs = httpMethod.map((method) => {\n\t\treturn {\n\t\t\ttype: 'main',\n\t\t\tdisplayName: method,\n\t\t};\n\t});\n\n\treturn outputs;\n};\n\nexport const setupOutputConnection = (\n\tctx: IWebhookFunctions,\n\tmethod: string,\n\tadditionalData: {\n\t\tjwtPayload?: IDataObject;\n\t},\n) => {\n\tconst httpMethod = ctx.getNodeParameter('httpMethod', []) as string[] | string;\n\tlet webhookUrl = ctx.getNodeWebhookUrl('default') as string;\n\tconst executionMode = ctx.getMode() === 'manual' ? 'test' : 'production';\n\n\tif (executionMode === 'test') {\n\t\twebhookUrl = webhookUrl.replace('/webhook/', '/webhook-test/');\n\t}\n\n\t// multi methods could be set in settings of node, so we need to check if it's an array\n\tif (!Array.isArray(httpMethod)) {\n\t\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\t\toutputData.json.webhookUrl = webhookUrl;\n\t\t\toutputData.json.executionMode = executionMode;\n\t\t\tif (additionalData?.jwtPayload) {\n\t\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t\t}\n\t\t\treturn [[outputData]];\n\t\t};\n\t}\n\n\tconst outputIndex = httpMethod.indexOf(method.toUpperCase());\n\tconst outputs: INodeExecutionData[][] = httpMethod.map(() => []);\n\n\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\toutputData.json.webhookUrl = webhookUrl;\n\t\toutputData.json.executionMode = executionMode;\n\t\tif (additionalData?.jwtPayload) {\n\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t}\n\t\toutputs[outputIndex] = [outputData];\n\t\treturn outputs;\n\t};\n};\n\nexport const isIpWhitelisted = (\n\twhitelist: string | string[] | undefined,\n\tips: string[],\n\tip?: string,\n) => {\n\tif (whitelist === undefined || whitelist === '') {\n\t\treturn true;\n\t}\n\n\tif (!Array.isArray(whitelist)) {\n\t\twhitelist = whitelist.split(',').map((entry) => entry.trim());\n\t}\n\n\tfor (const address of whitelist) {\n\t\tif (ip && ip.includes(address)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ips.some((entry) => entry.includes(address))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nexport const checkResponseModeConfiguration = (context: IWebhookFunctions) => {\n\tconst responseMode = context.getNodeParameter('responseMode', 'onReceived') as string;\n\tconst connectedNodes = context.getChildNodes(context.getNode().name);\n\n\tconst isRespondToWebhookConnected = connectedNodes.some(\n\t\t(node) => node.type === 'n8n-nodes-base.respondToWebhook',\n\t);\n\n\tif (!isRespondToWebhookConnected && responseMode === 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('No Respond to Webhook node found in the workflow'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Insert a Respond to Webhook node to your workflow to respond to the webhook or choose another option for the “Respond” parameter',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && responseMode !== 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('Webhook node not correctly configured'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Set the “Respond” parameter to “Using Respond to Webhook Node” or remove the Respond to Webhook node',\n\t\t\t},\n\t\t);\n\t}\n};\n\nexport async function validateWebhookAuthentication(\n\tctx: IWebhookFunctions,\n\tauthPropertyName: string,\n) {\n\tconst authentication = ctx.getNodeParameter(authPropertyName) as string;\n\tif (authentication === 'none') return;\n\n\tconst req = ctx.getRequestObject();\n\tconst headers = ctx.getHeaderData();\n\n\tif (authentication === 'basicAuth') {\n\t\t// Basic authorization is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpBasicAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.user || !expectedAuth.password) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst providedAuth = basicAuth(req);\n\t\t// Authorization data is missing\n\t\tif (!providedAuth) throw new WebhookAuthorizationError(401);\n\n\t\tif (providedAuth.name !== expectedAuth.user || providedAuth.pass !== expectedAuth.password) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'headerAuth') {\n\t\t// Special header with value is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpHeaderAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.name || !expectedAuth.value) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\t\tconst headerName = (expectedAuth.name as string).toLowerCase();\n\t\tconst expectedValue = expectedAuth.value as string;\n\n\t\tif (\n\t\t\t!headers.hasOwnProperty(headerName) ||\n\t\t\t(headers as IDataObject)[headerName] !== expectedValue\n\t\t) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'jwtAuth') {\n\t\tlet expectedAuth;\n\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<{\n\t\t\t\tkeyType: 'passphrase' | 'pemKey';\n\t\t\t\tpublicKey: string;\n\t\t\t\tsecret: string;\n\t\t\t\talgorithm: jwt.Algorithm;\n\t\t\t}>('jwtAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst authHeader = req.headers.authorization;\n\t\tconst token = authHeader?.split(' ')[1];\n\n\t\tif (!token) {\n\t\t\tthrow new WebhookAuthorizationError(401, 'No token provided');\n\t\t}\n\n\t\tlet secretOrPublicKey;\n\n\t\tif (expectedAuth.keyType === 'passphrase') {\n\t\t\tsecretOrPublicKey = expectedAuth.secret;\n\t\t} else {\n\t\t\tsecretOrPublicKey = formatPrivateKey(expectedAuth.publicKey, true);\n\t\t}\n\n\t\ttry {\n\t\t\treturn jwt.verify(token, secretOrPublicKey, {\n\t\t\t\talgorithms: [expectedAuth.algorithm],\n\t\t\t}) as IDataObject;\n\t\t} catch (error) {\n\t\t\tthrow new WebhookAuthorizationError(403, error.message);\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["basicAuth","jwt"]}
|
|
1
|
+
{"version":3,"sources":["../../../nodes/Webhook/utils.ts"],"sourcesContent":["import basicAuth from 'basic-auth';\nimport jwt from 'jsonwebtoken';\nimport { NodeOperationError } from 'n8n-workflow';\nimport type {\n\tIWebhookFunctions,\n\tINodeExecutionData,\n\tIDataObject,\n\tICredentialDataDecryptedObject,\n} from 'n8n-workflow';\n\nimport { WebhookAuthorizationError } from './error';\nimport { formatPrivateKey } from '../../utils/utilities';\n\nexport type WebhookParameters = {\n\thttpMethod: string | string[];\n\tresponseMode: string;\n\tresponseData: string;\n\tresponseCode?: number; //typeVersion <= 1.1\n\toptions?: {\n\t\tresponseData?: string;\n\t\tresponseCode?: {\n\t\t\tvalues?: {\n\t\t\t\tresponseCode: number;\n\t\t\t\tcustomCode?: number;\n\t\t\t};\n\t\t};\n\t\tnoResponseBody?: boolean;\n\t};\n};\n\nexport const getResponseCode = (parameters: WebhookParameters) => {\n\tif (parameters.responseCode) {\n\t\treturn parameters.responseCode;\n\t}\n\tconst responseCodeOptions = parameters.options;\n\tif (responseCodeOptions?.responseCode?.values) {\n\t\tconst { responseCode, customCode } = responseCodeOptions.responseCode.values;\n\n\t\tif (customCode) {\n\t\t\treturn customCode;\n\t\t}\n\n\t\treturn responseCode;\n\t}\n\treturn 200;\n};\n\nexport const getResponseData = (parameters: WebhookParameters) => {\n\tconst { responseData, responseMode, options } = parameters;\n\tif (responseData) return responseData;\n\n\tif (responseMode === 'onReceived') {\n\t\tconst data = options?.responseData;\n\t\tif (data) return data;\n\t}\n\n\tif (options?.noResponseBody) return 'noData';\n\n\treturn undefined;\n};\n\nexport const configuredOutputs = (parameters: WebhookParameters) => {\n\tconst httpMethod = parameters.httpMethod;\n\n\tif (!Array.isArray(httpMethod))\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: 'main',\n\t\t\t\tdisplayName: httpMethod,\n\t\t\t},\n\t\t];\n\n\tconst outputs = httpMethod.map((method) => {\n\t\treturn {\n\t\t\ttype: 'main',\n\t\t\tdisplayName: method,\n\t\t};\n\t});\n\n\treturn outputs;\n};\n\nexport const setupOutputConnection = (\n\tctx: IWebhookFunctions,\n\tmethod: string,\n\tadditionalData: {\n\t\tjwtPayload?: IDataObject;\n\t},\n) => {\n\tconst httpMethod = ctx.getNodeParameter('httpMethod', []) as string[] | string;\n\tlet webhookUrl = ctx.getNodeWebhookUrl('default') as string;\n\tconst executionMode = ctx.getMode() === 'manual' ? 'test' : 'production';\n\n\tif (executionMode === 'test') {\n\t\twebhookUrl = webhookUrl.replace('/webhook/', '/webhook-test/');\n\t}\n\n\t// multi methods could be set in settings of node, so we need to check if it's an array\n\tif (!Array.isArray(httpMethod)) {\n\t\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\t\toutputData.json.webhookUrl = webhookUrl;\n\t\t\toutputData.json.executionMode = executionMode;\n\t\t\tif (additionalData?.jwtPayload) {\n\t\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t\t}\n\t\t\treturn [[outputData]];\n\t\t};\n\t}\n\n\tconst outputIndex = httpMethod.indexOf(method.toUpperCase());\n\tconst outputs: INodeExecutionData[][] = httpMethod.map(() => []);\n\n\treturn (outputData: INodeExecutionData): INodeExecutionData[][] => {\n\t\toutputData.json.webhookUrl = webhookUrl;\n\t\toutputData.json.executionMode = executionMode;\n\t\tif (additionalData?.jwtPayload) {\n\t\t\toutputData.json.jwtPayload = additionalData.jwtPayload;\n\t\t}\n\t\toutputs[outputIndex] = [outputData];\n\t\treturn outputs;\n\t};\n};\n\nexport const isIpWhitelisted = (\n\twhitelist: string | string[] | undefined,\n\tips: string[],\n\tip?: string,\n) => {\n\tif (whitelist === undefined || whitelist === '') {\n\t\treturn true;\n\t}\n\n\tif (!Array.isArray(whitelist)) {\n\t\twhitelist = whitelist.split(',').map((entry) => entry.trim());\n\t}\n\n\tfor (const address of whitelist) {\n\t\tif (ip && ip.includes(address)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ips.some((entry) => entry.includes(address))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n\nexport const checkResponseModeConfiguration = (context: IWebhookFunctions) => {\n\tconst responseMode = context.getNodeParameter('responseMode', 'onReceived') as string;\n\tconst connectedNodes = context.getChildNodes(context.getNode().name);\n\n\tconst isRespondToWebhookConnected = connectedNodes.some(\n\t\t(node) => node.type === 'n8n-nodes-base.respondToWebhook',\n\t);\n\n\tif (!isRespondToWebhookConnected && responseMode === 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('No Respond to Webhook node found in the workflow'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Insert a Respond to Webhook node to your workflow to respond to the webhook or choose another option for the “Respond” parameter',\n\t\t\t},\n\t\t);\n\t}\n\n\tif (isRespondToWebhookConnected && responseMode !== 'responseNode') {\n\t\tthrow new NodeOperationError(\n\t\t\tcontext.getNode(),\n\t\t\tnew Error('Webhook node not correctly configured'),\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'Set the “Respond” parameter to “Using Respond to Webhook Node” or remove the Respond to Webhook node',\n\t\t\t},\n\t\t);\n\t}\n};\n\nexport async function validateWebhookAuthentication(\n\tctx: IWebhookFunctions,\n\tauthPropertyName: string,\n) {\n\tconst authentication = ctx.getNodeParameter(authPropertyName) as string;\n\tif (authentication === 'none') return;\n\n\tconst req = ctx.getRequestObject();\n\tconst headers = ctx.getHeaderData();\n\n\tif (authentication === 'basicAuth') {\n\t\t// Basic authorization is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpBasicAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.user || !expectedAuth.password) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst providedAuth = basicAuth(req);\n\t\t// Authorization data is missing\n\t\tif (!providedAuth) throw new WebhookAuthorizationError(401);\n\n\t\tif (providedAuth.name !== expectedAuth.user || providedAuth.pass !== expectedAuth.password) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'bearerAuth') {\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpBearerAuth');\n\t\t} catch {}\n\n\t\tconst expectedToken = expectedAuth?.token as string;\n\t\tif (!expectedToken) {\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tif (headers.authorization !== `Bearer ${expectedToken}`) {\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'headerAuth') {\n\t\t// Special header with value is needed to call webhook\n\t\tlet expectedAuth: ICredentialDataDecryptedObject | undefined;\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<ICredentialDataDecryptedObject>('httpHeaderAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined || !expectedAuth.name || !expectedAuth.value) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\t\tconst headerName = (expectedAuth.name as string).toLowerCase();\n\t\tconst expectedValue = expectedAuth.value as string;\n\n\t\tif (\n\t\t\t!headers.hasOwnProperty(headerName) ||\n\t\t\t(headers as IDataObject)[headerName] !== expectedValue\n\t\t) {\n\t\t\t// Provided authentication data is wrong\n\t\t\tthrow new WebhookAuthorizationError(403);\n\t\t}\n\t} else if (authentication === 'jwtAuth') {\n\t\tlet expectedAuth;\n\n\t\ttry {\n\t\t\texpectedAuth = await ctx.getCredentials<{\n\t\t\t\tkeyType: 'passphrase' | 'pemKey';\n\t\t\t\tpublicKey: string;\n\t\t\t\tsecret: string;\n\t\t\t\talgorithm: jwt.Algorithm;\n\t\t\t}>('jwtAuth');\n\t\t} catch {}\n\n\t\tif (expectedAuth === undefined) {\n\t\t\t// Data is not defined on node so can not authenticate\n\t\t\tthrow new WebhookAuthorizationError(500, 'No authentication data defined on node!');\n\t\t}\n\n\t\tconst authHeader = req.headers.authorization;\n\t\tconst token = authHeader?.split(' ')[1];\n\n\t\tif (!token) {\n\t\t\tthrow new WebhookAuthorizationError(401, 'No token provided');\n\t\t}\n\n\t\tlet secretOrPublicKey;\n\n\t\tif (expectedAuth.keyType === 'passphrase') {\n\t\t\tsecretOrPublicKey = expectedAuth.secret;\n\t\t} else {\n\t\t\tsecretOrPublicKey = formatPrivateKey(expectedAuth.publicKey, true);\n\t\t}\n\n\t\ttry {\n\t\t\treturn jwt.verify(token, secretOrPublicKey, {\n\t\t\t\talgorithms: [expectedAuth.algorithm],\n\t\t\t}) as IDataObject;\n\t\t} catch (error) {\n\t\t\tthrow new WebhookAuthorizationError(403, error.message);\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["basicAuth","jwt"]}
|
|
@@ -124,6 +124,12 @@ BQIDAQAB
|
|
|
124
124
|
},
|
|
125
125
|
baseUrl: "https://api.gong.io"
|
|
126
126
|
},
|
|
127
|
+
microsoftAzureCosmosDbSharedKeyApi: {
|
|
128
|
+
account: "n8n-us-east-account",
|
|
129
|
+
key: "I3rwpzP0XoFpNzJ7hRIUXjwgpD1qaVKi71NZBbk7oOHUXrbd80WAoIAAoRaT47W9hHO3b6us1yABACDbVdilag==",
|
|
130
|
+
database: "database_1",
|
|
131
|
+
baseUrl: "https://n8n-us-east-account.documents.azure.com/dbs/database_1"
|
|
132
|
+
},
|
|
127
133
|
microsoftEntraOAuth2Api: {
|
|
128
134
|
grantType: "authorizationCode",
|
|
129
135
|
authUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../test/nodes/FakeCredentialsMap.ts"],"sourcesContent":["// If your test needs data from credentials, you can add it here.\n// as JSON.stringify({ id: 'credentials_ID', name: 'credentials_name' }) for specific credentials\n// or as 'credentials_type' for all credentials of that type\n// expected keys for credentials can be found in packages/nodes-base/credentials/[credentials_type].credentials.ts\nexport const FAKE_CREDENTIALS_DATA = {\n\t[JSON.stringify({ id: '20', name: 'Airtable account' })]: {\n\t\tapiKey: 'key456',\n\t},\n\t[JSON.stringify({ id: 'G45TOKX5kBEraTr1', name: 'JWT Auth test PEM' })]: {\n\t\tkeyType: 'pemKey',\n\t\tprivateKey: `\n-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfw0m1K+M1/6Tw\nCvLYDv0gmxa+reEdKBfT0/hfkkjFWqbMRo0f4CQ3PwrOavS+80PDy6nVL21BmGev\nw1bF7KXmqOzr+yKOUJ8A4u6vXUQKzVSFBqb2YZmZL1s7va9aaO6pVANTbmYHpTjh\nSBnBrXgidVOXNX1c+IG+OZZMiTFWg4lJTE9rvMbLh4o5FPwdZlA1rLAux4KXVNNr\nmE7T5/tsuikR06KMJS6V6YR4PZmTsy/3D2clADXDCtbUdEe0eBYoUmRLMhRL6umq\nh98Dsm5ZG+YB2dn0ThR/g7DPVwvmnrK2S5e4hpqFYxQ8V8pGx7dQLsc/utbvsn32\ndctGivkFAgMBAAECggEABDB0QdZtRlC2S/8VgBnghFbcwVJA6WlQOqM/y43D77zh\nS9D7yV6wxGwYRfJjCZDKcZtpECiGtmYfLeoy38zFSueaEtQKg23UxYqt1JZe/uOE\neFqEzUgg5XXq8AWY0AeZXoJP9gOalE++TpX76uq4EDtAXmIuL95qVIkhCk+8pfaR\navLcejnyYGSJAG1J9pXHNChXXDVPd7PrIa20A44osvusifVMlcIYM3qkv167ULzX\n4nu2hZwlNxGKtpVPldFY/qu5S7SdLo/2BQinrMSSKRSFihA4Uuod8GK0+UwjE4gO\nTD15bjqIcadlAYV6bn34sHnMU9hjhPB5NyXiINYdsQKBgQDNu0XFjYyAgwORaZYs\njVTJg+fQ9wM7xnlfxXCVb9eoOGF0blW9VjIEz8lLjmPlPFFVS+EPN0andHHqH4t5\nSQZVZxgNMcodWs8BJTVZUkXa+IljHXT1Vkb2zvtH96ADzs3c43+tNpmKhjG3XK1U\nrL/v8feU31nwQb7imOmYmzbHCQKBgQDGzJ/pRLByB24W6FRfHIItP81vVg5ckCXi\nsIhzHUdUmTdVbdAxeS6IW2oAc/IuksvmiZMLYsm+sIFFePJQrBsoD41R5VsFcJqE\no5x0DUzbOzqaV4HPOHDniibudyryZKnBvkXlCjyCv4iPKaFhH4T1aB+wdK4pJPo2\nfyABs2lFHQKBgQDHz6IFK+QREK3PdhA/twhpK65jWvUOAkbxyE3/JX/7xr6IGX02\nhdfQqoqj0midRMbto+OzJol9q+/TZs3MfysimR1X+0qE1iSExUGaPfjQomC1He/x\nM9l6bi7Jh+wmpp10cpQXhBb93jW9E8rYmWtVPNmsAn1UhlZBuCfwapd6GQKBgATM\nf7ezzsaR41huN0ssdv/8oErluucFG8UDGegddtFV+X34bqQjFrp36nEkW15AcOeZ\nvpDxy4js3dH9f2vvG6C172VgsffJphE5mdc7UvWf0mRTZHDKHf+Y2CO9gK3lPCvP\nGgTTYG6PjQ5XpOuhRSZfYxRxXJrlp5yVKQKhgBMJAoGBAMc6ktd0iqHAYCW3d9QP\ne618RiMlVIYZIUlLWAUQWQSf3linqMjo1rCbbI/lSxE216XwI/VBX50gg/Oy3aUl\nCibHHk2aKGlxVxe0Huv5gcjbZgVh1EMi4oxh4600IrWRH1Uz5AleXnheNiappKnA\nlOMhy99LXMlAOL7qOBnZHgrm\n-----END PRIVATE KEY-----\n\t\t`,\n\t\tpublicKey: `\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn8NJtSvjNf+k8Ary2A79\nIJsWvq3hHSgX09P4X5JIxVqmzEaNH+AkNz8Kzmr0vvNDw8up1S9tQZhnr8NWxeyl\n5qjs6/sijlCfAOLur11ECs1UhQam9mGZmS9bO72vWmjuqVQDU25mB6U44UgZwa14\nInVTlzV9XPiBvjmWTIkxVoOJSUxPa7zGy4eKORT8HWZQNaywLseCl1TTa5hO0+f7\nbLopEdOijCUulemEeD2Zk7Mv9w9nJQA1wwrW1HRHtHgWKFJkSzIUS+rpqoffA7Ju\nWRvmAdnZ9E4Uf4Owz1cL5p6ytkuXuIaahWMUPFfKRse3UC7HP7rW77J99nXLRor5\nBQIDAQAB\n-----END PUBLIC KEY-----\n\t\t`,\n\t\talgorithm: 'RS256',\n\t},\n\tairtableApi: {\n\t\tapiKey: 'key123',\n\t},\n\tazureStorageOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\t\texpires_in: 4730,\n\t\t\text_expires_in: 4730,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t\taccount: 'myaccount',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tazureStorageSharedKeyApi: {\n\t\taccount: 'devstoreaccount1',\n\t\tkey: 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tgongApi: {\n\t\tbaseUrl: 'https://api.gong.io',\n\t\taccessKey: 'accessKey123',\n\t\taccessKeySecret: 'accessKeySecret123',\n\t},\n\tgongOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://app.gong.io/oauth2/authorize',\n\t\taccessTokenUrl: 'https://app.gong.io/oauth2/generate-customer-token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t\tapi_base_url_for_customer: 'https://api.gong.io',\n\t\t},\n\t\tbaseUrl: 'https://api.gong.io',\n\t},\n\tmicrosoftEntraOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'openid offline_access AccessReview.ReadWrite.All Directory.ReadWrite.All NetworkAccessPolicy.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All EntitlementManagement.ReadWrite.All User.ReadWrite.All Directory.AccessAsUser.All Sites.FullControl.All',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope:\n\t\t\t\t'AccessReview.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All EntitlementManagement.ReadWrite.All Group.ReadWrite.All NetworkAccessPolicy.ReadWrite.All openid Sites.FullControl.All User.DeleteRestore.All User.EnableDisableAccount.All User.Export.All User.Invite.All User.ManageIdentities.All User.Read User.Read.All User.ReadBasic.All User.ReadWrite User.ReadWrite.All User.RevokeSessions.All profile email',\n\t\t\texpires_in: 4822,\n\t\t\text_expires_in: 4822,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tid_token: 'IDTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t},\n\tmicrosoftExcelOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tmicrosoftTeamsOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tn8nApi: {\n\t\tapiKey: 'key123',\n\t\tbaseUrl: 'https://test.app.n8n.cloud/api/v1',\n\t},\n\tnpmApi: {\n\t\taccessToken: 'fake-npm-access-token',\n\t\tregistryUrl: 'https://fake.npm.registry',\n\t},\n\ttotpApi: {\n\t\tlabel: 'GitHub:john-doe',\n\t\tsecret: 'BVDRSBXQB2ZEL5HE',\n\t},\n\taws: {\n\t\tregion: 'eu-central-1',\n\t\taccessKeyId: 'key',\n\t\tsecretAccessKey: 'secret',\n\t},\n\ttwitterOAuth2Api: {\n\t\tgrantType: 'pkce',\n\t\tauthUrl: 'https://twitter.com/i/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.twitter.com/2/oauth2/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'tweet.read users.read tweet.write tweet.moderate.write users.read follows.read follows.write offline.access like.read like.write dm.write dm.read list.read list.write',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 7200,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tscope:\n\t\t\t\t'tweet.moderate.write follows.read offline.access list.write dm.read list.read tweet.write like.write like.read users.read dm.write tweet.read follows.write',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t},\n\t},\n\tjwtAuth: {\n\t\tkeyType: 'passphrase',\n\t\tsecret: 'baz',\n\t\talgorithm: 'HS256',\n\t},\n\ttelegramApi: {\n\t\taccessToken: 'testToken',\n\t\tbaseUrl: 'https://api.telegram.org',\n\t},\n\tgmailOAuth2: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://accounts.google.com/o/oauth2/v2/auth',\n\t\taccessTokenUrl: 'https://oauth2.googleapis.com/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\tauthQueryParameters: 'access_type=offline&prompt=consent',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tnotionApi: {\n\t\tapiKey: 'key123',\n\t},\n\tphilipsHueOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tappId: 'APPID',\n\t\tauthUrl: 'https://api.meethue.com/v2/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.meethue.com/v2/oauth2/token',\n\t\tauthQueryParameters: 'appid=APPID',\n\t\tscope: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope: '',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tspotifyOAuth2Api: {\n\t\taccessTokenUrl: 'https://accounts.spotify.com/api/token',\n\t\tauthQueryParameters: '',\n\t\tauthUrl: 'https://accounts.spotify.com/authorize',\n\t\tauthentication: 'header',\n\t\tclientId: 'CLIENT_ID',\n\t\tclientSecret: 'CLIENT_SECRET',\n\t\tgrantType: 'authorizationCode',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESS_TOKEN',\n\t\t\texpires_in: 3600,\n\t\t\trefresh_token: 'REFRESH_TOKEN',\n\t\t\tscope:\n\t\t\t\t'playlist-read-private playlist-read-collaborative user-modify-playback-state user-library-read user-follow-read playlist-modify-private playlist-modify-public user-read-playback-state user-read-currently-playing user-read-recently-played',\n\t\t\ttoken_type: 'Bearer',\n\t\t},\n\t\tscope:\n\t\t\t'user-read-playback-state playlist-read-collaborative user-modify-playback-state playlist-modify-public user-read-currently-playing playlist-read-private user-read-recently-played playlist-modify-private user-library-read user-follow-read',\n\t\tserver: 'https://api.spotify.com/',\n\t},\n\tbaserowApi: {\n\t\thost: 'https://api.baserow.io',\n\t\tusername: 'nathan@n8n.io',\n\t\tpassword: 'fake-password',\n\t},\n\twordpressApi: {\n\t\turl: 'https://myblog.com',\n\t\tallowUnauthorizedCerts: false,\n\t\tusername: 'nodeqa',\n\t\tpassword: 'fake-password',\n\t},\n\tdiscordWebhookApi: {\n\t\twebhookUri: 'https://discord.com/webhook',\n\t},\n} as const;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../test/nodes/FakeCredentialsMap.ts"],"sourcesContent":["// If your test needs data from credentials, you can add it here.\n// as JSON.stringify({ id: 'credentials_ID', name: 'credentials_name' }) for specific credentials\n// or as 'credentials_type' for all credentials of that type\n// expected keys for credentials can be found in packages/nodes-base/credentials/[credentials_type].credentials.ts\nexport const FAKE_CREDENTIALS_DATA = {\n\t[JSON.stringify({ id: '20', name: 'Airtable account' })]: {\n\t\tapiKey: 'key456',\n\t},\n\t[JSON.stringify({ id: 'G45TOKX5kBEraTr1', name: 'JWT Auth test PEM' })]: {\n\t\tkeyType: 'pemKey',\n\t\tprivateKey: `\n-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfw0m1K+M1/6Tw\nCvLYDv0gmxa+reEdKBfT0/hfkkjFWqbMRo0f4CQ3PwrOavS+80PDy6nVL21BmGev\nw1bF7KXmqOzr+yKOUJ8A4u6vXUQKzVSFBqb2YZmZL1s7va9aaO6pVANTbmYHpTjh\nSBnBrXgidVOXNX1c+IG+OZZMiTFWg4lJTE9rvMbLh4o5FPwdZlA1rLAux4KXVNNr\nmE7T5/tsuikR06KMJS6V6YR4PZmTsy/3D2clADXDCtbUdEe0eBYoUmRLMhRL6umq\nh98Dsm5ZG+YB2dn0ThR/g7DPVwvmnrK2S5e4hpqFYxQ8V8pGx7dQLsc/utbvsn32\ndctGivkFAgMBAAECggEABDB0QdZtRlC2S/8VgBnghFbcwVJA6WlQOqM/y43D77zh\nS9D7yV6wxGwYRfJjCZDKcZtpECiGtmYfLeoy38zFSueaEtQKg23UxYqt1JZe/uOE\neFqEzUgg5XXq8AWY0AeZXoJP9gOalE++TpX76uq4EDtAXmIuL95qVIkhCk+8pfaR\navLcejnyYGSJAG1J9pXHNChXXDVPd7PrIa20A44osvusifVMlcIYM3qkv167ULzX\n4nu2hZwlNxGKtpVPldFY/qu5S7SdLo/2BQinrMSSKRSFihA4Uuod8GK0+UwjE4gO\nTD15bjqIcadlAYV6bn34sHnMU9hjhPB5NyXiINYdsQKBgQDNu0XFjYyAgwORaZYs\njVTJg+fQ9wM7xnlfxXCVb9eoOGF0blW9VjIEz8lLjmPlPFFVS+EPN0andHHqH4t5\nSQZVZxgNMcodWs8BJTVZUkXa+IljHXT1Vkb2zvtH96ADzs3c43+tNpmKhjG3XK1U\nrL/v8feU31nwQb7imOmYmzbHCQKBgQDGzJ/pRLByB24W6FRfHIItP81vVg5ckCXi\nsIhzHUdUmTdVbdAxeS6IW2oAc/IuksvmiZMLYsm+sIFFePJQrBsoD41R5VsFcJqE\no5x0DUzbOzqaV4HPOHDniibudyryZKnBvkXlCjyCv4iPKaFhH4T1aB+wdK4pJPo2\nfyABs2lFHQKBgQDHz6IFK+QREK3PdhA/twhpK65jWvUOAkbxyE3/JX/7xr6IGX02\nhdfQqoqj0midRMbto+OzJol9q+/TZs3MfysimR1X+0qE1iSExUGaPfjQomC1He/x\nM9l6bi7Jh+wmpp10cpQXhBb93jW9E8rYmWtVPNmsAn1UhlZBuCfwapd6GQKBgATM\nf7ezzsaR41huN0ssdv/8oErluucFG8UDGegddtFV+X34bqQjFrp36nEkW15AcOeZ\nvpDxy4js3dH9f2vvG6C172VgsffJphE5mdc7UvWf0mRTZHDKHf+Y2CO9gK3lPCvP\nGgTTYG6PjQ5XpOuhRSZfYxRxXJrlp5yVKQKhgBMJAoGBAMc6ktd0iqHAYCW3d9QP\ne618RiMlVIYZIUlLWAUQWQSf3linqMjo1rCbbI/lSxE216XwI/VBX50gg/Oy3aUl\nCibHHk2aKGlxVxe0Huv5gcjbZgVh1EMi4oxh4600IrWRH1Uz5AleXnheNiappKnA\nlOMhy99LXMlAOL7qOBnZHgrm\n-----END PRIVATE KEY-----\n\t\t`,\n\t\tpublicKey: `\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn8NJtSvjNf+k8Ary2A79\nIJsWvq3hHSgX09P4X5JIxVqmzEaNH+AkNz8Kzmr0vvNDw8up1S9tQZhnr8NWxeyl\n5qjs6/sijlCfAOLur11ECs1UhQam9mGZmS9bO72vWmjuqVQDU25mB6U44UgZwa14\nInVTlzV9XPiBvjmWTIkxVoOJSUxPa7zGy4eKORT8HWZQNaywLseCl1TTa5hO0+f7\nbLopEdOijCUulemEeD2Zk7Mv9w9nJQA1wwrW1HRHtHgWKFJkSzIUS+rpqoffA7Ju\nWRvmAdnZ9E4Uf4Owz1cL5p6ytkuXuIaahWMUPFfKRse3UC7HP7rW77J99nXLRor5\nBQIDAQAB\n-----END PUBLIC KEY-----\n\t\t`,\n\t\talgorithm: 'RS256',\n\t},\n\tairtableApi: {\n\t\tapiKey: 'key123',\n\t},\n\tazureStorageOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope: 'https://storage.azure.com/user_impersonation',\n\t\t\texpires_in: 4730,\n\t\t\text_expires_in: 4730,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t\taccount: 'myaccount',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tazureStorageSharedKeyApi: {\n\t\taccount: 'devstoreaccount1',\n\t\tkey: 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==',\n\t\tbaseUrl: 'https://myaccount.blob.core.windows.net',\n\t},\n\tgongApi: {\n\t\tbaseUrl: 'https://api.gong.io',\n\t\taccessKey: 'accessKey123',\n\t\taccessKeySecret: 'accessKeySecret123',\n\t},\n\tgongOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://app.gong.io/oauth2/authorize',\n\t\taccessTokenUrl: 'https://app.gong.io/oauth2/generate-customer-token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'api:calls:read:transcript api:provisioning:read api:workspaces:read api:meetings:user:delete api:crm:get-objects api:data-privacy:delete api:crm:schema api:flows:write api:crm:upload api:meetings:integration:status api:calls:read:extensive api:meetings:user:update api:integration-settings:write api:settings:scorecards:read api:stats:scorecards api:stats:interaction api:stats:user-actions api:crm:integration:delete api:calls:read:basic api:calls:read:media-url api:digital-interactions:write api:crm:integrations:read api:library:read api:data-privacy:read api:users:read api:logs:read api:calls:create api:meetings:user:create api:stats:user-actions:detailed api:settings:trackers:read api:crm:integration:register api:provisioning:read-write api:engagement-data:write api:permission-profile:read api:permission-profile:write api:flows:read api:crm-calls:manual-association:read',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t\tapi_base_url_for_customer: 'https://api.gong.io',\n\t\t},\n\t\tbaseUrl: 'https://api.gong.io',\n\t},\n\tmicrosoftAzureCosmosDbSharedKeyApi: {\n\t\taccount: 'n8n-us-east-account',\n\t\tkey: 'I3rwpzP0XoFpNzJ7hRIUXjwgpD1qaVKi71NZBbk7oOHUXrbd80WAoIAAoRaT47W9hHO3b6us1yABACDbVdilag==',\n\t\tdatabase: 'database_1',\n\t\tbaseUrl: 'https://n8n-us-east-account.documents.azure.com/dbs/database_1',\n\t},\n\tmicrosoftEntraOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',\n\t\taccessTokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'openid offline_access AccessReview.ReadWrite.All Directory.ReadWrite.All NetworkAccessPolicy.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All EntitlementManagement.ReadWrite.All User.ReadWrite.All Directory.AccessAsUser.All Sites.FullControl.All',\n\t\tauthQueryParameters: 'response_mode=query',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'Bearer',\n\t\t\tscope:\n\t\t\t\t'AccessReview.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All EntitlementManagement.ReadWrite.All Group.ReadWrite.All NetworkAccessPolicy.ReadWrite.All openid Sites.FullControl.All User.DeleteRestore.All User.EnableDisableAccount.All User.Export.All User.Invite.All User.ManageIdentities.All User.Read User.Read.All User.ReadBasic.All User.ReadWrite User.ReadWrite.All User.RevokeSessions.All profile email',\n\t\t\texpires_in: 4822,\n\t\t\text_expires_in: 4822,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tid_token: 'IDTOKEN',\n\t\t\tcallbackQueryString: {\n\t\t\t\tsession_state: 'SESSIONSTATE',\n\t\t\t},\n\t\t},\n\t},\n\tmicrosoftExcelOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tmicrosoftTeamsOAuth2Api: {\n\t\tscope: 'openid',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'token',\n\t\t},\n\t},\n\tn8nApi: {\n\t\tapiKey: 'key123',\n\t\tbaseUrl: 'https://test.app.n8n.cloud/api/v1',\n\t},\n\tnpmApi: {\n\t\taccessToken: 'fake-npm-access-token',\n\t\tregistryUrl: 'https://fake.npm.registry',\n\t},\n\ttotpApi: {\n\t\tlabel: 'GitHub:john-doe',\n\t\tsecret: 'BVDRSBXQB2ZEL5HE',\n\t},\n\taws: {\n\t\tregion: 'eu-central-1',\n\t\taccessKeyId: 'key',\n\t\tsecretAccessKey: 'secret',\n\t},\n\ttwitterOAuth2Api: {\n\t\tgrantType: 'pkce',\n\t\tauthUrl: 'https://twitter.com/i/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.twitter.com/2/oauth2/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'tweet.read users.read tweet.write tweet.moderate.write users.read follows.read follows.write offline.access like.read like.write dm.write dm.read list.read list.write',\n\t\tauthQueryParameters: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 7200,\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\tscope:\n\t\t\t\t'tweet.moderate.write follows.read offline.access list.write dm.read list.read tweet.write like.write like.read users.read dm.write tweet.read follows.write',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t},\n\t},\n\tjwtAuth: {\n\t\tkeyType: 'passphrase',\n\t\tsecret: 'baz',\n\t\talgorithm: 'HS256',\n\t},\n\ttelegramApi: {\n\t\taccessToken: 'testToken',\n\t\tbaseUrl: 'https://api.telegram.org',\n\t},\n\tgmailOAuth2: {\n\t\tgrantType: 'authorizationCode',\n\t\tauthUrl: 'https://accounts.google.com/o/oauth2/v2/auth',\n\t\taccessTokenUrl: 'https://oauth2.googleapis.com/token',\n\t\tclientId: 'CLIENTID',\n\t\tclientSecret: 'CLIENTSECRET',\n\t\tscope:\n\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\tauthQueryParameters: 'access_type=offline&prompt=consent',\n\t\tauthentication: 'body',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope:\n\t\t\t\t'https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tnotionApi: {\n\t\tapiKey: 'key123',\n\t},\n\tphilipsHueOAuth2Api: {\n\t\tgrantType: 'authorizationCode',\n\t\tappId: 'APPID',\n\t\tauthUrl: 'https://api.meethue.com/v2/oauth2/authorize',\n\t\taccessTokenUrl: 'https://api.meethue.com/v2/oauth2/token',\n\t\tauthQueryParameters: 'appid=APPID',\n\t\tscope: '',\n\t\tauthentication: 'header',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESSTOKEN',\n\t\t\trefresh_token: 'REFRESHTOKEN',\n\t\t\tscope: '',\n\t\t\ttoken_type: 'bearer',\n\t\t\texpires_in: 86400,\n\t\t},\n\t},\n\tspotifyOAuth2Api: {\n\t\taccessTokenUrl: 'https://accounts.spotify.com/api/token',\n\t\tauthQueryParameters: '',\n\t\tauthUrl: 'https://accounts.spotify.com/authorize',\n\t\tauthentication: 'header',\n\t\tclientId: 'CLIENT_ID',\n\t\tclientSecret: 'CLIENT_SECRET',\n\t\tgrantType: 'authorizationCode',\n\t\toauthTokenData: {\n\t\t\taccess_token: 'ACCESS_TOKEN',\n\t\t\texpires_in: 3600,\n\t\t\trefresh_token: 'REFRESH_TOKEN',\n\t\t\tscope:\n\t\t\t\t'playlist-read-private playlist-read-collaborative user-modify-playback-state user-library-read user-follow-read playlist-modify-private playlist-modify-public user-read-playback-state user-read-currently-playing user-read-recently-played',\n\t\t\ttoken_type: 'Bearer',\n\t\t},\n\t\tscope:\n\t\t\t'user-read-playback-state playlist-read-collaborative user-modify-playback-state playlist-modify-public user-read-currently-playing playlist-read-private user-read-recently-played playlist-modify-private user-library-read user-follow-read',\n\t\tserver: 'https://api.spotify.com/',\n\t},\n\tbaserowApi: {\n\t\thost: 'https://api.baserow.io',\n\t\tusername: 'nathan@n8n.io',\n\t\tpassword: 'fake-password',\n\t},\n\twordpressApi: {\n\t\turl: 'https://myblog.com',\n\t\tallowUnauthorizedCerts: false,\n\t\tusername: 'nodeqa',\n\t\tpassword: 'fake-password',\n\t},\n\tdiscordWebhookApi: {\n\t\twebhookUri: 'https://discord.com/webhook',\n\t},\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,MAAM,wBAAwB;AAAA,EACpC,CAAC,KAAK,UAAU,EAAE,IAAI,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG;AAAA,IACzD,QAAQ;AAAA,EACT;AAAA,EACA,CAAC,KAAK,UAAU,EAAE,IAAI,oBAAoB,MAAM,oBAAoB,CAAC,CAAC,GAAG;AAAA,IACxE,SAAS;AAAA,IACT,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA8BZ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWX,WAAW;AAAA,EACZ;AAAA,EACA,aAAa;AAAA,IACZ,QAAQ;AAAA,EACT;AAAA,EACA,uBAAuB;AAAA,IACtB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,OAAO;AAAA,IACP,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,MACf,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,qBAAqB;AAAA,QACpB,eAAe;AAAA,MAChB;AAAA,IACD;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,EACV;AAAA,EACA,0BAA0B;AAAA,IACzB,SAAS;AAAA,IACT,KAAK;AAAA,IACL,SAAS;AAAA,EACV;AAAA,EACA,SAAS;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,iBAAiB;AAAA,EAClB;AAAA,EACA,eAAe;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,OACC;AAAA,IACD,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,MACf,cAAc;AAAA,MACd,eAAe;AAAA,MACf,OACC;AAAA,MACD,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,2BAA2B;AAAA,IAC5B;AAAA,IACA,SAAS;AAAA,EACV;AAAA,EACA,oCAAoC;AAAA,IACnC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EACV;AAAA,EACA,yBAAyB;AAAA,IACxB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,OACC;AAAA,IACD,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,MACf,YAAY;AAAA,MACZ,OACC;AAAA,MACD,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,eAAe;AAAA,MACf,UAAU;AAAA,MACV,qBAAqB;AAAA,QACpB,eAAe;AAAA,MAChB;AAAA,IACD;AAAA,EACD;AAAA,EACA,yBAAyB;AAAA,IACxB,OAAO;AAAA,IACP,gBAAgB;AAAA,MACf,cAAc;AAAA,IACf;AAAA,EACD;AAAA,EACA,yBAAyB;AAAA,IACxB,OAAO;AAAA,IACP,gBAAgB;AAAA,MACf,cAAc;AAAA,IACf;AAAA,EACD;AAAA,EACA,QAAQ;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,EACd;AAAA,EACA,SAAS;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACJ,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,iBAAiB;AAAA,EAClB;AAAA,EACA,kBAAkB;AAAA,IACjB,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,OACC;AAAA,IACD,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,MACf,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,OACC;AAAA,MACD,eAAe;AAAA,IAChB;AAAA,EACD;AAAA,EACA,SAAS;AAAA,IACR,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,WAAW;AAAA,EACZ;AAAA,EACA,aAAa;AAAA,IACZ,aAAa;AAAA,IACb,SAAS;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,OACC;AAAA,IACD,qBAAqB;AAAA,IACrB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,MACf,cAAc;AAAA,MACd,eAAe;AAAA,MACf,OACC;AAAA,MACD,YAAY;AAAA,MACZ,YAAY;AAAA,IACb;AAAA,EACD;AAAA,EACA,WAAW;AAAA,IACV,QAAQ;AAAA,EACT;AAAA,EACA,qBAAqB;AAAA,IACpB,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,MACf,cAAc;AAAA,MACd,eAAe;AAAA,MACf,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,YAAY;AAAA,IACb;AAAA,EACD;AAAA,EACA,kBAAkB;AAAA,IACjB,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,IACrB,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,WAAW;AAAA,IACX,gBAAgB;AAAA,MACf,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,OACC;AAAA,MACD,YAAY;AAAA,IACb;AAAA,IACA,OACC;AAAA,IACD,QAAQ;AAAA,EACT;AAAA,EACA,YAAY;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACb,KAAK;AAAA,IACL,wBAAwB;AAAA,IACxB,UAAU;AAAA,IACV,UAAU;AAAA,EACX;AAAA,EACA,mBAAmB;AAAA,IAClB,YAAY;AAAA,EACb;AACD;","names":[]}
|