n8n-nodes-base 1.86.1 → 1.88.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.
Files changed (122) hide show
  1. package/dist/credentials/HttpBearerAuth.credentials.js +63 -0
  2. package/dist/credentials/HttpBearerAuth.credentials.js.map +1 -0
  3. package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js +109 -0
  4. package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js.map +1 -0
  5. package/dist/credentials/SalesforceJwtApi.credentials.js +60 -0
  6. package/dist/credentials/SalesforceJwtApi.credentials.js.map +1 -1
  7. package/dist/known/credentials.json +11 -0
  8. package/dist/known/nodes.json +4 -0
  9. package/dist/nodes/Brevo/__schema__/v1.0.0/contact/getAll.json +1 -9
  10. package/dist/nodes/Dropbox/__schema__/v1.0.0/file/download.json +2 -5
  11. package/dist/nodes/EmailReadImap/v2/utils.js +4 -1
  12. package/dist/nodes/EmailReadImap/v2/utils.js.map +1 -1
  13. package/dist/nodes/Form/Form.node.js +2 -2
  14. package/dist/nodes/Form/Form.node.js.map +1 -1
  15. package/dist/nodes/Form/v2/FormTriggerV2.node.js +2 -2
  16. package/dist/nodes/Form/v2/FormTriggerV2.node.js.map +1 -1
  17. package/dist/nodes/Google/Analytics/__schema__/v2.0.0/report/get.json +2 -2
  18. package/dist/nodes/Google/Calendar/__schema__/v1.3.0/event/getAll.json +7 -1
  19. package/dist/nodes/Google/Firebase/CloudFirestore/__schema__/v1.1.0/document/get.json +1 -13
  20. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/get.json +1 -7
  21. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/getAll.json +1 -7
  22. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/thread/get.json +4 -4
  23. package/dist/nodes/Google/YouTube/__schema__/v1.0.0/video/get.json +1 -35
  24. package/dist/nodes/Google/YouTube/__schema__/v1.0.0/video/rate.json +9 -0
  25. package/dist/nodes/HaloPSA/__schema__/v1.0.0/client/getAll.json +147 -1
  26. package/dist/nodes/Hubspot/__schema__/v2.1.0/company/getAll.json +1 -4
  27. package/dist/nodes/Hubspot/__schema__/v2.1.0/contact/search.json +4 -1
  28. package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/getAll.json +1 -52
  29. package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/search.json +5 -2
  30. package/dist/nodes/Hubspot/__schema__/v2.1.0/ticket/get.json +1 -258
  31. package/dist/nodes/ItemLists/__schema__/v3.0.0/itemList/limit.json +9 -0
  32. package/dist/nodes/Jira/__schema__/v1.0.0/issue/get.json +84 -1
  33. package/dist/nodes/Jira/__schema__/v1.0.0/issue/getAll.json +4 -565
  34. package/dist/nodes/Lemlist/__schema__/v2.0.0/campaign/getAll.json +1 -10
  35. package/dist/nodes/Linear/__schema__/v1.0.0/issue/create.json +12 -1
  36. package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js +87 -0
  37. package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js.map +1 -0
  38. package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.json +18 -0
  39. package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.svg +1 -0
  40. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/common.js +163 -0
  41. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/common.js.map +1 -0
  42. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/Container.resource.js +141 -0
  43. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/Container.resource.js.map +1 -0
  44. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/create.operation.js +166 -0
  45. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/create.operation.js.map +1 -0
  46. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/delete.operation.js +40 -0
  47. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/delete.operation.js.map +1 -0
  48. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/get.operation.js +47 -0
  49. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/get.operation.js.map +1 -0
  50. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/getAll.operation.js +47 -0
  51. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/container/getAll.operation.js.map +1 -0
  52. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/index.js +42 -0
  53. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/index.js.map +1 -0
  54. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/Item.resource.js +210 -0
  55. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/Item.resource.js.map +1 -0
  56. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/create.operation.js +72 -0
  57. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/create.operation.js.map +1 -0
  58. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/delete.operation.js +64 -0
  59. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/delete.operation.js.map +1 -0
  60. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/get.operation.js +77 -0
  61. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/get.operation.js.map +1 -0
  62. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/getAll.operation.js +48 -0
  63. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/getAll.operation.js.map +1 -0
  64. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/query.operation.js +102 -0
  65. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/query.operation.js.map +1 -0
  66. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/update.operation.js +83 -0
  67. package/dist/nodes/Microsoft/AzureCosmosDb/descriptions/item/update.operation.js.map +1 -0
  68. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/constants.js +52 -0
  69. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/constants.js.map +1 -0
  70. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/errorHandler.js +108 -0
  71. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/errorHandler.js.map +1 -0
  72. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/interfaces.js +17 -0
  73. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/interfaces.js.map +1 -0
  74. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/utils.js +200 -0
  75. package/dist/nodes/Microsoft/AzureCosmosDb/helpers/utils.js.map +1 -0
  76. package/dist/nodes/Microsoft/AzureCosmosDb/methods/index.js +39 -0
  77. package/dist/nodes/Microsoft/AzureCosmosDb/methods/index.js.map +1 -0
  78. package/dist/nodes/Microsoft/AzureCosmosDb/methods/listSearch.js +75 -0
  79. package/dist/nodes/Microsoft/AzureCosmosDb/methods/listSearch.js.map +1 -0
  80. package/dist/nodes/Microsoft/AzureCosmosDb/transport/index.js +43 -0
  81. package/dist/nodes/Microsoft/AzureCosmosDb/transport/index.js.map +1 -0
  82. package/dist/nodes/Microsoft/OneDrive/__schema__/v1.0.0/file/download.json +92 -1
  83. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/folderMessage/getAll.json +3 -81
  84. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/get.json +28 -1
  85. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/getAll.json +82 -1
  86. package/dist/nodes/Nasa/__schema__/v1.0.0/donkiSolarFlare/get.json +4 -1
  87. package/dist/nodes/Notion/__schema__/v2.2.0/databasePage/create.json +1 -4
  88. package/dist/nodes/Notion/__schema__/v2.2.0/databasePage/getAll.json +1 -4
  89. package/dist/nodes/Odoo/__schema__/v1.0.0/custom/get.json +1 -4
  90. package/dist/nodes/Odoo/__schema__/v1.0.0/custom/getAll.json +4 -1
  91. package/dist/nodes/Odoo/__schema__/v1.0.0/opportunity/getAll.json +1 -4
  92. package/dist/nodes/Phantombuster/__schema__/v1.0.0/agent/getOutput.json +1 -10
  93. package/dist/nodes/Pipedrive/__schema__/v1.0.0/person/search.json +12 -1
  94. package/dist/nodes/Salesforce/__schema__/v1.0.0/customObject/getAll.json +2 -2
  95. package/dist/nodes/Salesforce/__schema__/v1.0.0/opportunity/getAll.json +4 -1
  96. package/dist/nodes/Salesforce/__schema__/v1.0.0/search/query.json +1 -4
  97. package/dist/nodes/ServiceNow/__schema__/v1.0.0/tableRecord/getAll.json +1 -4
  98. package/dist/nodes/Slack/__schema__/v2.3.0/channel/history.json +4 -44
  99. package/dist/nodes/Ssh/__schema__/v1.0.0/command/execute.json +1 -4
  100. package/dist/nodes/Supabase/__schema__/v1.0.0/row/delete.json +7 -1
  101. package/dist/nodes/Telegram/__schema__/v1.2.0/chat/get.json +1 -10
  102. package/dist/nodes/Telegram/__schema__/v1.2.0/chat/member.json +1 -4
  103. package/dist/nodes/Transform/Summarize/utils.js +1 -1
  104. package/dist/nodes/Transform/Summarize/utils.js.map +1 -1
  105. package/dist/nodes/Trello/__schema__/v1.0.0/list/getAll.json +1 -4
  106. package/dist/nodes/Trello/__schema__/v1.0.0/list/getCards.json +4 -7
  107. package/dist/nodes/Twitter/__schema__/v2.0.0/tweet/search.json +1 -4
  108. package/dist/nodes/Wait/Wait.node.js +2 -2
  109. package/dist/nodes/Wait/Wait.node.js.map +1 -1
  110. package/dist/nodes/Webhook/error.d.ts +8 -0
  111. package/dist/nodes/Webhook/utils.d.ts +32 -0
  112. package/dist/nodes/Webhook/utils.js +13 -0
  113. package/dist/nodes/Webhook/utils.js.map +1 -1
  114. package/dist/nodes/Wordpress/__schema__/v1.0.0/post/getAll.json +9 -1
  115. package/dist/nodes/Zoho/__schema__/v1.0.0/contact/getAll.json +1 -15
  116. package/dist/test/nodes/FakeCredentialsMap.js +36 -0
  117. package/dist/test/nodes/FakeCredentialsMap.js.map +1 -1
  118. package/dist/test/nodes/Helpers.js +1 -1
  119. package/dist/test/nodes/Helpers.js.map +1 -1
  120. package/dist/types/credentials.json +3 -1
  121. package/dist/types/nodes.json +6 -5
  122. package/package.json +12 -9
