n8n-nodes-base 1.92.0 → 1.94.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 (274) hide show
  1. package/dist/credentials/AirtopApi.credentials.js +2 -1
  2. package/dist/credentials/AirtopApi.credentials.js.map +1 -1
  3. package/dist/credentials/JinaAiApi.credentials.js +1 -1
  4. package/dist/credentials/JinaAiApi.credentials.js.map +1 -1
  5. package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js +0 -9
  6. package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js.map +1 -1
  7. package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js +13 -0
  8. package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js.map +1 -1
  9. package/dist/credentials/Snowflake.credentials.js +46 -2
  10. package/dist/credentials/Snowflake.credentials.js.map +1 -1
  11. package/dist/known/credentials.json +10 -1
  12. package/dist/known/nodes.json +20 -4
  13. package/dist/methods/defined.json +6 -0
  14. package/dist/methods/referenced.json +3 -0
  15. package/dist/nodes/Airtop/Airtop.node.js +14 -8
  16. package/dist/nodes/Airtop/Airtop.node.js.map +1 -1
  17. package/dist/nodes/Airtop/GenericFunctions.js +87 -15
  18. package/dist/nodes/Airtop/GenericFunctions.js.map +1 -1
  19. package/dist/nodes/Airtop/actions/common/fields.js +9 -0
  20. package/dist/nodes/Airtop/actions/common/fields.js.map +1 -1
  21. package/dist/nodes/Airtop/actions/common/output.utils.js +79 -0
  22. package/dist/nodes/Airtop/actions/common/output.utils.js.map +1 -0
  23. package/dist/nodes/Airtop/actions/common/session.utils.js +2 -2
  24. package/dist/nodes/Airtop/actions/common/session.utils.js.map +1 -1
  25. package/dist/nodes/Airtop/actions/extraction/getPaginated.operation.js +13 -4
  26. package/dist/nodes/Airtop/actions/extraction/getPaginated.operation.js.map +1 -1
  27. package/dist/nodes/Airtop/actions/extraction/query.operation.js +21 -3
  28. package/dist/nodes/Airtop/actions/extraction/query.operation.js.map +1 -1
  29. package/dist/nodes/Airtop/actions/extraction/scrape.operation.js +2 -1
  30. package/dist/nodes/Airtop/actions/extraction/scrape.operation.js.map +1 -1
  31. package/dist/nodes/Airtop/actions/file/File.resource.js +104 -0
  32. package/dist/nodes/Airtop/actions/file/File.resource.js.map +1 -0
  33. package/dist/nodes/Airtop/actions/file/delete.operation.js +60 -0
  34. package/dist/nodes/Airtop/actions/file/delete.operation.js.map +1 -0
  35. package/dist/nodes/Airtop/actions/file/get.operation.js +91 -0
  36. package/dist/nodes/Airtop/actions/file/get.operation.js.map +1 -0
  37. package/dist/nodes/Airtop/actions/file/getMany.operation.js +100 -0
  38. package/dist/nodes/Airtop/actions/file/getMany.operation.js.map +1 -0
  39. package/dist/nodes/Airtop/actions/file/helpers.js +199 -0
  40. package/dist/nodes/Airtop/actions/file/helpers.js.map +1 -0
  41. package/dist/nodes/Airtop/actions/file/load.operation.js +85 -0
  42. package/dist/nodes/Airtop/actions/file/load.operation.js.map +1 -0
  43. package/dist/nodes/Airtop/actions/file/upload.operation.js +186 -0
  44. package/dist/nodes/Airtop/actions/file/upload.operation.js.map +1 -0
  45. package/dist/nodes/Airtop/actions/interaction/Interaction.resource.js +22 -1
  46. package/dist/nodes/Airtop/actions/interaction/Interaction.resource.js.map +1 -1
  47. package/dist/nodes/Airtop/actions/interaction/fill.operation.js +89 -0
  48. package/dist/nodes/Airtop/actions/interaction/fill.operation.js.map +1 -0
  49. package/dist/nodes/Airtop/actions/interaction/scroll.operation.js +219 -0
  50. package/dist/nodes/Airtop/actions/interaction/scroll.operation.js.map +1 -0
  51. package/dist/nodes/Airtop/actions/node.type.js.map +1 -1
  52. package/dist/nodes/Airtop/actions/router.js +13 -4
  53. package/dist/nodes/Airtop/actions/router.js.map +1 -1
  54. package/dist/nodes/Airtop/actions/session/create.operation.js +85 -32
  55. package/dist/nodes/Airtop/actions/session/create.operation.js.map +1 -1
  56. package/dist/nodes/Airtop/actions/window/Window.resource.js +2 -1
  57. package/dist/nodes/Airtop/actions/window/Window.resource.js.map +1 -1
  58. package/dist/nodes/Airtop/actions/window/create.operation.js +1 -1
  59. package/dist/nodes/Airtop/actions/window/create.operation.js.map +1 -1
  60. package/dist/nodes/Airtop/actions/window/takeScreenshot.operation.js +26 -3
  61. package/dist/nodes/Airtop/actions/window/takeScreenshot.operation.js.map +1 -1
  62. package/dist/nodes/Airtop/constants.js +38 -5
  63. package/dist/nodes/Airtop/constants.js.map +1 -1
  64. package/dist/nodes/Airtop/countries.js +1026 -0
  65. package/dist/nodes/Airtop/countries.js.map +1 -0
  66. package/dist/nodes/Airtop/transport/index.js +6 -3
  67. package/dist/nodes/Airtop/transport/index.js.map +1 -1
  68. package/dist/nodes/Airtop/transport/types.js.map +1 -1
  69. package/dist/nodes/Aws/IAM/AwsIam.node.js +95 -0
  70. package/dist/nodes/Aws/IAM/AwsIam.node.js.map +1 -0
  71. package/dist/nodes/Aws/IAM/AwsIam.node.json +18 -0
  72. package/dist/nodes/Aws/IAM/AwsIam.svg +18 -0
  73. package/dist/nodes/Aws/IAM/descriptions/common.js +188 -0
  74. package/dist/nodes/Aws/IAM/descriptions/common.js.map +1 -0
  75. package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js +175 -0
  76. package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js.map +1 -0
  77. package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js +66 -0
  78. package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js.map +1 -0
  79. package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js +43 -0
  80. package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js.map +1 -0
  81. package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js +50 -0
  82. package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js.map +1 -0
  83. package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js +47 -0
  84. package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js.map +1 -0
  85. package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js +70 -0
  86. package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js.map +1 -0
  87. package/dist/nodes/Aws/IAM/descriptions/index.js +42 -0
  88. package/dist/nodes/Aws/IAM/descriptions/index.js.map +1 -0
  89. package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js +231 -0
  90. package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js.map +1 -0
  91. package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js +47 -0
  92. package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js.map +1 -0
  93. package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js +118 -0
  94. package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js.map +1 -0
  95. package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js +43 -0
  96. package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js.map +1 -0
  97. package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js +43 -0
  98. package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js.map +1 -0
  99. package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js +66 -0
  100. package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js.map +1 -0
  101. package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js +74 -0
  102. package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js.map +1 -0
  103. package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js +68 -0
  104. package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js.map +1 -0
  105. package/dist/nodes/Aws/IAM/helpers/constants.js +47 -0
  106. package/dist/nodes/Aws/IAM/helpers/constants.js.map +1 -0
  107. package/dist/nodes/Aws/IAM/helpers/errorHandler.js +90 -0
  108. package/dist/nodes/Aws/IAM/helpers/errorHandler.js.map +1 -0
  109. package/dist/nodes/Aws/IAM/helpers/types.js +17 -0
  110. package/dist/nodes/Aws/IAM/helpers/types.js.map +1 -0
  111. package/dist/nodes/Aws/IAM/helpers/utils.js +279 -0
  112. package/dist/nodes/Aws/IAM/helpers/utils.js.map +1 -0
  113. package/dist/nodes/Aws/IAM/methods/index.js +39 -0
  114. package/dist/nodes/Aws/IAM/methods/index.js.map +1 -0
  115. package/dist/nodes/Aws/IAM/methods/listSearch.js +132 -0
  116. package/dist/nodes/Aws/IAM/methods/listSearch.js.map +1 -0
  117. package/dist/nodes/Aws/IAM/transport/index.js +64 -0
  118. package/dist/nodes/Aws/IAM/transport/index.js.map +1 -0
  119. package/dist/nodes/Cron/Cron.node.js +1 -1
  120. package/dist/nodes/Cron/Cron.node.js.map +1 -1
  121. package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js +2 -2
  122. package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js.map +1 -1
  123. package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js +2 -2
  124. package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js.map +1 -1
  125. package/dist/nodes/Evaluation/Evaluation/Description.node.js +146 -0
  126. package/dist/nodes/Evaluation/Evaluation/Description.node.js.map +1 -0
  127. package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js +117 -0
  128. package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js.map +1 -0
  129. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js +187 -0
  130. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js.map +1 -0
  131. package/dist/nodes/Evaluation/methods/index.js +42 -0
  132. package/dist/nodes/Evaluation/methods/index.js.map +1 -0
  133. package/dist/nodes/Evaluation/methods/loadOptions.js +40 -0
  134. package/dist/nodes/Evaluation/methods/loadOptions.js.map +1 -0
  135. package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js +119 -0
  136. package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js.map +1 -0
  137. package/dist/nodes/Evaluation/utils/evaluationUtils.js +171 -0
  138. package/dist/nodes/Evaluation/utils/evaluationUtils.js.map +1 -0
  139. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js +4 -3
  140. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js.map +1 -1
  141. package/dist/nodes/Form/common.descriptions.js +2 -2
  142. package/dist/nodes/Form/common.descriptions.js.map +1 -1
  143. package/dist/nodes/Google/Drive/v2/actions/file/upload.operation.js +4 -1
  144. package/dist/nodes/Google/Drive/v2/actions/file/upload.operation.js.map +1 -1
  145. package/dist/nodes/Google/Firebase/CloudFirestore/GenericFunctions.js +1 -2
  146. package/dist/nodes/Google/Firebase/CloudFirestore/GenericFunctions.js.map +1 -1
  147. package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js +113 -107
  148. package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js.map +1 -1
  149. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js +52 -106
  150. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js.map +1 -1
  151. package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js +97 -0
  152. package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js.map +1 -0
  153. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js +20 -17
  154. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js.map +1 -1
  155. package/dist/nodes/Google/YouTube/YouTube.node.js +4 -2
  156. package/dist/nodes/Google/YouTube/YouTube.node.js.map +1 -1
  157. package/dist/nodes/HttpRequest/GenericFunctions.js +1 -1
  158. package/dist/nodes/HttpRequest/GenericFunctions.js.map +1 -1
  159. package/dist/nodes/Interval/Interval.node.js +1 -1
  160. package/dist/nodes/Interval/Interval.node.js.map +1 -1
  161. package/dist/nodes/Jira/Jira.node.js +34 -15
  162. package/dist/nodes/Jira/Jira.node.js.map +1 -1
  163. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js +2 -2
  164. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js.map +1 -1
  165. package/dist/nodes/MQTT/MqttTrigger.node.js +2 -2
  166. package/dist/nodes/MQTT/MqttTrigger.node.js.map +1 -1
  167. package/dist/nodes/ManualTrigger/ManualTrigger.node.js +1 -1
  168. package/dist/nodes/ManualTrigger/ManualTrigger.node.js.map +1 -1
  169. package/dist/nodes/Merge/Merge.node.js +3 -2
  170. package/dist/nodes/Merge/Merge.node.js.map +1 -1
  171. package/dist/nodes/Merge/v3/actions/mode/combineBySql.js +42 -4
  172. package/dist/nodes/Merge/v3/actions/mode/combineBySql.js.map +1 -1
  173. package/dist/nodes/Merge/v3/actions/versionDescription.js +1 -1
  174. package/dist/nodes/Merge/v3/actions/versionDescription.js.map +1 -1
  175. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js +93 -0
  176. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js.map +1 -0
  177. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharepoint.node.json +18 -0
  178. package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js +190 -0
  179. package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js.map +1 -0
  180. package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js +108 -0
  181. package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js.map +1 -0
  182. package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js +62 -0
  183. package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js.map +1 -0
  184. package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js +129 -0
  185. package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js.map +1 -0
  186. package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js +77 -0
  187. package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js.map +1 -0
  188. package/dist/nodes/Microsoft/SharePoint/descriptions/index.js +45 -0
  189. package/dist/nodes/Microsoft/SharePoint/descriptions/index.js.map +1 -0
  190. package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js +175 -0
  191. package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js.map +1 -0
  192. package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js +100 -0
  193. package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js.map +1 -0
  194. package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js +62 -0
  195. package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js.map +1 -0
  196. package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js +83 -0
  197. package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js.map +1 -0
  198. package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js +203 -0
  199. package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js.map +1 -0
  200. package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js +100 -0
  201. package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js.map +1 -0
  202. package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js +100 -0
  203. package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js.map +1 -0
  204. package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js +99 -0
  205. package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js.map +1 -0
  206. package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js +65 -0
  207. package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js.map +1 -0
  208. package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js +105 -0
  209. package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js.map +1 -0
  210. package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js +17 -0
  211. package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js.map +1 -0
  212. package/dist/nodes/Microsoft/SharePoint/helpers/utils.js +252 -0
  213. package/dist/nodes/Microsoft/SharePoint/helpers/utils.js.map +1 -0
  214. package/dist/nodes/Microsoft/SharePoint/methods/index.js +42 -0
  215. package/dist/nodes/Microsoft/SharePoint/methods/index.js.map +1 -0
  216. package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js +222 -0
  217. package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js.map +1 -0
  218. package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js +104 -0
  219. package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js.map +1 -0
  220. package/dist/nodes/Microsoft/SharePoint/test/credentials.js +54 -0
  221. package/dist/nodes/Microsoft/SharePoint/test/credentials.js.map +1 -0
  222. package/dist/nodes/Microsoft/SharePoint/transport/index.js +46 -0
  223. package/dist/nodes/Microsoft/SharePoint/transport/index.js.map +1 -0
  224. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js +387 -0
  225. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js.map +1 -0
  226. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.json +18 -0
  227. package/dist/nodes/Microsoft/Teams/v2/helpers/types.js +17 -0
  228. package/dist/nodes/Microsoft/Teams/v2/helpers/types.js.map +1 -0
  229. package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js +147 -0
  230. package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js.map +1 -0
  231. package/dist/nodes/Microsoft/Teams/v2/transport/index.js.map +1 -1
  232. package/dist/nodes/MongoDb/GenericFunctions.js +9 -2
  233. package/dist/nodes/MongoDb/GenericFunctions.js.map +1 -1
  234. package/dist/nodes/MongoDb/MongoDb.node.js +25 -5
  235. package/dist/nodes/MongoDb/MongoDb.node.js.map +1 -1
  236. package/dist/nodes/PostBin/BinDescription.js +1 -1
  237. package/dist/nodes/PostBin/BinDescription.js.map +1 -1
  238. package/dist/nodes/PostBin/GenericFunctions.js +5 -5
  239. package/dist/nodes/PostBin/GenericFunctions.js.map +1 -1
  240. package/dist/nodes/PostBin/PostBin.node.js +1 -1
  241. package/dist/nodes/PostBin/PostBin.node.js.map +1 -1
  242. package/dist/nodes/PostBin/RequestDescription.js +2 -2
  243. package/dist/nodes/PostBin/RequestDescription.js.map +1 -1
  244. package/dist/nodes/Postgres/PostgresTrigger.node.js +2 -2
  245. package/dist/nodes/Postgres/PostgresTrigger.node.js.map +1 -1
  246. package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js +2 -2
  247. package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js.map +1 -1
  248. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js +8 -3
  249. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js.map +1 -1
  250. package/dist/nodes/RespondToWebhook/utils.js +43 -0
  251. package/dist/nodes/RespondToWebhook/utils.js.map +1 -0
  252. package/dist/nodes/Schedule/ScheduleTrigger.node.js +1 -1
  253. package/dist/nodes/Schedule/ScheduleTrigger.node.js.map +1 -1
  254. package/dist/nodes/Snowflake/GenericFunctions.js +34 -2
  255. package/dist/nodes/Snowflake/GenericFunctions.js.map +1 -1
  256. package/dist/nodes/Snowflake/Snowflake.node.js +5 -7
  257. package/dist/nodes/Snowflake/Snowflake.node.js.map +1 -1
  258. package/dist/nodes/SseTrigger/SseTrigger.node.js +2 -2
  259. package/dist/nodes/SseTrigger/SseTrigger.node.js.map +1 -1
  260. package/dist/nodes/Telegram/Telegram.node.js +5 -1
  261. package/dist/nodes/Telegram/Telegram.node.js.map +1 -1
  262. package/dist/nodes/Transform/Summarize/utils.js +2 -1
  263. package/dist/nodes/Transform/Summarize/utils.js.map +1 -1
  264. package/dist/test/setup.js +1 -0
  265. package/dist/test/setup.js.map +1 -1
  266. package/dist/types/credentials.json +7 -7
  267. package/dist/types/nodes.json +27 -23
  268. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js +12 -2
  269. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js.map +1 -1
  270. package/package.json +15 -12
  271. package/dist/nodes/EvaluationMetrics/EvaluationMetrics.node.js +0 -119
  272. package/dist/nodes/EvaluationMetrics/EvaluationMetrics.node.js.map +0 -1
  273. package/dist/nodes/EvaluationMetrics/EvaluationMetrics.node.json +0 -14
  274. /package/dist/{credentials/icons/SharePoint.svg → nodes/Microsoft/SharePoint/microsoftSharePoint.svg} +0 -0
