n8n-nodes-base 1.92.0 → 1.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js +0 -9
  2. package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js.map +1 -1
  3. package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js +13 -0
  4. package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js.map +1 -1
  5. package/dist/credentials/Snowflake.credentials.js +46 -2
  6. package/dist/credentials/Snowflake.credentials.js.map +1 -1
  7. package/dist/known/credentials.json +10 -1
  8. package/dist/known/nodes.json +20 -0
  9. package/dist/methods/defined.json +6 -0
  10. package/dist/methods/referenced.json +3 -0
  11. package/dist/nodes/Aws/IAM/AwsIam.node.js +95 -0
  12. package/dist/nodes/Aws/IAM/AwsIam.node.js.map +1 -0
  13. package/dist/nodes/Aws/IAM/AwsIam.node.json +18 -0
  14. package/dist/nodes/Aws/IAM/AwsIam.svg +18 -0
  15. package/dist/nodes/Aws/IAM/descriptions/common.js +188 -0
  16. package/dist/nodes/Aws/IAM/descriptions/common.js.map +1 -0
  17. package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js +175 -0
  18. package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js.map +1 -0
  19. package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js +66 -0
  20. package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js.map +1 -0
  21. package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js +43 -0
  22. package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js.map +1 -0
  23. package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js +50 -0
  24. package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js.map +1 -0
  25. package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js +47 -0
  26. package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js.map +1 -0
  27. package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js +70 -0
  28. package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js.map +1 -0
  29. package/dist/nodes/Aws/IAM/descriptions/index.js +42 -0
  30. package/dist/nodes/Aws/IAM/descriptions/index.js.map +1 -0
  31. package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js +231 -0
  32. package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js.map +1 -0
  33. package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js +47 -0
  34. package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js.map +1 -0
  35. package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js +118 -0
  36. package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js.map +1 -0
  37. package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js +43 -0
  38. package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js.map +1 -0
  39. package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js +43 -0
  40. package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js.map +1 -0
  41. package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js +66 -0
  42. package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js.map +1 -0
  43. package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js +74 -0
  44. package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js.map +1 -0
  45. package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js +68 -0
  46. package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js.map +1 -0
  47. package/dist/nodes/Aws/IAM/helpers/constants.js +47 -0
  48. package/dist/nodes/Aws/IAM/helpers/constants.js.map +1 -0
  49. package/dist/nodes/Aws/IAM/helpers/errorHandler.js +90 -0
  50. package/dist/nodes/Aws/IAM/helpers/errorHandler.js.map +1 -0
  51. package/dist/nodes/Aws/IAM/helpers/types.js +17 -0
  52. package/dist/nodes/Aws/IAM/helpers/types.js.map +1 -0
  53. package/dist/nodes/Aws/IAM/helpers/utils.js +279 -0
  54. package/dist/nodes/Aws/IAM/helpers/utils.js.map +1 -0
  55. package/dist/nodes/Aws/IAM/methods/index.js +39 -0
  56. package/dist/nodes/Aws/IAM/methods/index.js.map +1 -0
  57. package/dist/nodes/Aws/IAM/methods/listSearch.js +132 -0
  58. package/dist/nodes/Aws/IAM/methods/listSearch.js.map +1 -0
  59. package/dist/nodes/Aws/IAM/transport/index.js +64 -0
  60. package/dist/nodes/Aws/IAM/transport/index.js.map +1 -0
  61. package/dist/nodes/Cron/Cron.node.js +1 -1
  62. package/dist/nodes/Cron/Cron.node.js.map +1 -1
  63. package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js +2 -2
  64. package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js.map +1 -1
  65. package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js +2 -2
  66. package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js.map +1 -1
  67. package/dist/nodes/Evaluation/Evaluation/Description.node.js +146 -0
  68. package/dist/nodes/Evaluation/Evaluation/Description.node.js.map +1 -0
  69. package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js +117 -0
  70. package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js.map +1 -0
  71. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js +187 -0
  72. package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js.map +1 -0
  73. package/dist/nodes/Evaluation/methods/index.js +42 -0
  74. package/dist/nodes/Evaluation/methods/index.js.map +1 -0
  75. package/dist/nodes/Evaluation/methods/loadOptions.js +40 -0
  76. package/dist/nodes/Evaluation/methods/loadOptions.js.map +1 -0
  77. package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js +119 -0
  78. package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js.map +1 -0
  79. package/dist/nodes/Evaluation/utils/evaluationUtils.js +171 -0
  80. package/dist/nodes/Evaluation/utils/evaluationUtils.js.map +1 -0
  81. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js +4 -3
  82. package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js.map +1 -1
  83. package/dist/nodes/Form/common.descriptions.js +2 -2
  84. package/dist/nodes/Form/common.descriptions.js.map +1 -1
  85. package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js +113 -107
  86. package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js.map +1 -1
  87. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js +52 -106
  88. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js.map +1 -1
  89. package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js +97 -0
  90. package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js.map +1 -0
  91. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js +20 -17
  92. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js.map +1 -1
  93. package/dist/nodes/Google/YouTube/YouTube.node.js +4 -2
  94. package/dist/nodes/Google/YouTube/YouTube.node.js.map +1 -1
  95. package/dist/nodes/Interval/Interval.node.js +1 -1
  96. package/dist/nodes/Interval/Interval.node.js.map +1 -1
  97. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js +2 -2
  98. package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js.map +1 -1
  99. package/dist/nodes/MQTT/MqttTrigger.node.js +2 -2
  100. package/dist/nodes/MQTT/MqttTrigger.node.js.map +1 -1
  101. package/dist/nodes/ManualTrigger/ManualTrigger.node.js +1 -1
  102. package/dist/nodes/ManualTrigger/ManualTrigger.node.js.map +1 -1
  103. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js +93 -0
  104. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js.map +1 -0
  105. package/dist/nodes/Microsoft/SharePoint/MicrosoftSharepoint.node.json +18 -0
  106. package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js +190 -0
  107. package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js.map +1 -0
  108. package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js +108 -0
  109. package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js.map +1 -0
  110. package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js +62 -0
  111. package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js.map +1 -0
  112. package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js +129 -0
  113. package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js.map +1 -0
  114. package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js +77 -0
  115. package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js.map +1 -0
  116. package/dist/nodes/Microsoft/SharePoint/descriptions/index.js +45 -0
  117. package/dist/nodes/Microsoft/SharePoint/descriptions/index.js.map +1 -0
  118. package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js +175 -0
  119. package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js.map +1 -0
  120. package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js +100 -0
  121. package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js.map +1 -0
  122. package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js +62 -0
  123. package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js.map +1 -0
  124. package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js +83 -0
  125. package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js.map +1 -0
  126. package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js +203 -0
  127. package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js.map +1 -0
  128. package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js +100 -0
  129. package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js.map +1 -0
  130. package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js +100 -0
  131. package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js.map +1 -0
  132. package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js +99 -0
  133. package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js.map +1 -0
  134. package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js +65 -0
  135. package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js.map +1 -0
  136. package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js +105 -0
  137. package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js.map +1 -0
  138. package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js +17 -0
  139. package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js.map +1 -0
  140. package/dist/nodes/Microsoft/SharePoint/helpers/utils.js +252 -0
  141. package/dist/nodes/Microsoft/SharePoint/helpers/utils.js.map +1 -0
  142. package/dist/nodes/Microsoft/SharePoint/methods/index.js +42 -0
  143. package/dist/nodes/Microsoft/SharePoint/methods/index.js.map +1 -0
  144. package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js +222 -0
  145. package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js.map +1 -0
  146. package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js +104 -0
  147. package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js.map +1 -0
  148. package/dist/nodes/Microsoft/SharePoint/test/credentials.js +54 -0
  149. package/dist/nodes/Microsoft/SharePoint/test/credentials.js.map +1 -0
  150. package/dist/nodes/Microsoft/SharePoint/transport/index.js +46 -0
  151. package/dist/nodes/Microsoft/SharePoint/transport/index.js.map +1 -0
  152. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js +387 -0
  153. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js.map +1 -0
  154. package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.json +18 -0
  155. package/dist/nodes/Microsoft/Teams/v2/helpers/types.js +17 -0
  156. package/dist/nodes/Microsoft/Teams/v2/helpers/types.js.map +1 -0
  157. package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js +147 -0
  158. package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js.map +1 -0
  159. package/dist/nodes/Microsoft/Teams/v2/transport/index.js.map +1 -1
  160. package/dist/nodes/PostBin/BinDescription.js +1 -1
  161. package/dist/nodes/PostBin/BinDescription.js.map +1 -1
  162. package/dist/nodes/PostBin/GenericFunctions.js +5 -5
  163. package/dist/nodes/PostBin/GenericFunctions.js.map +1 -1
  164. package/dist/nodes/PostBin/PostBin.node.js +1 -1
  165. package/dist/nodes/PostBin/PostBin.node.js.map +1 -1
  166. package/dist/nodes/PostBin/RequestDescription.js +2 -2
  167. package/dist/nodes/PostBin/RequestDescription.js.map +1 -1
  168. package/dist/nodes/Postgres/PostgresTrigger.node.js +2 -2
  169. package/dist/nodes/Postgres/PostgresTrigger.node.js.map +1 -1
  170. package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js +2 -2
  171. package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js.map +1 -1
  172. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js +8 -3
  173. package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js.map +1 -1
  174. package/dist/nodes/RespondToWebhook/utils.js +43 -0
  175. package/dist/nodes/RespondToWebhook/utils.js.map +1 -0
  176. package/dist/nodes/Schedule/ScheduleTrigger.node.js +1 -1
  177. package/dist/nodes/Schedule/ScheduleTrigger.node.js.map +1 -1
  178. package/dist/nodes/Snowflake/GenericFunctions.js +34 -2
  179. package/dist/nodes/Snowflake/GenericFunctions.js.map +1 -1
  180. package/dist/nodes/Snowflake/Snowflake.node.js +5 -7
  181. package/dist/nodes/Snowflake/Snowflake.node.js.map +1 -1
  182. package/dist/nodes/SseTrigger/SseTrigger.node.js +2 -2
  183. package/dist/nodes/SseTrigger/SseTrigger.node.js.map +1 -1
  184. package/dist/types/credentials.json +6 -6
  185. package/dist/types/nodes.json +22 -17
  186. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js +12 -2
  187. package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js.map +1 -1
  188. package/package.json +13 -9
  189. /package/dist/{credentials/icons/SharePoint.svg → nodes/Microsoft/SharePoint/microsoftSharePoint.svg} +0 -0