@@ -0,0 +1,63 @@
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 HttpBearerAuth_credentials_exports = {};
20
+ __export(HttpBearerAuth_credentials_exports, {
21
+ HttpBearerAuth: () => HttpBearerAuth
22
+ });
23
+ module.exports = __toCommonJS(HttpBearerAuth_credentials_exports);
24
+ class HttpBearerAuth {
25
+ constructor() {
26
+ // eslint-disable-next-line n8n-nodes-base/cred-class-field-name-unsuffixed
27
+ this.name = "httpBearerAuth";
28
+ this.displayName = "Bearer Auth";
29
+ this.documentationUrl = "httpRequest";
30
+ this.genericAuth = true;
31
+ this.icon = "node:n8n-nodes-base.httpRequest";
32
+ this.properties = [
33
+ {
34
+ displayName: "Bearer Token",
35
+ name: "token",
36
+ type: "string",
37
+ typeOptions: {
38
+ password: true
39
+ },
40
+ default: ""
41
+ },
42
+ {
43
+ displayName: 'This credential uses the "Authorization" header. To use a custom header, use a "Custom Auth" credential instead',
44
+ name: "useCustomAuth",
45
+ type: "notice",
46
+ default: ""
47
+ }
48
+ ];
49
+ this.authenticate = {
50
+ type: "generic",
51
+ properties: {
52
+ headers: {
53
+ Authorization: "Bearer ={{$credentials.token}}"
54
+ }
55
+ }
56
+ };
57
+ }
58
+ }
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ HttpBearerAuth
62
+ });
63
+ //# sourceMappingURL=HttpBearerAuth.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../credentials/HttpBearerAuth.credentials.ts"],"sourcesContent":["import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow';\n\n// eslint-disable-next-line n8n-nodes-base/cred-class-name-unsuffixed\nexport class HttpBearerAuth implements ICredentialType {\n\t// eslint-disable-next-line n8n-nodes-base/cred-class-field-name-unsuffixed\n\tname = 'httpBearerAuth';\n\n\tdisplayName = 'Bearer Auth';\n\n\tdocumentationUrl = 'httpRequest';\n\n\tgenericAuth = true;\n\n\ticon: Icon = 'node:n8n-nodes-base.httpRequest';\n\n\tproperties: INodeProperties[] = [\n\t\t{\n\t\t\tdisplayName: 'Bearer Token',\n\t\t\tname: 'token',\n\t\t\ttype: 'string',\n\t\t\ttypeOptions: {\n\t\t\t\tpassword: true,\n\t\t\t},\n\t\t\tdefault: '',\n\t\t},\n\t\t{\n\t\t\tdisplayName:\n\t\t\t\t'This credential uses the \"Authorization\" header. To use a custom header, use a \"Custom Auth\" credential instead',\n\t\t\tname: 'useCustomAuth',\n\t\t\ttype: 'notice',\n\t\t\tdefault: '',\n\t\t},\n\t];\n\n\tauthenticate: IAuthenticateGeneric = {\n\t\ttype: 'generic',\n\t\tproperties: {\n\t\t\theaders: {\n\t\t\t\tAuthorization: 'Bearer ={{$credentials.token}}',\n\t\t\t},\n\t\t},\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,eAA0C;AAAA,EAAhD;AAEN;AAAA,gBAAO;AAEP,uBAAc;AAEd,4BAAmB;AAEnB,uBAAc;AAEd,gBAAa;AAEb,sBAAgC;AAAA,MAC/B;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,UACZ,UAAU;AAAA,QACX;AAAA,QACA,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,aACC;AAAA,QACD,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACV;AAAA,IACD;AAEA,wBAAqC;AAAA,MACpC,MAAM;AAAA,MACN,YAAY;AAAA,QACX,SAAS;AAAA,UACR,eAAe;AAAA,QAChB;AAAA,MACD;AAAA,IACD;AAAA;AACD;","names":[]}
@@ -0,0 +1,109 @@
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 MicrosoftAzureCosmosDbSharedKeyApi_credentials_exports = {};
20
+ __export(MicrosoftAzureCosmosDbSharedKeyApi_credentials_exports, {
21
+ MicrosoftAzureCosmosDbSharedKeyApi: () => MicrosoftAzureCosmosDbSharedKeyApi
22
+ });
23
+ module.exports = __toCommonJS(MicrosoftAzureCosmosDbSharedKeyApi_credentials_exports);
24
+ var import_crypto = require("crypto");
25
+ var import_n8n_workflow = require("n8n-workflow");
26
+ var import_constants = require("../nodes/Microsoft/AzureCosmosDb/helpers/constants");
27
+ class MicrosoftAzureCosmosDbSharedKeyApi {
28
+ constructor() {
29
+ this.name = "microsoftAzureCosmosDbSharedKeyApi";
30
+ this.displayName = "Microsoft Azure Cosmos DB API";
31
+ this.documentationUrl = "microsoftAzureCosmosdb";
32
+ this.properties = [
33
+ {
34
+ displayName: "Account",
35
+ name: "account",
36
+ default: "",
37
+ description: "Account name",
38
+ required: true,
39
+ type: "string"
40
+ },
41
+ {
42
+ displayName: "Key",
43
+ name: "key",
44
+ default: "",
45
+ description: "Account key",
46
+ required: true,
47
+ type: "string",
48
+ typeOptions: {
49
+ password: true
50
+ }
51
+ },
52
+ {
53
+ displayName: "Database",
54
+ name: "database",
55
+ default: "",
56
+ description: "Database name",
57
+ required: true,
58
+ type: "string"
59
+ }
60
+ ];
61
+ this.test = {
62
+ request: {
63
+ baseURL: "=https://{{ $credentials.account }}.documents.azure.com/dbs/{{ $credentials.database }}",
64
+ url: "/colls"
65
+ }
66
+ };
67
+ }
68
+ async authenticate(credentials, requestOptions) {
69
+ const date = (/* @__PURE__ */ new Date()).toUTCString();
70
+ requestOptions.headers ??= {};
71
+ requestOptions.headers = {
72
+ ...requestOptions.headers,
73
+ "x-ms-date": date,
74
+ "x-ms-version": import_constants.CURRENT_VERSION,
75
+ "Cache-Control": "no-cache"
76
+ };
77
+ const url = new URL(
78
+ requestOptions.uri ?? requestOptions.baseURL + requestOptions.url
79
+ );
80
+ const pathSegments = url.pathname.split("/").filter(Boolean);
81
+ const foundResource = import_constants.RESOURCE_TYPES.map((type2) => ({
82
+ type: type2,
83
+ index: pathSegments.lastIndexOf(type2)
84
+ })).filter(({ index: index2 }) => index2 !== -1).sort((a, b) => b.index - a.index).shift();
85
+ if (!foundResource) {
86
+ throw new import_n8n_workflow.OperationalError("Unable to determine the resource type from the URL");
87
+ }
88
+ const { type, index } = foundResource;
89
+ const resourceId = pathSegments[index + 1] !== void 0 ? `${pathSegments.slice(0, index).join("/")}/${type}/${pathSegments[index + 1]}` : pathSegments.slice(0, index).join("/");
90
+ const key = Buffer.from(credentials.key, "base64");
91
+ const payload = `${(requestOptions.method ?? "GET").toLowerCase()}
92
+ ${type.toLowerCase()}
93
+ ${resourceId}
94
+ ${date.toLowerCase()}
95
+
96
+ `;
97
+ const hmacSha256 = (0, import_crypto.createHmac)("sha256", key);
98
+ const signature = hmacSha256.update(payload, "utf8").digest("base64");
99
+ requestOptions.headers[import_constants.HeaderConstants.AUTHORIZATION] = encodeURIComponent(
100
+ `type=master&ver=1.0&sig=${signature}`
101
+ );
102
+ return requestOptions;
103
+ }
104
+ }
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ MicrosoftAzureCosmosDbSharedKeyApi
108
+ });
109
+ //# sourceMappingURL=MicrosoftAzureCosmosDbSharedKeyApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.ts"],"sourcesContent":["import { createHmac } from 'crypto';\nimport type {\n\tICredentialDataDecryptedObject,\n\tICredentialType,\n\tICredentialTestRequest,\n\tIHttpRequestOptions,\n\tINodeProperties,\n\tIRequestOptions,\n} from 'n8n-workflow';\nimport { OperationalError } from 'n8n-workflow';\n\nimport {\n\tCURRENT_VERSION,\n\tHeaderConstants,\n\tRESOURCE_TYPES,\n} from '../nodes/Microsoft/AzureCosmosDb/helpers/constants';\n\nexport class MicrosoftAzureCosmosDbSharedKeyApi implements ICredentialType {\n\tname = 'microsoftAzureCosmosDbSharedKeyApi';\n\n\tdisplayName = 'Microsoft Azure Cosmos DB API';\n\n\tdocumentationUrl = 'microsoftAzureCosmosdb';\n\n\tproperties: INodeProperties[] = [\n\t\t{\n\t\t\tdisplayName: 'Account',\n\t\t\tname: 'account',\n\t\t\tdefault: '',\n\t\t\tdescription: 'Account name',\n\t\t\trequired: true,\n\t\t\ttype: 'string',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Key',\n\t\t\tname: 'key',\n\t\t\tdefault: '',\n\t\t\tdescription: 'Account key',\n\t\t\trequired: true,\n\t\t\ttype: 'string',\n\t\t\ttypeOptions: {\n\t\t\t\tpassword: true,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Database',\n\t\t\tname: 'database',\n\t\t\tdefault: '',\n\t\t\tdescription: 'Database name',\n\t\t\trequired: true,\n\t\t\ttype: 'string',\n\t\t},\n\t];\n\n\tasync authenticate(\n\t\tcredentials: ICredentialDataDecryptedObject,\n\t\trequestOptions: IHttpRequestOptions,\n\t): Promise<IHttpRequestOptions> {\n\t\tconst date = new Date().toUTCString();\n\n\t\trequestOptions.headers ??= {};\n\t\trequestOptions.headers = {\n\t\t\t...requestOptions.headers,\n\t\t\t'x-ms-date': date,\n\t\t\t'x-ms-version': CURRENT_VERSION,\n\t\t\t'Cache-Control': 'no-cache',\n\t\t};\n\n\t\t// HttpRequest node uses IRequestOptions.uri\n\t\tconst url = new URL(\n\t\t\t(requestOptions as IRequestOptions).uri ?? requestOptions.baseURL + requestOptions.url,\n\t\t);\n\n\t\tconst pathSegments = url.pathname.split('/').filter(Boolean);\n\n\t\tconst foundResource = RESOURCE_TYPES.map((type) => ({\n\t\t\ttype,\n\t\t\tindex: pathSegments.lastIndexOf(type),\n\t\t}))\n\t\t\t.filter(({ index }) => index !== -1)\n\t\t\t.sort((a, b) => b.index - a.index)\n\t\t\t.shift();\n\n\t\tif (!foundResource) {\n\t\t\tthrow new OperationalError('Unable to determine the resource type from the URL');\n\t\t}\n\n\t\tconst { type, index } = foundResource;\n\t\tconst resourceId =\n\t\t\tpathSegments[index + 1] !== undefined\n\t\t\t\t? `${pathSegments.slice(0, index).join('/')}/${type}/${pathSegments[index + 1]}`\n\t\t\t\t: pathSegments.slice(0, index).join('/');\n\n\t\tconst key = Buffer.from(credentials.key as string, 'base64');\n\t\tconst payload = `${(requestOptions.method ?? 'GET').toLowerCase()}\\n${type.toLowerCase()}\\n${resourceId}\\n${date.toLowerCase()}\\n\\n`;\n\t\tconst hmacSha256 = createHmac('sha256', key);\n\t\tconst signature = hmacSha256.update(payload, 'utf8').digest('base64');\n\n\t\trequestOptions.headers[HeaderConstants.AUTHORIZATION] = encodeURIComponent(\n\t\t\t`type=master&ver=1.0&sig=${signature}`,\n\t\t);\n\n\t\treturn requestOptions;\n\t}\n\n\ttest: ICredentialTestRequest = {\n\t\trequest: {\n\t\t\tbaseURL:\n\t\t\t\t'=https://{{ $credentials.account }}.documents.azure.com/dbs/{{ $credentials.database }}',\n\t\t\turl: '/colls',\n\t\t},\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAS3B,0BAAiC;AAEjC,uBAIO;AAEA,MAAM,mCAA8D;AAAA,EAApE;AACN,gBAAO;AAEP,uBAAc;AAEd,4BAAmB;AAEnB,sBAAgC;AAAA,MAC/B;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,MACP;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,QACN,aAAa;AAAA,UACZ,UAAU;AAAA,QACX;AAAA,MACD;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,MACP;AAAA,IACD;AAqDA,gBAA+B;AAAA,MAC9B,SAAS;AAAA,QACR,SACC;AAAA,QACD,KAAK;AAAA,MACN;AAAA,IACD;AAAA;AAAA,EAzDA,MAAM,aACL,aACA,gBAC+B;AAC/B,UAAM,QAAO,oBAAI,KAAK,GAAE,YAAY;AAEpC,mBAAe,YAAY,CAAC;AAC5B,mBAAe,UAAU;AAAA,MACxB,GAAG,eAAe;AAAA,MAClB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,IAClB;AAGA,UAAM,MAAM,IAAI;AAAA,MACd,eAAmC,OAAO,eAAe,UAAU,eAAe;AAAA,IACpF;AAEA,UAAM,eAAe,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAE3D,UAAM,gBAAgB,gCAAe,IAAI,CAACA,WAAU;AAAA,MACnD,MAAAA;AAAA,MACA,OAAO,aAAa,YAAYA,KAAI;AAAA,IACrC,EAAE,EACA,OAAO,CAAC,EAAE,OAAAC,OAAM,MAAMA,WAAU,EAAE,EAClC,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,MAAM;AAER,QAAI,CAAC,eAAe;AACnB,YAAM,IAAI,qCAAiB,oDAAoD;AAAA,IAChF;AAEA,UAAM,EAAE,MAAM,MAAM,IAAI;AACxB,UAAM,aACL,aAAa,QAAQ,CAAC,MAAM,SACzB,GAAG,aAAa,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,aAAa,QAAQ,CAAC,CAAC,KAC5E,aAAa,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG;AAEzC,UAAM,MAAM,OAAO,KAAK,YAAY,KAAe,QAAQ;AAC3D,UAAM,UAAU,IAAI,eAAe,UAAU,OAAO,YAAY,CAAC;AAAA,EAAK,KAAK,YAAY,CAAC;AAAA,EAAK,UAAU;AAAA,EAAK,KAAK,YAAY,CAAC;AAAA;AAAA;AAC9H,UAAM,iBAAa,0BAAW,UAAU,GAAG;AAC3C,UAAM,YAAY,WAAW,OAAO,SAAS,MAAM,EAAE,OAAO,QAAQ;AAEpE,mBAAe,QAAQ,iCAAgB,aAAa,IAAI;AAAA,MACvD,2BAA2B,SAAS;AAAA,IACrC;AAEA,WAAO;AAAA,EACR;AASD;","names":["type","index"]}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,12 +17,23 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
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
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var SalesforceJwtApi_credentials_exports = {};
20
30
  __export(SalesforceJwtApi_credentials_exports, {
21
31
  SalesforceJwtApi: () => SalesforceJwtApi
22
32
  });