@@ -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"]}
@@ -63,7 +63,7 @@ function redact(obj, secrets) {
63
63
  return obj.map((item) => redact(item, secrets));
64
64
  } else if (isObject(obj)) {
65
65
  for (const [key, value] of Object.entries(obj)) {
66
- obj[key] = redact(value, secrets);
66
+ (0, import_n8n_workflow.setSafeObjectProperty)(obj, key, redact(value, secrets));
67
67
  }
68
68
  }
69
69
  return obj;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../nodes/HttpRequest/GenericFunctions.ts"],"sourcesContent":["import FormData from 'form-data';\nimport get from 'lodash/get';\nimport isPlainObject from 'lodash/isPlainObject';\nimport set from 'lodash/set';\nimport {\n\tdeepCopy,\n\ttype ICredentialDataDecryptedObject,\n\ttype IDataObject,\n\ttype INodeExecutionData,\n\ttype INodeProperties,\n\ttype IOAuth2Options,\n\ttype IRequestOptions,\n} from 'n8n-workflow';\nimport type { SecureContextOptions } from 'tls';\n\nimport type { HttpSslAuthCredentials } from './interfaces';\nimport { formatPrivateKey } from '../../utils/utilities';\n\nexport type BodyParameter = {\n\tname: string;\n\tvalue: string;\n\tparameterType?: 'formBinaryData' | 'formData';\n};\n\nexport type IAuthDataSanitizeKeys = {\n\t[key: string]: string[];\n};\n\nexport const replaceNullValues = (item: INodeExecutionData) => {\n\tif (item.json === null) {\n\t\titem.json = {};\n\t}\n\treturn item;\n};\n\nexport const REDACTED = '**hidden**';\n\nfunction isObject(obj: unknown): obj is IDataObject {\n\treturn isPlainObject(obj);\n}\n\nfunction redact<T = unknown>(obj: T, secrets: string[]): T {\n\tif (typeof obj === 'string') {\n\t\treturn secrets.reduce((safe, secret) => safe.replace(secret, REDACTED), obj) as T;\n\t}\n\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((item) => redact(item, secrets)) as T;\n\t} else if (isObject(obj)) {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\t(obj as IDataObject)[key] = redact(value, secrets);\n\t\t}\n\t}\n\n\treturn obj;\n}\n\nexport function sanitizeUiMessage(\n\trequest: IRequestOptions,\n\tauthDataKeys: IAuthDataSanitizeKeys,\n\tsecrets?: string[],\n) {\n\tconst { body, ...rest } = request as IDataObject;\n\n\tlet sendRequest: IDataObject = { body };\n\tfor (const [key, value] of Object.entries(rest)) {\n\t\tsendRequest[key] = deepCopy(value);\n\t}\n\n\t// Protect browser from sending large binary data\n\tif (Buffer.isBuffer(sendRequest.body) && sendRequest.body.length > 250000) {\n\t\tsendRequest = {\n\t\t\t...request,\n\t\t\tbody: `Binary data got replaced with this text. Original was a Buffer with a size of ${\n\t\t\t\t(request.body as string).length\n\t\t\t} bytes.`,\n\t\t};\n\t}\n\n\t// Remove credential information\n\tfor (const requestProperty of Object.keys(authDataKeys)) {\n\t\tsendRequest = {\n\t\t\t...sendRequest,\n\t\t\t[requestProperty]: Object.keys(sendRequest[requestProperty] as object).reduce(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-loop-func\n\t\t\t\t(acc: IDataObject, curr) => {\n\t\t\t\t\tacc[curr] = authDataKeys[requestProperty].includes(curr)\n\t\t\t\t\t\t? REDACTED\n\t\t\t\t\t\t: (sendRequest[requestProperty] as IDataObject)[curr];\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t),\n\t\t};\n\t}\n\tconst HEADER_BLOCKLIST = new Set([\n\t\t'authorization',\n\t\t'x-api-key',\n\t\t'x-auth-token',\n\t\t'cookie',\n\t\t'proxy-authorization',\n\t\t'sslclientcert',\n\t]);\n\n\tconst headers = sendRequest.headers as IDataObject;\n\n\tif (headers) {\n\t\tfor (const headerName of Object.keys(headers)) {\n\t\t\tif (HEADER_BLOCKLIST.has(headerName.toLowerCase())) {\n\t\t\t\theaders[headerName] = REDACTED;\n\t\t\t}\n\t\t}\n\t}\n\tif (secrets && secrets.length > 0) {\n\t\treturn redact(sendRequest, secrets);\n\t}\n\n\treturn sendRequest;\n}\n\nexport function getSecrets(\n\tproperties: INodeProperties[],\n\tcredentials: ICredentialDataDecryptedObject,\n): string[] {\n\tconst sensitivePropNames = new Set(\n\t\tproperties.filter((prop) => prop.typeOptions?.password).map((prop) => prop.name),\n\t);\n\n\tconst secrets = Object.entries(credentials)\n\t\t.filter(([propName]) => sensitivePropNames.has(propName))\n\t\t.map(([_, value]) => value)\n\t\t.filter((value): value is string => typeof value === 'string');\n\tconst oauthAccessToken = get(credentials, 'oauthTokenData.access_token');\n\tif (typeof oauthAccessToken === 'string') {\n\t\tsecrets.push(oauthAccessToken);\n\t}\n\n\treturn secrets;\n}\n\nexport const getOAuth2AdditionalParameters = (nodeCredentialType: string) => {\n\tconst oAuth2Options: { [credentialType: string]: IOAuth2Options } = {\n\t\tbitlyOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tboxOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tciscoWebexOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tclickUpOAuth2Api: {\n\t\t\tkeepBearer: false,\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tgoToWebinarOAuth2Api: {\n\t\t\ttokenExpiredStatusCode: 403,\n\t\t},\n\t\thubspotDeveloperApi: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\thubspotOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tlineNotifyOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tlinkedInOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tmailchimpOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tmauticOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tmicrosoftAzureMonitorOAuth2Api: {\n\t\t\ttokenExpiredStatusCode: 403,\n\t\t},\n\t\tmicrosoftDynamicsOAuth2Api: {\n\t\t\tproperty: 'id_token',\n\t\t},\n\t\tphilipsHueOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\traindropOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tshopifyOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tkeyToIncludeInAccessTokenHeader: 'X-Shopify-Access-Token',\n\t\t},\n\t\tslackOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tproperty: 'authed_user.access_token',\n\t\t},\n\t\tstravaOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t};\n\treturn oAuth2Options[nodeCredentialType];\n};\n\n//https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\nexport const binaryContentTypes = [\n\t'image/',\n\t'audio/',\n\t'video/',\n\t'application/octet-stream',\n\t'application/gzip',\n\t'application/zip',\n\t'application/vnd.rar',\n\t'application/epub+zip',\n\t'application/x-bzip',\n\t'application/x-bzip2',\n\t'application/x-cdf',\n\t'application/vnd.amazon.ebook',\n\t'application/msword',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t'application/vnd.ms-fontobject',\n\t'application/vnd.oasis.opendocument.presentation',\n\t'application/pdf',\n\t'application/x-tar',\n\t'application/vnd.visio',\n\t'application/vnd.ms-excel',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t'application/x-7z-compressed',\n];\n\nexport type BodyParametersReducer = (\n\tacc: IDataObject,\n\tcur: { name: string; value: string },\n) => Promise<IDataObject>;\n\nexport async function reduceAsync<T, R>(\n\tarr: T[],\n\treducer: (acc: Awaited<Promise<R>>, cur: T) => Promise<R>,\n\tinit: Promise<R> = Promise.resolve({} as R),\n): Promise<R> {\n\treturn await arr.reduce(async (promiseAcc, item) => {\n\t\treturn await reducer(await promiseAcc, item);\n\t}, init);\n}\n\nexport const prepareRequestBody = async (\n\tparameters: BodyParameter[],\n\tbodyType: string,\n\tversion: number,\n\tdefaultReducer: BodyParametersReducer,\n) => {\n\tif (bodyType === 'json' && version >= 4) {\n\t\treturn await parameters.reduce(async (acc, entry) => {\n\t\t\tconst result = await acc;\n\t\t\tset(result, entry.name, entry.value);\n\t\t\treturn result;\n\t\t}, Promise.resolve({}));\n\t} else if (bodyType === 'multipart-form-data' && version >= 4.2) {\n\t\tconst formData = new FormData();\n\n\t\tfor (const parameter of parameters) {\n\t\t\tif (parameter.parameterType === 'formBinaryData') {\n\t\t\t\tconst entry = await defaultReducer({}, parameter);\n\t\t\t\tconst key = Object.keys(entry)[0];\n\t\t\t\tconst data = entry[key] as { value: Buffer; options: FormData.AppendOptions };\n\t\t\t\tformData.append(key, data.value, data.options);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tformData.append(parameter.name, parameter.value);\n\t\t}\n\n\t\treturn formData;\n\t} else {\n\t\treturn await reduceAsync(parameters, defaultReducer);\n\t}\n};\n\nexport const setAgentOptions = (\n\trequestOptions: IRequestOptions,\n\tsslCertificates: HttpSslAuthCredentials | undefined,\n) => {\n\tif (sslCertificates) {\n\t\tconst agentOptions: SecureContextOptions = {};\n\t\tif (sslCertificates.ca) agentOptions.ca = formatPrivateKey(sslCertificates.ca);\n\t\tif (sslCertificates.cert) agentOptions.cert = formatPrivateKey(sslCertificates.cert);\n\t\tif (sslCertificates.key) agentOptions.key = formatPrivateKey(sslCertificates.key);\n\t\tif (sslCertificates.passphrase)\n\t\t\tagentOptions.passphrase = formatPrivateKey(sslCertificates.passphrase);\n\t\trequestOptions.agentOptions = agentOptions;\n\t}\n};\n"],"mappings":"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","names":["isPlainObject","get","set","FormData"]}
1
+ {"version":3,"sources":["../../../nodes/HttpRequest/GenericFunctions.ts"],"sourcesContent":["import FormData from 'form-data';\nimport get from 'lodash/get';\nimport isPlainObject from 'lodash/isPlainObject';\nimport set from 'lodash/set';\nimport {\n\tdeepCopy,\n\tsetSafeObjectProperty,\n\ttype ICredentialDataDecryptedObject,\n\ttype IDataObject,\n\ttype INodeExecutionData,\n\ttype INodeProperties,\n\ttype IOAuth2Options,\n\ttype IRequestOptions,\n} from 'n8n-workflow';\nimport type { SecureContextOptions } from 'tls';\n\nimport type { HttpSslAuthCredentials } from './interfaces';\nimport { formatPrivateKey } from '../../utils/utilities';\n\nexport type BodyParameter = {\n\tname: string;\n\tvalue: string;\n\tparameterType?: 'formBinaryData' | 'formData';\n};\n\nexport type IAuthDataSanitizeKeys = {\n\t[key: string]: string[];\n};\n\nexport const replaceNullValues = (item: INodeExecutionData) => {\n\tif (item.json === null) {\n\t\titem.json = {};\n\t}\n\treturn item;\n};\n\nexport const REDACTED = '**hidden**';\n\nfunction isObject(obj: unknown): obj is IDataObject {\n\treturn isPlainObject(obj);\n}\n\nfunction redact<T = unknown>(obj: T, secrets: string[]): T {\n\tif (typeof obj === 'string') {\n\t\treturn secrets.reduce((safe, secret) => safe.replace(secret, REDACTED), obj) as T;\n\t}\n\n\tif (Array.isArray(obj)) {\n\t\treturn obj.map((item) => redact(item, secrets)) as T;\n\t} else if (isObject(obj)) {\n\t\tfor (const [key, value] of Object.entries(obj)) {\n\t\t\tsetSafeObjectProperty(obj, key, redact(value, secrets));\n\t\t}\n\t}\n\n\treturn obj;\n}\n\nexport function sanitizeUiMessage(\n\trequest: IRequestOptions,\n\tauthDataKeys: IAuthDataSanitizeKeys,\n\tsecrets?: string[],\n) {\n\tconst { body, ...rest } = request as IDataObject;\n\n\tlet sendRequest: IDataObject = { body };\n\tfor (const [key, value] of Object.entries(rest)) {\n\t\tsendRequest[key] = deepCopy(value);\n\t}\n\n\t// Protect browser from sending large binary data\n\tif (Buffer.isBuffer(sendRequest.body) && sendRequest.body.length > 250000) {\n\t\tsendRequest = {\n\t\t\t...request,\n\t\t\tbody: `Binary data got replaced with this text. Original was a Buffer with a size of ${\n\t\t\t\t(request.body as string).length\n\t\t\t} bytes.`,\n\t\t};\n\t}\n\n\t// Remove credential information\n\tfor (const requestProperty of Object.keys(authDataKeys)) {\n\t\tsendRequest = {\n\t\t\t...sendRequest,\n\t\t\t[requestProperty]: Object.keys(sendRequest[requestProperty] as object).reduce(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-loop-func\n\t\t\t\t(acc: IDataObject, curr) => {\n\t\t\t\t\tacc[curr] = authDataKeys[requestProperty].includes(curr)\n\t\t\t\t\t\t? REDACTED\n\t\t\t\t\t\t: (sendRequest[requestProperty] as IDataObject)[curr];\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{},\n\t\t\t),\n\t\t};\n\t}\n\tconst HEADER_BLOCKLIST = new Set([\n\t\t'authorization',\n\t\t'x-api-key',\n\t\t'x-auth-token',\n\t\t'cookie',\n\t\t'proxy-authorization',\n\t\t'sslclientcert',\n\t]);\n\n\tconst headers = sendRequest.headers as IDataObject;\n\n\tif (headers) {\n\t\tfor (const headerName of Object.keys(headers)) {\n\t\t\tif (HEADER_BLOCKLIST.has(headerName.toLowerCase())) {\n\t\t\t\theaders[headerName] = REDACTED;\n\t\t\t}\n\t\t}\n\t}\n\tif (secrets && secrets.length > 0) {\n\t\treturn redact(sendRequest, secrets);\n\t}\n\n\treturn sendRequest;\n}\n\nexport function getSecrets(\n\tproperties: INodeProperties[],\n\tcredentials: ICredentialDataDecryptedObject,\n): string[] {\n\tconst sensitivePropNames = new Set(\n\t\tproperties.filter((prop) => prop.typeOptions?.password).map((prop) => prop.name),\n\t);\n\n\tconst secrets = Object.entries(credentials)\n\t\t.filter(([propName]) => sensitivePropNames.has(propName))\n\t\t.map(([_, value]) => value)\n\t\t.filter((value): value is string => typeof value === 'string');\n\tconst oauthAccessToken = get(credentials, 'oauthTokenData.access_token');\n\tif (typeof oauthAccessToken === 'string') {\n\t\tsecrets.push(oauthAccessToken);\n\t}\n\n\treturn secrets;\n}\n\nexport const getOAuth2AdditionalParameters = (nodeCredentialType: string) => {\n\tconst oAuth2Options: { [credentialType: string]: IOAuth2Options } = {\n\t\tbitlyOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tboxOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tciscoWebexOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tclickUpOAuth2Api: {\n\t\t\tkeepBearer: false,\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tgoToWebinarOAuth2Api: {\n\t\t\ttokenExpiredStatusCode: 403,\n\t\t},\n\t\thubspotDeveloperApi: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\thubspotOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tlineNotifyOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tlinkedInOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tmailchimpOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\tmauticOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tmicrosoftAzureMonitorOAuth2Api: {\n\t\t\ttokenExpiredStatusCode: 403,\n\t\t},\n\t\tmicrosoftDynamicsOAuth2Api: {\n\t\t\tproperty: 'id_token',\n\t\t},\n\t\tphilipsHueOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t},\n\t\traindropOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t\tshopifyOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tkeyToIncludeInAccessTokenHeader: 'X-Shopify-Access-Token',\n\t\t},\n\t\tslackOAuth2Api: {\n\t\t\ttokenType: 'Bearer',\n\t\t\tproperty: 'authed_user.access_token',\n\t\t},\n\t\tstravaOAuth2Api: {\n\t\t\tincludeCredentialsOnRefreshOnBody: true,\n\t\t},\n\t};\n\treturn oAuth2Options[nodeCredentialType];\n};\n\n//https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\nexport const binaryContentTypes = [\n\t'image/',\n\t'audio/',\n\t'video/',\n\t'application/octet-stream',\n\t'application/gzip',\n\t'application/zip',\n\t'application/vnd.rar',\n\t'application/epub+zip',\n\t'application/x-bzip',\n\t'application/x-bzip2',\n\t'application/x-cdf',\n\t'application/vnd.amazon.ebook',\n\t'application/msword',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t'application/vnd.ms-fontobject',\n\t'application/vnd.oasis.opendocument.presentation',\n\t'application/pdf',\n\t'application/x-tar',\n\t'application/vnd.visio',\n\t'application/vnd.ms-excel',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t'application/x-7z-compressed',\n];\n\nexport type BodyParametersReducer = (\n\tacc: IDataObject,\n\tcur: { name: string; value: string },\n) => Promise<IDataObject>;\n\nexport async function reduceAsync<T, R>(\n\tarr: T[],\n\treducer: (acc: Awaited<Promise<R>>, cur: T) => Promise<R>,\n\tinit: Promise<R> = Promise.resolve({} as R),\n): Promise<R> {\n\treturn await arr.reduce(async (promiseAcc, item) => {\n\t\treturn await reducer(await promiseAcc, item);\n\t}, init);\n}\n\nexport const prepareRequestBody = async (\n\tparameters: BodyParameter[],\n\tbodyType: string,\n\tversion: number,\n\tdefaultReducer: BodyParametersReducer,\n) => {\n\tif (bodyType === 'json' && version >= 4) {\n\t\treturn await parameters.reduce(async (acc, entry) => {\n\t\t\tconst result = await acc;\n\t\t\tset(result, entry.name, entry.value);\n\t\t\treturn result;\n\t\t}, Promise.resolve({}));\n\t} else if (bodyType === 'multipart-form-data' && version >= 4.2) {\n\t\tconst formData = new FormData();\n\n\t\tfor (const parameter of parameters) {\n\t\t\tif (parameter.parameterType === 'formBinaryData') {\n\t\t\t\tconst entry = await defaultReducer({}, parameter);\n\t\t\t\tconst key = Object.keys(entry)[0];\n\t\t\t\tconst data = entry[key] as { value: Buffer; options: FormData.AppendOptions };\n\t\t\t\tformData.append(key, data.value, data.options);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tformData.append(parameter.name, parameter.value);\n\t\t}\n\n\t\treturn formData;\n\t} else {\n\t\treturn await reduceAsync(parameters, defaultReducer);\n\t}\n};\n\nexport const setAgentOptions = (\n\trequestOptions: IRequestOptions,\n\tsslCertificates: HttpSslAuthCredentials | undefined,\n) => {\n\tif (sslCertificates) {\n\t\tconst agentOptions: SecureContextOptions = {};\n\t\tif (sslCertificates.ca) agentOptions.ca = formatPrivateKey(sslCertificates.ca);\n\t\tif (sslCertificates.cert) agentOptions.cert = formatPrivateKey(sslCertificates.cert);\n\t\tif (sslCertificates.key) agentOptions.key = formatPrivateKey(sslCertificates.key);\n\t\tif (sslCertificates.passphrase)\n\t\t\tagentOptions.passphrase = formatPrivateKey(sslCertificates.passphrase);\n\t\trequestOptions.agentOptions = agentOptions;\n\t}\n};\n"],"mappings":"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","names":["isPlainObject","get","set","FormData"]}
@@ -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":[]}
@@ -738,24 +738,43 @@ class Jira {
738
738
  }
739
739
  }
