@oneuptime/common 7.0.3914 → 7.0.3916
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.
|
@@ -1,3 +1,401 @@
|
|
|
1
|
-
import
|
|
1
|
+
import HTTPErrorResponse from "Common/Types/API/HTTPErrorResponse";
|
|
2
|
+
import HTTPResponse from "Common/Types/API/HTTPResponse";
|
|
3
|
+
import URL from "Common/Types/API/URL";
|
|
4
|
+
import { JSONObject } from "Common/Types/JSON";
|
|
5
|
+
import API from "Common/Utils/API";
|
|
6
|
+
import WorkspaceMessagePayload from "../../../../Types/Workspace/WorkspaceMessagePayload";
|
|
7
|
+
import logger from "../../Logger";
|
|
8
|
+
import Dictionary from "../../../../Types/Dictionary";
|
|
9
|
+
import WorkspaceBase, {
|
|
10
|
+
WorkspaceChannel,
|
|
11
|
+
WorkspaceSendMessageResponse,
|
|
12
|
+
WorkspaceThread,
|
|
13
|
+
} from "../WorkspaceBase";
|
|
14
|
+
import WorkspaceType from "../../../../Types/Workspace/WorkspaceType";
|
|
15
|
+
import OneUptimeDate from "../../../../Types/Date";
|
|
16
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
17
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
2
18
|
|
|
3
|
-
export default class MicrosoftTeams extends WorkspaceBase {
|
|
19
|
+
export default class MicrosoftTeams extends WorkspaceBase {
|
|
20
|
+
@CaptureSpan()
|
|
21
|
+
public static override async getAllWorkspaceChannels(data: {
|
|
22
|
+
authToken: string;
|
|
23
|
+
}): Promise<Dictionary<WorkspaceChannel>> {
|
|
24
|
+
logger.debug("Getting all workspace channels with data:");
|
|
25
|
+
logger.debug(data);
|
|
26
|
+
|
|
27
|
+
const channels: Dictionary<WorkspaceChannel> = {};
|
|
28
|
+
const response: HTTPErrorResponse | HTTPResponse<JSONObject> =
|
|
29
|
+
await API.get<JSONObject>(
|
|
30
|
+
URL.fromString("https://graph.microsoft.com/v1.0/me/joinedTeams"),
|
|
31
|
+
{
|
|
32
|
+
Authorization: `Bearer ${data.authToken}`,
|
|
33
|
+
},
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
logger.debug("Response from Microsoft Graph API for getting all channels:");
|
|
37
|
+
logger.debug(JSON.stringify(response, null, 2));
|
|
38
|
+
|
|
39
|
+
if (response instanceof HTTPErrorResponse) {
|
|
40
|
+
logger.error("Error response from Microsoft Graph API:");
|
|
41
|
+
logger.error(response);
|
|
42
|
+
throw response;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
for (const team of (response.jsonData as JSONObject)?.[
|
|
46
|
+
"value"
|
|
47
|
+
] as Array<JSONObject>) {
|
|
48
|
+
if (!team["id"] || !team["displayName"]) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
channels[team["displayName"].toString()] = {
|
|
53
|
+
id: team["id"] as string,
|
|
54
|
+
name: team["displayName"] as string,
|
|
55
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
logger.debug("All workspace channels obtained:");
|
|
60
|
+
logger.debug(channels);
|
|
61
|
+
return channels;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@CaptureSpan()
|
|
65
|
+
public static override getDividerBlock(): JSONObject {
|
|
66
|
+
return {
|
|
67
|
+
type: "divider",
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@CaptureSpan()
|
|
72
|
+
public static getValuesFromView(data: {
|
|
73
|
+
view: JSONObject;
|
|
74
|
+
}): Dictionary<string | number | Array<string | number> | Date> {
|
|
75
|
+
logger.debug("Getting values from view with data:");
|
|
76
|
+
logger.debug(JSON.stringify(data, null, 2));
|
|
77
|
+
|
|
78
|
+
const teamsView: JSONObject = data.view;
|
|
79
|
+
const values: Dictionary<string | number | Array<string | number> | Date> =
|
|
80
|
+
{};
|
|
81
|
+
|
|
82
|
+
if (!teamsView["state"] || !(teamsView["state"] as JSONObject)["values"]) {
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
for (const valueId in (teamsView["state"] as JSONObject)[
|
|
87
|
+
"values"
|
|
88
|
+
] as JSONObject) {
|
|
89
|
+
for (const blockId in (
|
|
90
|
+
(teamsView["state"] as JSONObject)["values"] as JSONObject
|
|
91
|
+
)[valueId] as JSONObject) {
|
|
92
|
+
const valueObject: JSONObject = (
|
|
93
|
+
(teamsView["state"] as JSONObject)["values"] as JSONObject
|
|
94
|
+
)[valueId] as JSONObject;
|
|
95
|
+
const value: JSONObject = valueObject[blockId] as JSONObject;
|
|
96
|
+
values[blockId] = value["value"] as string | number;
|
|
97
|
+
|
|
98
|
+
if ((value["selected_option"] as JSONObject)?.["value"]) {
|
|
99
|
+
values[blockId] = (value["selected_option"] as JSONObject)?.[
|
|
100
|
+
"value"
|
|
101
|
+
] as string;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (Array.isArray(value["selected_options"])) {
|
|
105
|
+
values[blockId] = (
|
|
106
|
+
value["selected_options"] as Array<JSONObject>
|
|
107
|
+
).map((option: JSONObject) => {
|
|
108
|
+
return option["value"] as string | number;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// if date picker
|
|
113
|
+
if (value["selected_date_time"]) {
|
|
114
|
+
values[blockId] = OneUptimeDate.fromUnixTimestamp(
|
|
115
|
+
value["selected_date_time"] as number,
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
logger.debug("Values obtained from view:");
|
|
122
|
+
logger.debug(values);
|
|
123
|
+
|
|
124
|
+
return values;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@CaptureSpan()
|
|
128
|
+
public static override async inviteUserToChannelByChannelName(data: {
|
|
129
|
+
authToken: string;
|
|
130
|
+
channelName: string;
|
|
131
|
+
workspaceUserId: string;
|
|
132
|
+
}): Promise<void> {
|
|
133
|
+
logger.debug("Inviting user to channel with data:");
|
|
134
|
+
logger.debug(data);
|
|
135
|
+
|
|
136
|
+
const channelId: string = (
|
|
137
|
+
await this.getWorkspaceChannelFromChannelName({
|
|
138
|
+
authToken: data.authToken,
|
|
139
|
+
channelName: data.channelName,
|
|
140
|
+
})
|
|
141
|
+
).id;
|
|
142
|
+
|
|
143
|
+
return this.inviteUserToChannelByChannelId({
|
|
144
|
+
authToken: data.authToken,
|
|
145
|
+
channelId: channelId,
|
|
146
|
+
workspaceUserId: data.workspaceUserId,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@CaptureSpan()
|
|
151
|
+
public static override async createChannelsIfDoesNotExist(data: {
|
|
152
|
+
authToken: string;
|
|
153
|
+
channelNames: Array<string>;
|
|
154
|
+
}): Promise<Array<WorkspaceChannel>> {
|
|
155
|
+
logger.debug("Creating channels if they do not exist with data:");
|
|
156
|
+
logger.debug(data);
|
|
157
|
+
|
|
158
|
+
const workspaceChannels: Array<WorkspaceChannel> = [];
|
|
159
|
+
const existingWorkspaceChannels: Dictionary<WorkspaceChannel> =
|
|
160
|
+
await this.getAllWorkspaceChannels({
|
|
161
|
+
authToken: data.authToken,
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
logger.debug("Existing workspace channels:");
|
|
165
|
+
logger.debug(existingWorkspaceChannels);
|
|
166
|
+
|
|
167
|
+
for (let channelName of data.channelNames) {
|
|
168
|
+
// if channel name starts with #, remove it
|
|
169
|
+
if (channelName && channelName.startsWith("#")) {
|
|
170
|
+
channelName = channelName.substring(1);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// convert channel name to lowercase
|
|
174
|
+
channelName = channelName.toLowerCase();
|
|
175
|
+
|
|
176
|
+
// replace spaces with hyphens
|
|
177
|
+
channelName = channelName.replace(/\s+/g, "-");
|
|
178
|
+
|
|
179
|
+
if (existingWorkspaceChannels[channelName]) {
|
|
180
|
+
logger.debug(`Channel ${channelName} already exists.`);
|
|
181
|
+
workspaceChannels.push(existingWorkspaceChannels[channelName]!);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
logger.debug(`Channel ${channelName} does not exist. Creating channel.`);
|
|
186
|
+
const channel: WorkspaceChannel = await this.createChannel({
|
|
187
|
+
authToken: data.authToken,
|
|
188
|
+
channelName: channelName,
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
if (channel) {
|
|
192
|
+
logger.debug(`Channel ${channelName} created successfully.`);
|
|
193
|
+
workspaceChannels.push(channel);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
logger.debug("Channels created or found:");
|
|
198
|
+
logger.debug(workspaceChannels);
|
|
199
|
+
return workspaceChannels;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@CaptureSpan()
|
|
203
|
+
public static override async getWorkspaceChannelFromChannelName(data: {
|
|
204
|
+
authToken: string;
|
|
205
|
+
channelName: string;
|
|
206
|
+
}): Promise<WorkspaceChannel> {
|
|
207
|
+
logger.debug("Getting workspace channel ID from channel name with data:");
|
|
208
|
+
logger.debug(data);
|
|
209
|
+
|
|
210
|
+
const channels: Dictionary<WorkspaceChannel> =
|
|
211
|
+
await this.getAllWorkspaceChannels({
|
|
212
|
+
authToken: data.authToken,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
logger.debug("All workspace channels:");
|
|
216
|
+
logger.debug(channels);
|
|
217
|
+
|
|
218
|
+
if (!channels[data.channelName]) {
|
|
219
|
+
logger.error("Channel not found.");
|
|
220
|
+
throw new BadDataException("Channel not found.");
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
logger.debug("Workspace channel ID obtained:");
|
|
224
|
+
logger.debug(channels[data.channelName]!.id);
|
|
225
|
+
|
|
226
|
+
return channels[data.channelName]!;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
@CaptureSpan()
|
|
230
|
+
public static override async getWorkspaceChannelFromChannelId(data: {
|
|
231
|
+
authToken: string;
|
|
232
|
+
channelId: string;
|
|
233
|
+
}): Promise<WorkspaceChannel> {
|
|
234
|
+
logger.debug("Getting workspace channel from channel ID with data:");
|
|
235
|
+
logger.debug(data);
|
|
236
|
+
|
|
237
|
+
const response: HTTPErrorResponse | HTTPResponse<JSONObject> =
|
|
238
|
+
await API.get<JSONObject>(
|
|
239
|
+
URL.fromString(
|
|
240
|
+
`https://graph.microsoft.com/v1.0/teams/${data.channelId}`,
|
|
241
|
+
),
|
|
242
|
+
{
|
|
243
|
+
Authorization: `Bearer ${data.authToken}`,
|
|
244
|
+
},
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
logger.debug("Response from Microsoft Graph API for getting channel info:");
|
|
248
|
+
logger.debug(response);
|
|
249
|
+
|
|
250
|
+
if (response instanceof HTTPErrorResponse) {
|
|
251
|
+
logger.error("Error response from Microsoft Graph API:");
|
|
252
|
+
logger.error(response);
|
|
253
|
+
throw response;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (!(response.jsonData as JSONObject)?.["displayName"]) {
|
|
257
|
+
logger.error("Invalid response from Microsoft Graph API:");
|
|
258
|
+
logger.error(response.jsonData);
|
|
259
|
+
throw new Error("Invalid response");
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
const channel: WorkspaceChannel = {
|
|
263
|
+
name: (response.jsonData as JSONObject)["displayName"] as string,
|
|
264
|
+
id: data.channelId,
|
|
265
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
logger.debug("Workspace channel obtained:");
|
|
269
|
+
logger.debug(channel);
|
|
270
|
+
return channel;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
@CaptureSpan()
|
|
274
|
+
public static override async doesChannelExist(data: {
|
|
275
|
+
authToken: string;
|
|
276
|
+
channelName: string;
|
|
277
|
+
}): Promise<boolean> {
|
|
278
|
+
// if channel name starts with #, remove it
|
|
279
|
+
if (data.channelName && data.channelName.startsWith("#")) {
|
|
280
|
+
data.channelName = data.channelName.substring(1);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// convert channel name to lowercase
|
|
284
|
+
data.channelName = data.channelName.toLowerCase();
|
|
285
|
+
|
|
286
|
+
// get channel id from channel name
|
|
287
|
+
const channels: Dictionary<WorkspaceChannel> =
|
|
288
|
+
await this.getAllWorkspaceChannels({
|
|
289
|
+
authToken: data.authToken,
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
// if this channel exists
|
|
293
|
+
if (channels[data.channelName]) {
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
@CaptureSpan()
|
|
301
|
+
public static override async sendMessage(data: {
|
|
302
|
+
workspaceMessagePayload: WorkspaceMessagePayload;
|
|
303
|
+
authToken: string; // which auth token should we use to send.
|
|
304
|
+
userId: string;
|
|
305
|
+
}): Promise<WorkspaceSendMessageResponse> {
|
|
306
|
+
logger.debug("Sending message to Microsoft Teams with data:");
|
|
307
|
+
logger.debug(data);
|
|
308
|
+
|
|
309
|
+
const blocks: Array<JSONObject> = this.getBlocksFromWorkspaceMessagePayload(
|
|
310
|
+
data.workspaceMessagePayload,
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
logger.debug("Blocks generated from workspace message payload:");
|
|
314
|
+
logger.debug(blocks);
|
|
315
|
+
|
|
316
|
+
const existingWorkspaceChannels: Dictionary<WorkspaceChannel> =
|
|
317
|
+
await this.getAllWorkspaceChannels({
|
|
318
|
+
authToken: data.authToken,
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
logger.debug("Existing workspace channels:");
|
|
322
|
+
logger.debug(existingWorkspaceChannels);
|
|
323
|
+
|
|
324
|
+
const workspaceChannelsToPostTo: Array<WorkspaceChannel> = [];
|
|
325
|
+
|
|
326
|
+
for (let channelName of data.workspaceMessagePayload.channelNames) {
|
|
327
|
+
if (channelName && channelName.startsWith("#")) {
|
|
328
|
+
// trim # from channel name
|
|
329
|
+
channelName = channelName.substring(1);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
let channel: WorkspaceChannel | null = null;
|
|
333
|
+
|
|
334
|
+
if (existingWorkspaceChannels[channelName]) {
|
|
335
|
+
channel = existingWorkspaceChannels[channelName]!;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if (channel) {
|
|
339
|
+
workspaceChannelsToPostTo.push(channel);
|
|
340
|
+
} else {
|
|
341
|
+
logger.debug(`Channel ${channelName} does not exist.`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// add channel ids.
|
|
346
|
+
for (const channelId of data.workspaceMessagePayload.channelIds) {
|
|
347
|
+
const channel: WorkspaceChannel = {
|
|
348
|
+
id: channelId,
|
|
349
|
+
name: "",
|
|
350
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
workspaceChannelsToPostTo.push(channel);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
logger.debug("Channel IDs to post to:");
|
|
357
|
+
logger.debug(workspaceChannelsToPostTo);
|
|
358
|
+
|
|
359
|
+
const workspaceMessageResponse: WorkspaceSendMessageResponse = {
|
|
360
|
+
threads: [],
|
|
361
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
for (const channel of workspaceChannelsToPostTo) {
|
|
365
|
+
try {
|
|
366
|
+
// check if the user is in the channel.
|
|
367
|
+
const isUserInChannel: boolean = await this.isUserInChannel({
|
|
368
|
+
authToken: data.authToken,
|
|
369
|
+
channelId: channel.id,
|
|
370
|
+
userId: data.userId,
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
if (!isUserInChannel) {
|
|
374
|
+
// add user to the channel
|
|
375
|
+
await this.joinChannel({
|
|
376
|
+
authToken: data.authToken,
|
|
377
|
+
channelId: channel.id,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const thread: WorkspaceThread = await this.sendPayloadBlocksToChannel({
|
|
382
|
+
authToken: data.authToken,
|
|
383
|
+
workspaceChannel: channel,
|
|
384
|
+
blocks: blocks,
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
workspaceMessageResponse.threads.push(thread);
|
|
388
|
+
|
|
389
|
+
logger.debug(`Message sent to channel ID ${channel.id} successfully.`);
|
|
390
|
+
} catch (e) {
|
|
391
|
+
logger.error(`Error sending message to channel ID ${channel.id}:`);
|
|
392
|
+
logger.error(e);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
logger.debug("Message sent successfully.");
|
|
397
|
+
logger.debug(workspaceMessageResponse);
|
|
398
|
+
|
|
399
|
+
return workspaceMessageResponse;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
@@ -1,4 +1,327 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import HTTPErrorResponse from "Common/Types/API/HTTPErrorResponse";
|
|
11
|
+
import URL from "Common/Types/API/URL";
|
|
12
|
+
import API from "Common/Utils/API";
|
|
13
|
+
import logger from "../../Logger";
|
|
1
14
|
import WorkspaceBase from "../WorkspaceBase";
|
|
15
|
+
import WorkspaceType from "../../../../Types/Workspace/WorkspaceType";
|
|
16
|
+
import OneUptimeDate from "../../../../Types/Date";
|
|
17
|
+
import CaptureSpan from "../../Telemetry/CaptureSpan";
|
|
18
|
+
import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
2
19
|
export default class MicrosoftTeams extends WorkspaceBase {
|
|
20
|
+
static async getAllWorkspaceChannels(data) {
|
|
21
|
+
var _a;
|
|
22
|
+
logger.debug("Getting all workspace channels with data:");
|
|
23
|
+
logger.debug(data);
|
|
24
|
+
const channels = {};
|
|
25
|
+
const response = await API.get(URL.fromString("https://graph.microsoft.com/v1.0/me/joinedTeams"), {
|
|
26
|
+
Authorization: `Bearer ${data.authToken}`,
|
|
27
|
+
});
|
|
28
|
+
logger.debug("Response from Microsoft Graph API for getting all channels:");
|
|
29
|
+
logger.debug(JSON.stringify(response, null, 2));
|
|
30
|
+
if (response instanceof HTTPErrorResponse) {
|
|
31
|
+
logger.error("Error response from Microsoft Graph API:");
|
|
32
|
+
logger.error(response);
|
|
33
|
+
throw response;
|
|
34
|
+
}
|
|
35
|
+
for (const team of (_a = response.jsonData) === null || _a === void 0 ? void 0 : _a["value"]) {
|
|
36
|
+
if (!team["id"] || !team["displayName"]) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
channels[team["displayName"].toString()] = {
|
|
40
|
+
id: team["id"],
|
|
41
|
+
name: team["displayName"],
|
|
42
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
logger.debug("All workspace channels obtained:");
|
|
46
|
+
logger.debug(channels);
|
|
47
|
+
return channels;
|
|
48
|
+
}
|
|
49
|
+
static getDividerBlock() {
|
|
50
|
+
return {
|
|
51
|
+
type: "divider",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
static getValuesFromView(data) {
|
|
55
|
+
var _a, _b;
|
|
56
|
+
logger.debug("Getting values from view with data:");
|
|
57
|
+
logger.debug(JSON.stringify(data, null, 2));
|
|
58
|
+
const teamsView = data.view;
|
|
59
|
+
const values = {};
|
|
60
|
+
if (!teamsView["state"] || !teamsView["state"]["values"]) {
|
|
61
|
+
return {};
|
|
62
|
+
}
|
|
63
|
+
for (const valueId in teamsView["state"]["values"]) {
|
|
64
|
+
for (const blockId in teamsView["state"]["values"][valueId]) {
|
|
65
|
+
const valueObject = teamsView["state"]["values"][valueId];
|
|
66
|
+
const value = valueObject[blockId];
|
|
67
|
+
values[blockId] = value["value"];
|
|
68
|
+
if ((_a = value["selected_option"]) === null || _a === void 0 ? void 0 : _a["value"]) {
|
|
69
|
+
values[blockId] = (_b = value["selected_option"]) === null || _b === void 0 ? void 0 : _b["value"];
|
|
70
|
+
}
|
|
71
|
+
if (Array.isArray(value["selected_options"])) {
|
|
72
|
+
values[blockId] = value["selected_options"].map((option) => {
|
|
73
|
+
return option["value"];
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// if date picker
|
|
77
|
+
if (value["selected_date_time"]) {
|
|
78
|
+
values[blockId] = OneUptimeDate.fromUnixTimestamp(value["selected_date_time"]);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
logger.debug("Values obtained from view:");
|
|
83
|
+
logger.debug(values);
|
|
84
|
+
return values;
|
|
85
|
+
}
|
|
86
|
+
static async inviteUserToChannelByChannelName(data) {
|
|
87
|
+
logger.debug("Inviting user to channel with data:");
|
|
88
|
+
logger.debug(data);
|
|
89
|
+
const channelId = (await this.getWorkspaceChannelFromChannelName({
|
|
90
|
+
authToken: data.authToken,
|
|
91
|
+
channelName: data.channelName,
|
|
92
|
+
})).id;
|
|
93
|
+
return this.inviteUserToChannelByChannelId({
|
|
94
|
+
authToken: data.authToken,
|
|
95
|
+
channelId: channelId,
|
|
96
|
+
workspaceUserId: data.workspaceUserId,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
static async createChannelsIfDoesNotExist(data) {
|
|
100
|
+
logger.debug("Creating channels if they do not exist with data:");
|
|
101
|
+
logger.debug(data);
|
|
102
|
+
const workspaceChannels = [];
|
|
103
|
+
const existingWorkspaceChannels = await this.getAllWorkspaceChannels({
|
|
104
|
+
authToken: data.authToken,
|
|
105
|
+
});
|
|
106
|
+
logger.debug("Existing workspace channels:");
|
|
107
|
+
logger.debug(existingWorkspaceChannels);
|
|
108
|
+
for (let channelName of data.channelNames) {
|
|
109
|
+
// if channel name starts with #, remove it
|
|
110
|
+
if (channelName && channelName.startsWith("#")) {
|
|
111
|
+
channelName = channelName.substring(1);
|
|
112
|
+
}
|
|
113
|
+
// convert channel name to lowercase
|
|
114
|
+
channelName = channelName.toLowerCase();
|
|
115
|
+
// replace spaces with hyphens
|
|
116
|
+
channelName = channelName.replace(/\s+/g, "-");
|
|
117
|
+
if (existingWorkspaceChannels[channelName]) {
|
|
118
|
+
logger.debug(`Channel ${channelName} already exists.`);
|
|
119
|
+
workspaceChannels.push(existingWorkspaceChannels[channelName]);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
logger.debug(`Channel ${channelName} does not exist. Creating channel.`);
|
|
123
|
+
const channel = await this.createChannel({
|
|
124
|
+
authToken: data.authToken,
|
|
125
|
+
channelName: channelName,
|
|
126
|
+
});
|
|
127
|
+
if (channel) {
|
|
128
|
+
logger.debug(`Channel ${channelName} created successfully.`);
|
|
129
|
+
workspaceChannels.push(channel);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
logger.debug("Channels created or found:");
|
|
133
|
+
logger.debug(workspaceChannels);
|
|
134
|
+
return workspaceChannels;
|
|
135
|
+
}
|
|
136
|
+
static async getWorkspaceChannelFromChannelName(data) {
|
|
137
|
+
logger.debug("Getting workspace channel ID from channel name with data:");
|
|
138
|
+
logger.debug(data);
|
|
139
|
+
const channels = await this.getAllWorkspaceChannels({
|
|
140
|
+
authToken: data.authToken,
|
|
141
|
+
});
|
|
142
|
+
logger.debug("All workspace channels:");
|
|
143
|
+
logger.debug(channels);
|
|
144
|
+
if (!channels[data.channelName]) {
|
|
145
|
+
logger.error("Channel not found.");
|
|
146
|
+
throw new BadDataException("Channel not found.");
|
|
147
|
+
}
|
|
148
|
+
logger.debug("Workspace channel ID obtained:");
|
|
149
|
+
logger.debug(channels[data.channelName].id);
|
|
150
|
+
return channels[data.channelName];
|
|
151
|
+
}
|
|
152
|
+
static async getWorkspaceChannelFromChannelId(data) {
|
|
153
|
+
var _a;
|
|
154
|
+
logger.debug("Getting workspace channel from channel ID with data:");
|
|
155
|
+
logger.debug(data);
|
|
156
|
+
const response = await API.get(URL.fromString(`https://graph.microsoft.com/v1.0/teams/${data.channelId}`), {
|
|
157
|
+
Authorization: `Bearer ${data.authToken}`,
|
|
158
|
+
});
|
|
159
|
+
logger.debug("Response from Microsoft Graph API for getting channel info:");
|
|
160
|
+
logger.debug(response);
|
|
161
|
+
if (response instanceof HTTPErrorResponse) {
|
|
162
|
+
logger.error("Error response from Microsoft Graph API:");
|
|
163
|
+
logger.error(response);
|
|
164
|
+
throw response;
|
|
165
|
+
}
|
|
166
|
+
if (!((_a = response.jsonData) === null || _a === void 0 ? void 0 : _a["displayName"])) {
|
|
167
|
+
logger.error("Invalid response from Microsoft Graph API:");
|
|
168
|
+
logger.error(response.jsonData);
|
|
169
|
+
throw new Error("Invalid response");
|
|
170
|
+
}
|
|
171
|
+
const channel = {
|
|
172
|
+
name: response.jsonData["displayName"],
|
|
173
|
+
id: data.channelId,
|
|
174
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
175
|
+
};
|
|
176
|
+
logger.debug("Workspace channel obtained:");
|
|
177
|
+
logger.debug(channel);
|
|
178
|
+
return channel;
|
|
179
|
+
}
|
|
180
|
+
static async doesChannelExist(data) {
|
|
181
|
+
// if channel name starts with #, remove it
|
|
182
|
+
if (data.channelName && data.channelName.startsWith("#")) {
|
|
183
|
+
data.channelName = data.channelName.substring(1);
|
|
184
|
+
}
|
|
185
|
+
// convert channel name to lowercase
|
|
186
|
+
data.channelName = data.channelName.toLowerCase();
|
|
187
|
+
// get channel id from channel name
|
|
188
|
+
const channels = await this.getAllWorkspaceChannels({
|
|
189
|
+
authToken: data.authToken,
|
|
190
|
+
});
|
|
191
|
+
// if this channel exists
|
|
192
|
+
if (channels[data.channelName]) {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
static async sendMessage(data) {
|
|
198
|
+
logger.debug("Sending message to Microsoft Teams with data:");
|
|
199
|
+
logger.debug(data);
|
|
200
|
+
const blocks = this.getBlocksFromWorkspaceMessagePayload(data.workspaceMessagePayload);
|
|
201
|
+
logger.debug("Blocks generated from workspace message payload:");
|
|
202
|
+
logger.debug(blocks);
|
|
203
|
+
const existingWorkspaceChannels = await this.getAllWorkspaceChannels({
|
|
204
|
+
authToken: data.authToken,
|
|
205
|
+
});
|
|
206
|
+
logger.debug("Existing workspace channels:");
|
|
207
|
+
logger.debug(existingWorkspaceChannels);
|
|
208
|
+
const workspaceChannelsToPostTo = [];
|
|
209
|
+
for (let channelName of data.workspaceMessagePayload.channelNames) {
|
|
210
|
+
if (channelName && channelName.startsWith("#")) {
|
|
211
|
+
// trim # from channel name
|
|
212
|
+
channelName = channelName.substring(1);
|
|
213
|
+
}
|
|
214
|
+
let channel = null;
|
|
215
|
+
if (existingWorkspaceChannels[channelName]) {
|
|
216
|
+
channel = existingWorkspaceChannels[channelName];
|
|
217
|
+
}
|
|
218
|
+
if (channel) {
|
|
219
|
+
workspaceChannelsToPostTo.push(channel);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
logger.debug(`Channel ${channelName} does not exist.`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// add channel ids.
|
|
226
|
+
for (const channelId of data.workspaceMessagePayload.channelIds) {
|
|
227
|
+
const channel = {
|
|
228
|
+
id: channelId,
|
|
229
|
+
name: "",
|
|
230
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
231
|
+
};
|
|
232
|
+
workspaceChannelsToPostTo.push(channel);
|
|
233
|
+
}
|
|
234
|
+
logger.debug("Channel IDs to post to:");
|
|
235
|
+
logger.debug(workspaceChannelsToPostTo);
|
|
236
|
+
const workspaceMessageResponse = {
|
|
237
|
+
threads: [],
|
|
238
|
+
workspaceType: WorkspaceType.MicrosoftTeams,
|
|
239
|
+
};
|
|
240
|
+
for (const channel of workspaceChannelsToPostTo) {
|
|
241
|
+
try {
|
|
242
|
+
// check if the user is in the channel.
|
|
243
|
+
const isUserInChannel = await this.isUserInChannel({
|
|
244
|
+
authToken: data.authToken,
|
|
245
|
+
channelId: channel.id,
|
|
246
|
+
userId: data.userId,
|
|
247
|
+
});
|
|
248
|
+
if (!isUserInChannel) {
|
|
249
|
+
// add user to the channel
|
|
250
|
+
await this.joinChannel({
|
|
251
|
+
authToken: data.authToken,
|
|
252
|
+
channelId: channel.id,
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
const thread = await this.sendPayloadBlocksToChannel({
|
|
256
|
+
authToken: data.authToken,
|
|
257
|
+
workspaceChannel: channel,
|
|
258
|
+
blocks: blocks,
|
|
259
|
+
});
|
|
260
|
+
workspaceMessageResponse.threads.push(thread);
|
|
261
|
+
logger.debug(`Message sent to channel ID ${channel.id} successfully.`);
|
|
262
|
+
}
|
|
263
|
+
catch (e) {
|
|
264
|
+
logger.error(`Error sending message to channel ID ${channel.id}:`);
|
|
265
|
+
logger.error(e);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
logger.debug("Message sent successfully.");
|
|
269
|
+
logger.debug(workspaceMessageResponse);
|
|
270
|
+
return workspaceMessageResponse;
|
|
271
|
+
}
|
|
3
272
|
}
|
|
273
|
+
__decorate([
|
|
274
|
+
CaptureSpan(),
|
|
275
|
+
__metadata("design:type", Function),
|
|
276
|
+
__metadata("design:paramtypes", [Object]),
|
|
277
|
+
__metadata("design:returntype", Promise)
|
|
278
|
+
], MicrosoftTeams, "getAllWorkspaceChannels", null);
|
|
279
|
+
__decorate([
|
|
280
|
+
CaptureSpan(),
|
|
281
|
+
__metadata("design:type", Function),
|
|
282
|
+
__metadata("design:paramtypes", []),
|
|
283
|
+
__metadata("design:returntype", Object)
|
|
284
|
+
], MicrosoftTeams, "getDividerBlock", null);
|
|
285
|
+
__decorate([
|
|
286
|
+
CaptureSpan(),
|
|
287
|
+
__metadata("design:type", Function),
|
|
288
|
+
__metadata("design:paramtypes", [Object]),
|
|
289
|
+
__metadata("design:returntype", Object)
|
|
290
|
+
], MicrosoftTeams, "getValuesFromView", null);
|
|
291
|
+
__decorate([
|
|
292
|
+
CaptureSpan(),
|
|
293
|
+
__metadata("design:type", Function),
|
|
294
|
+
__metadata("design:paramtypes", [Object]),
|
|
295
|
+
__metadata("design:returntype", Promise)
|
|
296
|
+
], MicrosoftTeams, "inviteUserToChannelByChannelName", null);
|
|
297
|
+
__decorate([
|
|
298
|
+
CaptureSpan(),
|
|
299
|
+
__metadata("design:type", Function),
|
|
300
|
+
__metadata("design:paramtypes", [Object]),
|
|
301
|
+
__metadata("design:returntype", Promise)
|
|
302
|
+
], MicrosoftTeams, "createChannelsIfDoesNotExist", null);
|
|
303
|
+
__decorate([
|
|
304
|
+
CaptureSpan(),
|
|
305
|
+
__metadata("design:type", Function),
|
|
306
|
+
__metadata("design:paramtypes", [Object]),
|
|
307
|
+
__metadata("design:returntype", Promise)
|
|
308
|
+
], MicrosoftTeams, "getWorkspaceChannelFromChannelName", null);
|
|
309
|
+
__decorate([
|
|
310
|
+
CaptureSpan(),
|
|
311
|
+
__metadata("design:type", Function),
|
|
312
|
+
__metadata("design:paramtypes", [Object]),
|
|
313
|
+
__metadata("design:returntype", Promise)
|
|
314
|
+
], MicrosoftTeams, "getWorkspaceChannelFromChannelId", null);
|
|
315
|
+
__decorate([
|
|
316
|
+
CaptureSpan(),
|
|
317
|
+
__metadata("design:type", Function),
|
|
318
|
+
__metadata("design:paramtypes", [Object]),
|
|
319
|
+
__metadata("design:returntype", Promise)
|
|
320
|
+
], MicrosoftTeams, "doesChannelExist", null);
|
|
321
|
+
__decorate([
|
|
322
|
+
CaptureSpan(),
|
|
323
|
+
__metadata("design:type", Function),
|
|
324
|
+
__metadata("design:paramtypes", [Object]),
|
|
325
|
+
__metadata("design:returntype", Promise)
|
|
326
|
+
], MicrosoftTeams, "sendMessage", null);
|
|
4
327
|
//# sourceMappingURL=MicrosoftTeams.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicrosoftTeams.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MicrosoftTeams.js","sourceRoot":"","sources":["../../../../../../Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneuptime/common",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.3916",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"airtable": "^0.12.2",
|
|
78
78
|
"axios": "^1.7.2",
|
|
79
79
|
"bullmq": "^5.3.3",
|
|
80
|
-
"Common": "npm:@oneuptime/common@7.0.
|
|
80
|
+
"Common": "npm:@oneuptime/common@7.0.3916",
|
|
81
81
|
"cookie-parser": "^1.4.7",
|
|
82
82
|
"cors": "^2.8.5",
|
|
83
83
|
"cron-parser": "^4.8.1",
|