23
33
  module.exports = __toCommonJS(SalesforceJwtApi_credentials_exports);
34
+ var import_axios = __toESM(require("axios"));
35
+ var import_jsonwebtoken = __toESM(require("jsonwebtoken"));
36
+ var import_moment_timezone = __toESM(require("moment-timezone"));
24
37
  class SalesforceJwtApi {
25
38
  constructor() {
26
39
  this.name = "salesforceJwtApi";
@@ -70,6 +83,53 @@ class SalesforceJwtApi {
70
83
  description: "Use the multiline editor. Make sure it is in standard PEM key format:<br />-----BEGIN PRIVATE KEY-----<br />KEY DATA GOES HERE<br />-----END PRIVATE KEY-----"
71
84
  }
72
85
  ];
86
+ this.test = {
87
+ request: {
88
+ baseURL: '={{$credentials?.environment === "sandbox" ? "https://test.salesforce.com" : "https://login.salesforce.com"}}',
89
+ url: "/services/oauth2/userinfo",
90
+ method: "GET"
91
+ }
92
+ };
93
+ }
94
+ async authenticate(credentials, requestOptions) {
95
+ const now = (0, import_moment_timezone.default)().unix();
96
+ const authUrl = credentials.environment === "sandbox" ? "https://test.salesforce.com" : "https://login.salesforce.com";
97
+ const signature = import_jsonwebtoken.default.sign(
98
+ {
99
+ iss: credentials.clientId,
100
+ sub: credentials.username,
101
+ aud: authUrl,
102
+ exp: now + 3 * 60
103
+ },
104
+ credentials.privateKey,
105
+ {
106
+ algorithm: "RS256",
107
+ header: {
108
+ alg: "RS256"
109
+ }
110
+ }
111
+ );
112
+ const axiosRequestConfig = {
113
+ headers: {
114
+ "Content-Type": "application/x-www-form-urlencoded"
115
+ },
116
+ method: "POST",
117
+ data: new URLSearchParams({
118
+ grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
119
+ assertion: signature
120
+ }).toString(),
121
+ url: `${authUrl}/services/oauth2/token`,
122
+ responseType: "json"
123
+ };
124
+ const result = await (0, import_axios.default)(axiosRequestConfig);
125
+ const { access_token } = result.data;
126
+ return {
127
+ ...requestOptions,
128
+ headers: {
129
+ ...requestOptions.headers,
130
+ Authorization: `Bearer ${access_token}`
131
+ }
132
+ };
73
133
  }
74
134
  }
75
135
  // Annotate the CommonJS export names for ESM import in node:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../credentials/SalesforceJwtApi.credentials.ts"],"sourcesContent":["import type { ICredentialType, INodeProperties } from 'n8n-workflow';\n\nexport class SalesforceJwtApi implements ICredentialType {\n\tname = 'salesforceJwtApi';\n\n\tdisplayName = 'Salesforce JWT API';\n\n\tdocumentationUrl = 'salesforce';\n\n\tproperties: INodeProperties[] = [\n\t\t{\n\t\t\tdisplayName: 'Environment Type',\n\t\t\tname: 'environment',\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Production',\n\t\t\t\t\tvalue: 'production',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Sandbox',\n\t\t\t\t\tvalue: 'sandbox',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'production',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Client ID',\n\t\t\tname: 'clientId',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdescription: 'Consumer Key from Salesforce Connected App',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Username',\n\t\t\tname: 'username',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Private Key',\n\t\t\tname: 'privateKey',\n\t\t\ttype: 'string',\n\t\t\ttypeOptions: {\n\t\t\t\tpassword: true,\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdescription:\n\t\t\t\t'Use the multiline editor. Make sure it is in standard PEM key format:<br />-----BEGIN PRIVATE KEY-----<br />KEY DATA GOES HERE<br />-----END PRIVATE KEY-----',\n\t\t},\n\t];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,iBAA4C;AAAA,EAAlD;AACN,gBAAO;AAEP,uBAAc;AAEd,4BAAmB;AAEnB,sBAAgC;AAAA,MAC/B;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACR;AAAA,YACC,MAAM;AAAA,YACN,OAAO;AAAA,UACR;AAAA,UACA;AAAA,YACC,MAAM;AAAA,YACN,OAAO;AAAA,UACR;AAAA,QACD;AAAA,QACA,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,QACV,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,MACX;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,UACZ,UAAU;AAAA,QACX;AAAA,QACA,SAAS;AAAA,QACT,UAAU;AAAA,QACV,aACC;AAAA,MACF;AAAA,IACD;AAAA;AACD;","names":[]}
1
+ {"version":3,"sources":["../../credentials/SalesforceJwtApi.credentials.ts"],"sourcesContent":["import type { AxiosRequestConfig } from 'axios';\nimport axios from 'axios';\nimport jwt from 'jsonwebtoken';\nimport moment from 'moment-timezone';\nimport type {\n\tICredentialDataDecryptedObject,\n\tICredentialTestRequest,\n\tICredentialType,\n\tIHttpRequestOptions,\n\tINodeProperties,\n} from 'n8n-workflow';\n\nexport class SalesforceJwtApi implements ICredentialType {\n\tname = 'salesforceJwtApi';\n\n\tdisplayName = 'Salesforce JWT API';\n\n\tdocumentationUrl = 'salesforce';\n\n\tproperties: INodeProperties[] = [\n\t\t{\n\t\t\tdisplayName: 'Environment Type',\n\t\t\tname: 'environment',\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Production',\n\t\t\t\t\tvalue: 'production',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Sandbox',\n\t\t\t\t\tvalue: 'sandbox',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'production',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Client ID',\n\t\t\tname: 'clientId',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdescription: 'Consumer Key from Salesforce Connected App',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Username',\n\t\t\tname: 'username',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Private Key',\n\t\t\tname: 'privateKey',\n\t\t\ttype: 'string',\n\t\t\ttypeOptions: {\n\t\t\t\tpassword: true,\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdescription:\n\t\t\t\t'Use the multiline editor. Make sure it is in standard PEM key format:<br />-----BEGIN PRIVATE KEY-----<br />KEY DATA GOES HERE<br />-----END PRIVATE KEY-----',\n\t\t},\n\t];\n\n\tasync authenticate(\n\t\tcredentials: ICredentialDataDecryptedObject,\n\t\trequestOptions: IHttpRequestOptions,\n\t): Promise<IHttpRequestOptions> {\n\t\tconst now = moment().unix();\n\t\tconst authUrl =\n\t\t\tcredentials.environment === 'sandbox'\n\t\t\t\t? 'https://test.salesforce.com'\n\t\t\t\t: 'https://login.salesforce.com';\n\t\tconst signature = jwt.sign(\n\t\t\t{\n\t\t\t\tiss: credentials.clientId as string,\n\t\t\t\tsub: credentials.username as string,\n\t\t\t\taud: authUrl,\n\t\t\t\texp: now + 3 * 60,\n\t\t\t},\n\t\t\tcredentials.privateKey as string,\n\t\t\t{\n\t\t\t\talgorithm: 'RS256',\n\t\t\t\theader: {\n\t\t\t\t\talg: 'RS256',\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\tconst axiosRequestConfig: AxiosRequestConfig = {\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t\t},\n\t\t\tmethod: 'POST',\n\t\t\tdata: new URLSearchParams({\n\t\t\t\tgrant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n\t\t\t\tassertion: signature,\n\t\t\t}).toString(),\n\t\t\turl: `${authUrl}/services/oauth2/token`,\n\t\t\tresponseType: 'json',\n\t\t};\n\t\tconst result = await axios(axiosRequestConfig);\n\t\tconst { access_token } = result.data as { access_token: string };\n\n\t\treturn {\n\t\t\t...requestOptions,\n\t\t\theaders: {\n\t\t\t\t...requestOptions.headers,\n\t\t\t\tAuthorization: `Bearer ${access_token}`,\n\t\t\t},\n\t\t};\n\t}\n\n\ttest: ICredentialTestRequest = {\n\t\trequest: {\n\t\t\tbaseURL:\n\t\t\t\t'={{$credentials?.environment === \"sandbox\" ? \"https://test.salesforce.com\" : \"https://login.salesforce.com\"}}',\n\t\t\turl: '/services/oauth2/userinfo',\n\t\t\tmethod: 'GET',\n\t\t},\n\t};\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkB;AAClB,0BAAgB;AAChB,6BAAmB;AASZ,MAAM,iBAA4C;AAAA,EAAlD;AACN,gBAAO;AAEP,uBAAc;AAEd,4BAAmB;AAEnB,sBAAgC;AAAA,MAC/B;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,UACR;AAAA,YACC,MAAM;AAAA,YACN,OAAO;AAAA,UACR;AAAA,UACA;AAAA,YACC,MAAM;AAAA,YACN,OAAO;AAAA,UACR;AAAA,QACD;AAAA,QACA,SAAS;AAAA,MACV;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,QACV,aAAa;AAAA,MACd;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,UAAU;AAAA,MACX;AAAA,MACA;AAAA,QACC,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,QACN,aAAa;AAAA,UACZ,UAAU;AAAA,QACX;AAAA,QACA,SAAS;AAAA,QACT,UAAU;AAAA,QACV,aACC;AAAA,MACF;AAAA,IACD;AAmDA,gBAA+B;AAAA,MAC9B,SAAS;AAAA,QACR,SACC;AAAA,QACD,KAAK;AAAA,QACL,QAAQ;AAAA,MACT;AAAA,IACD;AAAA;AAAA,EAxDA,MAAM,aACL,aACA,gBAC+B;AAC/B,UAAM,UAAM,uBAAAA,SAAO,EAAE,KAAK;AAC1B,UAAM,UACL,YAAY,gBAAgB,YACzB,gCACA;AACJ,UAAM,YAAY,oBAAAC,QAAI;AAAA,MACrB;AAAA,QACC,KAAK,YAAY;AAAA,QACjB,KAAK,YAAY;AAAA,QACjB,KAAK;AAAA,QACL,KAAK,MAAM,IAAI;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,QACC,WAAW;AAAA,QACX,QAAQ;AAAA,UACP,KAAK;AAAA,QACN;AAAA,MACD;AAAA,IACD;AAEA,UAAM,qBAAyC;AAAA,MAC9C,SAAS;AAAA,QACR,gBAAgB;AAAA,MACjB;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACzB,YAAY;AAAA,QACZ,WAAW;AAAA,MACZ,CAAC,EAAE,SAAS;AAAA,MACZ,KAAK,GAAG,OAAO;AAAA,MACf,cAAc;AAAA,IACf;AACA,UAAM,SAAS,UAAM,aAAAC,SAAM,kBAAkB;AAC7C,UAAM,EAAE,aAAa,IAAI,OAAO;AAEhC,WAAO;AAAA,MACN,GAAG;AAAA,MACH,SAAS;AAAA,QACR,GAAG,eAAe;AAAA,QAClB,eAAe,UAAU,YAAY;AAAA,MACtC;AAAA,IACD;AAAA,EACD;AAUD;","names":["moment","jwt","axios"]}
@@ -1176,6 +1176,10 @@
1176
1176
  "webhook"
1177
1177
  ]