740
740
  if (returnAll) {
741
- responseData = await import_GenericFunctions.jiraSoftwareCloudApiRequestAllItems.call(
742
- this,
743
- "issues",
744
- "/api/2/search/jql",
745
- "POST",
746
- body,
747
- {},
748
- "token"
749
- );
741
+ if (jiraVersion === "server" || jiraVersion === "serverPat") {
742
+ responseData = await import_GenericFunctions.jiraSoftwareCloudApiRequestAllItems.call(
743
+ this,
744
+ "issues",
745
+ "/api/2/search",
746
+ "POST",
747
+ body
748
+ );
749
+ } else {
750
+ responseData = await import_GenericFunctions.jiraSoftwareCloudApiRequestAllItems.call(
751
+ this,
752
+ "issues",
753
+ "/api/2/search/jql",
754
+ "POST",
755
+ body,
756
+ {},
757
+ "token"
758
+ );
759
+ }
750
760
  } else {
751
761
  const limit = this.getNodeParameter("limit", i);
752
762
  body.maxResults = limit;
753
- responseData = await import_GenericFunctions.jiraSoftwareCloudApiRequest.call(
754
- this,
755
- "/api/2/search/jql",
756
- "POST",
757
- body
758
- );
763
+ if (jiraVersion === "server" || jiraVersion === "serverPat") {
764
+ responseData = await import_GenericFunctions.jiraSoftwareCloudApiRequest.call(
765
+ this,
766
+ "/api/2/search",
767
+ "POST",
768
+ body
769
+ );
770
+ } else {
771
+ responseData = await import_GenericFunctions.jiraSoftwareCloudApiRequest.call(
772
+ this,
773
+ "/api/2/search/jql",
774
+ "POST",
775
+ body
776
+ );
777
+ }
759
778
  responseData = responseData.issues;
760
779
  }
761
780
  const executionData = this.helpers.constructExecutionMetaData(