n8n-nodes-base 1.92.0 → 1.93.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 (189) hide show
  1. package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js +0 -9
  2. package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js.map +1 -1
  3. package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js +13 -0
  4. package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js.map +1 -1
  5. package/dist/credentials/Snowflake.credentials.js +46 -2
  6. package/dist/credentials/Snowflake.credentials.js.map +1 -1
  7. package/dist/known/credentials.json +10 -1
  8. package/dist/known/nodes.json +20 -0
  9. package/dist/methods/defined.json +6 -0
  10. package/dist/methods/referenced.json +3 -0
  11. package/dist/nodes/Aws/IAM/AwsIam.node.js +95 -0
  12. package/dist/nodes/Aws/IAM/AwsIam.node.js.map +1 -0
  13. package/dist/nodes/Aws/IAM/AwsIam.node.json +18 -0
  14. package/dist/nodes/Aws/IAM/AwsIam.svg +18 -0
  15. package/dist/nodes/Aws/IAM/descriptions/common.js +188 -0
  16. package/dist/nodes/Aws/IAM/descriptions/common.js.map +1 -0
  17. package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js +175 -0
  18. package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js.map +1 -0
  19. package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js +66 -0
  20. package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js.map +1 -0
  21. package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js +43 -0
  22. package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js.map +1 -0
  23. package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js +50 -0
  24. package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js.map +1 -0
  25. package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js +47 -0
  26. package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js.map +1 -0
  27. package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js +70 -0
  28. package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js.map +1 -0
  29. package/dist/nodes/Aws/IAM/descriptions/index.js +42 -0
  30. package/dist/nodes/Aws/IAM/descriptions/index.js.map +1 -0
  31. package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js +231 -0
  32. package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js.map +1 -0
  33. package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js +47 -0
  34. package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js.map +1 -0
  35. package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js +118 -0
  36. package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js.map +1 -0
  37. package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js +43 -0
  38. package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js.map +1 -0
  39. package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js +43 -0
  40. package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js.map +1 -0
  41. package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js +66 -0
  42. package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js.map +1 -0
  43. package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js +74 -0
  44. package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js.map +1 -0
  45. package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js +68 -0
  46. package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js.map +1 -0
  47. package/dist/nodes/Aws/IAM/helpers/constants.js +47 -0
  48. package/dist/nodes/Aws/IAM/helpers/constants.js.map +1 -0
  49. package/dist/nodes/Aws/IAM/helpers/errorHandler.js +90 -0
  50. package/dist/nodes/Aws/IAM/helpers/errorHandler.js.map +1 -0
  51. package/dist/nodes/Aws/IAM/helpers/types.js +17 -0
  52. package/dist/nodes/Aws/IAM/helpers/types.js.map +1 -0
  53. package/dist/nodes/Aws/IAM/helpers/utils.js +279 -0
  54. package/dist/nodes/Aws/IAM/helpers/utils.js.map +1 -0
  55. package/dist/nodes/Aws/IAM/methods/index.js +39 -0
  56. package/dist/nodes/Aws/IAM/methods/index.js.map +1 -0
  57. package/dist/nodes/Aws/IAM/methods/listSearch.js +132 -0
  58. package/dist/nodes/Aws/IAM/methods/listSearch.js.map +1 -0
  59. package/dist/nodes/Aws/IAM/transport/index.js +64 -0
  60. package/dist/nodes/Aws/IAM/transport/index.js.map +1 -0
  61. package/dist/nodes/Cron/Cron.node.js +1 -1
  62. package/dist/nodes/Cron/Cron.node.js.map +1 -1
  63. package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js +2 -2
  64. package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js.map +1 -1
  65. package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js +2 -2
  66. package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js.map +1 -1
  67. package/dist/nodes/Evaluation/Evaluation/Description.node.js +146 -0
  68. package/dist/nodes/Evaluation/Evaluation/Description.node.js.map +1 -0
  69. package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js +117 -0
  70. package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js.map +1 -0
  71. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js +187 -0
  72. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js.map +1 -0
  73. package/dist/nodes/Evaluation/methods/index.js +42 -0
  74. package/dist/nodes/Evaluation/methods/index.js.map +1 -0
  75. package/dist/nodes/Evaluation/methods/loadOptions.js +40 -0
  76. package/dist/nodes/Evaluation/methods/loadOptions.js.map +1 -0
  77. package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js +119 -0
  78. package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js.map +1 -0
  79. package/dist/nodes/Evaluation/utils/evaluationUtils.js +171 -0
  80. package/dist/nodes/Evaluation/utils/evaluationUtils.js.map +1 -0
  81. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js +4 -3
  82. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js.map +1 -1
  83. package/dist/nodes/Form/common.descriptions.js +2 -2
  84. package/dist/nodes/Form/common.descriptions.js.map +1 -1
  85. package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js +113 -107
  86. package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js.map +1 -1
  87. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js +52 -106
  88. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js.map +1 -1
  89. package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js +97 -0
  90. package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js.map +1 -0
  91. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js +20 -17
  92. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js.map +1 -1
  93. package/dist/nodes/Google/YouTube/YouTube.node.js +4 -2
  94. package/dist/nodes/Google/YouTube/YouTube.node.js.map +1 -1
  95. package/dist/nodes/Interval/Interval.node.js +1 -1
  96. package/dist/nodes/Interval/Interval.node.js.map +1 -1
  97. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js +2 -2
  98. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js.map +1 -1
  99. package/dist/nodes/MQTT/MqttTrigger.node.js +2 -2
  100. package/dist/nodes/MQTT/MqttTrigger.node.js.map +1 -1
  101. package/dist/nodes/ManualTrigger/ManualTrigger.node.js +1 -1
  102. package/dist/nodes/ManualTrigger/ManualTrigger.node.js.map +1 -1
  103. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js +93 -0
  104. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js.map +1 -0
  105. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharepoint.node.json +18 -0
  106. package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js +190 -0
  107. package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js.map +1 -0
  108. package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js +108 -0
  109. package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js.map +1 -0
  110. package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js +62 -0
  111. package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js.map +1 -0
  112. package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js +129 -0
  113. package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js.map +1 -0
  114. package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js +77 -0
  115. package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js.map +1 -0
  116. package/dist/nodes/Microsoft/SharePoint/descriptions/index.js +45 -0
  117. package/dist/nodes/Microsoft/SharePoint/descriptions/index.js.map +1 -0
  118. package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js +175 -0
  119. package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js.map +1 -0
  120. package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js +100 -0
  121. package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js.map +1 -0
  122. package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js +62 -0
  123. package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js.map +1 -0
  124. package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js +83 -0
  125. package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js.map +1 -0
  126. package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js +203 -0
  127. package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js.map +1 -0
  128. package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js +100 -0
  129. package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js.map +1 -0
  130. package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js +100 -0
  131. package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js.map +1 -0
  132. package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js +99 -0
  133. package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js.map +1 -0
  134. package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js +65 -0
  135. package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js.map +1 -0
  136. package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js +105 -0
  137. package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js.map +1 -0
  138. package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js +17 -0
  139. package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js.map +1 -0
  140. package/dist/nodes/Microsoft/SharePoint/helpers/utils.js +252 -0
  141. package/dist/nodes/Microsoft/SharePoint/helpers/utils.js.map +1 -0
  142. package/dist/nodes/Microsoft/SharePoint/methods/index.js +42 -0
  143. package/dist/nodes/Microsoft/SharePoint/methods/index.js.map +1 -0
  144. package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js +222 -0
  145. package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js.map +1 -0
  146. package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js +104 -0
  147. package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js.map +1 -0
  148. package/dist/nodes/Microsoft/SharePoint/test/credentials.js +54 -0
  149. package/dist/nodes/Microsoft/SharePoint/test/credentials.js.map +1 -0
  150. package/dist/nodes/Microsoft/SharePoint/transport/index.js +46 -0
  151. package/dist/nodes/Microsoft/SharePoint/transport/index.js.map +1 -0
  152. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js +387 -0
  153. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js.map +1 -0
  154. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.json +18 -0
  155. package/dist/nodes/Microsoft/Teams/v2/helpers/types.js +17 -0
  156. package/dist/nodes/Microsoft/Teams/v2/helpers/types.js.map +1 -0
  157. package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js +147 -0
  158. package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js.map +1 -0
  159. package/dist/nodes/Microsoft/Teams/v2/transport/index.js.map +1 -1
  160. package/dist/nodes/PostBin/BinDescription.js +1 -1
  161. package/dist/nodes/PostBin/BinDescription.js.map +1 -1
  162. package/dist/nodes/PostBin/GenericFunctions.js +5 -5
  163. package/dist/nodes/PostBin/GenericFunctions.js.map +1 -1
  164. package/dist/nodes/PostBin/PostBin.node.js +1 -1
  165. package/dist/nodes/PostBin/PostBin.node.js.map +1 -1
  166. package/dist/nodes/PostBin/RequestDescription.js +2 -2
  167. package/dist/nodes/PostBin/RequestDescription.js.map +1 -1
  168. package/dist/nodes/Postgres/PostgresTrigger.node.js +2 -2
  169. package/dist/nodes/Postgres/PostgresTrigger.node.js.map +1 -1
  170. package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js +2 -2
  171. package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js.map +1 -1
  172. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js +8 -3
  173. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js.map +1 -1
  174. package/dist/nodes/RespondToWebhook/utils.js +43 -0
  175. package/dist/nodes/RespondToWebhook/utils.js.map +1 -0
  176. package/dist/nodes/Schedule/ScheduleTrigger.node.js +1 -1
  177. package/dist/nodes/Schedule/ScheduleTrigger.node.js.map +1 -1
  178. package/dist/nodes/Snowflake/GenericFunctions.js +34 -2
  179. package/dist/nodes/Snowflake/GenericFunctions.js.map +1 -1
  180. package/dist/nodes/Snowflake/Snowflake.node.js +5 -7
  181. package/dist/nodes/Snowflake/Snowflake.node.js.map +1 -1
  182. package/dist/nodes/SseTrigger/SseTrigger.node.js +2 -2
  183. package/dist/nodes/SseTrigger/SseTrigger.node.js.map +1 -1
  184. package/dist/types/credentials.json +6 -6
  185. package/dist/types/nodes.json +22 -17
  186. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js +12 -2
  187. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js.map +1 -1
  188. package/package.json +13 -9
  189. /package/dist/{credentials/icons/SharePoint.svg → nodes/Microsoft/SharePoint/microsoftSharePoint.svg} +0 -0