1178
1178
  },
1179
+ "httpBearerAuth": {
1180
+ "className": "HttpBearerAuth",
1181
+ "sourcePath": "dist/credentials/HttpBearerAuth.credentials.js"
1182
+ },
1179
1183
  "httpDigestAuth": {
1180
1184
  "className": "HttpDigestAuth",
1181
1185
  "sourcePath": "dist/credentials/HttpDigestAuth.credentials.js",
@@ -1613,6 +1617,13 @@
1613
1617
  "messageBird"
1614
1618
  ]
1615
1619
  },
1620
+ "microsoftAzureCosmosDbSharedKeyApi": {
1621
+ "className": "MicrosoftAzureCosmosDbSharedKeyApi",
1622
+ "sourcePath": "dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js",
1623
+ "supportedNodes": [
1624
+ "azureCosmosDb"
1625
+ ]
1626
+ },
1616
1627
  "microsoftAzureMonitorOAuth2Api": {
1617
1628
  "className": "MicrosoftAzureMonitorOAuth2Api",
1618
1629
  "sourcePath": "dist/credentials/MicrosoftAzureMonitorOAuth2Api.credentials.js",
@@ -931,6 +931,10 @@
931
931
  "className": "Metabase",
932
932
  "sourcePath": "dist/nodes/Metabase/Metabase.node.js"
933
933
  },
934
+ "azureCosmosDb": {
935
+ "className": "AzureCosmosDb",
936
+ "sourcePath": "dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js"
937
+ },
934
938
  "microsoftDynamicsCrm": {
935
939
  "className": "MicrosoftDynamicsCrm",
936
940
  "sourcePath": "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js"
@@ -1,14 +1,6 @@
1
1
  {
2
2
  "type": "object",
3
3
  "properties": {
4
- "attributes": {
5
- "type": "object",
6
- "properties": {
7
- "SMS": {
8
- "type": "string"
9
- }
10
- }
11
- },
12
4
  "createdAt": {
13
5
  "type": "string"
14
6
  },
@@ -37,5 +29,5 @@
37
29
  "type": "boolean"
38
30
  }
39
31
  },
40
- "version": 1
32
+ "version": 2
41
33
  }