@@ -0,0 +1,387 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var MicrosoftTeamsTrigger_node_exports = {};
20
+ __export(MicrosoftTeamsTrigger_node_exports, {
21
+ MicrosoftTeamsTrigger: () => MicrosoftTeamsTrigger
22
+ });
23
+ module.exports = __toCommonJS(MicrosoftTeamsTrigger_node_exports);
24
+ var import_n8n_workflow = require("n8n-workflow");
25
+ var import_utils_trigger = require("./v2/helpers/utils-trigger");
26
+ var import_methods = require("./v2/methods");
27
+ var import_transport = require("./v2/transport");
28
+ class MicrosoftTeamsTrigger {
29
+ constructor() {
30
+ this.description = {
31
+ displayName: "Microsoft Teams Trigger",
32
+ name: "microsoftTeamsTrigger",
33
+ icon: "file:teams.svg",
34
+ group: ["trigger"],
35
+ version: 1,
36
+ description: "Triggers workflows in n8n based on events from Microsoft Teams, such as new messages or team updates, using specified configurations.",
37
+ subtitle: "Microsoft Teams Trigger",
38
+ defaults: {
39
+ name: "Microsoft Teams Trigger"
40
+ },
41
+ credentials: [
42
+ {
43
+ name: "microsoftTeamsOAuth2Api",
44
+ required: true
45
+ }
46
+ ],
47
+ inputs: [],
48
+ outputs: [import_n8n_workflow.NodeConnectionTypes.Main],
49
+ webhooks: [
50
+ {
51
+ name: "default",
52
+ httpMethod: "POST",
53
+ responseMode: "onReceived",
54
+ path: "webhook"
55
+ }
56
+ ],
57
+ properties: [
58
+ {
59
+ displayName: "Trigger On",
60
+ name: "event",
61
+ type: "options",
62
+ default: "newChannelMessage",
63
+ options: [
64
+ {
65
+ name: "New Channel",
66
+ value: "newChannel",
67
+ description: "A new channel is created"
68
+ },
69
+ {
70
+ name: "New Channel Message",
71
+ value: "newChannelMessage",
72
+ description: "A message is posted to a channel"
73
+ },
74
+ {
75
+ name: "New Chat",
76
+ value: "newChat",
77
+ description: "A new chat is created"
78
+ },
79
+ {
80
+ name: "New Chat Message",
81
+ value: "newChatMessage",
82
+ description: "A message is posted to a chat"
83
+ },
84
+ {
85
+ name: "New Team Member",
86
+ value: "newTeamMember",
87
+ description: "A new member is added to a team"
88
+ }
89
+ ],
90
+ description: "Select the event to trigger the workflow"
91
+ },
92
+ {
93
+ displayName: "Watch All Teams",
94
+ name: "watchAllTeams",
95
+ type: "boolean",
96
+ default: false,
97
+ description: "Whether to watch for the event in all the available teams",
98
+ displayOptions: {
99
+ show: {
100
+ event: ["newChannel", "newChannelMessage", "newTeamMember"]
101
+ }
102
+ }
103
+ },
104
+ {
105
+ displayName: "Team",
106
+ name: "teamId",
107
+ type: "resourceLocator",
108
+ default: {
109
+ mode: "list",
110
+ value: ""
111
+ },
112
+ required: true,
113
+ description: "Select a team from the list, enter an ID or a URL",
114
+ modes: [
115
+ {
116
+ displayName: "From List",
117
+ name: "list",
118
+ type: "list",
119
+ placeholder: "Select a team...",
120
+ typeOptions: {
121
+ searchListMethod: "getTeams",
122
+ searchable: true
123
+ }
124
+ },
125
+ {
126
+ displayName: "By ID",
127
+ name: "id",
128
+ type: "string",
129
+ placeholder: "e.g., 61165b04-e4cc-4026-b43f-926b4e2a7182"
130
+ },
131
+ {
132
+ displayName: "By URL",
133
+ name: "url",
134
+ type: "string",
135
+ placeholder: "e.g., https://teams.microsoft.com/l/team/19%3A...groupId=your-team-id&tenantId=...",
136
+ extractValue: {
137
+ type: "regex",
138
+ regex: /groupId=([0-9a-fA-F-]{36})/
139
+ }
140
+ }
141
+ ],
142
+ displayOptions: {
143
+ show: {
144
+ event: ["newChannel", "newChannelMessage", "newTeamMember"],
145
+ watchAllTeams: [false]
146
+ }
147
+ }
148
+ },
149
+ {
150
+ displayName: "Watch All Channels",
151
+ name: "watchAllChannels",
152
+ type: "boolean",
153
+ default: false,
154
+ description: "Whether to watch for the event in all the available channels",
155
+ displayOptions: {
156
+ show: {
157
+ event: ["newChannelMessage"],
158
+ watchAllTeams: [false]
159
+ }
160
+ }
161
+ },
162
+ {
163
+ displayName: "Channel",
164
+ name: "channelId",
165
+ type: "resourceLocator",
166
+ default: {
167
+ mode: "list",
168
+ value: ""
169
+ },
170
+ required: true,
171
+ description: "Select a channel from the list, enter an ID or a URL",
172
+ modes: [
173
+ {
174
+ displayName: "From List",
175
+ name: "list",
176
+ type: "list",
177
+ placeholder: "Select a channel...",
178
+ typeOptions: {
179
+ searchListMethod: "getChannels",
180
+ searchable: true
181
+ }
182
+ },
183
+ {
184
+ displayName: "By ID",
185
+ name: "id",
186
+ type: "string",
187
+ placeholder: "e.g., 19:-xlxyqXNSCxpI1SDzgQ_L9ZvzSR26pgphq1BJ9y7QJE1@thread.tacv2"
188
+ },
189
+ {
190
+ displayName: "By URL",
191
+ name: "url",
192
+ type: "string",
193
+ placeholder: "e.g., https://teams.microsoft.com/l/channel/19%3A...@thread.tacv2/...",
194
+ extractValue: {
195
+ type: "regex",
196
+ regex: /channel\/([^\/?]+)/
197
+ }
198
+ }
199
+ ],
200
+ displayOptions: {
201
+ show: {
202
+ event: ["newChannelMessage"],
203
+ watchAllTeams: [false],
204
+ watchAllChannels: [false]
205
+ }
206
+ }
207
+ },
208
+ {
209
+ displayName: "Watch All Chats",
210
+ name: "watchAllChats",
211
+ type: "boolean",
212
+ default: false,
213
+ description: "Whether to watch for the event in all the available chats",
214
+ displayOptions: {
215
+ show: {
216
+ event: ["newChatMessage"]
217
+ }
218
+ }
219
+ },
220
+ {
221
+ displayName: "Chat",
222
+ name: "chatId",
223
+ type: "resourceLocator",
224
+ default: {
225
+ mode: "list",
226
+ value: ""
227
+ },
228
+ required: true,
229
+ description: "Select a chat from the list, enter an ID or a URL",
230
+ modes: [
231
+ {
232
+ displayName: "From List",
233
+ name: "list",
234
+ type: "list",
235
+ placeholder: "Select a chat...",
236
+ typeOptions: {
237
+ searchListMethod: "getChats",
238
+ searchable: true
239
+ }
240
+ },
241
+ {
242
+ displayName: "By ID",
243
+ name: "id",
244
+ type: "string",
245
+ placeholder: "19:7e2f1174-e8ee-4859-b8b1-a8d1cc63d276@unq.gbl.spaces"
246
+ },
247
+ {
248
+ displayName: "By URL",
249
+ name: "url",
250
+ type: "string",
251
+ placeholder: "https://teams.microsoft.com/_#/conversations/CHAT_ID",
252
+ extractValue: {
253
+ type: "regex",
254
+ regex: /conversations\/([^\/?]+)/i
255
+ }
256
+ }
257
+ ],
258
+ displayOptions: {
259
+ show: {
260
+ event: ["newChatMessage"],
261
+ watchAllChats: [false]
262
+ }
263
+ }
264
+ }
265
+ ]
266
+ };
267
+ this.methods = {
268
+ listSearch: import_methods.listSearch
269
+ };
270
+ this.webhookMethods = {
271
+ default: {
272
+ async checkExists() {
273
+ const event = this.getNodeParameter("event", 0);
274
+ const webhookUrl = this.getNodeWebhookUrl("default");
275
+ const webhookData = this.getWorkflowStaticData("node");
276
+ try {
277
+ const subscriptions = await import_transport.microsoftApiRequestAllItems.call(
278
+ this,
279
+ "value",
280
+ "GET",
281
+ "/v1.0/subscriptions"
282
+ );
283
+ const matchingSubscriptions = subscriptions.filter(
284
+ (subscription) => subscription.notificationUrl === webhookUrl
285
+ );
286
+ const now = /* @__PURE__ */ new Date();
287
+ const thresholdMs = 5 * 60 * 1e3;
288
+ const validSubscriptions = matchingSubscriptions.filter((subscription) => {
289
+ const expiration = new Date(subscription.expirationDateTime);
290
+ return expiration.getTime() - now.getTime() > thresholdMs;
291
+ });
292
+ const resourcePaths = await import_utils_trigger.getResourcePath.call(this, event);
293
+ const requiredResources = Array.isArray(resourcePaths) ? resourcePaths : [resourcePaths];
294
+ const subscribedResources = validSubscriptions.map((sub) => sub.resource);
295
+ const allResourcesSubscribed = requiredResources.every(
296
+ (resource) => subscribedResources.includes(resource)
297
+ );
298
+ if (allResourcesSubscribed) {
299
+ webhookData.subscriptionIds = validSubscriptions.map((sub) => sub.id);
300
+ return true;
301
+ }
302
+ return false;
303
+ } catch (error) {
304
+ return false;
305
+ }
306
+ },
307
+ async create() {
308
+ const event = this.getNodeParameter("event", 0);
309
+ const webhookUrl = this.getNodeWebhookUrl("default");
310
+ const webhookData = this.getWorkflowStaticData("node");
311
+ if (!webhookUrl || !webhookUrl.startsWith("https://")) {
312
+ throw new import_n8n_workflow.NodeApiError(this.getNode(), {
313
+ message: "Invalid Notification URL",
314
+ description: `The webhook URL "${webhookUrl}" is invalid. Microsoft Graph requires an HTTPS URL.`
315
+ });
316
+ }
317
+ const resourcePaths = await import_utils_trigger.getResourcePath.call(this, event);
318
+ const subscriptionIds = [];
319
+ if (Array.isArray(resourcePaths)) {
320
+ await Promise.all(
321
+ resourcePaths.map(async (resource) => {
322
+ const subscription = await import_utils_trigger.createSubscription.call(this, webhookUrl, resource);
323
+ subscriptionIds.push(subscription.id);
324
+ return subscription;
325
+ })
326
+ );
327
+ webhookData.subscriptionIds = subscriptionIds;
328
+ } else {
329
+ const subscription = await import_utils_trigger.createSubscription.call(this, webhookUrl, resourcePaths);
330
+ webhookData.subscriptionIds = [subscription.id];
331
+ }
332
+ return true;
333
+ },
334
+ async delete() {
335
+ const webhookData = this.getWorkflowStaticData("node");
336
+ const storedIds = webhookData.subscriptionIds;
337
+ if (!Array.isArray(storedIds)) {
338
+ return false;
339
+ }
340
+ try {
341
+ await Promise.all(
342
+ storedIds.map(async (subscriptionId) => {
343
+ try {
344
+ await import_transport.microsoftApiRequest.call(
345
+ this,
346
+ "DELETE",
347
+ `/v1.0/subscriptions/${subscriptionId}`
348
+ );
349
+ } catch (error) {
350
+ if (error.httpStatusCode !== 404) {
351
+ throw error;
352
+ }
353
+ }
354
+ })
355
+ );
356
+ delete webhookData.subscriptionIds;
357
+ return true;
358
+ } catch (error) {
359
+ return false;
360
+ }
361
+ }
362
+ }
363
+ };
364
+ }
365
+ async webhook() {
366
+ const req = this.getRequestObject();
367
+ const res = this.getResponseObject();
368
+ if (req.query.validationToken) {
369
+ res.status(200).send(req.query.validationToken);
370
+ return { noWebhookResponse: true };
371
+ }
372
+ const eventNotifications = req.body.value;
373
+ const response = {
374
+ workflowData: eventNotifications.map((event) => [
375
+ {
376
+ json: event.resourceData ?? event
377
+ }
378
+ ])
379
+ };
380
+ return response;
381
+ }
382
+ }
383
+ // Annotate the CommonJS export names for ESM import in node:
384
+ 0 && (module.exports = {
385
+ MicrosoftTeamsTrigger
386
+ });
387
+ //# sourceMappingURL=MicrosoftTeamsTrigger.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.ts"],"sourcesContent":["import type {\n\tIExecuteFunctions,\n\tINodeType,\n\tINodeTypeDescription,\n\tIHookFunctions,\n\tIWebhookFunctions,\n\tIWebhookResponseData,\n\tIDataObject,\n\tILoadOptionsFunctions,\n\tJsonObject,\n} from 'n8n-workflow';\nimport { NodeApiError, NodeConnectionTypes } from 'n8n-workflow';\n\nimport type { WebhookNotification, SubscriptionResponse } from './v2/helpers/types';\nimport { createSubscription, getResourcePath } from './v2/helpers/utils-trigger';\nimport { listSearch } from './v2/methods';\nimport { microsoftApiRequest, microsoftApiRequestAllItems } from './v2/transport';\n\nexport class MicrosoftTeamsTrigger implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Microsoft Teams Trigger',\n\t\tname: 'microsoftTeamsTrigger',\n\t\ticon: 'file:teams.svg',\n\t\tgroup: ['trigger'],\n\t\tversion: 1,\n\t\tdescription:\n\t\t\t'Triggers workflows in n8n based on events from Microsoft Teams, such as new messages or team updates, using specified configurations.',\n\t\tsubtitle: 'Microsoft Teams Trigger',\n\t\tdefaults: {\n\t\t\tname: 'Microsoft Teams Trigger',\n\t\t},\n\t\tcredentials: [\n\t\t\t{\n\t\t\t\tname: 'microsoftTeamsOAuth2Api',\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t],\n\t\tinputs: [],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\twebhooks: [\n\t\t\t{\n\t\t\t\tname: 'default',\n\t\t\t\thttpMethod: 'POST',\n\t\t\t\tresponseMode: 'onReceived',\n\t\t\t\tpath: 'webhook',\n\t\t\t},\n\t\t],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName: 'Trigger On',\n\t\t\t\tname: 'event',\n\t\t\t\ttype: 'options',\n\t\t\t\tdefault: 'newChannelMessage',\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'New Channel',\n\t\t\t\t\t\tvalue: 'newChannel',\n\t\t\t\t\t\tdescription: 'A new channel is created',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'New Channel Message',\n\t\t\t\t\t\tvalue: 'newChannelMessage',\n\t\t\t\t\t\tdescription: 'A message is posted to a channel',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'New Chat',\n\t\t\t\t\t\tvalue: 'newChat',\n\t\t\t\t\t\tdescription: 'A new chat is created',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'New Chat Message',\n\t\t\t\t\t\tvalue: 'newChatMessage',\n\t\t\t\t\t\tdescription: 'A message is posted to a chat',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'New Team Member',\n\t\t\t\t\t\tvalue: 'newTeamMember',\n\t\t\t\t\t\tdescription: 'A new member is added to a team',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdescription: 'Select the event to trigger the workflow',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Watch All Teams',\n\t\t\t\tname: 'watchAllTeams',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: 'Whether to watch for the event in all the available teams',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tevent: ['newChannel', 'newChannelMessage', 'newTeamMember'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Team',\n\t\t\t\tname: 'teamId',\n\t\t\t\ttype: 'resourceLocator',\n\t\t\t\tdefault: {\n\t\t\t\t\tmode: 'list',\n\t\t\t\t\tvalue: '',\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t\tdescription: 'Select a team from the list, enter an ID or a URL',\n\t\t\t\tmodes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'From List',\n\t\t\t\t\t\tname: 'list',\n\t\t\t\t\t\ttype: 'list',\n\t\t\t\t\t\tplaceholder: 'Select a team...',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tsearchListMethod: 'getTeams',\n\t\t\t\t\t\t\tsearchable: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'By ID',\n\t\t\t\t\t\tname: 'id',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tplaceholder: 'e.g., 61165b04-e4cc-4026-b43f-926b4e2a7182',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'By URL',\n\t\t\t\t\t\tname: 'url',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tplaceholder:\n\t\t\t\t\t\t\t'e.g., https://teams.microsoft.com/l/team/19%3A...groupId=your-team-id&tenantId=...',\n\t\t\t\t\t\textractValue: {\n\t\t\t\t\t\t\ttype: 'regex',\n\t\t\t\t\t\t\tregex: /groupId=([0-9a-fA-F-]{36})/,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tevent: ['newChannel', 'newChannelMessage', 'newTeamMember'],\n\t\t\t\t\t\twatchAllTeams: [false],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Watch All Channels',\n\t\t\t\tname: 'watchAllChannels',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: 'Whether to watch for the event in all the available channels',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tevent: ['newChannelMessage'],\n\t\t\t\t\t\twatchAllTeams: [false],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Channel',\n\t\t\t\tname: 'channelId',\n\t\t\t\ttype: 'resourceLocator',\n\t\t\t\tdefault: {\n\t\t\t\t\tmode: 'list',\n\t\t\t\t\tvalue: '',\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t\tdescription: 'Select a channel from the list, enter an ID or a URL',\n\t\t\t\tmodes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'From List',\n\t\t\t\t\t\tname: 'list',\n\t\t\t\t\t\ttype: 'list',\n\t\t\t\t\t\tplaceholder: 'Select a channel...',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tsearchListMethod: 'getChannels',\n\t\t\t\t\t\t\tsearchable: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'By ID',\n\t\t\t\t\t\tname: 'id',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tplaceholder: 'e.g., 19:-xlxyqXNSCxpI1SDzgQ_L9ZvzSR26pgphq1BJ9y7QJE1@thread.tacv2',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'By URL',\n\t\t\t\t\t\tname: 'url',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tplaceholder: 'e.g., https://teams.microsoft.com/l/channel/19%3A...@thread.tacv2/...',\n\t\t\t\t\t\textractValue: {\n\t\t\t\t\t\t\ttype: 'regex',\n\t\t\t\t\t\t\tregex: /channel\\/([^\\/?]+)/,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tevent: ['newChannelMessage'],\n\t\t\t\t\t\twatchAllTeams: [false],\n\t\t\t\t\t\twatchAllChannels: [false],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Watch All Chats',\n\t\t\t\tname: 'watchAllChats',\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdefault: false,\n\t\t\t\tdescription: 'Whether to watch for the event in all the available chats',\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tevent: ['newChatMessage'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Chat',\n\t\t\t\tname: 'chatId',\n\t\t\t\ttype: 'resourceLocator',\n\t\t\t\tdefault: {\n\t\t\t\t\tmode: 'list',\n\t\t\t\t\tvalue: '',\n\t\t\t\t},\n\t\t\t\trequired: true,\n\t\t\t\tdescription: 'Select a chat from the list, enter an ID or a URL',\n\t\t\t\tmodes: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'From List',\n\t\t\t\t\t\tname: 'list',\n\t\t\t\t\t\ttype: 'list',\n\t\t\t\t\t\tplaceholder: 'Select a chat...',\n\t\t\t\t\t\ttypeOptions: {\n\t\t\t\t\t\t\tsearchListMethod: 'getChats',\n\t\t\t\t\t\t\tsearchable: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'By ID',\n\t\t\t\t\t\tname: 'id',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tplaceholder: '19:7e2f1174-e8ee-4859-b8b1-a8d1cc63d276@unq.gbl.spaces',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: 'By URL',\n\t\t\t\t\t\tname: 'url',\n\t\t\t\t\t\ttype: 'string',\n\t\t\t\t\t\tplaceholder: 'https://teams.microsoft.com/_#/conversations/CHAT_ID',\n\t\t\t\t\t\textractValue: {\n\t\t\t\t\t\t\ttype: 'regex',\n\t\t\t\t\t\t\tregex: /conversations\\/([^\\/?]+)/i,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdisplayOptions: {\n\t\t\t\t\tshow: {\n\t\t\t\t\t\tevent: ['newChatMessage'],\n\t\t\t\t\t\twatchAllChats: [false],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t};\n\n\tmethods = {\n\t\tlistSearch,\n\t};\n\n\twebhookMethods = {\n\t\tdefault: {\n\t\t\tasync checkExists(this: IHookFunctions): Promise<boolean> {\n\t\t\t\tconst event = this.getNodeParameter('event', 0) as string;\n\t\t\t\tconst webhookUrl = this.getNodeWebhookUrl('default');\n\t\t\t\tconst webhookData = this.getWorkflowStaticData('node');\n\n\t\t\t\ttry {\n\t\t\t\t\tconst subscriptions = (await microsoftApiRequestAllItems.call(\n\t\t\t\t\t\tthis as unknown as ILoadOptionsFunctions,\n\t\t\t\t\t\t'value',\n\t\t\t\t\t\t'GET',\n\t\t\t\t\t\t'/v1.0/subscriptions',\n\t\t\t\t\t)) as SubscriptionResponse[];\n\n\t\t\t\t\tconst matchingSubscriptions = subscriptions.filter(\n\t\t\t\t\t\t(subscription) => subscription.notificationUrl === webhookUrl,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst now = new Date();\n\t\t\t\t\tconst thresholdMs = 5 * 60 * 1000;\n\t\t\t\t\tconst validSubscriptions = matchingSubscriptions.filter((subscription) => {\n\t\t\t\t\t\tconst expiration = new Date(subscription.expirationDateTime);\n\t\t\t\t\t\treturn expiration.getTime() - now.getTime() > thresholdMs;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst resourcePaths = await getResourcePath.call(this, event);\n\t\t\t\t\tconst requiredResources = Array.isArray(resourcePaths) ? resourcePaths : [resourcePaths];\n\n\t\t\t\t\tconst subscribedResources = validSubscriptions.map((sub) => sub.resource);\n\t\t\t\t\tconst allResourcesSubscribed = requiredResources.every((resource) =>\n\t\t\t\t\t\tsubscribedResources.includes(resource),\n\t\t\t\t\t);\n\n\t\t\t\t\tif (allResourcesSubscribed) {\n\t\t\t\t\t\twebhookData.subscriptionIds = validSubscriptions.map((sub) => sub.id);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tasync create(this: IHookFunctions): Promise<boolean> {\n\t\t\t\tconst event = this.getNodeParameter('event', 0) as string;\n\t\t\t\tconst webhookUrl = this.getNodeWebhookUrl('default');\n\t\t\t\tconst webhookData = this.getWorkflowStaticData('node');\n\n\t\t\t\tif (!webhookUrl || !webhookUrl.startsWith('https://')) {\n\t\t\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\t\t\tmessage: 'Invalid Notification URL',\n\t\t\t\t\t\tdescription: `The webhook URL \"${webhookUrl}\" is invalid. Microsoft Graph requires an HTTPS URL.`,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst resourcePaths = await getResourcePath.call(this, event);\n\t\t\t\tconst subscriptionIds: string[] = [];\n\n\t\t\t\tif (Array.isArray(resourcePaths)) {\n\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\tresourcePaths.map(async (resource) => {\n\t\t\t\t\t\t\tconst subscription = await createSubscription.call(this, webhookUrl, resource);\n\t\t\t\t\t\t\tsubscriptionIds.push(subscription.id);\n\t\t\t\t\t\t\treturn subscription;\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\twebhookData.subscriptionIds = subscriptionIds;\n\t\t\t\t} else {\n\t\t\t\t\tconst subscription = await createSubscription.call(this, webhookUrl, resourcePaths);\n\t\t\t\t\twebhookData.subscriptionIds = [subscription.id];\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tasync delete(this: IHookFunctions): Promise<boolean> {\n\t\t\t\tconst webhookData = this.getWorkflowStaticData('node');\n\t\t\t\tconst storedIds = webhookData.subscriptionIds as string[] | undefined;\n\n\t\t\t\tif (!Array.isArray(storedIds)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\tstoredIds.map(async (subscriptionId) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait microsoftApiRequest.call(\n\t\t\t\t\t\t\t\t\tthis as unknown as IExecuteFunctions,\n\t\t\t\t\t\t\t\t\t'DELETE',\n\t\t\t\t\t\t\t\t\t`/v1.0/subscriptions/${subscriptionId}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tif ((error as JsonObject).httpStatusCode !== 404) {\n\t\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\tdelete webhookData.subscriptionIds;\n\t\t\t\t\treturn true;\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n\n\tasync webhook(this: IWebhookFunctions): Promise<IWebhookResponseData> {\n\t\tconst req = this.getRequestObject();\n\t\tconst res = this.getResponseObject();\n\n\t\t// Handle Microsoft Graph validation request\n\t\tif (req.query.validationToken) {\n\t\t\tres.status(200).send(req.query.validationToken);\n\t\t\treturn { noWebhookResponse: true };\n\t\t}\n\n\t\tconst eventNotifications = req.body.value as WebhookNotification[];\n\t\tconst response: IWebhookResponseData = {\n\t\t\tworkflowData: eventNotifications.map((event) => [\n\t\t\t\t{\n\t\t\t\t\tjson: (event.resourceData as IDataObject) ?? event,\n\t\t\t\t},\n\t\t\t]),\n\t\t};\n\n\t\treturn response;\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,18 @@
1
+ {
2
+ "node": "n8n-nodes-base.microsoftTeamsTrigger",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Communication"],
6
+ "resources": {
7
+ "credentialDocumentation": [
8
+ {
9
+ "url": "https://docs.n8n.io/integrations/builtin/credentials/microsoft/"
10
+ }
11
+ ],
12
+ "primaryDocumentation": [
13
+ {
14
+ "url": "https://docs.n8n.io/integrations/builtin/trigger-nodes/n8n-nodes-base.microsoftteamstrigger/"
15
+ }
16
+ ]
17
+ }
18
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../nodes/Microsoft/Teams/v2/helpers/types.ts"],"sourcesContent":["export interface TeamResponse {\n\tid: string;\n\tdisplayName: string;\n}\n\nexport interface ChannelResponse {\n\tid: string;\n\tdisplayName: string;\n}\n\nexport interface WebhookNotification {\n\tsubscriptionId: string;\n\tresource: string;\n\tresourceData: ResourceData;\n\ttenantId: string;\n\tsubscriptionExpirationDateTime: string;\n}\n\nexport interface ResourceData {\n\tid: string;\n\t[key: string]: unknown;\n}\n\nexport interface SubscriptionResponse {\n\tid: string;\n\texpirationDateTime: string;\n\tnotificationUrl: string;\n\tresource: string;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var utils_trigger_exports = {};
20
+ __export(utils_trigger_exports, {
21
+ createSubscription: () => createSubscription,
22
+ fetchAllChannels: () => fetchAllChannels,
23
+ fetchAllTeams: () => fetchAllTeams,
24
+ getResourcePath: () => getResourcePath
25
+ });
26
+ module.exports = __toCommonJS(utils_trigger_exports);
27
+ var import_n8n_workflow = require("n8n-workflow");
28
+ var import_transport = require("../transport");
29
+ async function fetchAllTeams() {
30
+ const { value: teams } = await import_transport.microsoftApiRequest.call(
31
+ this,
32
+ "GET",
33
+ "/v1.0/me/joinedTeams"
34
+ );
35
+ return teams;
36
+ }
37
+ async function fetchAllChannels(teamId) {
38
+ const { value: channels } = await import_transport.microsoftApiRequest.call(
39
+ this,
40
+ "GET",
41
+ `/v1.0/teams/${teamId}/channels`
42
+ );
43
+ return channels;
44
+ }
45
+ async function createSubscription(webhookUrl, resourcePath) {
46
+ const expirationTime = new Date(Date.now() + 4318 * 60 * 1e3).toISOString();
47
+ const body = {
48
+ changeType: "created",
49
+ notificationUrl: webhookUrl,
50
+ resource: resourcePath,
51
+ expirationDateTime: expirationTime,
52
+ latestSupportedTlsVersion: "v1_2",
53
+ lifecycleNotificationUrl: webhookUrl
54
+ };
55
+ const response = await import_transport.microsoftApiRequest.call(
56
+ this,
57
+ "POST",
58
+ "/v1.0/subscriptions",
59
+ body
60
+ );
61
+ return response;
62
+ }
63
+ async function getResourcePath(event) {
64
+ switch (event) {
65
+ case "newChat": {
66
+ return "/me/chats";
67
+ }
68
+ case "newChatMessage": {
69
+ const watchAllChats = this.getNodeParameter("watchAllChats", false, {
70
+ extractValue: true
71
+ });
72
+ if (watchAllChats) {
73
+ return "/me/chats/getAllMessages";
74
+ } else {
75
+ const chatId = this.getNodeParameter("chatId", void 0, { extractValue: true });
76
+ return `/chats/${decodeURIComponent(chatId)}/messages`;
77
+ }
78
+ }
79
+ case "newChannel": {
80
+ const watchAllTeams = this.getNodeParameter("watchAllTeams", false, {
81
+ extractValue: true
82
+ });
83
+ if (watchAllTeams) {
84
+ const teams = await fetchAllTeams.call(this);
85
+ return teams.map((team) => `/teams/${team.id}/channels`);
86
+ } else {
87
+ const teamId = this.getNodeParameter("teamId", void 0, { extractValue: true });
88
+ return `/teams/${teamId}/channels`;
89
+ }
90
+ }
91
+ case "newChannelMessage": {
92
+ const watchAllTeams = this.getNodeParameter("watchAllTeams", false, {
93
+ extractValue: true
94
+ });
95
+ if (watchAllTeams) {
96
+ const teams = await fetchAllTeams.call(this);
97
+ const teamChannels = await Promise.all(
98
+ teams.map(async (team) => {
99
+ const channels = await fetchAllChannels.call(this, team.id);
100
+ return channels.map((channel) => `/teams/${team.id}/channels/${channel.id}/messages`);
101
+ })
102
+ );
103
+ return teamChannels.flat();
104
+ } else {
105
+ const teamId = this.getNodeParameter("teamId", void 0, { extractValue: true });
106
+ const watchAllChannels = this.getNodeParameter("watchAllChannels", false, {
107
+ extractValue: true
108
+ });
109
+ if (watchAllChannels) {
110
+ const channels = await fetchAllChannels.call(this, teamId);
111
+ return channels.map((channel) => `/teams/${teamId}/channels/${channel.id}/messages`);
112
+ } else {
113
+ const channelId = this.getNodeParameter("channelId", void 0, {
114
+ extractValue: true
115
+ });
116
+ return `/teams/${teamId}/channels/${decodeURIComponent(channelId)}/messages`;
117
+ }
118
+ }
119
+ }
120
+ case "newTeamMember": {
121
+ const watchAllTeams = this.getNodeParameter("watchAllTeams", false, {
122
+ extractValue: true
123
+ });
124
+ if (watchAllTeams) {
125
+ const teams = await fetchAllTeams.call(this);
126
+ return teams.map((team) => `/teams/${team.id}/members`);
127
+ } else {
128
+ const teamId = this.getNodeParameter("teamId", void 0, { extractValue: true });
129
+ return `/teams/${teamId}/members`;
130
+ }
131
+ }
132
+ default: {
133
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), {
134
+ message: `Invalid event: ${event}`,
135
+ description: `The selected event "${event}" is not recognized.`
136
+ });
137
+ }
138
+ }
139
+ }
140
+ // Annotate the CommonJS export names for ESM import in node:
141
+ 0 && (module.exports = {
142
+ createSubscription,
143
+ fetchAllChannels,
144
+ fetchAllTeams,
145
+ getResourcePath
146
+ });
147
+ //# sourceMappingURL=utils-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../nodes/Microsoft/Teams/v2/helpers/utils-trigger.ts"],"sourcesContent":["import type { IHookFunctions, IDataObject } from 'n8n-workflow';\nimport { NodeOperationError } from 'n8n-workflow';\n\nimport type { TeamResponse, ChannelResponse, SubscriptionResponse } from './types';\nimport { microsoftApiRequest } from '../transport';\n\nexport async function fetchAllTeams(this: IHookFunctions): Promise<TeamResponse[]> {\n\tconst { value: teams } = (await microsoftApiRequest.call(\n\t\tthis,\n\t\t'GET',\n\t\t'/v1.0/me/joinedTeams',\n\t)) as { value: TeamResponse[] };\n\treturn teams;\n}\n\nexport async function fetchAllChannels(\n\tthis: IHookFunctions,\n\tteamId: string,\n): Promise<ChannelResponse[]> {\n\tconst { value: channels } = (await microsoftApiRequest.call(\n\t\tthis,\n\t\t'GET',\n\t\t`/v1.0/teams/${teamId}/channels`,\n\t)) as { value: ChannelResponse[] };\n\treturn channels;\n}\n\nexport async function createSubscription(\n\tthis: IHookFunctions,\n\twebhookUrl: string,\n\tresourcePath: string,\n): Promise<SubscriptionResponse> {\n\tconst expirationTime = new Date(Date.now() + 4318 * 60 * 1000).toISOString();\n\tconst body: IDataObject = {\n\t\tchangeType: 'created',\n\t\tnotificationUrl: webhookUrl,\n\t\tresource: resourcePath,\n\t\texpirationDateTime: expirationTime,\n\t\tlatestSupportedTlsVersion: 'v1_2',\n\t\tlifecycleNotificationUrl: webhookUrl,\n\t};\n\n\tconst response = (await microsoftApiRequest.call(\n\t\tthis,\n\t\t'POST',\n\t\t'/v1.0/subscriptions',\n\t\tbody,\n\t)) as SubscriptionResponse;\n\n\treturn response;\n}\n\nexport async function getResourcePath(\n\tthis: IHookFunctions,\n\tevent: string,\n): Promise<string | string[]> {\n\tswitch (event) {\n\t\tcase 'newChat': {\n\t\t\treturn '/me/chats';\n\t\t}\n\n\t\tcase 'newChatMessage': {\n\t\t\tconst watchAllChats = this.getNodeParameter('watchAllChats', false, {\n\t\t\t\textractValue: true,\n\t\t\t}) as boolean;\n\n\t\t\tif (watchAllChats) {\n\t\t\t\treturn '/me/chats/getAllMessages';\n\t\t\t} else {\n\t\t\t\tconst chatId = this.getNodeParameter('chatId', undefined, { extractValue: true }) as string;\n\t\t\t\treturn `/chats/${decodeURIComponent(chatId)}/messages`;\n\t\t\t}\n\t\t}\n\n\t\tcase 'newChannel': {\n\t\t\tconst watchAllTeams = this.getNodeParameter('watchAllTeams', false, {\n\t\t\t\textractValue: true,\n\t\t\t}) as boolean;\n\n\t\t\tif (watchAllTeams) {\n\t\t\t\tconst teams = await fetchAllTeams.call(this);\n\t\t\t\treturn teams.map((team) => `/teams/${team.id}/channels`);\n\t\t\t} else {\n\t\t\t\tconst teamId = this.getNodeParameter('teamId', undefined, { extractValue: true }) as string;\n\t\t\t\treturn `/teams/${teamId}/channels`;\n\t\t\t}\n\t\t}\n\n\t\tcase 'newChannelMessage': {\n\t\t\tconst watchAllTeams = this.getNodeParameter('watchAllTeams', false, {\n\t\t\t\textractValue: true,\n\t\t\t}) as boolean;\n\n\t\t\tif (watchAllTeams) {\n\t\t\t\tconst teams = await fetchAllTeams.call(this);\n\t\t\t\tconst teamChannels = await Promise.all(\n\t\t\t\t\tteams.map(async (team) => {\n\t\t\t\t\t\tconst channels = await fetchAllChannels.call(this, team.id);\n\t\t\t\t\t\treturn channels.map((channel) => `/teams/${team.id}/channels/${channel.id}/messages`);\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\treturn teamChannels.flat();\n\t\t\t} else {\n\t\t\t\tconst teamId = this.getNodeParameter('teamId', undefined, { extractValue: true }) as string;\n\t\t\t\tconst watchAllChannels = this.getNodeParameter('watchAllChannels', false, {\n\t\t\t\t\textractValue: true,\n\t\t\t\t}) as boolean;\n\n\t\t\t\tif (watchAllChannels) {\n\t\t\t\t\tconst channels = await fetchAllChannels.call(this, teamId);\n\t\t\t\t\treturn channels.map((channel) => `/teams/${teamId}/channels/${channel.id}/messages`);\n\t\t\t\t} else {\n\t\t\t\t\tconst channelId = this.getNodeParameter('channelId', undefined, {\n\t\t\t\t\t\textractValue: true,\n\t\t\t\t\t}) as string;\n\t\t\t\t\treturn `/teams/${teamId}/channels/${decodeURIComponent(channelId)}/messages`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcase 'newTeamMember': {\n\t\t\tconst watchAllTeams = this.getNodeParameter('watchAllTeams', false, {\n\t\t\t\textractValue: true,\n\t\t\t}) as boolean;\n\n\t\t\tif (watchAllTeams) {\n\t\t\t\tconst teams = await fetchAllTeams.call(this);\n\t\t\t\treturn teams.map((team) => `/teams/${team.id}/members`);\n\t\t\t} else {\n\t\t\t\tconst teamId = this.getNodeParameter('teamId', undefined, { extractValue: true }) as string;\n\t\t\t\treturn `/teams/${teamId}/members`;\n\t\t\t}\n\t\t}\n\n\t\tdefault: {\n\t\t\tthrow new NodeOperationError(this.getNode(), {\n\t\t\t\tmessage: `Invalid event: ${event}`,\n\t\t\t\tdescription: `The selected event \"${event}\" is not recognized.`,\n\t\t\t});\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../nodes/Microsoft/Teams/v2/transport/index.ts"],"sourcesContent":["import type {\n\tIExecuteFunctions,\n\tILoadOptionsFunctions,\n\tIDataObject,\n\tJsonObject,\n\tIHttpRequestMethods,\n\tIRequestOptions,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\n\nimport { capitalize } from '../../../../../utils/utilities';\n\nexport async function microsoftApiRequest(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\tmethod: IHttpRequestMethods,\n\tresource: string,\n\tbody: any = {},\n\tqs: IDataObject = {},\n\turi?: string,\n\theaders: IDataObject = {},\n): Promise<any> {\n\tconst options: IRequestOptions = {\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tmethod,\n\t\tbody,\n\t\tqs,\n\t\turi: uri || `https://graph.microsoft.com${resource}`,\n\t\tjson: true,\n\t};\n\ttry {\n\t\tif (Object.keys(headers).length !== 0) {\n\t\t\toptions.headers = Object.assign({}, options.headers, headers);\n\t\t}\n\t\treturn await this.helpers.requestOAuth2.call(this, 'microsoftTeamsOAuth2Api', options);\n\t} catch (error) {\n\t\tconst errorOptions: IDataObject = {};\n\t\tif (error.error?.error) {\n\t\t\tconst httpCode = error.statusCode;\n\t\t\terror = error.error.error;\n\t\t\terror.statusCode = httpCode;\n\t\t\terrorOptions.message = error.message;\n\n\t\t\tif (error.code === 'NotFound' && error.message === 'Resource not found') {\n\t\t\t\tconst nodeResource = capitalize(this.getNodeParameter('resource', 0) as string);\n\t\t\t\terrorOptions.message = `${nodeResource} not found`;\n\t\t\t}\n\t\t}\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t}\n}\n\nexport async function microsoftApiRequestAllItems(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\tpropertyName: string,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\n\tbody: any = {},\n\tquery: IDataObject = {},\n): Promise<any> {\n\tconst returnData: IDataObject[] = [];\n\n\tlet responseData;\n\tlet uri: string | undefined;\n\n\tdo {\n\t\tresponseData = await microsoftApiRequest.call(this, method, endpoint, body, query, uri);\n\t\turi = responseData['@odata.nextLink'];\n\t\treturnData.push.apply(returnData, responseData[propertyName] as IDataObject[]);\n\t\tconst limit = query.limit as number | undefined;\n\t\tif (limit && limit <= returnData.length) {\n\t\t\treturn returnData;\n\t\t}\n\t} while (responseData['@odata.nextLink'] !== undefined);\n\n\treturn returnData;\n}\n\nexport async function microsoftApiRequestAllItemsSkip(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\tpropertyName: string,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\n\tbody: any = {},\n\tquery: IDataObject = {},\n): Promise<any> {\n\tconst returnData: IDataObject[] = [];\n\n\tlet responseData;\n\tquery.$top = 100;\n\tquery.$skip = 0;\n\n\tdo {\n\t\tresponseData = await microsoftApiRequest.call(this, method, endpoint, body, query);\n\t\tquery.$skip += query.$top;\n\t\treturnData.push.apply(returnData, responseData[propertyName] as IDataObject[]);\n\t} while (responseData.value.length !== 0);\n\n\treturn returnData;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,0BAA6B;AAE7B,uBAA2B;AAE3B,eAAsB,oBAErB,QACA,UACA,OAAY,CAAC,GACb,KAAkB,CAAC,GACnB,KACA,UAAuB,CAAC,GACT;AACf,QAAM,UAA2B;AAAA,IAChC,SAAS;AAAA,MACR,gBAAgB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,OAAO,8BAA8B,QAAQ;AAAA,IAClD,MAAM;AAAA,EACP;AACA,MAAI;AACH,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACtC,cAAQ,UAAU,OAAO,OAAO,CAAC,GAAG,QAAQ,SAAS,OAAO;AAAA,IAC7D;AACA,WAAO,MAAM,KAAK,QAAQ,cAAc,KAAK,MAAM,2BAA2B,OAAO;AAAA,EACtF,SAAS,OAAO;AACf,UAAM,eAA4B,CAAC;AACnC,QAAI,MAAM,OAAO,OAAO;AACvB,YAAM,WAAW,MAAM;AACvB,cAAQ,MAAM,MAAM;AACpB,YAAM,aAAa;AACnB,mBAAa,UAAU,MAAM;AAE7B,UAAI,MAAM,SAAS,cAAc,MAAM,YAAY,sBAAsB;AACxE,cAAM,mBAAe,6BAAW,KAAK,iBAAiB,YAAY,CAAC,CAAW;AAC9E,qBAAa,UAAU,GAAG,YAAY;AAAA,MACvC;AAAA,IACD;AACA,UAAM,IAAI,iCAAa,KAAK,QAAQ,GAAG,OAAqB,YAAY;AAAA,EACzE;AACD;AAEA,eAAsB,4BAErB,cACA,QACA,UAEA,OAAY,CAAC,GACb,QAAqB,CAAC,GACP;AACf,QAAM,aAA4B,CAAC;AAEnC,MAAI;AACJ,MAAI;AAEJ,KAAG;AACF,mBAAe,MAAM,oBAAoB,KAAK,MAAM,QAAQ,UAAU,MAAM,OAAO,GAAG;AACtF,UAAM,aAAa,iBAAiB;AACpC,eAAW,KAAK,MAAM,YAAY,aAAa,YAAY,CAAkB;AAC7E,UAAM,QAAQ,MAAM;AACpB,QAAI,SAAS,SAAS,WAAW,QAAQ;AACxC,aAAO;AAAA,IACR;AAAA,EACD,SAAS,aAAa,iBAAiB,MAAM;AAE7C,SAAO;AACR;AAEA,eAAsB,gCAErB,cACA,QACA,UAEA,OAAY,CAAC,GACb,QAAqB,CAAC,GACP;AACf,QAAM,aAA4B,CAAC;AAEnC,MAAI;AACJ,QAAM,OAAO;AACb,QAAM,QAAQ;AAEd,KAAG;AACF,mBAAe,MAAM,oBAAoB,KAAK,MAAM,QAAQ,UAAU,MAAM,KAAK;AACjF,UAAM,SAAS,MAAM;AACrB,eAAW,KAAK,MAAM,YAAY,aAAa,YAAY,CAAkB;AAAA,EAC9E,SAAS,aAAa,MAAM,WAAW;AAEvC,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../../../../../../nodes/Microsoft/Teams/v2/transport/index.ts"],"sourcesContent":["import type {\n\tIExecuteFunctions,\n\tILoadOptionsFunctions,\n\tIDataObject,\n\tJsonObject,\n\tIHttpRequestMethods,\n\tIRequestOptions,\n\tIHookFunctions,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\n\nimport { capitalize } from '../../../../../utils/utilities';\n\nexport async function microsoftApiRequest(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions,\n\tmethod: IHttpRequestMethods,\n\tresource: string,\n\tbody: any = {},\n\tqs: IDataObject = {},\n\turi?: string,\n\theaders: IDataObject = {},\n): Promise<any> {\n\tconst options: IRequestOptions = {\n\t\theaders: {\n\t\t\t'Content-Type': 'application/json',\n\t\t},\n\t\tmethod,\n\t\tbody,\n\t\tqs,\n\t\turi: uri || `https://graph.microsoft.com${resource}`,\n\t\tjson: true,\n\t};\n\ttry {\n\t\tif (Object.keys(headers).length !== 0) {\n\t\t\toptions.headers = Object.assign({}, options.headers, headers);\n\t\t}\n\t\treturn await this.helpers.requestOAuth2.call(this, 'microsoftTeamsOAuth2Api', options);\n\t} catch (error) {\n\t\tconst errorOptions: IDataObject = {};\n\t\tif (error.error?.error) {\n\t\t\tconst httpCode = error.statusCode;\n\t\t\terror = error.error.error;\n\t\t\terror.statusCode = httpCode;\n\t\t\terrorOptions.message = error.message;\n\n\t\t\tif (error.code === 'NotFound' && error.message === 'Resource not found') {\n\t\t\t\tconst nodeResource = capitalize(this.getNodeParameter('resource', 0) as string);\n\t\t\t\terrorOptions.message = `${nodeResource} not found`;\n\t\t\t}\n\t\t}\n\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, errorOptions);\n\t}\n}\n\nexport async function microsoftApiRequestAllItems(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\tpropertyName: string,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\tbody: any = {},\n\tquery: IDataObject = {},\n): Promise<any> {\n\tconst returnData: IDataObject[] = [];\n\n\tlet responseData;\n\tlet uri: string | undefined;\n\n\tdo {\n\t\tresponseData = await microsoftApiRequest.call(this, method, endpoint, body, query, uri);\n\t\turi = responseData['@odata.nextLink'];\n\t\treturnData.push.apply(returnData, responseData[propertyName] as IDataObject[]);\n\t\tconst limit = query.limit as number | undefined;\n\t\tif (limit && limit <= returnData.length) {\n\t\t\treturn returnData;\n\t\t}\n\t} while (responseData['@odata.nextLink'] !== undefined);\n\n\treturn returnData;\n}\n\nexport async function microsoftApiRequestAllItemsSkip(\n\tthis: IExecuteFunctions | ILoadOptionsFunctions,\n\tpropertyName: string,\n\tmethod: IHttpRequestMethods,\n\tendpoint: string,\n\tbody: any = {},\n\tquery: IDataObject = {},\n): Promise<any> {\n\tconst returnData: IDataObject[] = [];\n\n\tlet responseData;\n\tquery.$top = 100;\n\tquery.$skip = 0;\n\n\tdo {\n\t\tresponseData = await microsoftApiRequest.call(this, method, endpoint, body, query);\n\t\tquery.$skip += query.$top;\n\t\treturnData.push.apply(returnData, responseData[propertyName] as IDataObject[]);\n\t} while (responseData.value.length !== 0);\n\n\treturn returnData;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,0BAA6B;AAE7B,uBAA2B;AAE3B,eAAsB,oBAErB,QACA,UACA,OAAY,CAAC,GACb,KAAkB,CAAC,GACnB,KACA,UAAuB,CAAC,GACT;AACf,QAAM,UAA2B;AAAA,IAChC,SAAS;AAAA,MACR,gBAAgB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,OAAO,8BAA8B,QAAQ;AAAA,IAClD,MAAM;AAAA,EACP;AACA,MAAI;AACH,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACtC,cAAQ,UAAU,OAAO,OAAO,CAAC,GAAG,QAAQ,SAAS,OAAO;AAAA,IAC7D;AACA,WAAO,MAAM,KAAK,QAAQ,cAAc,KAAK,MAAM,2BAA2B,OAAO;AAAA,EACtF,SAAS,OAAO;AACf,UAAM,eAA4B,CAAC;AACnC,QAAI,MAAM,OAAO,OAAO;AACvB,YAAM,WAAW,MAAM;AACvB,cAAQ,MAAM,MAAM;AACpB,YAAM,aAAa;AACnB,mBAAa,UAAU,MAAM;AAE7B,UAAI,MAAM,SAAS,cAAc,MAAM,YAAY,sBAAsB;AACxE,cAAM,mBAAe,6BAAW,KAAK,iBAAiB,YAAY,CAAC,CAAW;AAC9E,qBAAa,UAAU,GAAG,YAAY;AAAA,MACvC;AAAA,IACD;AACA,UAAM,IAAI,iCAAa,KAAK,QAAQ,GAAG,OAAqB,YAAY;AAAA,EACzE;AACD;AAEA,eAAsB,4BAErB,cACA,QACA,UACA,OAAY,CAAC,GACb,QAAqB,CAAC,GACP;AACf,QAAM,aAA4B,CAAC;AAEnC,MAAI;AACJ,MAAI;AAEJ,KAAG;AACF,mBAAe,MAAM,oBAAoB,KAAK,MAAM,QAAQ,UAAU,MAAM,OAAO,GAAG;AACtF,UAAM,aAAa,iBAAiB;AACpC,eAAW,KAAK,MAAM,YAAY,aAAa,YAAY,CAAkB;AAC7E,UAAM,QAAQ,MAAM;AACpB,QAAI,SAAS,SAAS,WAAW,QAAQ;AACxC,aAAO;AAAA,IACR;AAAA,EACD,SAAS,aAAa,iBAAiB,MAAM;AAE7C,SAAO;AACR;AAEA,eAAsB,gCAErB,cACA,QACA,UACA,OAAY,CAAC,GACb,QAAqB,CAAC,GACP;AACf,QAAM,aAA4B,CAAC;AAEnC,MAAI;AACJ,QAAM,OAAO;AACb,QAAM,QAAQ;AAEd,KAAG;AACF,mBAAe,MAAM,oBAAoB,KAAK,MAAM,QAAQ,UAAU,MAAM,KAAK;AACjF,UAAM,SAAS,MAAM;AACrB,eAAW,KAAK,MAAM,YAAY,aAAa,YAAY,CAAkB;AAAA,EAC9E,SAAS,aAAa,MAAM,WAAW;AAEvC,SAAO;AACR;","names":[]}