@@ -0,0 +1,97 @@
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 readOperation_exports = {};
20
+ __export(readOperation_exports, {
21
+ readSheet: () => readSheet
22
+ });
23
+ module.exports = __toCommonJS(readOperation_exports);
24
+ var import_GoogleSheets = require("../../helpers/GoogleSheets.utils");
25
+ async function readSheet(sheet, sheetName, itemIndex, returnData, nodeVersion, items, rangeString, additionalOptions) {
26
+ const options = this.getNodeParameter("options", itemIndex, {});
27
+ const outputFormattingOption = options.outputFormatting?.values || {};
28
+ const dataLocationOnSheetOptions = options.dataLocationOnSheet?.values || additionalOptions || {};
29
+ if (dataLocationOnSheetOptions.rangeDefinition === void 0) {
30
+ dataLocationOnSheetOptions.rangeDefinition = "detectAutomatically";
31
+ }
32
+ const range = rangeString ?? (0, import_GoogleSheets.getRangeString)(sheetName, dataLocationOnSheetOptions);
33
+ const valueRenderMode = outputFormattingOption.general || "UNFORMATTED_VALUE";
34
+ const dateTimeRenderOption = outputFormattingOption.date || "FORMATTED_STRING";
35
+ const sheetData = await sheet.getData(
36
+ range,
37
+ valueRenderMode,
38
+ dateTimeRenderOption
39
+ );
40
+ if (sheetData === void 0 || sheetData.length === 0) {
41
+ return [];
42
+ }
43
+ const {
44
+ data,
45
+ headerRow: keyRowIndex,
46
+ firstDataRow: dataStartRowIndex
47
+ } = (0, import_GoogleSheets.prepareSheetData)(sheetData, dataLocationOnSheetOptions);
48
+ let responseData = [];
49
+ const lookupValues = this.getNodeParameter("filtersUI.values", itemIndex, []);
50
+ const inputData = data;
51
+ if (lookupValues.length) {
52
+ let returnAllMatches;
53
+ if (nodeVersion < 4.5) {
54
+ returnAllMatches = options.returnAllMatches === "returnAllMatches" ? true : false;
55
+ } else {
56
+ returnAllMatches = additionalOptions?.returnFirstMatch ?? options.returnFirstMatch ? false : true;
57
+ }
58
+ if (nodeVersion <= 4.1) {
59
+ for (let i = 1; i < items.length; i++) {
60
+ const itemLookupValues = this.getNodeParameter(
61
+ "filtersUI.values",
62
+ i,
63
+ []
64
+ );
65
+ if (itemLookupValues.length) {
66
+ lookupValues.push(...itemLookupValues);
67
+ }
68
+ }
69
+ }
70
+ const combineFilters = this.getNodeParameter("combineFilters", itemIndex, "OR");
71
+ responseData = await sheet.lookupValues({
72
+ inputData,
73
+ keyRowIndex,
74
+ dataStartRowIndex,
75
+ lookupValues,
76
+ returnAllMatches,
77
+ nodeVersion,
78
+ combineFilters
79
+ });
80
+ } else {
81
+ responseData = sheet.structureArrayDataByColumn(inputData, keyRowIndex, dataStartRowIndex);
82
+ }
83
+ returnData.push(
84
+ ...responseData.map((item) => {
85
+ return {
86
+ json: item,
87
+ pairedItem: { item: itemIndex }
88
+ };
89
+ })
90
+ );
91
+ return returnData;
92
+ }
93
+ // Annotate the CommonJS export names for ESM import in node:
94
+ 0 && (module.exports = {
95
+ readSheet
96
+ });
97
+ //# sourceMappingURL=readOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../nodes/Google/Sheet/v2/actions/utils/readOperation.ts"],"sourcesContent":["import type { IDataObject, IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';\n\nimport { type GoogleSheet } from '../../helpers/GoogleSheet';\nimport type {\n\tILookupValues,\n\tRangeDetectionOptions,\n\tSheetRangeData,\n\tValueRenderOption,\n} from '../../helpers/GoogleSheets.types';\nimport { getRangeString, prepareSheetData } from '../../helpers/GoogleSheets.utils';\n\nexport async function readSheet(\n\tthis: IExecuteFunctions,\n\tsheet: GoogleSheet,\n\tsheetName: string,\n\titemIndex: number,\n\treturnData: INodeExecutionData[],\n\tnodeVersion: number,\n\titems: INodeExecutionData[],\n\trangeString?: string,\n\tadditionalOptions?: IDataObject,\n): Promise<INodeExecutionData[]> {\n\tconst options = this.getNodeParameter('options', itemIndex, {});\n\tconst outputFormattingOption =\n\t\t((options.outputFormatting as IDataObject)?.values as IDataObject) || {};\n\n\tconst dataLocationOnSheetOptions =\n\t\t((options.dataLocationOnSheet as IDataObject)?.values as RangeDetectionOptions) ||\n\t\tadditionalOptions ||\n\t\t{};\n\n\tif (dataLocationOnSheetOptions.rangeDefinition === undefined) {\n\t\tdataLocationOnSheetOptions.rangeDefinition = 'detectAutomatically';\n\t}\n\n\tconst range = rangeString ?? getRangeString(sheetName, dataLocationOnSheetOptions);\n\n\tconst valueRenderMode = (outputFormattingOption.general ||\n\t\t'UNFORMATTED_VALUE') as ValueRenderOption;\n\tconst dateTimeRenderOption = (outputFormattingOption.date || 'FORMATTED_STRING') as string;\n\n\tconst sheetData = (await sheet.getData(\n\t\trange,\n\t\tvalueRenderMode,\n\t\tdateTimeRenderOption,\n\t)) as SheetRangeData;\n\n\tif (sheetData === undefined || sheetData.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst {\n\t\tdata,\n\t\theaderRow: keyRowIndex,\n\t\tfirstDataRow: dataStartRowIndex,\n\t} = prepareSheetData(sheetData, dataLocationOnSheetOptions);\n\n\tlet responseData = [];\n\n\tconst lookupValues = this.getNodeParameter('filtersUI.values', itemIndex, []) as ILookupValues[];\n\n\tconst inputData = data as string[][];\n\n\tif (lookupValues.length) {\n\t\tlet returnAllMatches;\n\t\tif (nodeVersion < 4.5) {\n\t\t\treturnAllMatches = options.returnAllMatches === 'returnAllMatches' ? true : false;\n\t\t} else {\n\t\t\treturnAllMatches =\n\t\t\t\t(additionalOptions?.returnFirstMatch ?? options.returnFirstMatch) ? false : true;\n\t\t}\n\n\t\tif (nodeVersion <= 4.1) {\n\t\t\tfor (let i = 1; i < items.length; i++) {\n\t\t\t\tconst itemLookupValues = this.getNodeParameter(\n\t\t\t\t\t'filtersUI.values',\n\t\t\t\t\ti,\n\t\t\t\t\t[],\n\t\t\t\t) as ILookupValues[];\n\t\t\t\tif (itemLookupValues.length) {\n\t\t\t\t\tlookupValues.push(...itemLookupValues);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst combineFilters = this.getNodeParameter('combineFilters', itemIndex, 'OR') as 'AND' | 'OR';\n\n\t\tresponseData = await sheet.lookupValues({\n\t\t\tinputData,\n\t\t\tkeyRowIndex,\n\t\t\tdataStartRowIndex,\n\t\t\tlookupValues,\n\t\t\treturnAllMatches,\n\t\t\tnodeVersion,\n\t\t\tcombineFilters,\n\t\t});\n\t} else {\n\t\tresponseData = sheet.structureArrayDataByColumn(inputData, keyRowIndex, dataStartRowIndex);\n\t}\n\n\treturnData.push(\n\t\t...responseData.map((item) => {\n\t\t\treturn {\n\t\t\t\tjson: item,\n\t\t\t\tpairedItem: { item: itemIndex },\n\t\t\t};\n\t\t}),\n\t);\n\n\treturn returnData;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,0BAAiD;AAEjD,eAAsB,UAErB,OACA,WACA,WACA,YACA,aACA,OACA,aACA,mBACgC;AAChC,QAAM,UAAU,KAAK,iBAAiB,WAAW,WAAW,CAAC,CAAC;AAC9D,QAAM,yBACH,QAAQ,kBAAkC,UAA0B,CAAC;AAExE,QAAM,6BACH,QAAQ,qBAAqC,UAC/C,qBACA,CAAC;AAEF,MAAI,2BAA2B,oBAAoB,QAAW;AAC7D,+BAA2B,kBAAkB;AAAA,EAC9C;AAEA,QAAM,QAAQ,mBAAe,oCAAe,WAAW,0BAA0B;AAEjF,QAAM,kBAAmB,uBAAuB,WAC/C;AACD,QAAM,uBAAwB,uBAAuB,QAAQ;AAE7D,QAAM,YAAa,MAAM,MAAM;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,MAAI,cAAc,UAAa,UAAU,WAAW,GAAG;AACtD,WAAO,CAAC;AAAA,EACT;AAEA,QAAM;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,cAAc;AAAA,EACf,QAAI,sCAAiB,WAAW,0BAA0B;AAE1D,MAAI,eAAe,CAAC;AAEpB,QAAM,eAAe,KAAK,iBAAiB,oBAAoB,WAAW,CAAC,CAAC;AAE5E,QAAM,YAAY;AAElB,MAAI,aAAa,QAAQ;AACxB,QAAI;AACJ,QAAI,cAAc,KAAK;AACtB,yBAAmB,QAAQ,qBAAqB,qBAAqB,OAAO;AAAA,IAC7E,OAAO;AACN,yBACE,mBAAmB,oBAAoB,QAAQ,mBAAoB,QAAQ;AAAA,IAC9E;AAEA,QAAI,eAAe,KAAK;AACvB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,cAAM,mBAAmB,KAAK;AAAA,UAC7B;AAAA,UACA;AAAA,UACA,CAAC;AAAA,QACF;AACA,YAAI,iBAAiB,QAAQ;AAC5B,uBAAa,KAAK,GAAG,gBAAgB;AAAA,QACtC;AAAA,MACD;AAAA,IACD;AAEA,UAAM,iBAAiB,KAAK,iBAAiB,kBAAkB,WAAW,IAAI;AAE9E,mBAAe,MAAM,MAAM,aAAa;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAAA,EACF,OAAO;AACN,mBAAe,MAAM,2BAA2B,WAAW,aAAa,iBAAiB;AAAA,EAC1F;AAEA,aAAW;AAAA,IACV,GAAG,aAAa,IAAI,CAAC,SAAS;AAC7B,aAAO;AAAA,QACN,MAAM;AAAA,QACN,YAAY,EAAE,MAAM,UAAU;AAAA,MAC/B;AAAA,IACD,CAAC;AAAA,EACF;AAEA,SAAO;AACR;","names":[]}
@@ -28,12 +28,30 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var versionDescription_exports = {};
30
30
  __export(versionDescription_exports, {
31
+ authentication: () => authentication,
31
32
  versionDescription: () => versionDescription
32
33
  });
33
34
  module.exports = __toCommonJS(versionDescription_exports);
34
35
  var import_n8n_workflow = require("n8n-workflow");
35
36
  var sheet = __toESM(require("./sheet/Sheet.resource"));
36
37
  var spreadsheet = __toESM(require("./spreadsheet/SpreadSheet.resource"));
38
+ const authentication = {
39
+ displayName: "Authentication",
40
+ name: "authentication",
41
+ type: "options",
42
+ options: [
43
+ {
44
+ name: "Service Account",
45
+ value: "serviceAccount"
46
+ },
47
+ {
48
+ // eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased
49
+ name: "OAuth2 (recommended)",
50
+ value: "oAuth2"
51
+ }
52
+ ],
53
+ default: "oAuth2"
54
+ };
37
55
  const versionDescription = {
38
56
  displayName: "Google Sheets",
39
57
  name: "googleSheets",
@@ -84,23 +102,7 @@ const versionDescription = {
84
102
  }
85
103
  ],