@@ -1,12 +1,9 @@
1
1
  {
2
2
  "type": "object",
3
3
  "properties": {
4
- "name": {
5
- "type": "string"
6
- },
7
- "rev": {
4
+ "id": {
8
5
  "type": "string"
9
6
  }
10
7
  },
11
- "version": 1
8
+ "version": 2
12
9
  }
@@ -115,7 +115,10 @@ async function getNewEmails(imapConnection, searchCriteria, staticData, postProc
115
115
  json: {
116
116
  textHtml: await getText(parts, message, "html"),
117
117
  textPlain: await getText(parts, message, "plain"),
118
- metadata: {}
118
+ metadata: {},
119
+ attributes: {
120
+ uid: message.attributes.uid
121
+ }
119
122
  }
120
123
  };
121
124
  const messageHeader = message.parts.filter((part) => part.which === "HEADER");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../nodes/EmailReadImap/v2/utils.ts"],"sourcesContent":["import { getParts, type ImapSimple, type Message, type MessagePart } from '@n8n/imap';\nimport { find } from 'lodash';\nimport { simpleParser, type Source as ParserSource } from 'mailparser';\nimport {\n\ttype IBinaryData,\n\ttype INodeExecutionData,\n\ttype IDataObject,\n\ttype ITriggerFunctions,\n\tNodeOperationError,\n\ttype IBinaryKeyData,\n} from 'n8n-workflow';\n\nasync function parseRawEmail(\n\tthis: ITriggerFunctions,\n\tmessageEncoded: ParserSource,\n\tdataPropertyNameDownload: string,\n): Promise<INodeExecutionData> {\n\tconst responseData = await simpleParser(messageEncoded);\n\tconst headers: IDataObject = {};\n\tconst additionalData: IDataObject = {};\n\n\tfor (const header of responseData.headerLines) {\n\t\theaders[header.key] = header.line;\n\t}\n\n\tadditionalData.headers = headers;\n\tadditionalData.headerLines = undefined;\n\n\tconst binaryData: IBinaryKeyData = {};\n\tif (responseData.attachments) {\n\t\tfor (let i = 0; i < responseData.attachments.length; i++) {\n\t\t\tconst attachment = responseData.attachments[i];\n\t\t\tbinaryData[`${dataPropertyNameDownload}${i}`] = await this.helpers.prepareBinaryData(\n\t\t\t\tattachment.content,\n\t\t\t\tattachment.filename,\n\t\t\t\tattachment.contentType,\n\t\t\t);\n\t\t}\n\n\t\tadditionalData.attachments = undefined;\n\t}\n\n\treturn {\n\t\tjson: { ...responseData, ...additionalData },\n\t\tbinary: Object.keys(binaryData).length ? binaryData : undefined,\n\t} as INodeExecutionData;\n}\n\nexport async function getNewEmails(\n\tthis: ITriggerFunctions,\n\timapConnection: ImapSimple,\n\tsearchCriteria: Array<string | string[]>,\n\tstaticData: IDataObject,\n\tpostProcessAction: string,\n\tgetText: (parts: MessagePart[], message: Message, subtype: string) => Promise<string>,\n\tgetAttachment: (\n\t\timapConnection: ImapSimple,\n\t\tparts: MessagePart[],\n\t\tmessage: Message,\n\t) => Promise<IBinaryData[]>,\n): Promise<INodeExecutionData[]> {\n\tconst format = this.getNodeParameter('format', 0) as string;\n\n\tlet fetchOptions = {};\n\n\tif (format === 'simple' || format === 'raw') {\n\t\tfetchOptions = {\n\t\t\tbodies: ['TEXT', 'HEADER'],\n\t\t\tmarkSeen: false,\n\t\t\tstruct: true,\n\t\t};\n\t} else if (format === 'resolved') {\n\t\tfetchOptions = {\n\t\t\tbodies: [''],\n\t\t\tmarkSeen: false,\n\t\t\tstruct: true,\n\t\t};\n\t}\n\n\tconst results = await imapConnection.search(searchCriteria, fetchOptions);\n\n\tconst newEmails: INodeExecutionData[] = [];\n\tlet newEmail: INodeExecutionData;\n\tlet attachments: IBinaryData[];\n\tlet propertyName: string;\n\n\t// All properties get by default moved to metadata except the ones\n\t// which are defined here which get set on the top level.\n\tconst topLevelProperties = ['cc', 'date', 'from', 'subject', 'to'];\n\n\tif (format === 'resolved') {\n\t\tconst dataPropertyAttachmentsPrefixName = this.getNodeParameter(\n\t\t\t'dataPropertyAttachmentsPrefixName',\n\t\t) as string;\n\n\t\tfor (const message of results) {\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid !== undefined &&\n\t\t\t\tmessage.attributes.uid <= (staticData.lastMessageUid as number)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid === undefined ||\n\t\t\t\t(staticData.lastMessageUid as number) < message.attributes.uid\n\t\t\t) {\n\t\t\t\tstaticData.lastMessageUid = message.attributes.uid;\n\t\t\t}\n\t\t\tconst part = find(message.parts, { which: '' });\n\n\t\t\tif (part === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Email part could not be parsed.');\n\t\t\t}\n\t\t\tconst parsedEmail = await parseRawEmail.call(\n\t\t\t\tthis,\n\t\t\t\tpart.body as Buffer,\n\t\t\t\tdataPropertyAttachmentsPrefixName,\n\t\t\t);\n\n\t\t\tnewEmails.push(parsedEmail);\n\t\t}\n\t} else if (format === 'simple') {\n\t\tconst downloadAttachments = this.getNodeParameter('downloadAttachments') as boolean;\n\n\t\tlet dataPropertyAttachmentsPrefixName = '';\n\t\tif (downloadAttachments) {\n\t\t\tdataPropertyAttachmentsPrefixName = this.getNodeParameter(\n\t\t\t\t'dataPropertyAttachmentsPrefixName',\n\t\t\t) as string;\n\t\t}\n\n\t\tfor (const message of results) {\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid !== undefined &&\n\t\t\t\tmessage.attributes.uid <= (staticData.lastMessageUid as number)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid === undefined ||\n\t\t\t\t(staticData.lastMessageUid as number) < message.attributes.uid\n\t\t\t) {\n\t\t\t\tstaticData.lastMessageUid = message.attributes.uid;\n\t\t\t}\n\t\t\tconst parts = getParts(message.attributes.struct as IDataObject[]);\n\n\t\t\tnewEmail = {\n\t\t\t\tjson: {\n\t\t\t\t\ttextHtml: await getText(parts, message, 'html'),\n\t\t\t\t\ttextPlain: await getText(parts, message, 'plain'),\n\t\t\t\t\tmetadata: {} as IDataObject,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst messageHeader = message.parts.filter((part) => part.which === 'HEADER');\n\n\t\t\tconst messageBody = messageHeader[0].body as Record<string, string[]>;\n\t\t\tfor (propertyName of Object.keys(messageBody)) {\n\t\t\t\tif (messageBody[propertyName].length) {\n\t\t\t\t\tif (topLevelProperties.includes(propertyName)) {\n\t\t\t\t\t\tnewEmail.json[propertyName] = messageBody[propertyName][0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(newEmail.json.metadata as IDataObject)[propertyName] = messageBody[propertyName][0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (downloadAttachments) {\n\t\t\t\t// Get attachments and add them if any get found\n\t\t\t\tattachments = await getAttachment(imapConnection, parts, message);\n\t\t\t\tif (attachments.length) {\n\t\t\t\t\tnewEmail.binary = {};\n\t\t\t\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\t\t\t\tnewEmail.binary[`${dataPropertyAttachmentsPrefixName}${i}`] = attachments[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnewEmails.push(newEmail);\n\t\t}\n\t} else if (format === 'raw') {\n\t\tfor (const message of results) {\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid !== undefined &&\n\t\t\t\tmessage.attributes.uid <= (staticData.lastMessageUid as number)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid === undefined ||\n\t\t\t\t(staticData.lastMessageUid as number) < message.attributes.uid\n\t\t\t) {\n\t\t\t\tstaticData.lastMessageUid = message.attributes.uid;\n\t\t\t}\n\t\t\tconst part = find(message.parts, { which: 'TEXT' });\n\n\t\t\tif (part === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Email part could not be parsed.');\n\t\t\t}\n\t\t\t// Return base64 string\n\t\t\tnewEmail = {\n\t\t\t\tjson: {\n\t\t\t\t\traw: part.body as string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tnewEmails.push(newEmail);\n\t\t}\n\t}\n\n\t// only mark messages as seen once processing has finished\n\tif (postProcessAction === 'read') {\n\t\tconst uidList = results.map((e) => e.attributes.uid);\n\t\tif (uidList.length > 0) {\n\t\t\tawait imapConnection.addFlags(uidList, '\\\\SEEN');\n\t\t}\n\t}\n\treturn newEmails;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../nodes/EmailReadImap/v2/utils.ts"],"sourcesContent":["import { getParts, type ImapSimple, type Message, type MessagePart } from '@n8n/imap';\nimport { find } from 'lodash';\nimport { simpleParser, type Source as ParserSource } from 'mailparser';\nimport {\n\ttype IBinaryData,\n\ttype INodeExecutionData,\n\ttype IDataObject,\n\ttype ITriggerFunctions,\n\tNodeOperationError,\n\ttype IBinaryKeyData,\n} from 'n8n-workflow';\n\nasync function parseRawEmail(\n\tthis: ITriggerFunctions,\n\tmessageEncoded: ParserSource,\n\tdataPropertyNameDownload: string,\n): Promise<INodeExecutionData> {\n\tconst responseData = await simpleParser(messageEncoded);\n\tconst headers: IDataObject = {};\n\tconst additionalData: IDataObject = {};\n\n\tfor (const header of responseData.headerLines) {\n\t\theaders[header.key] = header.line;\n\t}\n\n\tadditionalData.headers = headers;\n\tadditionalData.headerLines = undefined;\n\n\tconst binaryData: IBinaryKeyData = {};\n\tif (responseData.attachments) {\n\t\tfor (let i = 0; i < responseData.attachments.length; i++) {\n\t\t\tconst attachment = responseData.attachments[i];\n\t\t\tbinaryData[`${dataPropertyNameDownload}${i}`] = await this.helpers.prepareBinaryData(\n\t\t\t\tattachment.content,\n\t\t\t\tattachment.filename,\n\t\t\t\tattachment.contentType,\n\t\t\t);\n\t\t}\n\n\t\tadditionalData.attachments = undefined;\n\t}\n\n\treturn {\n\t\tjson: { ...responseData, ...additionalData },\n\t\tbinary: Object.keys(binaryData).length ? binaryData : undefined,\n\t} as INodeExecutionData;\n}\n\nexport async function getNewEmails(\n\tthis: ITriggerFunctions,\n\timapConnection: ImapSimple,\n\tsearchCriteria: Array<string | string[]>,\n\tstaticData: IDataObject,\n\tpostProcessAction: string,\n\tgetText: (parts: MessagePart[], message: Message, subtype: string) => Promise<string>,\n\tgetAttachment: (\n\t\timapConnection: ImapSimple,\n\t\tparts: MessagePart[],\n\t\tmessage: Message,\n\t) => Promise<IBinaryData[]>,\n): Promise<INodeExecutionData[]> {\n\tconst format = this.getNodeParameter('format', 0) as string;\n\n\tlet fetchOptions = {};\n\n\tif (format === 'simple' || format === 'raw') {\n\t\tfetchOptions = {\n\t\t\tbodies: ['TEXT', 'HEADER'],\n\t\t\tmarkSeen: false,\n\t\t\tstruct: true,\n\t\t};\n\t} else if (format === 'resolved') {\n\t\tfetchOptions = {\n\t\t\tbodies: [''],\n\t\t\tmarkSeen: false,\n\t\t\tstruct: true,\n\t\t};\n\t}\n\n\tconst results = await imapConnection.search(searchCriteria, fetchOptions);\n\n\tconst newEmails: INodeExecutionData[] = [];\n\tlet newEmail: INodeExecutionData;\n\tlet attachments: IBinaryData[];\n\tlet propertyName: string;\n\n\t// All properties get by default moved to metadata except the ones\n\t// which are defined here which get set on the top level.\n\tconst topLevelProperties = ['cc', 'date', 'from', 'subject', 'to'];\n\n\tif (format === 'resolved') {\n\t\tconst dataPropertyAttachmentsPrefixName = this.getNodeParameter(\n\t\t\t'dataPropertyAttachmentsPrefixName',\n\t\t) as string;\n\n\t\tfor (const message of results) {\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid !== undefined &&\n\t\t\t\tmessage.attributes.uid <= (staticData.lastMessageUid as number)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid === undefined ||\n\t\t\t\t(staticData.lastMessageUid as number) < message.attributes.uid\n\t\t\t) {\n\t\t\t\tstaticData.lastMessageUid = message.attributes.uid;\n\t\t\t}\n\t\t\tconst part = find(message.parts, { which: '' });\n\n\t\t\tif (part === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Email part could not be parsed.');\n\t\t\t}\n\t\t\tconst parsedEmail = await parseRawEmail.call(\n\t\t\t\tthis,\n\t\t\t\tpart.body as Buffer,\n\t\t\t\tdataPropertyAttachmentsPrefixName,\n\t\t\t);\n\n\t\t\tnewEmails.push(parsedEmail);\n\t\t}\n\t} else if (format === 'simple') {\n\t\tconst downloadAttachments = this.getNodeParameter('downloadAttachments') as boolean;\n\n\t\tlet dataPropertyAttachmentsPrefixName = '';\n\t\tif (downloadAttachments) {\n\t\t\tdataPropertyAttachmentsPrefixName = this.getNodeParameter(\n\t\t\t\t'dataPropertyAttachmentsPrefixName',\n\t\t\t) as string;\n\t\t}\n\n\t\tfor (const message of results) {\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid !== undefined &&\n\t\t\t\tmessage.attributes.uid <= (staticData.lastMessageUid as number)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid === undefined ||\n\t\t\t\t(staticData.lastMessageUid as number) < message.attributes.uid\n\t\t\t) {\n\t\t\t\tstaticData.lastMessageUid = message.attributes.uid;\n\t\t\t}\n\t\t\tconst parts = getParts(message.attributes.struct as IDataObject[]);\n\n\t\t\tnewEmail = {\n\t\t\t\tjson: {\n\t\t\t\t\ttextHtml: await getText(parts, message, 'html'),\n\t\t\t\t\ttextPlain: await getText(parts, message, 'plain'),\n\t\t\t\t\tmetadata: {} as IDataObject,\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\tuid: message.attributes.uid,\n\t\t\t\t\t} as IDataObject,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst messageHeader = message.parts.filter((part) => part.which === 'HEADER');\n\n\t\t\tconst messageBody = messageHeader[0].body as Record<string, string[]>;\n\t\t\tfor (propertyName of Object.keys(messageBody)) {\n\t\t\t\tif (messageBody[propertyName].length) {\n\t\t\t\t\tif (topLevelProperties.includes(propertyName)) {\n\t\t\t\t\t\tnewEmail.json[propertyName] = messageBody[propertyName][0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(newEmail.json.metadata as IDataObject)[propertyName] = messageBody[propertyName][0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (downloadAttachments) {\n\t\t\t\t// Get attachments and add them if any get found\n\t\t\t\tattachments = await getAttachment(imapConnection, parts, message);\n\t\t\t\tif (attachments.length) {\n\t\t\t\t\tnewEmail.binary = {};\n\t\t\t\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\t\t\t\tnewEmail.binary[`${dataPropertyAttachmentsPrefixName}${i}`] = attachments[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnewEmails.push(newEmail);\n\t\t}\n\t} else if (format === 'raw') {\n\t\tfor (const message of results) {\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid !== undefined &&\n\t\t\t\tmessage.attributes.uid <= (staticData.lastMessageUid as number)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstaticData.lastMessageUid === undefined ||\n\t\t\t\t(staticData.lastMessageUid as number) < message.attributes.uid\n\t\t\t) {\n\t\t\t\tstaticData.lastMessageUid = message.attributes.uid;\n\t\t\t}\n\t\t\tconst part = find(message.parts, { which: 'TEXT' });\n\n\t\t\tif (part === undefined) {\n\t\t\t\tthrow new NodeOperationError(this.getNode(), 'Email part could not be parsed.');\n\t\t\t}\n\t\t\t// Return base64 string\n\t\t\tnewEmail = {\n\t\t\t\tjson: {\n\t\t\t\t\traw: part.body as string,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tnewEmails.push(newEmail);\n\t\t}\n\t}\n\n\t// only mark messages as seen once processing has finished\n\tif (postProcessAction === 'read') {\n\t\tconst uidList = results.map((e) => e.attributes.uid);\n\t\tif (uidList.length > 0) {\n\t\t\tawait imapConnection.addFlags(uidList, '\\\\SEEN');\n\t\t}\n\t}\n\treturn newEmails;\n}\n"],"mappings":"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","names":[]}
@@ -281,7 +281,7 @@ class Form extends import_n8n_workflow.Node {
281
281
  path: "",
282
282
  restartWebhook: true,
283
283
  isFullPath: true,
284
- isForm: true
284
+ nodeType: "form"
285
285
  },
286
286
  {
287
287
  name: "default",
@@ -290,7 +290,7 @@ class Form extends import_n8n_workflow.Node {
290
290
  path: "",
291
291
  restartWebhook: true,
292
292
  isFullPath: true,
293
- isForm: true
293
+ nodeType: "form"
294
294
  }
295
295
  ],
296
296
  properties: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/Form/Form.node.ts"],"sourcesContent":["import type {\n\tFormFieldsParameter,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeProperties,\n\tINodeTypeDescription,\n\tIWebhookFunctions,\n\tIWebhookResponseData,\n\tNodeTypeAndVersion,\n} from 'n8n-workflow';\nimport {\n\tNode,\n\tupdateDisplayOptions,\n\tNodeOperationError,\n\tFORM_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\ttryToParseJsonToFormFields,\n\tNodeConnectionTypes,\n} from 'n8n-workflow';\n\nimport { cssVariables } from './cssVariables';\nimport { renderFormCompletion } from './formCompletionUtils';\nimport { renderFormNode } from './formNodeUtils';\nimport { configureWaitTillDate } from '../../utils/sendAndWait/configureWaitTillDate.util';\nimport { limitWaitTimeProperties } from '../../utils/sendAndWait/descriptions';\nimport { formDescription, formFields, formTitle } from '../Form/common.descriptions';\nimport { prepareFormReturnItem, resolveRawData } from '../Form/utils';\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},\n\t...updateDisplayOptions(\n\t\t{\n\t\t\tshow: {\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t},\n\t\t},\n\t\tlimitWaitTimeProperties,\n\t),\n];\n\nexport const formFieldsProperties: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Define Form',\n\t\tname: 'defineForm',\n\t\ttype: 'options',\n\t\tnoDataExpression: true,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Using Fields Below',\n\t\t\t\tvalue: 'fields',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Using JSON',\n\t\t\t\tvalue: 'json',\n\t\t\t},\n\t\t],\n\t\tdefault: 'fields',\n\t},\n\t{\n\t\tdisplayName: 'Form Fields',\n\t\tname: 'jsonOutput',\n\t\ttype: 'json',\n\t\ttypeOptions: {\n\t\t\trows: 5,\n\t\t},\n\t\tdefault:\n\t\t\t'[\\n {\\n \"fieldLabel\":\"Name\",\\n \"placeholder\":\"enter you name\",\\n \"requiredField\":true\\n },\\n {\\n \"fieldLabel\":\"Age\",\\n \"fieldType\":\"number\",\\n \"placeholder\":\"enter your age\"\\n },\\n {\\n \"fieldLabel\":\"Email\",\\n \"fieldType\":\"email\",\\n \"requiredField\":true\\n }\\n]',\n\t\tvalidateType: 'form-fields',\n\t\tignoreValidationDuringExecution: true,\n\t\thint: '<a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.form/\" target=\"_blank\">See docs</a> for field syntax',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tdefineForm: ['json'],\n\t\t\t},\n\t\t},\n\t},\n\t{ ...formFields, displayOptions: { show: { defineForm: ['fields'] } } },\n];\n\nconst pageProperties = updateDisplayOptions(\n\t{\n\t\tshow: {\n\t\t\toperation: ['page'],\n\t\t},\n\t},\n\t[\n\t\t...formFieldsProperties,\n\t\t...waitTimeProperties,\n\t\t{\n\t\t\tdisplayName: 'Options',\n\t\t\tname: 'options',\n\t\t\ttype: 'collection',\n\t\t\tplaceholder: 'Add option',\n\t\t\tdefault: {},\n\t\t\toptions: [\n\t\t\t\t{ ...formTitle, required: false },\n\t\t\t\tformDescription,\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Button Label',\n\t\t\t\t\tname: 'buttonLabel',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: 'Submit',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Custom Form Styling',\n\t\t\t\t\tname: 'customCss',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\trows: 10,\n\t\t\t\t\t\teditor: 'cssEditor',\n\t\t\t\t\t},\n\t\t\t\t\tdefault: cssVariables.trim(),\n\t\t\t\t\tdescription: 'Override default styling of the public form interface with CSS',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n);\n\nconst completionProperties = updateDisplayOptions(\n\t{\n\t\tshow: {\n\t\t\toperation: ['completion'],\n\t\t},\n\t},\n\t[\n\t\t{\n\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\tdisplayName: 'On n8n Form Submission',\n\t\t\tname: 'respondWith',\n\t\t\ttype: 'options',\n\t\t\tdefault: 'text',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Show Completion Screen',\n\t\t\t\t\tvalue: 'text',\n\t\t\t\t\tdescription: 'Show a response text to the user',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Redirect to URL',\n\t\t\t\t\tvalue: 'redirect',\n\t\t\t\t\tdescription: 'Redirect the user to a URL',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Show Text',\n\t\t\t\t\tvalue: 'showText',\n\t\t\t\t\tdescription: 'Display simple text or HTML',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Return Binary File',\n\t\t\t\t\tvalue: 'returnBinary',\n\t\t\t\t\tdescription: 'Return incoming binary file',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'URL',\n\t\t\tname: 'redirectUrl',\n\t\t\tvalidateType: 'url',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['redirect'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Completion Title',\n\t\t\tname: 'completionTitle',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['text', 'returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Completion Message',\n\t\t\tname: 'completionMessage',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\ttypeOptions: {\n\t\t\t\trows: 2,\n\t\t\t},\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['text', 'returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Text',\n\t\t\tname: 'responseText',\n\t\t\ttype: 'string',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['showText'],\n\t\t\t\t},\n\t\t\t},\n\t\t\ttypeOptions: {\n\t\t\t\trows: 2,\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\tplaceholder: 'e.g. Thanks for filling the form',\n\t\t\tdescription: 'The text to display on the page. Use HTML to show a customized web page.',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Input Data Field Name',\n\t\t\tname: 'inputDataFieldName',\n\t\t\ttype: 'string',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: 'data',\n\t\t\tplaceholder: 'e.g. data',\n\t\t\tdescription:\n\t\t\t\t'Find the name of input field containing the binary data to return in the Input panel on the left, in the Binary tab',\n\t\t\thint: 'The name of the input field containing the binary file data to be returned',\n\t\t},\n\t\t...waitTimeProperties,\n\t\t{\n\t\t\tdisplayName: 'Options',\n\t\t\tname: 'options',\n\t\t\ttype: 'collection',\n\t\t\tplaceholder: 'Add option',\n\t\t\tdefault: {},\n\t\t\toptions: [\n\t\t\t\t{ ...formTitle, required: false, displayName: 'Completion Page Title' },\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Custom Form Styling',\n\t\t\t\t\tname: 'customCss',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\trows: 10,\n\t\t\t\t\t\teditor: 'cssEditor',\n\t\t\t\t\t},\n\t\t\t\t\tdefault: cssVariables.trim(),\n\t\t\t\t\tdescription: 'Override default styling of the public form interface with CSS',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['text', 'returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n);\n\nexport class Form extends Node {\n\tnodeInputData: INodeExecutionData[] = [];\n\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'n8n Form',\n\t\tname: 'form',\n\t\ticon: 'file:form.svg',\n\t\tgroup: ['input'],\n\t\tversion: 1,\n\t\tdescription: 'Generate webforms in n8n and pass their responses to the workflow',\n\t\tdefaults: {\n\t\t\tname: 'Form',\n\t\t},\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\twebhooks: [\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: '',\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: 'responseNode',\n\t\t\t\tpath: '',\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\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\t\tdisplayName: 'An n8n Form Trigger node must be set up before this node',\n\t\t\t\tname: 'triggerNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Page Type',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: 'page',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Next Form Page',\n\t\t\t\t\t\tvalue: 'page',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Form Ending',\n\t\t\t\t\t\tvalue: 'completion',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t...pageProperties,\n\t\t\t...completionProperties,\n\t\t],\n\t};\n\n\tasync webhook(context: IWebhookFunctions): Promise<IWebhookResponseData> {\n\t\tconst res = context.getResponseObject();\n\n\t\tconst operation = context.getNodeParameter('operation', '') as string;\n\n\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\tconst trigger = parentNodes.find(\n\t\t\t(node) => node.type === 'n8n-nodes-base.formTrigger',\n\t\t) as NodeTypeAndVersion;\n\n\t\tconst mode = context.evaluateExpression(`{{ $('${trigger?.name}').first().json.formMode }}`) as\n\t\t\t| 'test'\n\t\t\t| 'production';\n\n\t\tconst defineForm = context.getNodeParameter('defineForm', false) as string;\n\n\t\tlet fields: FormFieldsParameter = [];\n\t\tif (defineForm === 'json') {\n\t\t\ttry {\n\t\t\t\tconst jsonOutput = context.getNodeParameter('jsonOutput', '', {\n\t\t\t\t\trawExpressions: true,\n\t\t\t\t}) as string;\n\n\t\t\t\tfields = tryToParseJsonToFormFields(resolveRawData(context, jsonOutput));\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeOperationError(context.getNode(), error.message, {\n\t\t\t\t\tdescription: error.message,\n\t\t\t\t\ttype: mode === 'test' ? 'manual-form-test' : undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tfields = context.getNodeParameter('formFields.values', []) as FormFieldsParameter;\n\t\t}\n\n\t\tconst method = context.getRequestObject().method;\n\n\t\tif (operation === 'completion' && method === 'GET') {\n\t\t\treturn await renderFormCompletion(context, res, trigger);\n\t\t}\n\n\t\tif (operation === 'completion' && method === 'POST') {\n\t\t\treturn {\n\t\t\t\tworkflowData: [context.evaluateExpression('{{ $input.all() }}') as INodeExecutionData[]],\n\t\t\t};\n\t\t}\n\n\t\tif (method === 'GET') {\n\t\t\treturn await renderFormNode(context, res, trigger, fields, mode);\n\t\t}\n\n\t\tlet useWorkflowTimezone = context.evaluateExpression(\n\t\t\t`{{ $('${trigger?.name}').params.options?.useWorkflowTimezone }}`,\n\t\t) as boolean;\n\n\t\tif (useWorkflowTimezone === undefined && trigger?.typeVersion > 2) {\n\t\t\tuseWorkflowTimezone = true;\n\t\t}\n\n\t\tconst returnItem = await prepareFormReturnItem(context, fields, mode, useWorkflowTimezone);\n\n\t\treturn {\n\t\t\twebhookResponse: { status: 200 },\n\t\t\tworkflowData: [[returnItem]],\n\t\t};\n\t}\n\n\tasync execute(context: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst operation = context.getNodeParameter('operation', 0);\n\n\t\tif (operation === 'completion') {\n\t\t\tthis.nodeInputData = context.getInputData();\n\t\t}\n\n\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\tconst hasFormTrigger = parentNodes.some((node) => node.type === FORM_TRIGGER_NODE_TYPE);\n\n\t\tif (!hasFormTrigger) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tcontext.getNode(),\n\t\t\t\t'Form Trigger node must be set before this node',\n\t\t\t);\n\t\t}\n\n\t\tconst childNodes = context.getChildNodes(context.getNode().name);\n\t\tconst hasNextPage = childNodes.some((node) => node.type === FORM_NODE_TYPE);\n\n\t\tif (operation === 'completion' && hasNextPage) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tcontext.getNode(),\n\t\t\t\t'Completion has to be the last Form node in the workflow',\n\t\t\t);\n\t\t}\n\n\t\tconst waitTill = configureWaitTillDate(context, 'root');\n\t\tawait context.putExecutionToWait(waitTill);\n\n\t\tcontext.sendResponse({\n\t\t\theaders: {\n\t\t\t\tlocation: context.evaluateExpression('{{ $execution.resumeFormUrl }}', 0),\n\t\t\t},\n\t\t\tstatusCode: 307,\n\t\t});\n\n\t\treturn [context.getInputData()];\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../nodes/Form/Form.node.ts"],"sourcesContent":["import type {\n\tFormFieldsParameter,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tINodeProperties,\n\tINodeTypeDescription,\n\tIWebhookFunctions,\n\tIWebhookResponseData,\n\tNodeTypeAndVersion,\n} from 'n8n-workflow';\nimport {\n\tNode,\n\tupdateDisplayOptions,\n\tNodeOperationError,\n\tFORM_NODE_TYPE,\n\tFORM_TRIGGER_NODE_TYPE,\n\ttryToParseJsonToFormFields,\n\tNodeConnectionTypes,\n} from 'n8n-workflow';\n\nimport { cssVariables } from './cssVariables';\nimport { renderFormCompletion } from './formCompletionUtils';\nimport { renderFormNode } from './formNodeUtils';\nimport { configureWaitTillDate } from '../../utils/sendAndWait/configureWaitTillDate.util';\nimport { limitWaitTimeProperties } from '../../utils/sendAndWait/descriptions';\nimport { formDescription, formFields, formTitle } from '../Form/common.descriptions';\nimport { prepareFormReturnItem, resolveRawData } from '../Form/utils';\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},\n\t...updateDisplayOptions(\n\t\t{\n\t\t\tshow: {\n\t\t\t\tlimitWaitTime: [true],\n\t\t\t},\n\t\t},\n\t\tlimitWaitTimeProperties,\n\t),\n];\n\nexport const formFieldsProperties: INodeProperties[] = [\n\t{\n\t\tdisplayName: 'Define Form',\n\t\tname: 'defineForm',\n\t\ttype: 'options',\n\t\tnoDataExpression: true,\n\t\toptions: [\n\t\t\t{\n\t\t\t\tname: 'Using Fields Below',\n\t\t\t\tvalue: 'fields',\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Using JSON',\n\t\t\t\tvalue: 'json',\n\t\t\t},\n\t\t],\n\t\tdefault: 'fields',\n\t},\n\t{\n\t\tdisplayName: 'Form Fields',\n\t\tname: 'jsonOutput',\n\t\ttype: 'json',\n\t\ttypeOptions: {\n\t\t\trows: 5,\n\t\t},\n\t\tdefault:\n\t\t\t'[\\n {\\n \"fieldLabel\":\"Name\",\\n \"placeholder\":\"enter you name\",\\n \"requiredField\":true\\n },\\n {\\n \"fieldLabel\":\"Age\",\\n \"fieldType\":\"number\",\\n \"placeholder\":\"enter your age\"\\n },\\n {\\n \"fieldLabel\":\"Email\",\\n \"fieldType\":\"email\",\\n \"requiredField\":true\\n }\\n]',\n\t\tvalidateType: 'form-fields',\n\t\tignoreValidationDuringExecution: true,\n\t\thint: '<a href=\"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.form/\" target=\"_blank\">See docs</a> for field syntax',\n\t\tdisplayOptions: {\n\t\t\tshow: {\n\t\t\t\tdefineForm: ['json'],\n\t\t\t},\n\t\t},\n\t},\n\t{ ...formFields, displayOptions: { show: { defineForm: ['fields'] } } },\n];\n\nconst pageProperties = updateDisplayOptions(\n\t{\n\t\tshow: {\n\t\t\toperation: ['page'],\n\t\t},\n\t},\n\t[\n\t\t...formFieldsProperties,\n\t\t...waitTimeProperties,\n\t\t{\n\t\t\tdisplayName: 'Options',\n\t\t\tname: 'options',\n\t\t\ttype: 'collection',\n\t\t\tplaceholder: 'Add option',\n\t\t\tdefault: {},\n\t\t\toptions: [\n\t\t\t\t{ ...formTitle, required: false },\n\t\t\t\tformDescription,\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Button Label',\n\t\t\t\t\tname: 'buttonLabel',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: 'Submit',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Custom Form Styling',\n\t\t\t\t\tname: 'customCss',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\trows: 10,\n\t\t\t\t\t\teditor: 'cssEditor',\n\t\t\t\t\t},\n\t\t\t\t\tdefault: cssVariables.trim(),\n\t\t\t\t\tdescription: 'Override default styling of the public form interface with CSS',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n);\n\nconst completionProperties = updateDisplayOptions(\n\t{\n\t\tshow: {\n\t\t\toperation: ['completion'],\n\t\t},\n\t},\n\t[\n\t\t{\n\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\tdisplayName: 'On n8n Form Submission',\n\t\t\tname: 'respondWith',\n\t\t\ttype: 'options',\n\t\t\tdefault: 'text',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Show Completion Screen',\n\t\t\t\t\tvalue: 'text',\n\t\t\t\t\tdescription: 'Show a response text to the user',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Redirect to URL',\n\t\t\t\t\tvalue: 'redirect',\n\t\t\t\t\tdescription: 'Redirect the user to a URL',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Show Text',\n\t\t\t\t\tvalue: 'showText',\n\t\t\t\t\tdescription: 'Display simple text or HTML',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Return Binary File',\n\t\t\t\t\tvalue: 'returnBinary',\n\t\t\t\t\tdescription: 'Return incoming binary file',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'URL',\n\t\t\tname: 'redirectUrl',\n\t\t\tvalidateType: 'url',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['redirect'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Completion Title',\n\t\t\tname: 'completionTitle',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['text', 'returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Completion Message',\n\t\t\tname: 'completionMessage',\n\t\t\ttype: 'string',\n\t\t\tdefault: '',\n\t\t\ttypeOptions: {\n\t\t\t\trows: 2,\n\t\t\t},\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['text', 'returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Text',\n\t\t\tname: 'responseText',\n\t\t\ttype: 'string',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['showText'],\n\t\t\t\t},\n\t\t\t},\n\t\t\ttypeOptions: {\n\t\t\t\trows: 2,\n\t\t\t},\n\t\t\tdefault: '',\n\t\t\tplaceholder: 'e.g. Thanks for filling the form',\n\t\t\tdescription: 'The text to display on the page. Use HTML to show a customized web page.',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Input Data Field Name',\n\t\t\tname: 'inputDataFieldName',\n\t\t\ttype: 'string',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdefault: 'data',\n\t\t\tplaceholder: 'e.g. data',\n\t\t\tdescription:\n\t\t\t\t'Find the name of input field containing the binary data to return in the Input panel on the left, in the Binary tab',\n\t\t\thint: 'The name of the input field containing the binary file data to be returned',\n\t\t},\n\t\t...waitTimeProperties,\n\t\t{\n\t\t\tdisplayName: 'Options',\n\t\t\tname: 'options',\n\t\t\ttype: 'collection',\n\t\t\tplaceholder: 'Add option',\n\t\t\tdefault: {},\n\t\t\toptions: [\n\t\t\t\t{ ...formTitle, required: false, displayName: 'Completion Page Title' },\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Custom Form Styling',\n\t\t\t\t\tname: 'customCss',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\trows: 10,\n\t\t\t\t\t\teditor: 'cssEditor',\n\t\t\t\t\t},\n\t\t\t\t\tdefault: cssVariables.trim(),\n\t\t\t\t\tdescription: 'Override default styling of the public form interface with CSS',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\trespondWith: ['text', 'returnBinary'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n);\n\nexport class Form extends Node {\n\tnodeInputData: INodeExecutionData[] = [];\n\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'n8n Form',\n\t\tname: 'form',\n\t\ticon: 'file:form.svg',\n\t\tgroup: ['input'],\n\t\tversion: 1,\n\t\tdescription: 'Generate webforms in n8n and pass their responses to the workflow',\n\t\tdefaults: {\n\t\t\tname: 'Form',\n\t\t},\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\twebhooks: [\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: '',\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: 'responseNode',\n\t\t\t\tpath: '',\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\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\t\tdisplayName: 'An n8n Form Trigger node must be set up before this node',\n\t\t\t\tname: 'triggerNotice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Page Type',\n\t\t\t\tname: 'operation',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: 'page',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Next Form Page',\n\t\t\t\t\t\tvalue: 'page',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Form Ending',\n\t\t\t\t\t\tvalue: 'completion',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t...pageProperties,\n\t\t\t...completionProperties,\n\t\t],\n\t};\n\n\tasync webhook(context: IWebhookFunctions): Promise<IWebhookResponseData> {\n\t\tconst res = context.getResponseObject();\n\n\t\tconst operation = context.getNodeParameter('operation', '') as string;\n\n\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\tconst trigger = parentNodes.find(\n\t\t\t(node) => node.type === 'n8n-nodes-base.formTrigger',\n\t\t) as NodeTypeAndVersion;\n\n\t\tconst mode = context.evaluateExpression(`{{ $('${trigger?.name}').first().json.formMode }}`) as\n\t\t\t| 'test'\n\t\t\t| 'production';\n\n\t\tconst defineForm = context.getNodeParameter('defineForm', false) as string;\n\n\t\tlet fields: FormFieldsParameter = [];\n\t\tif (defineForm === 'json') {\n\t\t\ttry {\n\t\t\t\tconst jsonOutput = context.getNodeParameter('jsonOutput', '', {\n\t\t\t\t\trawExpressions: true,\n\t\t\t\t}) as string;\n\n\t\t\t\tfields = tryToParseJsonToFormFields(resolveRawData(context, jsonOutput));\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeOperationError(context.getNode(), error.message, {\n\t\t\t\t\tdescription: error.message,\n\t\t\t\t\ttype: mode === 'test' ? 'manual-form-test' : undefined,\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tfields = context.getNodeParameter('formFields.values', []) as FormFieldsParameter;\n\t\t}\n\n\t\tconst method = context.getRequestObject().method;\n\n\t\tif (operation === 'completion' && method === 'GET') {\n\t\t\treturn await renderFormCompletion(context, res, trigger);\n\t\t}\n\n\t\tif (operation === 'completion' && method === 'POST') {\n\t\t\treturn {\n\t\t\t\tworkflowData: [context.evaluateExpression('{{ $input.all() }}') as INodeExecutionData[]],\n\t\t\t};\n\t\t}\n\n\t\tif (method === 'GET') {\n\t\t\treturn await renderFormNode(context, res, trigger, fields, mode);\n\t\t}\n\n\t\tlet useWorkflowTimezone = context.evaluateExpression(\n\t\t\t`{{ $('${trigger?.name}').params.options?.useWorkflowTimezone }}`,\n\t\t) as boolean;\n\n\t\tif (useWorkflowTimezone === undefined && trigger?.typeVersion > 2) {\n\t\t\tuseWorkflowTimezone = true;\n\t\t}\n\n\t\tconst returnItem = await prepareFormReturnItem(context, fields, mode, useWorkflowTimezone);\n\n\t\treturn {\n\t\t\twebhookResponse: { status: 200 },\n\t\t\tworkflowData: [[returnItem]],\n\t\t};\n\t}\n\n\tasync execute(context: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst operation = context.getNodeParameter('operation', 0);\n\n\t\tif (operation === 'completion') {\n\t\t\tthis.nodeInputData = context.getInputData();\n\t\t}\n\n\t\tconst parentNodes = context.getParentNodes(context.getNode().name);\n\t\tconst hasFormTrigger = parentNodes.some((node) => node.type === FORM_TRIGGER_NODE_TYPE);\n\n\t\tif (!hasFormTrigger) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tcontext.getNode(),\n\t\t\t\t'Form Trigger node must be set before this node',\n\t\t\t);\n\t\t}\n\n\t\tconst childNodes = context.getChildNodes(context.getNode().name);\n\t\tconst hasNextPage = childNodes.some((node) => node.type === FORM_NODE_TYPE);\n\n\t\tif (operation === 'completion' && hasNextPage) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tcontext.getNode(),\n\t\t\t\t'Completion has to be the last Form node in the workflow',\n\t\t\t);\n\t\t}\n\n\t\tconst waitTill = configureWaitTillDate(context, 'root');\n\t\tawait context.putExecutionToWait(waitTill);\n\n\t\tcontext.sendResponse({\n\t\t\theaders: {\n\t\t\t\tlocation: context.evaluateExpression('{{ $execution.resumeFormUrl }}', 0),\n\t\t\t},\n\t\t\tstatusCode: 307,\n\t\t});\n\n\t\treturn [context.getInputData()];\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -53,7 +53,7 @@ const descriptionV2 = {
53
53
  isFullPath: true,
54
54
  path: '={{ $parameter["path"] || $parameter["options"]?.path || $webhookId }}',
55
55
  ndvHideUrl: true,
56
- isForm: true
56
+ nodeType: "form"
57
57
  },
58
58
  {
59
59
  name: "default",
@@ -63,7 +63,7 @@ const descriptionV2 = {
63
63
  isFullPath: true,
64
64
  path: '={{ $parameter["path"] || $parameter["options"]?.path || $webhookId }}',
65
65
  ndvHideMethod: true,
66
- isForm: true
66
+ nodeType: "form"
67
67
  }
68
68
  ],
69
69
  eventTriggerDescription: "Waiting for you to submit the form",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../nodes/Form/v2/FormTriggerV2.node.ts"],"sourcesContent":["import {\n\tADD_FORM_NOTICE,\n\ttype INodePropertyOptions,\n\tNodeConnectionTypes,\n\ttype INodeProperties,\n\ttype INodeType,\n\ttype INodeTypeBaseDescription,\n\ttype INodeTypeDescription,\n\ttype IWebhookFunctions,\n} from 'n8n-workflow';\n\nimport {\n\tappendAttributionToForm,\n\tformDescription,\n\tformFields,\n\tformRespondMode,\n\tformTitle,\n\tformTriggerPanel,\n\trespondWithOptions,\n\twebhookPath,\n} from '../common.descriptions';\nimport { cssVariables } from '../cssVariables';\nimport { FORM_TRIGGER_AUTHENTICATION_PROPERTY } from '../interfaces';\nimport { formWebhook } from '../utils';\n\nconst useWorkflowTimezone: INodeProperties = {\n\tdisplayName: 'Use Workflow Timezone',\n\tname: 'useWorkflowTimezone',\n\ttype: 'boolean',\n\tdefault: false,\n\tdescription: \"Whether to use the workflow timezone set in node's settings rather than UTC\",\n};\n\nconst descriptionV2: INodeTypeDescription = {\n\tdisplayName: 'n8n Form Trigger',\n\tname: 'formTrigger',\n\ticon: 'file:form.svg',\n\tgroup: ['trigger'],\n\tversion: [2, 2.1, 2.2],\n\tdescription: 'Generate webforms in n8n and pass their responses to the workflow',\n\tdefaults: {\n\t\tname: 'On form submission',\n\t},\n\n\tinputs: [],\n\toutputs: [NodeConnectionTypes.Main],\n\twebhooks: [\n\t\t{\n\t\t\tname: 'setup',\n\t\t\thttpMethod: 'GET',\n\t\t\tresponseMode: 'onReceived',\n\t\t\tisFullPath: true,\n\t\t\tpath: '={{ $parameter[\"path\"] || $parameter[\"options\"]?.path || $webhookId }}',\n\t\t\tndvHideUrl: true,\n\t\t\tisForm: true,\n\t\t},\n\t\t{\n\t\t\tname: 'default',\n\t\t\thttpMethod: 'POST',\n\t\t\tresponseMode: '={{$parameter[\"responseMode\"]}}',\n\t\t\tresponseData: '={{$parameter[\"responseMode\"] === \"lastNode\" ? \"noData\" : undefined}}',\n\t\t\tisFullPath: true,\n\t\t\tpath: '={{ $parameter[\"path\"] || $parameter[\"options\"]?.path || $webhookId }}',\n\t\t\tndvHideMethod: true,\n\t\t\tisForm: true,\n\t\t},\n\t],\n\teventTriggerDescription: 'Waiting for you to submit the form',\n\tactivationMessage: 'You can now make calls to your production Form URL.',\n\ttriggerPanel: formTriggerPanel,\n\tcredentials: [\n\t\t{\n\t\t\t// eslint-disable-next-line n8n-nodes-base/node-class-description-credentials-name-unsuffixed\n\t\t\tname: 'httpBasicAuth',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\t[FORM_TRIGGER_AUTHENTICATION_PROPERTY]: ['basicAuth'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n\tproperties: [\n\t\t{\n\t\t\tdisplayName: 'Authentication',\n\t\t\tname: FORM_TRIGGER_AUTHENTICATION_PROPERTY,\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Basic Auth',\n\t\t\t\t\tvalue: 'basicAuth',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'None',\n\t\t\t\t\tvalue: 'none',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'none',\n\t\t},\n\t\t{ ...webhookPath, displayOptions: { show: { '@version': [{ _cnd: { lte: 2.1 } }] } } },\n\t\tformTitle,\n\t\tformDescription,\n\t\tformFields,\n\t\t{ ...formRespondMode, displayOptions: { show: { '@version': [{ _cnd: { lte: 2.1 } }] } } },\n\t\t{\n\t\t\t...formRespondMode,\n\t\t\toptions: (formRespondMode.options as INodePropertyOptions[])?.filter(\n\t\t\t\t(option) => option.value !== 'responseNode',\n\t\t\t),\n\t\t\tdisplayOptions: { show: { '@version': [{ _cnd: { gte: 2.2 } }] } },\n\t\t},\n\t\t{\n\t\t\tdisplayName:\n\t\t\t\t\"In the 'Respond to Webhook' node, select 'Respond With JSON' and set the <strong>formSubmittedText</strong> key to display a custom response in the form, or the <strong>redirectURL</strong> key to redirect users to a URL\",\n\t\t\tname: 'formNotice',\n\t\t\ttype: 'notice',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: { responseMode: ['responseNode'] },\n\t\t\t},\n\t\t\tdefault: '',\n\t\t},\n\t\t// notice would be shown if no Form node was connected to trigger\n\t\t{\n\t\t\tdisplayName: 'Build multi-step forms by adding a form page later in your workflow',\n\t\t\tname: ADD_FORM_NOTICE,\n\t\t\ttype: 'notice',\n\t\t\tdefault: '',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Options',\n\t\t\tname: 'options',\n\t\t\ttype: 'collection',\n\t\t\tplaceholder: 'Add option',\n\t\t\tdefault: {},\n\t\t\toptions: [\n\t\t\t\tappendAttributionToForm,\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Button Label',\n\t\t\t\t\tdescription: 'The label of the submit button in the form',\n\t\t\t\t\tname: 'buttonLabel',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: 'Submit',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...webhookPath,\n\t\t\t\t\trequired: false,\n\t\t\t\t\tdisplayOptions: { show: { '@version': [{ _cnd: { gte: 2.2 } }] } },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...respondWithOptions,\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\thide: {\n\t\t\t\t\t\t\t'/responseMode': ['responseNode'],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Ignore Bots',\n\t\t\t\t\tname: 'ignoreBots',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: 'Whether to ignore requests from bots like link previewers and web crawlers',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...useWorkflowTimezone,\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Whether to use the workflow timezone in 'submittedAt' field or UTC\",\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t'@version': [2],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...useWorkflowTimezone,\n\t\t\t\t\tdefault: true,\n\t\t\t\t\tdescription: \"Whether to use the workflow timezone in 'submittedAt' field or UTC\",\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t'@version': [{ _cnd: { gt: 2 } }],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Custom Form Styling',\n\t\t\t\t\tname: 'customCss',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\trows: 10,\n\t\t\t\t\t\teditor: 'cssEditor',\n\t\t\t\t\t},\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t'@version': [{ _cnd: { gt: 2 } }],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tdefault: cssVariables.trim(),\n\t\t\t\t\tdescription: 'Override default styling of the public form interface with CSS',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n};\n\nexport class FormTriggerV2 implements INodeType {\n\tdescription: INodeTypeDescription;\n\n\tconstructor(baseDescription: INodeTypeBaseDescription) {\n\t\tthis.description = {\n\t\t\t...baseDescription,\n\t\t\t...descriptionV2,\n\t\t};\n\t}\n\n\tasync webhook(this: IWebhookFunctions) {\n\t\treturn await formWebhook(this);\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../nodes/Form/v2/FormTriggerV2.node.ts"],"sourcesContent":["import {\n\tADD_FORM_NOTICE,\n\ttype INodePropertyOptions,\n\tNodeConnectionTypes,\n\ttype INodeProperties,\n\ttype INodeType,\n\ttype INodeTypeBaseDescription,\n\ttype INodeTypeDescription,\n\ttype IWebhookFunctions,\n} from 'n8n-workflow';\n\nimport {\n\tappendAttributionToForm,\n\tformDescription,\n\tformFields,\n\tformRespondMode,\n\tformTitle,\n\tformTriggerPanel,\n\trespondWithOptions,\n\twebhookPath,\n} from '../common.descriptions';\nimport { cssVariables } from '../cssVariables';\nimport { FORM_TRIGGER_AUTHENTICATION_PROPERTY } from '../interfaces';\nimport { formWebhook } from '../utils';\n\nconst useWorkflowTimezone: INodeProperties = {\n\tdisplayName: 'Use Workflow Timezone',\n\tname: 'useWorkflowTimezone',\n\ttype: 'boolean',\n\tdefault: false,\n\tdescription: \"Whether to use the workflow timezone set in node's settings rather than UTC\",\n};\n\nconst descriptionV2: INodeTypeDescription = {\n\tdisplayName: 'n8n Form Trigger',\n\tname: 'formTrigger',\n\ticon: 'file:form.svg',\n\tgroup: ['trigger'],\n\tversion: [2, 2.1, 2.2],\n\tdescription: 'Generate webforms in n8n and pass their responses to the workflow',\n\tdefaults: {\n\t\tname: 'On form submission',\n\t},\n\n\tinputs: [],\n\toutputs: [NodeConnectionTypes.Main],\n\twebhooks: [\n\t\t{\n\t\t\tname: 'setup',\n\t\t\thttpMethod: 'GET',\n\t\t\tresponseMode: 'onReceived',\n\t\t\tisFullPath: true,\n\t\t\tpath: '={{ $parameter[\"path\"] || $parameter[\"options\"]?.path || $webhookId }}',\n\t\t\tndvHideUrl: true,\n\t\t\tnodeType: 'form',\n\t\t},\n\t\t{\n\t\t\tname: 'default',\n\t\t\thttpMethod: 'POST',\n\t\t\tresponseMode: '={{$parameter[\"responseMode\"]}}',\n\t\t\tresponseData: '={{$parameter[\"responseMode\"] === \"lastNode\" ? \"noData\" : undefined}}',\n\t\t\tisFullPath: true,\n\t\t\tpath: '={{ $parameter[\"path\"] || $parameter[\"options\"]?.path || $webhookId }}',\n\t\t\tndvHideMethod: true,\n\t\t\tnodeType: 'form',\n\t\t},\n\t],\n\teventTriggerDescription: 'Waiting for you to submit the form',\n\tactivationMessage: 'You can now make calls to your production Form URL.',\n\ttriggerPanel: formTriggerPanel,\n\tcredentials: [\n\t\t{\n\t\t\t// eslint-disable-next-line n8n-nodes-base/node-class-description-credentials-name-unsuffixed\n\t\t\tname: 'httpBasicAuth',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\t[FORM_TRIGGER_AUTHENTICATION_PROPERTY]: ['basicAuth'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n\tproperties: [\n\t\t{\n\t\t\tdisplayName: 'Authentication',\n\t\t\tname: FORM_TRIGGER_AUTHENTICATION_PROPERTY,\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Basic Auth',\n\t\t\t\t\tvalue: 'basicAuth',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'None',\n\t\t\t\t\tvalue: 'none',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'none',\n\t\t},\n\t\t{ ...webhookPath, displayOptions: { show: { '@version': [{ _cnd: { lte: 2.1 } }] } } },\n\t\tformTitle,\n\t\tformDescription,\n\t\tformFields,\n\t\t{ ...formRespondMode, displayOptions: { show: { '@version': [{ _cnd: { lte: 2.1 } }] } } },\n\t\t{\n\t\t\t...formRespondMode,\n\t\t\toptions: (formRespondMode.options as INodePropertyOptions[])?.filter(\n\t\t\t\t(option) => option.value !== 'responseNode',\n\t\t\t),\n\t\t\tdisplayOptions: { show: { '@version': [{ _cnd: { gte: 2.2 } }] } },\n\t\t},\n\t\t{\n\t\t\tdisplayName:\n\t\t\t\t\"In the 'Respond to Webhook' node, select 'Respond With JSON' and set the <strong>formSubmittedText</strong> key to display a custom response in the form, or the <strong>redirectURL</strong> key to redirect users to a URL\",\n\t\t\tname: 'formNotice',\n\t\t\ttype: 'notice',\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: { responseMode: ['responseNode'] },\n\t\t\t},\n\t\t\tdefault: '',\n\t\t},\n\t\t// notice would be shown if no Form node was connected to trigger\n\t\t{\n\t\t\tdisplayName: 'Build multi-step forms by adding a form page later in your workflow',\n\t\t\tname: ADD_FORM_NOTICE,\n\t\t\ttype: 'notice',\n\t\t\tdefault: '',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Options',\n\t\t\tname: 'options',\n\t\t\ttype: 'collection',\n\t\t\tplaceholder: 'Add option',\n\t\t\tdefault: {},\n\t\t\toptions: [\n\t\t\t\tappendAttributionToForm,\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Button Label',\n\t\t\t\t\tdescription: 'The label of the submit button in the form',\n\t\t\t\t\tname: 'buttonLabel',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: 'Submit',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...webhookPath,\n\t\t\t\t\trequired: false,\n\t\t\t\t\tdisplayOptions: { show: { '@version': [{ _cnd: { gte: 2.2 } }] } },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...respondWithOptions,\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\thide: {\n\t\t\t\t\t\t\t'/responseMode': ['responseNode'],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Ignore Bots',\n\t\t\t\t\tname: 'ignoreBots',\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: 'Whether to ignore requests from bots like link previewers and web crawlers',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...useWorkflowTimezone,\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tdescription: \"Whether to use the workflow timezone in 'submittedAt' field or UTC\",\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t'@version': [2],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...useWorkflowTimezone,\n\t\t\t\t\tdefault: true,\n\t\t\t\t\tdescription: \"Whether to use the workflow timezone in 'submittedAt' field or UTC\",\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t'@version': [{ _cnd: { gt: 2 } }],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Custom Form Styling',\n\t\t\t\t\tname: 'customCss',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\trows: 10,\n\t\t\t\t\t\teditor: 'cssEditor',\n\t\t\t\t\t},\n\t\t\t\t\tdisplayOptions: {\n\t\t\t\t\t\tshow: {\n\t\t\t\t\t\t\t'@version': [{ _cnd: { gt: 2 } }],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tdefault: cssVariables.trim(),\n\t\t\t\t\tdescription: 'Override default styling of the public form interface with CSS',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n};\n\nexport class FormTriggerV2 implements INodeType {\n\tdescription: INodeTypeDescription;\n\n\tconstructor(baseDescription: INodeTypeBaseDescription) {\n\t\tthis.description = {\n\t\t\t...baseDescription,\n\t\t\t...descriptionV2,\n\t\t};\n\t}\n\n\tasync webhook(this: IWebhookFunctions) {\n\t\treturn await formWebhook(this);\n\t}\n}\n"],"mappings":"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","names":[]}