86
104
  properties: [
87
- {
88
- displayName: "Authentication",
89
- name: "authentication",
90
- type: "options",
91
- options: [
92
- {
93
- name: "Service Account",
94
- value: "serviceAccount"
95
- },
96
- {
97
- // eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased
98
- name: "OAuth2 (recommended)",
99
- value: "oAuth2"
100
- }
101
- ],
102
- default: "oAuth2"
103
- },
105
+ authentication,
104
106
  {
105
107
  displayName: "Resource",
106
108
  name: "resource",
@@ -124,6 +126,7 @@ const versionDescription = {
124
126
  };
125
127
  // Annotate the CommonJS export names for ESM import in node:
126
128
  0 && (module.exports = {
129
+ authentication,
127
130
  versionDescription
128
131
  });
129
132
  //# sourceMappingURL=versionDescription.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../nodes/Google/Sheet/v2/actions/versionDescription.ts"],"sourcesContent":["/* eslint-disable n8n-nodes-base/node-filename-against-convention */\nimport { NodeConnectionTypes, type INodeTypeDescription } from 'n8n-workflow';\n\nimport * as sheet from './sheet/Sheet.resource';\nimport * as spreadsheet from './spreadsheet/SpreadSheet.resource';\n\nexport const versionDescription: INodeTypeDescription = {\n\tdisplayName: 'Google Sheets',\n\tname: 'googleSheets',\n\ticon: 'file:googleSheets.svg',\n\tgroup: ['input', 'output'],\n\tversion: [3, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6],\n\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\tdescription: 'Read, update and write data to Google Sheets',\n\tdefaults: {\n\t\tname: 'Google Sheets',\n\t},\n\tinputs: [NodeConnectionTypes.Main],\n\toutputs: [NodeConnectionTypes.Main],\n\tusableAsTool: true,\n\thints: [\n\t\t{\n\t\t\tmessage:\n\t\t\t\t\"Use the 'Minimise API Calls' option for greater efficiency if your sheet is uniformly formatted without gaps between columns or rows\",\n\t\t\tdisplayCondition:\n\t\t\t\t'={{$parameter[\"operation\"] === \"append\" && !$parameter[\"options\"][\"useAppend\"]}}',\n\t\t\twhenToDisplay: 'beforeExecution',\n\t\t\tlocation: 'outputPane',\n\t\t},\n\t\t{\n\t\t\tmessage: 'No columns found in Google Sheet. All rows will be appended',\n\t\t\tdisplayCondition:\n\t\t\t\t'={{ [\"appendOrUpdate\", \"append\"].includes($parameter[\"operation\"]) && $parameter?.columns?.mappingMode === \"defineBelow\" && !$parameter?.columns?.schema?.length }}',\n\t\t\twhenToDisplay: 'beforeExecution',\n\t\t\tlocation: 'outputPane',\n\t\t},\n\t],\n\tcredentials: [\n\t\t{\n\t\t\tname: 'googleApi',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['serviceAccount'],\n\t\t\t\t},\n\t\t\t},\n\t\t\ttestedBy: 'googleApiCredentialTest',\n\t\t},\n\t\t{\n\t\t\tname: 'googleSheetsOAuth2Api',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['oAuth2'],\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: 'authentication',\n\t\t\ttype: 'options',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Service Account',\n\t\t\t\t\tvalue: 'serviceAccount',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\t\t\tname: 'OAuth2 (recommended)',\n\t\t\t\t\tvalue: 'oAuth2',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'oAuth2',\n\t\t},\n\t\t{\n\t\t\tdisplayName: 'Resource',\n\t\t\tname: 'resource',\n\t\t\ttype: 'options',\n\t\t\tnoDataExpression: true,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Document',\n\t\t\t\t\tvalue: 'spreadsheet',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Sheet Within Document',\n\t\t\t\t\tvalue: 'sheet',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'sheet',\n\t\t},\n\t\t...sheet.descriptions,\n\t\t...spreadsheet.descriptions,\n\t],\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,0BAA+D;AAE/D,YAAuB;AACvB,kBAA6B;AAEtB,MAAM,qBAA2C;AAAA,EACvD,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO,CAAC,SAAS,QAAQ;AAAA,EACzB,SAAS,CAAC,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC5C,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,IACT,MAAM;AAAA,EACP;AAAA,EACA,QAAQ,CAAC,wCAAoB,IAAI;AAAA,EACjC,SAAS,CAAC,wCAAoB,IAAI;AAAA,EAClC,cAAc;AAAA,EACd,OAAO;AAAA,IACN;AAAA,MACC,SACC;AAAA,MACD,kBACC;AAAA,MACD,eAAe;AAAA,MACf,UAAU;AAAA,IACX;AAAA,IACA;AAAA,MACC,SAAS;AAAA,MACT,kBACC;AAAA,MACD,eAAe;AAAA,MACf,UAAU;AAAA,IACX;AAAA,EACD;AAAA,EACA,aAAa;AAAA,IACZ;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,gBAAgB;AAAA,QACf,MAAM;AAAA,UACL,gBAAgB,CAAC,gBAAgB;AAAA,QAClC;AAAA,MACD;AAAA,MACA,UAAU;AAAA,IACX;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,gBAAgB;AAAA,QACf,MAAM;AAAA,UACL,gBAAgB,CAAC,QAAQ;AAAA,QAC1B;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,YAAY;AAAA,IACX;AAAA,MACC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,QACR;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,QACA;AAAA;AAAA,UAEC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,SAAS;AAAA,IACV;AAAA,IACA;AAAA,MACC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,kBAAkB;AAAA,MAClB,SAAS;AAAA,QACR;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,SAAS;AAAA,IACV;AAAA,IACA,GAAG,MAAM;AAAA,IACT,GAAG,YAAY;AAAA,EAChB;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../../../../nodes/Google/Sheet/v2/actions/versionDescription.ts"],"sourcesContent":["/* eslint-disable n8n-nodes-base/node-filename-against-convention */\nimport type { INodeProperties, INodeTypeDescription } from 'n8n-workflow';\nimport { NodeConnectionTypes } from 'n8n-workflow';\n\nimport * as sheet from './sheet/Sheet.resource';\nimport * as spreadsheet from './spreadsheet/SpreadSheet.resource';\n\nexport const authentication: INodeProperties = {\n\tdisplayName: 'Authentication',\n\tname: 'authentication',\n\ttype: 'options',\n\toptions: [\n\t\t{\n\t\t\tname: 'Service Account',\n\t\t\tvalue: 'serviceAccount',\n\t\t},\n\t\t{\n\t\t\t// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased\n\t\t\tname: 'OAuth2 (recommended)',\n\t\t\tvalue: 'oAuth2',\n\t\t},\n\t],\n\tdefault: 'oAuth2',\n};\n\nexport const versionDescription: INodeTypeDescription = {\n\tdisplayName: 'Google Sheets',\n\tname: 'googleSheets',\n\ticon: 'file:googleSheets.svg',\n\tgroup: ['input', 'output'],\n\tversion: [3, 4, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6],\n\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\tdescription: 'Read, update and write data to Google Sheets',\n\tdefaults: {\n\t\tname: 'Google Sheets',\n\t},\n\tinputs: [NodeConnectionTypes.Main],\n\toutputs: [NodeConnectionTypes.Main],\n\tusableAsTool: true,\n\thints: [\n\t\t{\n\t\t\tmessage:\n\t\t\t\t\"Use the 'Minimise API Calls' option for greater efficiency if your sheet is uniformly formatted without gaps between columns or rows\",\n\t\t\tdisplayCondition:\n\t\t\t\t'={{$parameter[\"operation\"] === \"append\" && !$parameter[\"options\"][\"useAppend\"]}}',\n\t\t\twhenToDisplay: 'beforeExecution',\n\t\t\tlocation: 'outputPane',\n\t\t},\n\t\t{\n\t\t\tmessage: 'No columns found in Google Sheet. All rows will be appended',\n\t\t\tdisplayCondition:\n\t\t\t\t'={{ [\"appendOrUpdate\", \"append\"].includes($parameter[\"operation\"]) && $parameter?.columns?.mappingMode === \"defineBelow\" && !$parameter?.columns?.schema?.length }}',\n\t\t\twhenToDisplay: 'beforeExecution',\n\t\t\tlocation: 'outputPane',\n\t\t},\n\t],\n\tcredentials: [\n\t\t{\n\t\t\tname: 'googleApi',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['serviceAccount'],\n\t\t\t\t},\n\t\t\t},\n\t\t\ttestedBy: 'googleApiCredentialTest',\n\t\t},\n\t\t{\n\t\t\tname: 'googleSheetsOAuth2Api',\n\t\t\trequired: true,\n\t\t\tdisplayOptions: {\n\t\t\t\tshow: {\n\t\t\t\t\tauthentication: ['oAuth2'],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t],\n\tproperties: [\n\t\tauthentication,\n\t\t{\n\t\t\tdisplayName: 'Resource',\n\t\t\tname: 'resource',\n\t\t\ttype: 'options',\n\t\t\tnoDataExpression: true,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tname: 'Document',\n\t\t\t\t\tvalue: 'spreadsheet',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'Sheet Within Document',\n\t\t\t\t\tvalue: 'sheet',\n\t\t\t\t},\n\t\t\t],\n\t\t\tdefault: 'sheet',\n\t\t},\n\t\t...sheet.descriptions,\n\t\t...spreadsheet.descriptions,\n\t],\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAAoC;AAEpC,YAAuB;AACvB,kBAA6B;AAEtB,MAAM,iBAAkC;AAAA,EAC9C,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,IACR;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,IACR;AAAA,IACA;AAAA;AAAA,MAEC,MAAM;AAAA,MACN,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EACA,SAAS;AACV;AAEO,MAAM,qBAA2C;AAAA,EACvD,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO,CAAC,SAAS,QAAQ;AAAA,EACzB,SAAS,CAAC,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC5C,UAAU;AAAA,EACV,aAAa;AAAA,EACb,UAAU;AAAA,IACT,MAAM;AAAA,EACP;AAAA,EACA,QAAQ,CAAC,wCAAoB,IAAI;AAAA,EACjC,SAAS,CAAC,wCAAoB,IAAI;AAAA,EAClC,cAAc;AAAA,EACd,OAAO;AAAA,IACN;AAAA,MACC,SACC;AAAA,MACD,kBACC;AAAA,MACD,eAAe;AAAA,MACf,UAAU;AAAA,IACX;AAAA,IACA;AAAA,MACC,SAAS;AAAA,MACT,kBACC;AAAA,MACD,eAAe;AAAA,MACf,UAAU;AAAA,IACX;AAAA,EACD;AAAA,EACA,aAAa;AAAA,IACZ;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,gBAAgB;AAAA,QACf,MAAM;AAAA,UACL,gBAAgB,CAAC,gBAAgB;AAAA,QAClC;AAAA,MACD;AAAA,MACA,UAAU;AAAA,IACX;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,UAAU;AAAA,MACV,gBAAgB;AAAA,QACf,MAAM;AAAA,UACL,gBAAgB,CAAC,QAAQ;AAAA,QAC1B;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,YAAY;AAAA,IACX;AAAA,IACA;AAAA,MACC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,kBAAkB;AAAA,MAClB,SAAS;AAAA,QACR;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO;AAAA,QACR;AAAA,MACD;AAAA,MACA,SAAS;AAAA,IACV;AAAA,IACA,GAAG,MAAM;AAAA,IACT,GAAG,YAAY;AAAA,EAChB;AACD;","names":[]}
@@ -22,6 +22,7 @@ __export(YouTube_node_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(YouTube_node_exports);
24
24
  var import_n8n_workflow = require("n8n-workflow");
25
+ var import_stream = require("stream");
25
26
  var import_ISOCountryCodes = require("../../../utils/ISOCountryCodes");
26
27
  var import_ChannelDescription = require("./ChannelDescription");
27
28
  var import_GenericFunctions = require("./GenericFunctions");
@@ -715,8 +716,9 @@ class YouTube {
715
716
  contentLength = metadata.fileSize;
716
717
  mimeType = metadata.mimeType ?? binaryData.mimeType;
717
718
  } else {
718
- fileContent = Buffer.from(binaryData.data, import_n8n_workflow.BINARY_ENCODING);
719
- contentLength = fileContent.length;
719
+ const buffer = Buffer.from(binaryData.data, import_n8n_workflow.BINARY_ENCODING);
720
+ fileContent = import_stream.Readable.from(buffer);
721
+ contentLength = buffer.length;
720
722
  mimeType = binaryData.mimeType;
721
723
  }
722
724
  const payload = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../nodes/Google/YouTube/YouTube.node.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tILoadOptionsFunctions,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tINodeType,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, BINARY_ENCODING, NodeOperationError } from 'n8n-workflow';\nimport type { Readable } from 'stream';\n\nimport { isoCountryCodes } from '@utils/ISOCountryCodes';\n\nimport { channelFields, channelOperations } from './ChannelDescription';\nimport { googleApiRequest, googleApiRequestAllItems } from './GenericFunctions';\nimport { playlistFields, playlistOperations } from './PlaylistDescription';\nimport { playlistItemFields, playlistItemOperations } from './PlaylistItemDescription';\nimport { videoCategoryFields, videoCategoryOperations } from './VideoCategoryDescription';\nimport { videoFields, videoOperations } from './VideoDescription';\nimport { validateAndSetDate } from '../GenericFunctions';\n\nconst UPLOAD_CHUNK_SIZE = 1024 * 1024;\n\nexport class YouTube implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'YouTube',\n\t\tname: 'youTube',\n\t\t// eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg\n\t\ticon: 'file:youTube.png',\n\t\tgroup: ['input'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume YouTube API',\n\t\tdefaults: {\n\t\t\tname: 'YouTube',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'youTubeOAuth2Api',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Channel',\n\t\t\t\t\t\tvalue: 'channel',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Playlist',\n\t\t\t\t\t\tvalue: 'playlist',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Playlist Item',\n\t\t\t\t\t\tvalue: 'playlistItem',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Video',\n\t\t\t\t\t\tvalue: 'video',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Video Category',\n\t\t\t\t\t\tvalue: 'videoCategory',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'channel',\n\t\t\t},\n\t\t\t...channelOperations,\n\t\t\t...channelFields,\n\n\t\t\t...playlistOperations,\n\t\t\t...playlistFields,\n\n\t\t\t...playlistItemOperations,\n\t\t\t...playlistItemFields,\n\n\t\t\t...videoOperations,\n\t\t\t...videoFields,\n\n\t\t\t...videoCategoryOperations,\n\t\t\t...videoCategoryFields,\n\t\t],\n\t};\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\t// Get all the languages to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getLanguages(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst languages = await googleApiRequestAllItems.call(\n\t\t\t\t\tthis,\n\t\t\t\t\t'items',\n\t\t\t\t\t'GET',\n\t\t\t\t\t'/youtube/v3/i18nLanguages',\n\t\t\t\t);\n\t\t\t\tfor (const language of languages) {\n\t\t\t\t\tconst languageName = language.id.toUpperCase();\n\t\t\t\t\tconst languageId = language.id;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: languageName,\n\t\t\t\t\t\tvalue: languageId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t\t// Get all the countries codes to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getCountriesCodes(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tfor (const countryCode of isoCountryCodes) {\n\t\t\t\t\tconst countryCodeName = `${countryCode.name} - ${countryCode.alpha2}`;\n\t\t\t\t\tconst countryCodeId = countryCode.alpha2;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: countryCodeName,\n\t\t\t\t\t\tvalue: countryCodeId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t\t// Get all the video categories to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getVideoCategories(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst countryCode = this.getCurrentNodeParameter('regionCode') as string;\n\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\tqs.regionCode = countryCode;\n\t\t\t\tqs.part = 'snippet';\n\t\t\t\tconst categories = await googleApiRequestAllItems.call(\n\t\t\t\t\tthis,\n\t\t\t\t\t'items',\n\t\t\t\t\t'GET',\n\t\t\t\t\t'/youtube/v3/videoCategories',\n\t\t\t\t\t{},\n\t\t\t\t\tqs,\n\t\t\t\t);\n\t\t\t\tfor (const category of categories) {\n\t\t\t\t\tconst categoryName = category.snippet.title;\n\t\t\t\t\tconst categoryId = category.id;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: categoryName,\n\t\t\t\t\t\tvalue: categoryId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t\t// Get all the playlists to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getPlaylists(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\tqs.part = 'snippet';\n\t\t\t\tqs.mine = true;\n\t\t\t\tconst playlists = await googleApiRequestAllItems.call(\n\t\t\t\t\tthis,\n\t\t\t\t\t'items',\n\t\t\t\t\t'GET',\n\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t{},\n\t\t\t\t\tqs,\n\t\t\t\t);\n\t\t\t\tfor (const playlist of playlists) {\n\t\t\t\t\tconst playlistName = playlist.snippet.title;\n\t\t\t\t\tconst playlistId = playlist.id;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: playlistName,\n\t\t\t\t\t\tvalue: playlistId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t},\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tconst length = items.length;\n\t\tconst qs: IDataObject = {};\n\t\tlet responseData;\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\ttry {\n\t\t\t\tif (resource === 'channel') {\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channels/list\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst channelId = this.getNodeParameter('channelId', i) as string;\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = [\n\t\t\t\t\t\t\t\t'brandingSettings',\n\t\t\t\t\t\t\t\t'contentDetails',\n\t\t\t\t\t\t\t\t'contentOwnerDetails',\n\t\t\t\t\t\t\t\t'id',\n\t\t\t\t\t\t\t\t'localizations',\n\t\t\t\t\t\t\t\t'snippet',\n\t\t\t\t\t\t\t\t'statistics',\n\t\t\t\t\t\t\t\t'status',\n\t\t\t\t\t\t\t\t'topicDetails',\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = channelId;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/youtube/v3/channels', {}, qs);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channels/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = [\n\t\t\t\t\t\t\t\t'brandingSettings',\n\t\t\t\t\t\t\t\t'contentDetails',\n\t\t\t\t\t\t\t\t'contentOwnerDetails',\n\t\t\t\t\t\t\t\t'id',\n\t\t\t\t\t\t\t\t'localizations',\n\t\t\t\t\t\t\t\t'snippet',\n\t\t\t\t\t\t\t\t'statistics',\n\t\t\t\t\t\t\t\t'status',\n\t\t\t\t\t\t\t\t'topicDetails',\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tObject.assign(qs, options, filters);\n\n\t\t\t\t\t\tqs.mine = true;\n\n\t\t\t\t\t\tif (qs.categoryId || qs.forUsername || qs.id || qs.managedByMe) {\n\t\t\t\t\t\t\tdelete qs.mine;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channels/update\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst channelId = this.getNodeParameter('channelId', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: channelId,\n\t\t\t\t\t\t\tbrandingSettings: {\n\t\t\t\t\t\t\t\tchannel: {},\n\t\t\t\t\t\t\t\timage: {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tqs.part = 'brandingSettings';\n\n\t\t\t\t\t\tif (updateFields.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = updateFields.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.brandingSettingsUi) {\n\t\t\t\t\t\t\tconst channelSettingsValues = (updateFields.brandingSettingsUi as IDataObject)\n\t\t\t\t\t\t\t\t.channelSettingsValues as IDataObject | undefined;\n\t\t\t\t\t\t\tconst channelSettings: IDataObject = {};\n\t\t\t\t\t\t\tif (channelSettingsValues?.channel) {\n\t\t\t\t\t\t\t\tconst channelSettingsOptions = channelSettingsValues.channel as IDataObject;\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.country) {\n\t\t\t\t\t\t\t\t\tchannelSettings.country = channelSettingsOptions.country;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.description) {\n\t\t\t\t\t\t\t\t\tchannelSettings.description = channelSettingsOptions.description;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.defaultLanguage) {\n\t\t\t\t\t\t\t\t\tchannelSettings.defaultLanguage = channelSettingsOptions.defaultLanguage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.defaultTab) {\n\t\t\t\t\t\t\t\t\tchannelSettings.defaultTab = channelSettingsOptions.defaultTab;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.featuredChannelsTitle) {\n\t\t\t\t\t\t\t\t\tchannelSettings.featuredChannelsTitle =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.featuredChannelsTitle;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.featuredChannelsUrls) {\n\t\t\t\t\t\t\t\t\tchannelSettings.featuredChannelsUrls =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.featuredChannelsUrls;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.keywords) {\n\t\t\t\t\t\t\t\t\tchannelSettings.keywords = channelSettingsOptions.keywords;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.moderateComments) {\n\t\t\t\t\t\t\t\t\tchannelSettings.moderateComments =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.moderateComments as boolean;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.profileColor) {\n\t\t\t\t\t\t\t\t\tchannelSettings.profileColor = channelSettingsOptions.profileColor as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.profileColor) {\n\t\t\t\t\t\t\t\t\tchannelSettings.profileColor = channelSettingsOptions.profileColor as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.showRelatedChannels) {\n\t\t\t\t\t\t\t\t\tchannelSettings.showRelatedChannels =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.showRelatedChannels as boolean;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.showBrowseView) {\n\t\t\t\t\t\t\t\t\tchannelSettings.showBrowseView = channelSettingsOptions.showBrowseView as boolean;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.trackingAnalyticsAccountId) {\n\t\t\t\t\t\t\t\t\tchannelSettings.trackingAnalyticsAccountId =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.trackingAnalyticsAccountId as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.unsubscribedTrailer) {\n\t\t\t\t\t\t\t\t\tchannelSettings.unsubscribedTrailer =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.unsubscribedTrailer as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst imageSettingsValues = (updateFields.brandingSettingsUi as IDataObject)\n\t\t\t\t\t\t\t\t.imageSettingsValues as IDataObject | undefined;\n\t\t\t\t\t\t\tconst imageSettings: IDataObject = {};\n\t\t\t\t\t\t\tif (imageSettingsValues?.image) {\n\t\t\t\t\t\t\t\tconst imageSettingsOptions = imageSettings.image as IDataObject;\n\t\t\t\t\t\t\t\tif (imageSettingsOptions.bannerExternalUrl) {\n\t\t\t\t\t\t\t\t\timageSettings.bannerExternalUrl =\n\t\t\t\t\t\t\t\t\t\timageSettingsOptions.bannerExternalUrl as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (imageSettingsOptions.trackingImageUrl) {\n\t\t\t\t\t\t\t\t\timageSettings.trackingImageUrl = imageSettingsOptions.trackingImageUrl as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (imageSettingsOptions.watchIconImageUrl) {\n\t\t\t\t\t\t\t\t\timageSettings.watchIconImageUrl =\n\t\t\t\t\t\t\t\t\t\timageSettingsOptions.watchIconImageUrl as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.brandingSettings.channel = channelSettings;\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.brandingSettings.image = imageSettings;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channelBanners/insert\n\t\t\t\t\tif (operation === 'uploadBanner') {\n\t\t\t\t\t\tconst channelId = this.getNodeParameter('channelId', i) as string;\n\t\t\t\t\t\tconst binaryProperty = this.getNodeParameter('binaryProperty', i);\n\t\t\t\t\t\tconst binaryData = this.helpers.assertBinaryData(i, binaryProperty);\n\t\t\t\t\t\tconst body = await this.helpers.getBinaryDataBuffer(i, binaryProperty);\n\n\t\t\t\t\t\tconst requestOptions = {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t...(binaryData.mimeType ? { 'Content-Type': binaryData.mimeType } : {}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjson: false,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst response = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/upload/youtube/v3/channelBanners/insert',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\trequestOptions,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst { url } = JSON.parse(response as string);\n\n\t\t\t\t\t\tqs.part = 'brandingSettings';\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: channelId,\n\t\t\t\t\t\t\t\tbrandingSettings: {\n\t\t\t\t\t\t\t\t\timage: {\n\t\t\t\t\t\t\t\t\t\tbannerExternalUrl: url,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'playlist') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/list\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'localizations', 'player', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = playlistId;\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'localizations', 'player', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tObject.assign(qs, options, filters);\n\n\t\t\t\t\t\tqs.mine = true;\n\n\t\t\t\t\t\tif (qs.channelId || qs.id) {\n\t\t\t\t\t\t\tdelete qs.mine;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/insert\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tqs.part = 'snippet';\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.tags) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.tags = (options.tags as string).split(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.description) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.privacyStatus = options.privacyStatus as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.defaultLanguage) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.defaultLanguage = options.defaultLanguage as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwnerChannel) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwnerChannel = options.onBehalfOfContentOwnerChannel as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/update\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\n\t\t\t\t\t\tqs.part = 'snippet, status';\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: playlistId,\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus: {},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (updateFields.tags) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.tags = (updateFields.tags as string).split(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.privacyStatus) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.privacyStatus = updateFields.privacyStatus as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.description) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.description = updateFields.description as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.defaultLanguage) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.defaultLanguage = updateFields.defaultLanguage as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = updateFields.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/delete\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: playlistId,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'DELETE',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'playlistItem') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/list\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst playlistItemId = this.getNodeParameter('playlistItemId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = playlistItemId;\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\t//const filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.playlistId = playlistId;\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/insert\n\t\t\t\t\tif (operation === 'add') {\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tqs.part = 'snippet, contentDetails';\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\tplaylistId,\n\t\t\t\t\t\t\t\tresourceId: {\n\t\t\t\t\t\t\t\t\tkind: 'youtube#video',\n\t\t\t\t\t\t\t\t\tvideoId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcontentDetails: {},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.position) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.position = options.position as number;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.note) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.contentDetails.note = options.note as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.startAt) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.contentDetails.startAt = options.startAt as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.endAt) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.contentDetails.endAt = options.endAt as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/delete\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst playlistItemId = this.getNodeParameter('playlistItemId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: playlistItemId,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'DELETE',\n\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'video') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/search/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tqs.part = 'snippet';\n\n\t\t\t\t\t\tqs.type = 'video';\n\n\t\t\t\t\t\tqs.forMine = true;\n\n\t\t\t\t\t\tif (filters.publishedAfter) {\n\t\t\t\t\t\t\tvalidateAndSetDate(filters, 'publishedAfter', this.getTimezone(), this);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (filters.publishedBefore) {\n\t\t\t\t\t\t\tvalidateAndSetDate(filters, 'publishedBefore', this.getTimezone(), this);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tObject.assign(qs, options, filters);\n\n\t\t\t\t\t\tif (Object.keys(filters).length > 0) {\n\t\t\t\t\t\t\tdelete qs.forMine;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (qs.relatedToVideoId && qs.forDeveloper !== undefined) {\n\t\t\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\t\t\"When using the parameter 'related to video' the parameter 'for developer' cannot be set\",\n\t\t\t\t\t\t\t\t{ itemIndex: i },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/search',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/youtube/v3/search', {}, qs);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videos/list?hl=en\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = [\n\t\t\t\t\t\t\t\t'contentDetails',\n\t\t\t\t\t\t\t\t'id',\n\t\t\t\t\t\t\t\t'liveStreamingDetails',\n\t\t\t\t\t\t\t\t'localizations',\n\t\t\t\t\t\t\t\t'player',\n\t\t\t\t\t\t\t\t'recordingDetails',\n\t\t\t\t\t\t\t\t'snippet',\n\t\t\t\t\t\t\t\t'statistics',\n\t\t\t\t\t\t\t\t'status',\n\t\t\t\t\t\t\t\t'topicDetails',\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = videoId;\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/youtube/v3/videos', {}, qs);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/guides/uploading_a_video?hl=en\n\t\t\t\t\tif (operation === 'upload') {\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst categoryId = this.getNodeParameter('categoryId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst binaryProperty = this.getNodeParameter('binaryProperty', i);\n\n\t\t\t\t\t\tconst binaryData = this.helpers.assertBinaryData(i, binaryProperty);\n\n\t\t\t\t\t\tlet mimeType: string;\n\t\t\t\t\t\tlet contentLength: number;\n\t\t\t\t\t\tlet fileContent: Buffer | Readable;\n\n\t\t\t\t\t\tif (binaryData.id) {\n\t\t\t\t\t\t\t// Stream data in 256KB chunks, and upload the via the resumable upload api\n\t\t\t\t\t\t\tfileContent = await this.helpers.getBinaryStream(binaryData.id, UPLOAD_CHUNK_SIZE);\n\t\t\t\t\t\t\tconst metadata = await this.helpers.getBinaryMetadata(binaryData.id);\n\t\t\t\t\t\t\tcontentLength = metadata.fileSize;\n\t\t\t\t\t\t\tmimeType = metadata.mimeType ?? binaryData.mimeType;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfileContent = Buffer.from(binaryData.data, BINARY_ENCODING);\n\t\t\t\t\t\t\tcontentLength = fileContent.length;\n\t\t\t\t\t\t\tmimeType = binaryData.mimeType;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst payload = {\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tcategoryId,\n\t\t\t\t\t\t\t\tdescription: options.description,\n\t\t\t\t\t\t\t\ttags: (options.tags as string)?.split(','),\n\t\t\t\t\t\t\t\tdefaultLanguage: options.defaultLanguage,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus: {\n\t\t\t\t\t\t\t\tprivacyStatus: options.privacyStatus,\n\t\t\t\t\t\t\t\tembeddable: options.embeddable,\n\t\t\t\t\t\t\t\tpublicStatsViewable: options.publicStatsViewable,\n\t\t\t\t\t\t\t\tpublishAt: options.publishAt,\n\t\t\t\t\t\t\t\tselfDeclaredMadeForKids: options.selfDeclaredMadeForKids,\n\t\t\t\t\t\t\t\tlicense: options.license,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trecordingDetails: {\n\t\t\t\t\t\t\t\trecordingDate: options.recordingDate,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst resumableUpload = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/upload/youtube/v3/videos',\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuploadType: 'resumable',\n\t\t\t\t\t\t\t\tpart: 'snippet,status,recordingDetails',\n\t\t\t\t\t\t\t\tnotifySubscribers: options.notifySubscribers ?? false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t'X-Upload-Content-Length': contentLength,\n\t\t\t\t\t\t\t\t\t'X-Upload-Content-Type': mimeType,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tjson: true,\n\t\t\t\t\t\t\t\tresolveWithFullResponse: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst uploadUrl = resumableUpload.headers.location;\n\n\t\t\t\t\t\tlet uploadId;\n\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\tfor await (const chunk of fileContent) {\n\t\t\t\t\t\t\tconst nextOffset = offset + Number(chunk.length);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst response = await this.helpers.httpRequest({\n\t\t\t\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\t\t\t\turl: uploadUrl,\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t'Content-Length': chunk.length,\n\t\t\t\t\t\t\t\t\t\t'Content-Range': `bytes ${offset}-${nextOffset - 1}/${contentLength}`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbody: chunk,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tuploadId = response.id;\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tif (error.response?.status !== 308) throw error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toffset = nextOffset;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = { uploadId, ...resumableUpload.body };\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/update\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst categoryId = this.getNodeParameter('categoryId', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\n\t\t\t\t\t\tqs.part = 'snippet, status, recordingDetails';\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tcategoryId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus: {},\n\t\t\t\t\t\t\trecordingDetails: {},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (updateFields.description) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.description = updateFields.description as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.privacyStatus) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.privacyStatus = updateFields.privacyStatus as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.tags) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.tags = (updateFields.tags as string).split(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.embeddable) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.embeddable = updateFields.embeddable as boolean;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.publicStatsViewable) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.publicStatsViewable = updateFields.publicStatsViewable as boolean;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.publishAt) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.publishAt = updateFields.publishAt as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.selfDeclaredMadeForKids) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.selfDeclaredMadeForKids = updateFields.selfDeclaredMadeForKids as boolean;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.recordingDate) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.recordingDetails.recordingDate = updateFields.recordingDate as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.license) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.license = updateFields.license as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.defaultLanguage) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.defaultLanguage = updateFields.defaultLanguage as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'PUT', '/youtube/v3/videos', body, qs);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videos/delete?hl=en\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: videoId,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', '/youtube/v3/videos', body);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videos/rate?hl=en\n\t\t\t\t\tif (operation === 'rate') {\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst rating = this.getNodeParameter('rating', i) as string;\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: videoId,\n\t\t\t\t\t\t\trating,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/youtube/v3/videos/rate',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'videoCategory') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videoCategories/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst regionCode = this.getNodeParameter('regionCode', i) as string;\n\n\t\t\t\t\t\tqs.regionCode = regionCode;\n\n\t\t\t\t\t\tqs.part = 'snippet';\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t'/youtube/v3/videoCategories',\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresponseData = responseData.items;\n\n\t\t\t\t\t\tif (!returnAll) {\n\t\t\t\t\t\t\tconst limit = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = responseData.splice(0, limit);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\tconst executionErrorData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\tthis.helpers.returnJsonArray({ error: error.message }),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\treturnData.push(...executionErrorData);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\tthis.helpers.returnJsonArray(responseData as IDataObject[]),\n\t\t\t\t{ itemData: { item: i } },\n\t\t\t);\n\n\t\t\treturnData.push(...executionData);\n\t\t}\n\n\t\treturn [returnData];\n\t}\n}\n"],"mappings":"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","names":["import_GenericFunctions"]}
1
+ {"version":3,"sources":["../../../../nodes/Google/YouTube/YouTube.node.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteFunctions,\n\tILoadOptionsFunctions,\n\tINodeExecutionData,\n\tINodePropertyOptions,\n\tINodeType,\n\tINodeTypeDescription,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, BINARY_ENCODING, NodeOperationError } from 'n8n-workflow';\nimport { Readable } from 'stream';\n\nimport { isoCountryCodes } from '@utils/ISOCountryCodes';\n\nimport { channelFields, channelOperations } from './ChannelDescription';\nimport { googleApiRequest, googleApiRequestAllItems } from './GenericFunctions';\nimport { playlistFields, playlistOperations } from './PlaylistDescription';\nimport { playlistItemFields, playlistItemOperations } from './PlaylistItemDescription';\nimport { videoCategoryFields, videoCategoryOperations } from './VideoCategoryDescription';\nimport { videoFields, videoOperations } from './VideoDescription';\nimport { validateAndSetDate } from '../GenericFunctions';\n\nconst UPLOAD_CHUNK_SIZE = 1024 * 1024;\n\nexport class YouTube implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'YouTube',\n\t\tname: 'youTube',\n\t\t// eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg\n\t\ticon: 'file:youTube.png',\n\t\tgroup: ['input'],\n\t\tversion: 1,\n\t\tsubtitle: '={{$parameter[\"operation\"] + \": \" + $parameter[\"resource\"]}}',\n\t\tdescription: 'Consume YouTube API',\n\t\tdefaults: {\n\t\t\tname: 'YouTube',\n\t\t},\n\t\tusableAsTool: true,\n\t\tinputs: [NodeConnectionTypes.Main],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'youTubeOAuth2Api',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Resource',\n\t\t\t\tname: 'resource',\n\t\t\t\ttype: 'options',\n\t\t\t\tnoDataExpression: true,\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Channel',\n\t\t\t\t\t\tvalue: 'channel',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Playlist',\n\t\t\t\t\t\tvalue: 'playlist',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Playlist Item',\n\t\t\t\t\t\tvalue: 'playlistItem',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Video',\n\t\t\t\t\t\tvalue: 'video',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Video Category',\n\t\t\t\t\t\tvalue: 'videoCategory',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'channel',\n\t\t\t},\n\t\t\t...channelOperations,\n\t\t\t...channelFields,\n\n\t\t\t...playlistOperations,\n\t\t\t...playlistFields,\n\n\t\t\t...playlistItemOperations,\n\t\t\t...playlistItemFields,\n\n\t\t\t...videoOperations,\n\t\t\t...videoFields,\n\n\t\t\t...videoCategoryOperations,\n\t\t\t...videoCategoryFields,\n\t\t],\n\t};\n\n\tmethods = {\n\t\tloadOptions: {\n\t\t\t// Get all the languages to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getLanguages(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst languages = await googleApiRequestAllItems.call(\n\t\t\t\t\tthis,\n\t\t\t\t\t'items',\n\t\t\t\t\t'GET',\n\t\t\t\t\t'/youtube/v3/i18nLanguages',\n\t\t\t\t);\n\t\t\t\tfor (const language of languages) {\n\t\t\t\t\tconst languageName = language.id.toUpperCase();\n\t\t\t\t\tconst languageId = language.id;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: languageName,\n\t\t\t\t\t\tvalue: languageId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t\t// Get all the countries codes to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getCountriesCodes(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tfor (const countryCode of isoCountryCodes) {\n\t\t\t\t\tconst countryCodeName = `${countryCode.name} - ${countryCode.alpha2}`;\n\t\t\t\t\tconst countryCodeId = countryCode.alpha2;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: countryCodeName,\n\t\t\t\t\t\tvalue: countryCodeId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t\t// Get all the video categories to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getVideoCategories(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst countryCode = this.getCurrentNodeParameter('regionCode') as string;\n\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\tqs.regionCode = countryCode;\n\t\t\t\tqs.part = 'snippet';\n\t\t\t\tconst categories = await googleApiRequestAllItems.call(\n\t\t\t\t\tthis,\n\t\t\t\t\t'items',\n\t\t\t\t\t'GET',\n\t\t\t\t\t'/youtube/v3/videoCategories',\n\t\t\t\t\t{},\n\t\t\t\t\tqs,\n\t\t\t\t);\n\t\t\t\tfor (const category of categories) {\n\t\t\t\t\tconst categoryName = category.snippet.title;\n\t\t\t\t\tconst categoryId = category.id;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: categoryName,\n\t\t\t\t\t\tvalue: categoryId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t\t// Get all the playlists to display them to user so that they can\n\t\t\t// select them easily\n\t\t\tasync getPlaylists(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {\n\t\t\t\tconst returnData: INodePropertyOptions[] = [];\n\t\t\t\tconst qs: IDataObject = {};\n\t\t\t\tqs.part = 'snippet';\n\t\t\t\tqs.mine = true;\n\t\t\t\tconst playlists = await googleApiRequestAllItems.call(\n\t\t\t\t\tthis,\n\t\t\t\t\t'items',\n\t\t\t\t\t'GET',\n\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t{},\n\t\t\t\t\tqs,\n\t\t\t\t);\n\t\t\t\tfor (const playlist of playlists) {\n\t\t\t\t\tconst playlistName = playlist.snippet.title;\n\t\t\t\t\tconst playlistId = playlist.id;\n\t\t\t\t\treturnData.push({\n\t\t\t\t\t\tname: playlistName,\n\t\t\t\t\t\tvalue: playlistId,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnData;\n\t\t\t},\n\t\t},\n\t};\n\n\tasync execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {\n\t\tconst items = this.getInputData();\n\t\tconst returnData: INodeExecutionData[] = [];\n\t\tconst length = items.length;\n\t\tconst qs: IDataObject = {};\n\t\tlet responseData;\n\t\tconst resource = this.getNodeParameter('resource', 0);\n\t\tconst operation = this.getNodeParameter('operation', 0);\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\ttry {\n\t\t\t\tif (resource === 'channel') {\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channels/list\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst channelId = this.getNodeParameter('channelId', i) as string;\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = [\n\t\t\t\t\t\t\t\t'brandingSettings',\n\t\t\t\t\t\t\t\t'contentDetails',\n\t\t\t\t\t\t\t\t'contentOwnerDetails',\n\t\t\t\t\t\t\t\t'id',\n\t\t\t\t\t\t\t\t'localizations',\n\t\t\t\t\t\t\t\t'snippet',\n\t\t\t\t\t\t\t\t'statistics',\n\t\t\t\t\t\t\t\t'status',\n\t\t\t\t\t\t\t\t'topicDetails',\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = channelId;\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/youtube/v3/channels', {}, qs);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channels/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = [\n\t\t\t\t\t\t\t\t'brandingSettings',\n\t\t\t\t\t\t\t\t'contentDetails',\n\t\t\t\t\t\t\t\t'contentOwnerDetails',\n\t\t\t\t\t\t\t\t'id',\n\t\t\t\t\t\t\t\t'localizations',\n\t\t\t\t\t\t\t\t'snippet',\n\t\t\t\t\t\t\t\t'statistics',\n\t\t\t\t\t\t\t\t'status',\n\t\t\t\t\t\t\t\t'topicDetails',\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tObject.assign(qs, options, filters);\n\n\t\t\t\t\t\tqs.mine = true;\n\n\t\t\t\t\t\tif (qs.categoryId || qs.forUsername || qs.id || qs.managedByMe) {\n\t\t\t\t\t\t\tdelete qs.mine;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channels/update\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst channelId = this.getNodeParameter('channelId', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: channelId,\n\t\t\t\t\t\t\tbrandingSettings: {\n\t\t\t\t\t\t\t\tchannel: {},\n\t\t\t\t\t\t\t\timage: {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tqs.part = 'brandingSettings';\n\n\t\t\t\t\t\tif (updateFields.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = updateFields.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.brandingSettingsUi) {\n\t\t\t\t\t\t\tconst channelSettingsValues = (updateFields.brandingSettingsUi as IDataObject)\n\t\t\t\t\t\t\t\t.channelSettingsValues as IDataObject | undefined;\n\t\t\t\t\t\t\tconst channelSettings: IDataObject = {};\n\t\t\t\t\t\t\tif (channelSettingsValues?.channel) {\n\t\t\t\t\t\t\t\tconst channelSettingsOptions = channelSettingsValues.channel as IDataObject;\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.country) {\n\t\t\t\t\t\t\t\t\tchannelSettings.country = channelSettingsOptions.country;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.description) {\n\t\t\t\t\t\t\t\t\tchannelSettings.description = channelSettingsOptions.description;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.defaultLanguage) {\n\t\t\t\t\t\t\t\t\tchannelSettings.defaultLanguage = channelSettingsOptions.defaultLanguage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.defaultTab) {\n\t\t\t\t\t\t\t\t\tchannelSettings.defaultTab = channelSettingsOptions.defaultTab;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.featuredChannelsTitle) {\n\t\t\t\t\t\t\t\t\tchannelSettings.featuredChannelsTitle =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.featuredChannelsTitle;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.featuredChannelsUrls) {\n\t\t\t\t\t\t\t\t\tchannelSettings.featuredChannelsUrls =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.featuredChannelsUrls;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.keywords) {\n\t\t\t\t\t\t\t\t\tchannelSettings.keywords = channelSettingsOptions.keywords;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.moderateComments) {\n\t\t\t\t\t\t\t\t\tchannelSettings.moderateComments =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.moderateComments as boolean;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.profileColor) {\n\t\t\t\t\t\t\t\t\tchannelSettings.profileColor = channelSettingsOptions.profileColor as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.profileColor) {\n\t\t\t\t\t\t\t\t\tchannelSettings.profileColor = channelSettingsOptions.profileColor as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.showRelatedChannels) {\n\t\t\t\t\t\t\t\t\tchannelSettings.showRelatedChannels =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.showRelatedChannels as boolean;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.showBrowseView) {\n\t\t\t\t\t\t\t\t\tchannelSettings.showBrowseView = channelSettingsOptions.showBrowseView as boolean;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.trackingAnalyticsAccountId) {\n\t\t\t\t\t\t\t\t\tchannelSettings.trackingAnalyticsAccountId =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.trackingAnalyticsAccountId as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (channelSettingsOptions.unsubscribedTrailer) {\n\t\t\t\t\t\t\t\t\tchannelSettings.unsubscribedTrailer =\n\t\t\t\t\t\t\t\t\t\tchannelSettingsOptions.unsubscribedTrailer as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst imageSettingsValues = (updateFields.brandingSettingsUi as IDataObject)\n\t\t\t\t\t\t\t\t.imageSettingsValues as IDataObject | undefined;\n\t\t\t\t\t\t\tconst imageSettings: IDataObject = {};\n\t\t\t\t\t\t\tif (imageSettingsValues?.image) {\n\t\t\t\t\t\t\t\tconst imageSettingsOptions = imageSettings.image as IDataObject;\n\t\t\t\t\t\t\t\tif (imageSettingsOptions.bannerExternalUrl) {\n\t\t\t\t\t\t\t\t\timageSettings.bannerExternalUrl =\n\t\t\t\t\t\t\t\t\t\timageSettingsOptions.bannerExternalUrl as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (imageSettingsOptions.trackingImageUrl) {\n\t\t\t\t\t\t\t\t\timageSettings.trackingImageUrl = imageSettingsOptions.trackingImageUrl as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (imageSettingsOptions.watchIconImageUrl) {\n\t\t\t\t\t\t\t\t\timageSettings.watchIconImageUrl =\n\t\t\t\t\t\t\t\t\t\timageSettingsOptions.watchIconImageUrl as string;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.brandingSettings.channel = channelSettings;\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.brandingSettings.image = imageSettings;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/channelBanners/insert\n\t\t\t\t\tif (operation === 'uploadBanner') {\n\t\t\t\t\t\tconst channelId = this.getNodeParameter('channelId', i) as string;\n\t\t\t\t\t\tconst binaryProperty = this.getNodeParameter('binaryProperty', i);\n\t\t\t\t\t\tconst binaryData = this.helpers.assertBinaryData(i, binaryProperty);\n\t\t\t\t\t\tconst body = await this.helpers.getBinaryDataBuffer(i, binaryProperty);\n\n\t\t\t\t\t\tconst requestOptions = {\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t...(binaryData.mimeType ? { 'Content-Type': binaryData.mimeType } : {}),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tjson: false,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst response = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/upload/youtube/v3/channelBanners/insert',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\trequestOptions,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst { url } = JSON.parse(response as string);\n\n\t\t\t\t\t\tqs.part = 'brandingSettings';\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t'/youtube/v3/channels',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: channelId,\n\t\t\t\t\t\t\t\tbrandingSettings: {\n\t\t\t\t\t\t\t\t\timage: {\n\t\t\t\t\t\t\t\t\t\tbannerExternalUrl: url,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'playlist') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/list\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'localizations', 'player', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = playlistId;\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'localizations', 'player', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tObject.assign(qs, options, filters);\n\n\t\t\t\t\t\tqs.mine = true;\n\n\t\t\t\t\t\tif (qs.channelId || qs.id) {\n\t\t\t\t\t\t\tdelete qs.mine;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/insert\n\t\t\t\t\tif (operation === 'create') {\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tqs.part = 'snippet';\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.tags) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.tags = (options.tags as string).split(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.description) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.privacyStatus = options.privacyStatus as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.defaultLanguage) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.defaultLanguage = options.defaultLanguage as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwnerChannel) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwnerChannel = options.onBehalfOfContentOwnerChannel as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/update\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\n\t\t\t\t\t\tqs.part = 'snippet, status';\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: playlistId,\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus: {},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (updateFields.tags) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.tags = (updateFields.tags as string).split(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.privacyStatus) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.privacyStatus = updateFields.privacyStatus as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.description) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.description = updateFields.description as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.defaultLanguage) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.defaultLanguage = updateFields.defaultLanguage as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = updateFields.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'PUT',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/delete\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: playlistId,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'DELETE',\n\t\t\t\t\t\t\t'/youtube/v3/playlists',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'playlistItem') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/list\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst playlistItemId = this.getNodeParameter('playlistItemId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = playlistItemId;\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\t//const filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = ['contentDetails', 'id', 'snippet', 'status'];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.playlistId = playlistId;\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/insert\n\t\t\t\t\tif (operation === 'add') {\n\t\t\t\t\t\tconst playlistId = this.getNodeParameter('playlistId', i) as string;\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tqs.part = 'snippet, contentDetails';\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\tplaylistId,\n\t\t\t\t\t\t\t\tresourceId: {\n\t\t\t\t\t\t\t\t\tkind: 'youtube#video',\n\t\t\t\t\t\t\t\t\tvideoId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcontentDetails: {},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.position) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.position = options.position as number;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.note) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.contentDetails.note = options.note as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.startAt) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.contentDetails.startAt = options.startAt as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.endAt) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.contentDetails.endAt = options.endAt as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlistItems/delete\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst playlistItemId = this.getNodeParameter('playlistItemId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: playlistItemId,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'DELETE',\n\t\t\t\t\t\t\t'/youtube/v3/playlistItems',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'video') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/search/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst filters = this.getNodeParameter('filters', i);\n\n\t\t\t\t\t\tqs.part = 'snippet';\n\n\t\t\t\t\t\tqs.type = 'video';\n\n\t\t\t\t\t\tqs.forMine = true;\n\n\t\t\t\t\t\tif (filters.publishedAfter) {\n\t\t\t\t\t\t\tvalidateAndSetDate(filters, 'publishedAfter', this.getTimezone(), this);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (filters.publishedBefore) {\n\t\t\t\t\t\t\tvalidateAndSetDate(filters, 'publishedBefore', this.getTimezone(), this);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tObject.assign(qs, options, filters);\n\n\t\t\t\t\t\tif (Object.keys(filters).length > 0) {\n\t\t\t\t\t\t\tdelete qs.forMine;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (qs.relatedToVideoId && qs.forDeveloper !== undefined) {\n\t\t\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\t\t\tthis.getNode(),\n\t\t\t\t\t\t\t\t\"When using the parameter 'related to video' the parameter 'for developer' cannot be set\",\n\t\t\t\t\t\t\t\t{ itemIndex: i },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (returnAll) {\n\t\t\t\t\t\t\tresponseData = await googleApiRequestAllItems.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t'items',\n\t\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t\t'/youtube/v3/search',\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tqs.maxResults = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/youtube/v3/search', {}, qs);\n\t\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videos/list?hl=en\n\t\t\t\t\tif (operation === 'get') {\n\t\t\t\t\t\tlet part = this.getNodeParameter('part', i) as string[];\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tif (part.includes('*')) {\n\t\t\t\t\t\t\tpart = [\n\t\t\t\t\t\t\t\t'contentDetails',\n\t\t\t\t\t\t\t\t'id',\n\t\t\t\t\t\t\t\t'liveStreamingDetails',\n\t\t\t\t\t\t\t\t'localizations',\n\t\t\t\t\t\t\t\t'player',\n\t\t\t\t\t\t\t\t'recordingDetails',\n\t\t\t\t\t\t\t\t'snippet',\n\t\t\t\t\t\t\t\t'statistics',\n\t\t\t\t\t\t\t\t'status',\n\t\t\t\t\t\t\t\t'topicDetails',\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tqs.part = part.join(',');\n\n\t\t\t\t\t\tqs.id = videoId;\n\n\t\t\t\t\t\tObject.assign(qs, options);\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'GET', '/youtube/v3/videos', {}, qs);\n\n\t\t\t\t\t\tresponseData = responseData.items;\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/guides/uploading_a_video?hl=en\n\t\t\t\t\tif (operation === 'upload') {\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst categoryId = this.getNodeParameter('categoryId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\t\t\t\t\t\tconst binaryProperty = this.getNodeParameter('binaryProperty', i);\n\n\t\t\t\t\t\tconst binaryData = this.helpers.assertBinaryData(i, binaryProperty);\n\n\t\t\t\t\t\tlet mimeType: string;\n\t\t\t\t\t\tlet contentLength: number;\n\t\t\t\t\t\tlet fileContent: Readable;\n\n\t\t\t\t\t\tif (binaryData.id) {\n\t\t\t\t\t\t\t// Stream data in 256KB chunks, and upload the via the resumable upload api\n\t\t\t\t\t\t\tfileContent = await this.helpers.getBinaryStream(binaryData.id, UPLOAD_CHUNK_SIZE);\n\t\t\t\t\t\t\tconst metadata = await this.helpers.getBinaryMetadata(binaryData.id);\n\t\t\t\t\t\t\tcontentLength = metadata.fileSize;\n\t\t\t\t\t\t\tmimeType = metadata.mimeType ?? binaryData.mimeType;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst buffer = Buffer.from(binaryData.data, BINARY_ENCODING);\n\t\t\t\t\t\t\tfileContent = Readable.from(buffer);\n\t\t\t\t\t\t\tcontentLength = buffer.length;\n\t\t\t\t\t\t\tmimeType = binaryData.mimeType;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst payload = {\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tcategoryId,\n\t\t\t\t\t\t\t\tdescription: options.description,\n\t\t\t\t\t\t\t\ttags: (options.tags as string)?.split(','),\n\t\t\t\t\t\t\t\tdefaultLanguage: options.defaultLanguage,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus: {\n\t\t\t\t\t\t\t\tprivacyStatus: options.privacyStatus,\n\t\t\t\t\t\t\t\tembeddable: options.embeddable,\n\t\t\t\t\t\t\t\tpublicStatsViewable: options.publicStatsViewable,\n\t\t\t\t\t\t\t\tpublishAt: options.publishAt,\n\t\t\t\t\t\t\t\tselfDeclaredMadeForKids: options.selfDeclaredMadeForKids,\n\t\t\t\t\t\t\t\tlicense: options.license,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trecordingDetails: {\n\t\t\t\t\t\t\t\trecordingDate: options.recordingDate,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst resumableUpload = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/upload/youtube/v3/videos',\n\t\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tuploadType: 'resumable',\n\t\t\t\t\t\t\t\tpart: 'snippet,status,recordingDetails',\n\t\t\t\t\t\t\t\tnotifySubscribers: options.notifySubscribers ?? false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t'X-Upload-Content-Length': contentLength,\n\t\t\t\t\t\t\t\t\t'X-Upload-Content-Type': mimeType,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tjson: true,\n\t\t\t\t\t\t\t\tresolveWithFullResponse: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst uploadUrl = resumableUpload.headers.location;\n\n\t\t\t\t\t\tlet uploadId;\n\t\t\t\t\t\tlet offset = 0;\n\t\t\t\t\t\tfor await (const chunk of fileContent) {\n\t\t\t\t\t\t\tconst nextOffset = offset + Number(chunk.length);\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst response = await this.helpers.httpRequest({\n\t\t\t\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t\t\t\t\turl: uploadUrl,\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t'Content-Length': chunk.length,\n\t\t\t\t\t\t\t\t\t\t'Content-Range': `bytes ${offset}-${nextOffset - 1}/${contentLength}`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tbody: chunk,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tuploadId = response.id;\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tif (error.response?.status !== 308) throw error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\toffset = nextOffset;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = { uploadId, ...resumableUpload.body };\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/playlists/update\n\t\t\t\t\tif (operation === 'update') {\n\t\t\t\t\t\tconst id = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst title = this.getNodeParameter('title', i) as string;\n\t\t\t\t\t\tconst categoryId = this.getNodeParameter('categoryId', i) as string;\n\t\t\t\t\t\tconst updateFields = this.getNodeParameter('updateFields', i);\n\n\t\t\t\t\t\tqs.part = 'snippet, status, recordingDetails';\n\n\t\t\t\t\t\tconst body = {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tsnippet: {\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tcategoryId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus: {},\n\t\t\t\t\t\t\trecordingDetails: {},\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (updateFields.description) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.description = updateFields.description as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.privacyStatus) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.privacyStatus = updateFields.privacyStatus as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.tags) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.tags = (updateFields.tags as string).split(',');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.embeddable) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.embeddable = updateFields.embeddable as boolean;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.publicStatsViewable) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.publicStatsViewable = updateFields.publicStatsViewable as boolean;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.publishAt) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.publishAt = updateFields.publishAt as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.selfDeclaredMadeForKids) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.selfDeclaredMadeForKids = updateFields.selfDeclaredMadeForKids as boolean;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.recordingDate) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.recordingDetails.recordingDate = updateFields.recordingDate as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.license) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.status.license = updateFields.license as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (updateFields.defaultLanguage) {\n\t\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\t\tbody.snippet.defaultLanguage = updateFields.defaultLanguage as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'PUT', '/youtube/v3/videos', body, qs);\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videos/delete?hl=en\n\t\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst options = this.getNodeParameter('options', i);\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: videoId,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (options.onBehalfOfContentOwner) {\n\t\t\t\t\t\t\tqs.onBehalfOfContentOwner = options.onBehalfOfContentOwner as string;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(this, 'DELETE', '/youtube/v3/videos', body);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videos/rate?hl=en\n\t\t\t\t\tif (operation === 'rate') {\n\t\t\t\t\t\tconst videoId = this.getNodeParameter('videoId', i) as string;\n\t\t\t\t\t\tconst rating = this.getNodeParameter('rating', i) as string;\n\n\t\t\t\t\t\tconst body: IDataObject = {\n\t\t\t\t\t\t\tid: videoId,\n\t\t\t\t\t\t\trating,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'POST',\n\t\t\t\t\t\t\t'/youtube/v3/videos/rate',\n\t\t\t\t\t\t\tbody,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tresponseData = { success: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (resource === 'videoCategory') {\n\t\t\t\t\t//https://developers.google.com/youtube/v3/docs/videoCategories/list\n\t\t\t\t\tif (operation === 'getAll') {\n\t\t\t\t\t\tconst returnAll = this.getNodeParameter('returnAll', i);\n\t\t\t\t\t\tconst regionCode = this.getNodeParameter('regionCode', i) as string;\n\n\t\t\t\t\t\tqs.regionCode = regionCode;\n\n\t\t\t\t\t\tqs.part = 'snippet';\n\n\t\t\t\t\t\tresponseData = await googleApiRequest.call(\n\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t\t'/youtube/v3/videoCategories',\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tqs,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresponseData = responseData.items;\n\n\t\t\t\t\t\tif (!returnAll) {\n\t\t\t\t\t\t\tconst limit = this.getNodeParameter('limit', i);\n\t\t\t\t\t\t\tresponseData = responseData.splice(0, limit);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (this.continueOnFail()) {\n\t\t\t\t\tconst executionErrorData = this.helpers.constructExecutionMetaData(\n\t\t\t\t\t\tthis.helpers.returnJsonArray({ error: error.message }),\n\t\t\t\t\t\t{ itemData: { item: i } },\n\t\t\t\t\t);\n\t\t\t\t\treturnData.push(...executionErrorData);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst executionData = this.helpers.constructExecutionMetaData(\n\t\t\t\tthis.helpers.returnJsonArray(responseData as IDataObject[]),\n\t\t\t\t{ itemData: { item: i } },\n\t\t\t);\n\n\t\t\treturnData.push(...executionData);\n\t\t}\n\n\t\treturn [returnData];\n\t}\n}\n"],"mappings":"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","names":["import_GenericFunctions"]}
@@ -42,7 +42,7 @@ class Interval {
42
42
  outputs: [import_n8n_workflow.NodeConnectionTypes.Main],
43
43
  properties: [
44
44
  {
45
- displayName: `This workflow will run on the schedule you define here once you <a data-key="activate">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking 'test workflow'`,
45
+ displayName: `This workflow will run on the schedule you define here once you <a data-key="activate">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking 'execute workflow'`,
46
46
  name: "notice",
47
47
  type: "notice",
48
48
  default: ""
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/Interval/Interval.node.ts"],"sourcesContent":["import type {\n\tITriggerFunctions,\n\tINodeType,\n\tINodeTypeDescription,\n\tITriggerResponse,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError } from 'n8n-workflow';\n\nexport class Interval implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Interval',\n\t\tname: 'interval',\n\t\ticon: 'fa:hourglass',\n\t\tgroup: ['trigger', 'schedule'],\n\t\tversion: 1,\n\t\thidden: true,\n\t\tdescription: 'Triggers the workflow in a given interval',\n\t\teventTriggerDescription: '',\n\t\tactivationMessage:\n\t\t\t'Your interval trigger will now trigger executions on the schedule you have defined.',\n\t\tdefaults: {\n\t\t\tname: 'Interval',\n\t\t\tcolor: '#00FF00',\n\t\t},\n\n\t\tinputs: [],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'This workflow will run on the schedule you define here once you <a data-key=\"activate\">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking \\'test workflow\\'',\n\t\t\t\tname: 'notice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Interval',\n\t\t\t\tname: 'interval',\n\t\t\t\ttype: 'number',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tminValue: 1,\n\t\t\t\t},\n\t\t\t\tdefault: 1,\n\t\t\t\tdescription: 'Interval value',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Unit',\n\t\t\t\tname: 'unit',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Seconds',\n\t\t\t\t\t\tvalue: 'seconds',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Minutes',\n\t\t\t\t\t\tvalue: 'minutes',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Hours',\n\t\t\t\t\t\tvalue: 'hours',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'seconds',\n\t\t\t\tdescription: 'Unit of the interval value',\n\t\t\t},\n\t\t],\n\t};\n\n\tasync trigger(this: ITriggerFunctions): Promise<ITriggerResponse> {\n\t\tconst interval = this.getNodeParameter('interval') as number;\n\t\tconst unit = this.getNodeParameter('unit') as string;\n\n\t\tif (interval <= 0) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t'The interval has to be set to at least 1 or higher!',\n\t\t\t);\n\t\t}\n\n\t\tlet intervalValue = interval;\n\t\tif (unit === 'minutes') {\n\t\t\tintervalValue *= 60;\n\t\t}\n\t\tif (unit === 'hours') {\n\t\t\tintervalValue *= 60 * 60;\n\t\t}\n\n\t\tconst executeTrigger = () => {\n\t\t\tthis.emit([this.helpers.returnJsonArray([{}])]);\n\t\t};\n\n\t\tintervalValue *= 1000;\n\n\t\t// Reference: https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args\n\t\tif (intervalValue > 2147483647) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'The interval value is too large.');\n\t\t}\n\n\t\tconst intervalObj = setInterval(executeTrigger, intervalValue);\n\n\t\tasync function closeFunction() {\n\t\t\tclearInterval(intervalObj);\n\t\t}\n\n\t\tasync function manualTriggerFunction() {\n\t\t\texecuteTrigger();\n\t\t}\n\n\t\treturn {\n\t\t\tcloseFunction,\n\t\t\tmanualTriggerFunction,\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,0BAAwD;AAEjD,MAAM,SAA8B;AAAA,EAApC;AACN,uBAAoC;AAAA,MACnC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,CAAC,WAAW,UAAU;AAAA,MAC7B,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,yBAAyB;AAAA,MACzB,mBACC;AAAA,MACD,UAAU;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MAEA,QAAQ,CAAC;AAAA,MACT,SAAS,CAAC,wCAAoB,IAAI;AAAA,MAClC,YAAY;AAAA,QACX;AAAA,UACC,aACC;AAAA,UACD,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,aAAa;AAAA,YACZ,UAAU;AAAA,UACX;AAAA,UACA,SAAS;AAAA,UACT,aAAa;AAAA,QACd;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,UACD;AAAA,UACA,SAAS;AAAA,UACT,aAAa;AAAA,QACd;AAAA,MACD;AAAA,IACD;AAAA;AAAA,EAEA,MAAM,UAA4D;AACjE,UAAM,WAAW,KAAK,iBAAiB,UAAU;AACjD,UAAM,OAAO,KAAK,iBAAiB,MAAM;AAEzC,QAAI,YAAY,GAAG;AAClB,YAAM,IAAI;AAAA,QACT,KAAK,QAAQ;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAEA,QAAI,gBAAgB;AACpB,QAAI,SAAS,WAAW;AACvB,uBAAiB;AAAA,IAClB;AACA,QAAI,SAAS,SAAS;AACrB,uBAAiB,KAAK;AAAA,IACvB;AAEA,UAAM,iBAAiB,MAAM;AAC5B,WAAK,KAAK,CAAC,KAAK,QAAQ,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,IAC/C;AAEA,qBAAiB;AAGjB,QAAI,gBAAgB,YAAY;AAC/B,YAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,kCAAkC;AAAA,IAChF;AAEA,UAAM,cAAc,YAAY,gBAAgB,aAAa;AAE7D,mBAAe,gBAAgB;AAC9B,oBAAc,WAAW;AAAA,IAC1B;AAEA,mBAAe,wBAAwB;AACtC,qBAAe;AAAA,IAChB;AAEA,WAAO;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../nodes/Interval/Interval.node.ts"],"sourcesContent":["import type {\n\tITriggerFunctions,\n\tINodeType,\n\tINodeTypeDescription,\n\tITriggerResponse,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError } from 'n8n-workflow';\n\nexport class Interval implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Interval',\n\t\tname: 'interval',\n\t\ticon: 'fa:hourglass',\n\t\tgroup: ['trigger', 'schedule'],\n\t\tversion: 1,\n\t\thidden: true,\n\t\tdescription: 'Triggers the workflow in a given interval',\n\t\teventTriggerDescription: '',\n\t\tactivationMessage:\n\t\t\t'Your interval trigger will now trigger executions on the schedule you have defined.',\n\t\tdefaults: {\n\t\t\tname: 'Interval',\n\t\t\tcolor: '#00FF00',\n\t\t},\n\n\t\tinputs: [],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'This workflow will run on the schedule you define here once you <a data-key=\"activate\">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking \\'execute workflow\\'',\n\t\t\t\tname: 'notice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Interval',\n\t\t\t\tname: 'interval',\n\t\t\t\ttype: 'number',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tminValue: 1,\n\t\t\t\t},\n\t\t\t\tdefault: 1,\n\t\t\t\tdescription: 'Interval value',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Unit',\n\t\t\t\tname: 'unit',\n\t\t\t\ttype: 'options',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Seconds',\n\t\t\t\t\t\tvalue: 'seconds',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Minutes',\n\t\t\t\t\t\tvalue: 'minutes',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'Hours',\n\t\t\t\t\t\tvalue: 'hours',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdefault: 'seconds',\n\t\t\t\tdescription: 'Unit of the interval value',\n\t\t\t},\n\t\t],\n\t};\n\n\tasync trigger(this: ITriggerFunctions): Promise<ITriggerResponse> {\n\t\tconst interval = this.getNodeParameter('interval') as number;\n\t\tconst unit = this.getNodeParameter('unit') as string;\n\n\t\tif (interval <= 0) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t'The interval has to be set to at least 1 or higher!',\n\t\t\t);\n\t\t}\n\n\t\tlet intervalValue = interval;\n\t\tif (unit === 'minutes') {\n\t\t\tintervalValue *= 60;\n\t\t}\n\t\tif (unit === 'hours') {\n\t\t\tintervalValue *= 60 * 60;\n\t\t}\n\n\t\tconst executeTrigger = () => {\n\t\t\tthis.emit([this.helpers.returnJsonArray([{}])]);\n\t\t};\n\n\t\tintervalValue *= 1000;\n\n\t\t// Reference: https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_args\n\t\tif (intervalValue > 2147483647) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'The interval value is too large.');\n\t\t}\n\n\t\tconst intervalObj = setInterval(executeTrigger, intervalValue);\n\n\t\tasync function closeFunction() {\n\t\t\tclearInterval(intervalObj);\n\t\t}\n\n\t\tasync function manualTriggerFunction() {\n\t\t\texecuteTrigger();\n\t\t}\n\n\t\treturn {\n\t\t\tcloseFunction,\n\t\t\tmanualTriggerFunction,\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,0BAAwD;AAEjD,MAAM,SAA8B;AAAA,EAApC;AACN,uBAAoC;AAAA,MACnC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,CAAC,WAAW,UAAU;AAAA,MAC7B,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,yBAAyB;AAAA,MACzB,mBACC;AAAA,MACD,UAAU;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MAEA,QAAQ,CAAC;AAAA,MACT,SAAS,CAAC,wCAAoB,IAAI;AAAA,MAClC,YAAY;AAAA,QACX;AAAA,UACC,aACC;AAAA,UACD,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,aAAa;AAAA,YACZ,UAAU;AAAA,UACX;AAAA,UACA,SAAS;AAAA,UACT,aAAa;AAAA,QACd;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,YACR;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AAAA,UACD;AAAA,UACA,SAAS;AAAA,UACT,aAAa;AAAA,QACd;AAAA,MACD;AAAA,IACD;AAAA;AAAA,EAEA,MAAM,UAA4D;AACjE,UAAM,WAAW,KAAK,iBAAiB,UAAU;AACjD,UAAM,OAAO,KAAK,iBAAiB,MAAM;AAEzC,QAAI,YAAY,GAAG;AAClB,YAAM,IAAI;AAAA,QACT,KAAK,QAAQ;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAEA,QAAI,gBAAgB;AACpB,QAAI,SAAS,WAAW;AACvB,uBAAiB;AAAA,IAClB;AACA,QAAI,SAAS,SAAS;AACrB,uBAAiB,KAAK;AAAA,IACvB;AAEA,UAAM,iBAAiB,MAAM;AAC5B,WAAK,KAAK,CAAC,KAAK,QAAQ,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,IAC/C;AAEA,qBAAiB;AAGjB,QAAI,gBAAgB,YAAY;AAC/B,YAAM,IAAI,uCAAmB,KAAK,QAAQ,GAAG,kCAAkC;AAAA,IAChF;AAEA,UAAM,cAAc,YAAY,gBAAgB,aAAa;AAE7D,mBAAe,gBAAgB;AAC9B,oBAAc,WAAW;AAAA,IAC1B;AAEA,mBAAe,wBAAwB;AACtC,qBAAe;AAAA,IAChB;AAEA,WAAO;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;","names":[]}
@@ -42,8 +42,8 @@ class LocalFileTrigger {
42
42
  triggerPanel: {
43
43
  header: "",
44
44
  executionsHelp: {
45
- inactive: "<b>While building your workflow</b>, click the 'test step' button, then make a change to your watched file or folder. This will trigger an execution, which will show up in this editor.<br /> <br /><b>Once you're happy with your workflow</b>, <a data-key='activate'>activate</a> it. Then every time a change is detected, the workflow will execute. These executions will show up in the <a data-key='executions'>executions list</a>, but not in the editor.",
46
- active: "<b>While building your workflow</b>, click the 'test step' button, then make a change to your watched file or folder. This will trigger an execution, which will show up in this editor.<br /> <br /><b>Your workflow will also execute automatically</b>, since it's activated. Every time a change is detected, this node will trigger an execution. These executions will show up in the <a data-key='executions'>executions list</a>, but not in the editor."
45
+ inactive: "<b>While building your workflow</b>, click the 'execute step' button, then make a change to your watched file or folder. This will trigger an execution, which will show up in this editor.<br /> <br /><b>Once you're happy with your workflow</b>, <a data-key='activate'>activate</a> it. Then every time a change is detected, the workflow will execute. These executions will show up in the <a data-key='executions'>executions list</a>, but not in the editor.",
46
+ active: "<b>While building your workflow</b>, click the 'execute step' button, then make a change to your watched file or folder. This will trigger an execution, which will show up in this editor.<br /> <br /><b>Your workflow will also execute automatically</b>, since it's activated. Every time a change is detected, this node will trigger an execution. These executions will show up in the <a data-key='executions'>executions list</a>, but not in the editor."
47
47
  },
48
48
  activationHint: "Once you\u2019ve finished building your workflow, <a data-key='activate'>activate</a> it to have it also listen continuously (you just won\u2019t see those executions here)."
49
49
  },