@oneuptime/common 7.0.3786 → 7.0.3815

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 (115) hide show
  1. package/Server/API/SlackAPI.ts +68 -0
  2. package/Server/Services/AccessTokenService.ts +21 -0
  3. package/Server/Services/AlertFeedService.ts +98 -0
  4. package/Server/Services/AlertInternalNoteService.ts +49 -8
  5. package/Server/Services/AlertOwnerTeamService.ts +50 -2
  6. package/Server/Services/AlertOwnerUserService.ts +52 -2
  7. package/Server/Services/AlertService.ts +236 -37
  8. package/Server/Services/AlertStateService.ts +24 -0
  9. package/Server/Services/AlertStateTimelineService.ts +30 -2
  10. package/Server/Services/IncidentInternalNoteService.ts +6 -6
  11. package/Server/Services/IncidentPublicNoteService.ts +7 -4
  12. package/Server/Services/IncidentStateTimelineService.ts +2 -1
  13. package/Server/Services/ScheduledMaintenanceFeedService.ts +103 -0
  14. package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +50 -6
  15. package/Server/Services/ScheduledMaintenanceOwnerTeamService.ts +37 -0
  16. package/Server/Services/ScheduledMaintenanceOwnerUserService.ts +34 -0
  17. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +49 -7
  18. package/Server/Services/ScheduledMaintenanceService.ts +375 -12
  19. package/Server/Services/ScheduledMaintenanceStateService.ts +122 -34
  20. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +33 -1
  21. package/Server/Services/WorkspaceNotificationRuleService.ts +12 -0
  22. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.ts +38 -0
  23. package/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.ts +116 -0
  24. package/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.ts +36 -115
  25. package/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.ts +108 -0
  26. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +20 -2
  27. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +697 -0
  28. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +9 -2
  29. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +9 -3
  30. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +956 -0
  31. package/Server/Utils/Workspace/Slack/Messages/Alert.ts +116 -0
  32. package/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.ts +108 -0
  33. package/Server/Utils/Workspace/Slack/Slack.ts +48 -2
  34. package/Server/Utils/Workspace/Slack/app-manifest.json +3 -3
  35. package/Server/Utils/Workspace/WorkspaceBase.ts +14 -0
  36. package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +69 -0
  37. package/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.ts +73 -0
  38. package/Types/Date.ts +5 -0
  39. package/Types/Workspace/WorkspaceMessagePayload.ts +9 -0
  40. package/build/dist/Server/API/SlackAPI.js +54 -0
  41. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  42. package/build/dist/Server/Services/AccessTokenService.js +11 -0
  43. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  44. package/build/dist/Server/Services/AlertFeedService.js +60 -0
  45. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  46. package/build/dist/Server/Services/AlertInternalNoteService.js +39 -8
  47. package/build/dist/Server/Services/AlertInternalNoteService.js.map +1 -1
  48. package/build/dist/Server/Services/AlertOwnerTeamService.js +40 -2
  49. package/build/dist/Server/Services/AlertOwnerTeamService.js.map +1 -1
  50. package/build/dist/Server/Services/AlertOwnerUserService.js +41 -3
  51. package/build/dist/Server/Services/AlertOwnerUserService.js.map +1 -1
  52. package/build/dist/Server/Services/AlertService.js +192 -35
  53. package/build/dist/Server/Services/AlertService.js.map +1 -1
  54. package/build/dist/Server/Services/AlertStateService.js +13 -0
  55. package/build/dist/Server/Services/AlertStateService.js.map +1 -1
  56. package/build/dist/Server/Services/AlertStateTimelineService.js +26 -2
  57. package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
  58. package/build/dist/Server/Services/IncidentInternalNoteService.js +6 -6
  59. package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
  60. package/build/dist/Server/Services/IncidentPublicNoteService.js +5 -4
  61. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  62. package/build/dist/Server/Services/IncidentStateTimelineService.js +1 -1
  63. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  64. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js +60 -0
  65. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js.map +1 -1
  66. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +36 -6
  67. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
  68. package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js +24 -0
  69. package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js.map +1 -1
  70. package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js +22 -0
  71. package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js.map +1 -1
  72. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +36 -7
  73. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  74. package/build/dist/Server/Services/ScheduledMaintenanceService.js +275 -13
  75. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  76. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +52 -4
  77. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
  78. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +28 -1
  79. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  80. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +10 -0
  81. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  82. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js +37 -0
  83. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js.map +1 -0
  84. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js +82 -0
  85. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js.map +1 -0
  86. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js +33 -99
  87. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js.map +1 -1
  88. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js +74 -0
  89. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js.map +1 -0
  90. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +20 -2
  91. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
  92. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +425 -0
  93. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -0
  94. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +2 -0
  95. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -1
  96. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +5 -2
  97. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
  98. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +599 -0
  99. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -0
  100. package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js +82 -0
  101. package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js.map +1 -0
  102. package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js +74 -0
  103. package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js.map +1 -0
  104. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +34 -0
  105. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  106. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +3 -3
  107. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +8 -0
  108. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  109. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js +48 -0
  110. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -0
  111. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js +47 -0
  112. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js.map +1 -0
  113. package/build/dist/Types/Date.js +4 -0
  114. package/build/dist/Types/Date.js.map +1 -1
  115. package/package.json +2 -2
@@ -0,0 +1,599 @@
1
+ import BadDataException from "../../../../../Types/Exception/BadDataException";
2
+ import ObjectID from "../../../../../Types/ObjectID";
3
+ import ScheduledMaintenanceService from "../../../../Services/ScheduledMaintenanceService";
4
+ import SlackUtil from "../Slack";
5
+ import SlackActionType from "./ActionTypes";
6
+ import Response from "../../../Response";
7
+ import ScheduledMaintenancePublicNoteService from "../../../../Services/ScheduledMaintenancePublicNoteService";
8
+ import ScheduledMaintenanceInternalNoteService from "../../../../Services/ScheduledMaintenanceInternalNoteService";
9
+ import { LIMIT_PER_PROJECT } from "../../../../../Types/Database/LimitMax";
10
+ import ScheduledMaintenanceStateService from "../../../../Services/ScheduledMaintenanceStateService";
11
+ import logger from "../../../Logger";
12
+ import SortOrder from "../../../../../Types/BaseDatabase/SortOrder";
13
+ import Monitor from "../../../../../Models/DatabaseModels/Monitor";
14
+ import MonitorService from "../../../../Services/MonitorService";
15
+ import MonitorStatusService from "../../../../Services/MonitorStatusService";
16
+ import Label from "../../../../../Models/DatabaseModels/Label";
17
+ import LabelService from "../../../../Services/LabelService";
18
+ import ScheduledMaintenance from "../../../../../Models/DatabaseModels/ScheduledMaintenance";
19
+ import OneUptimeDate from "../../../../../Types/Date";
20
+ import AccessTokenService from "../../../../Services/AccessTokenService";
21
+ export default class SlackScheduledMaintenanceActions {
22
+ static isScheduledMaintenanceAction(data) {
23
+ const { actionType } = data;
24
+ switch (actionType) {
25
+ case SlackActionType.MarkScheduledMaintenanceAsOngoing:
26
+ case SlackActionType.MarkScheduledMaintenanceAsComplete:
27
+ case SlackActionType.ViewAddScheduledMaintenanceNote:
28
+ case SlackActionType.SubmitScheduledMaintenanceNote:
29
+ case SlackActionType.ViewChangeScheduledMaintenanceState:
30
+ case SlackActionType.SubmitChangeScheduledMaintenanceState:
31
+ case SlackActionType.ViewScheduledMaintenance:
32
+ case SlackActionType.NewScheduledMaintenance:
33
+ case SlackActionType.SubmitNewScheduledMaintenance:
34
+ return true;
35
+ default:
36
+ return false;
37
+ }
38
+ }
39
+ static async submitNewScheduledMaintenance(data) {
40
+ var _a;
41
+ const { slackRequest, req, res } = data;
42
+ const { botUserId, userId, projectAuthToken } = slackRequest;
43
+ if (!userId) {
44
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid User ID"));
45
+ }
46
+ if (!projectAuthToken) {
47
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project Auth Token"));
48
+ }
49
+ if (!botUserId) {
50
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Bot User ID"));
51
+ }
52
+ if (data.action.actionType === SlackActionType.SubmitNewScheduledMaintenance) {
53
+ // We send this early let slack know we're ok. We'll do the rest in the background.
54
+ // if view values is empty, then return error.
55
+ if (!data.slackRequest.viewValues) {
56
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid View Values"));
57
+ }
58
+ if (!data.slackRequest.viewValues["scheduledMaintenanceTitle"]) {
59
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance Title"));
60
+ }
61
+ if (!data.slackRequest.viewValues["scheduledMaintenanceDescription"]) {
62
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance Description"));
63
+ }
64
+ // check start date and end date.
65
+ if (!data.slackRequest.viewValues["startDate"]) {
66
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Start Date"));
67
+ }
68
+ if (!data.slackRequest.viewValues["endDate"]) {
69
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid End Date"));
70
+ }
71
+ Response.sendJsonObjectResponse(req, res, {
72
+ response_action: "clear",
73
+ });
74
+ const title = data.slackRequest.viewValues["scheduledMaintenanceTitle"].toString();
75
+ const description = data.slackRequest.viewValues["scheduledMaintenanceDescription"].toString();
76
+ const monitors = (data.slackRequest.viewValues["scheduledMaintenanceMonitors"] || []);
77
+ const monitorStatus = (_a = data.slackRequest.viewValues["monitorStatus"]) === null || _a === void 0 ? void 0 : _a.toString();
78
+ const labels = data.slackRequest.viewValues["labels"] || [];
79
+ const scheduledMaintenanceMonitors = monitors.map((monitor) => {
80
+ return new ObjectID(monitor);
81
+ });
82
+ const scheduledMaintenanceLabels = labels.map((label) => {
83
+ return new ObjectID(label);
84
+ });
85
+ const monitorStatusId = monitorStatus
86
+ ? new ObjectID(monitorStatus)
87
+ : undefined;
88
+ const startDate = OneUptimeDate.fromString(data.slackRequest.viewValues["startDate"].toString());
89
+ const endDate = OneUptimeDate.fromString(data.slackRequest.viewValues["endDate"].toString());
90
+ const scheduledMaintenance = new ScheduledMaintenance();
91
+ scheduledMaintenance.title = title;
92
+ scheduledMaintenance.description = description;
93
+ scheduledMaintenance.projectId = slackRequest.projectId;
94
+ scheduledMaintenance.createdByUserId = userId;
95
+ scheduledMaintenance.startsAt = startDate;
96
+ scheduledMaintenance.endsAt = endDate;
97
+ if (monitors.length > 0) {
98
+ scheduledMaintenance.monitors = scheduledMaintenanceMonitors.map((monitorId) => {
99
+ const monitor = new Monitor();
100
+ monitor.id = monitorId;
101
+ return monitor;
102
+ });
103
+ }
104
+ if (monitorStatusId) {
105
+ scheduledMaintenance.changeMonitorStatusToId = monitorStatusId;
106
+ }
107
+ if (scheduledMaintenanceLabels.length > 0) {
108
+ scheduledMaintenance.labels = scheduledMaintenanceLabels.map((labelId) => {
109
+ const label = new Label();
110
+ label.id = labelId;
111
+ return label;
112
+ });
113
+ }
114
+ await ScheduledMaintenanceService.create({
115
+ data: scheduledMaintenance,
116
+ props: {
117
+ isRoot: true,
118
+ },
119
+ });
120
+ }
121
+ }
122
+ static async viewNewScheduledMaintenanceModal(data) {
123
+ const blocks = [];
124
+ // send response to clear the action.
125
+ Response.sendTextResponse(data.req, data.res, "");
126
+ // show new scheduledMaintenance modal.
127
+ // new scheduledMaintenance modal is :
128
+ // ScheduledMaintenance Title (this can be prefilled with actionValue)
129
+ // ScheduledMaintenance Description
130
+ // Start Date and Time (date picker)
131
+ // End Date and Time (date picker)
132
+ // Monitors (dropdown) (miltiselect)
133
+ // Change Monitor Status to (dropdown) (single select)
134
+ // Labels (dropdown) (multiselect)
135
+ const scheduledMaintenanceTitle = {
136
+ _type: "WorkspaceTextBoxBlock",
137
+ label: "Event Title",
138
+ blockId: "scheduledMaintenanceTitle",
139
+ placeholder: "Scheduled Maintenance Title",
140
+ initialValue: data.action.actionValue || "",
141
+ };
142
+ blocks.push(scheduledMaintenanceTitle);
143
+ const scheduledMaintenanceDescription = {
144
+ _type: "WorkspaceTextAreaBlock",
145
+ label: "Event Description",
146
+ blockId: "scheduledMaintenanceDescription",
147
+ placeholder: "Scheduled Maintenance Description",
148
+ };
149
+ blocks.push(scheduledMaintenanceDescription);
150
+ // start date
151
+ const startDatePicker = {
152
+ _type: "WorkspaceDateTimePickerBlock",
153
+ label: "Start Date and Time",
154
+ blockId: "startDate",
155
+ optional: false,
156
+ };
157
+ blocks.push(startDatePicker);
158
+ // end date
159
+ const endDatePicker = {
160
+ _type: "WorkspaceDateTimePickerBlock",
161
+ label: "End Date and Time",
162
+ blockId: "endDate",
163
+ optional: false,
164
+ };
165
+ blocks.push(endDatePicker);
166
+ const monitorsForProject = await MonitorService.findBy({
167
+ query: {
168
+ projectId: data.slackRequest.projectId,
169
+ },
170
+ select: {
171
+ name: true,
172
+ },
173
+ props: {
174
+ isRoot: true,
175
+ },
176
+ limit: LIMIT_PER_PROJECT,
177
+ skip: 0,
178
+ });
179
+ const monitorDropdownOptions = monitorsForProject.map((monitor) => {
180
+ var _a;
181
+ return {
182
+ label: monitor.name || "",
183
+ value: ((_a = monitor._id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
184
+ };
185
+ });
186
+ const scheduledMaintenanceMonitors = {
187
+ _type: "WorkspaceDropdownBlock",
188
+ label: "Monitors affected",
189
+ blockId: "scheduledMaintenanceMonitors",
190
+ placeholder: "Select Monitors",
191
+ options: monitorDropdownOptions,
192
+ multiSelect: true,
193
+ optional: true,
194
+ };
195
+ if (monitorsForProject.length > 0) {
196
+ blocks.push(scheduledMaintenanceMonitors);
197
+ }
198
+ const monitorStatusForProject = await MonitorStatusService.findBy({
199
+ query: {
200
+ projectId: data.slackRequest.projectId,
201
+ },
202
+ select: {
203
+ name: true,
204
+ },
205
+ props: {
206
+ isRoot: true,
207
+ },
208
+ sort: {
209
+ priority: SortOrder.Ascending,
210
+ },
211
+ limit: LIMIT_PER_PROJECT,
212
+ skip: 0,
213
+ });
214
+ const monitorStatusDropdownOptions = monitorStatusForProject.map((status) => {
215
+ var _a;
216
+ return {
217
+ label: status.name || "",
218
+ value: ((_a = status._id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
219
+ };
220
+ });
221
+ const monitorStatusDropdown = {
222
+ _type: "WorkspaceDropdownBlock",
223
+ label: "Change Monitor Status to",
224
+ description: "Select the status you want to change the monitor to when the event starts.",
225
+ blockId: "monitorStatus",
226
+ placeholder: "Select Monitor Status",
227
+ options: monitorStatusDropdownOptions,
228
+ optional: true,
229
+ };
230
+ if (monitorStatusForProject.length > 0 &&
231
+ monitorDropdownOptions.length > 0) {
232
+ blocks.push(monitorStatusDropdown);
233
+ }
234
+ const labelsForProject = await LabelService.findBy({
235
+ query: {
236
+ projectId: data.slackRequest.projectId,
237
+ },
238
+ select: {
239
+ name: true,
240
+ },
241
+ props: {
242
+ isRoot: true,
243
+ },
244
+ limit: LIMIT_PER_PROJECT,
245
+ skip: 0,
246
+ });
247
+ const labelsDropdownOptions = labelsForProject.map((label) => {
248
+ var _a;
249
+ return {
250
+ label: label.name || "",
251
+ value: ((_a = label._id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
252
+ };
253
+ });
254
+ const labelsDropdown = {
255
+ _type: "WorkspaceDropdownBlock",
256
+ label: "Labels",
257
+ blockId: "labels",
258
+ placeholder: "Select Labels",
259
+ options: labelsDropdownOptions,
260
+ multiSelect: true,
261
+ optional: true,
262
+ };
263
+ if (labelsForProject.length > 0) {
264
+ blocks.push(labelsDropdown);
265
+ }
266
+ const modalBlock = {
267
+ _type: "WorkspaceModalBlock",
268
+ title: "New Scheduled Event",
269
+ submitButtonTitle: "Submit",
270
+ cancelButtonTitle: "Cancel",
271
+ actionId: SlackActionType.SubmitNewScheduledMaintenance,
272
+ actionValue: "",
273
+ blocks: blocks,
274
+ };
275
+ await SlackUtil.showModalToUser({
276
+ authToken: data.slackRequest.projectAuthToken,
277
+ modalBlock: modalBlock,
278
+ triggerId: data.slackRequest.triggerId,
279
+ });
280
+ }
281
+ static async markScheduledMaintenanceAsOngoing(data) {
282
+ const { slackRequest, req, res } = data;
283
+ const { botUserId, userId, projectAuthToken, slackUsername } = slackRequest;
284
+ const { actionValue } = data.action;
285
+ if (!actionValue) {
286
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance ID"));
287
+ }
288
+ if (!userId) {
289
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid User ID"));
290
+ }
291
+ if (!projectAuthToken) {
292
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project Auth Token"));
293
+ }
294
+ if (!botUserId) {
295
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Bot User ID"));
296
+ }
297
+ if (data.action.actionType ===
298
+ SlackActionType.MarkScheduledMaintenanceAsOngoing) {
299
+ const scheduledMaintenanceId = new ObjectID(actionValue);
300
+ // We send this early let slack know we're ok. We'll do the rest in the background.
301
+ Response.sendJsonObjectResponse(req, res, {
302
+ response_action: "clear",
303
+ });
304
+ const isAlreadyOngoing = await ScheduledMaintenanceService.isScheduledMaintenanceOngoing({
305
+ scheduledMaintenanceId: scheduledMaintenanceId,
306
+ });
307
+ if (isAlreadyOngoing) {
308
+ const scheduledMaintenanceNumber = await ScheduledMaintenanceService.getScheduledMaintenanceNumber({
309
+ scheduledMaintenanceId: scheduledMaintenanceId,
310
+ });
311
+ // send a message to the channel visible to user, that the scheduledMaintenance has already been acknowledged.
312
+ const markdwonPayload = {
313
+ _type: "WorkspacePayloadMarkdown",
314
+ text: `@${slackUsername}, unfortunately you cannot change the state to ongoing because the **[Scheduled Maintenance ${scheduledMaintenanceNumber === null || scheduledMaintenanceNumber === void 0 ? void 0 : scheduledMaintenanceNumber.toString()}](${await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(slackRequest.projectId, scheduledMaintenanceId)})** is already in ongoing state.`,
315
+ };
316
+ await SlackUtil.sendDirectMessageToUser({
317
+ messageBlocks: [markdwonPayload],
318
+ authToken: projectAuthToken,
319
+ workspaceUserId: slackRequest.slackUserId,
320
+ });
321
+ return;
322
+ }
323
+ await ScheduledMaintenanceService.markScheduledMaintenanceAsOngoing(scheduledMaintenanceId, userId);
324
+ // Scheduled Maintenance Feed will send a message to the channel that the scheduledMaintenance has been Ongoing.
325
+ return;
326
+ }
327
+ // invlaid action type.
328
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Action Type"));
329
+ }
330
+ static async resolveScheduledMaintenance(data) {
331
+ const { slackRequest, req, res } = data;
332
+ const { botUserId, userId, projectAuthToken, slackUsername } = slackRequest;
333
+ const { actionValue } = data.action;
334
+ if (!actionValue) {
335
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance ID"));
336
+ }
337
+ if (!userId) {
338
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid User ID"));
339
+ }
340
+ if (!projectAuthToken) {
341
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project Auth Token"));
342
+ }
343
+ if (!botUserId) {
344
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Bot User ID"));
345
+ }
346
+ if (data.action.actionType ===
347
+ SlackActionType.MarkScheduledMaintenanceAsComplete) {
348
+ const scheduledMaintenanceId = new ObjectID(actionValue);
349
+ // We send this early let slack know we're ok. We'll do the rest in the background.
350
+ Response.sendJsonObjectResponse(req, res, {
351
+ response_action: "clear",
352
+ });
353
+ const isAlreadyResolved = await ScheduledMaintenanceService.isScheduledMaintenanceCompleted({
354
+ scheduledMaintenanceId: scheduledMaintenanceId,
355
+ });
356
+ if (isAlreadyResolved) {
357
+ const scheduledMaintenanceNumber = await ScheduledMaintenanceService.getScheduledMaintenanceNumber({
358
+ scheduledMaintenanceId: scheduledMaintenanceId,
359
+ });
360
+ // send a message to the channel visible to user, that the scheduledMaintenance has already been Resolved.
361
+ const markdwonPayload = {
362
+ _type: "WorkspacePayloadMarkdown",
363
+ text: `@${slackUsername}, unfortunately you cannot resolve the **[Scheduled Maintenance ${scheduledMaintenanceNumber === null || scheduledMaintenanceNumber === void 0 ? void 0 : scheduledMaintenanceNumber.toString()}](${await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(slackRequest.projectId, scheduledMaintenanceId)})**. It has already been resolved.`,
364
+ };
365
+ await SlackUtil.sendDirectMessageToUser({
366
+ messageBlocks: [markdwonPayload],
367
+ authToken: projectAuthToken,
368
+ workspaceUserId: slackRequest.slackUserId,
369
+ });
370
+ return;
371
+ }
372
+ await ScheduledMaintenanceService.markScheduledMaintenanceAsComplete(scheduledMaintenanceId, userId);
373
+ return;
374
+ }
375
+ // invlaid action type.
376
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Action Type"));
377
+ }
378
+ static async viewChangeScheduledMaintenanceState(data) {
379
+ const { req, res } = data;
380
+ const { actionValue } = data.action;
381
+ if (!actionValue) {
382
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance ID"));
383
+ }
384
+ // We send this early let slack know we're ok. We'll do the rest in the background.
385
+ Response.sendJsonObjectResponse(req, res, {
386
+ response_action: "clear",
387
+ });
388
+ // const scheduledMaintenanceId: ObjectID = new ObjectID(actionValue);
389
+ // send a modal with a dropdown that says "Public Note" or "Private Note" and a text area to add the note.
390
+ const scheduledMaintenanceStates = await ScheduledMaintenanceStateService.getAllScheduledMaintenanceStates({
391
+ projectId: data.slackRequest.projectId,
392
+ props: {
393
+ isRoot: true,
394
+ },
395
+ });
396
+ logger.debug("Scheduled Maintenance States: ");
397
+ logger.debug(scheduledMaintenanceStates);
398
+ const dropdownOptions = scheduledMaintenanceStates
399
+ .map((state) => {
400
+ var _a;
401
+ return {
402
+ label: state.name || "",
403
+ value: ((_a = state._id) === null || _a === void 0 ? void 0 : _a.toString()) || "",
404
+ };
405
+ })
406
+ .filter((option) => {
407
+ return option.label !== "" || option.value !== "";
408
+ });
409
+ logger.debug("Dropdown Options: ");
410
+ logger.debug(dropdownOptions);
411
+ const statePickerDropdown = {
412
+ _type: "WorkspaceDropdownBlock",
413
+ label: "Scheduled Maintenance State",
414
+ blockId: "scheduledMaintenanceState",
415
+ placeholder: "Select Scheduled Maintenance State",
416
+ options: dropdownOptions,
417
+ };
418
+ const modalBlock = {
419
+ _type: "WorkspaceModalBlock",
420
+ title: "Change Event State",
421
+ submitButtonTitle: "Submit",
422
+ cancelButtonTitle: "Cancel",
423
+ actionId: SlackActionType.SubmitChangeScheduledMaintenanceState,
424
+ actionValue: actionValue,
425
+ blocks: [statePickerDropdown],
426
+ };
427
+ await SlackUtil.showModalToUser({
428
+ authToken: data.slackRequest.projectAuthToken,
429
+ modalBlock: modalBlock,
430
+ triggerId: data.slackRequest.triggerId,
431
+ });
432
+ }
433
+ static async submitChangeScheduledMaintenanceState(data) {
434
+ const { req, res } = data;
435
+ const { actionValue } = data.action;
436
+ if (!actionValue) {
437
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance ID"));
438
+ }
439
+ // We send this early let slack know we're ok. We'll do the rest in the background.
440
+ Response.sendJsonObjectResponse(req, res, {
441
+ response_action: "clear",
442
+ });
443
+ // const scheduledMaintenanceId: ObjectID = new ObjectID(actionValue);
444
+ // send a modal with a dropdown that says "Public Note" or "Private Note" and a text area to add the note.
445
+ if (!data.slackRequest.viewValues ||
446
+ !data.slackRequest.viewValues["scheduledMaintenanceState"]) {
447
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid View Values"));
448
+ }
449
+ const scheduledMaintenanceId = new ObjectID(actionValue);
450
+ const stateString = data.slackRequest.viewValues["scheduledMaintenanceState"].toString();
451
+ const stateId = new ObjectID(stateString);
452
+ await ScheduledMaintenanceService.updateOneById({
453
+ id: scheduledMaintenanceId,
454
+ data: {
455
+ currentScheduledMaintenanceStateId: stateId,
456
+ },
457
+ props: await AccessTokenService.getDatabaseCommonInteractionPropsByUserAndProject({
458
+ userId: data.slackRequest.userId,
459
+ projectId: data.slackRequest.projectId,
460
+ }),
461
+ });
462
+ }
463
+ static async submitScheduledMaintenanceNote(data) {
464
+ const { req, res } = data;
465
+ const { actionValue } = data.action;
466
+ if (!actionValue) {
467
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance ID"));
468
+ }
469
+ // const scheduledMaintenanceId: ObjectID = new ObjectID(actionValue);
470
+ // send a modal with a dropdown that says "Public Note" or "Private Note" and a text area to add the note.
471
+ // if view values is empty, then return error.
472
+ if (!data.slackRequest.viewValues) {
473
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid View Values"));
474
+ }
475
+ if (!data.slackRequest.viewValues["noteType"]) {
476
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Note Type"));
477
+ }
478
+ if (!data.slackRequest.viewValues["note"]) {
479
+ // return error.
480
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Note"));
481
+ }
482
+ const scheduledMaintenanceId = new ObjectID(actionValue);
483
+ const note = data.slackRequest.viewValues["note"].toString();
484
+ const noteType = data.slackRequest.viewValues["noteType"].toString();
485
+ if (noteType !== "public" && noteType !== "private") {
486
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Note Type"));
487
+ }
488
+ // send empty response.
489
+ Response.sendJsonObjectResponse(req, res, {
490
+ response_action: "clear",
491
+ });
492
+ // if public note then, add a note.
493
+ if (noteType === "public") {
494
+ await ScheduledMaintenancePublicNoteService.addNote({
495
+ scheduledMaintenanceId: scheduledMaintenanceId,
496
+ note: note || "",
497
+ projectId: data.slackRequest.projectId,
498
+ userId: data.slackRequest.userId,
499
+ });
500
+ }
501
+ // if private note then, add a note.
502
+ if (noteType === "private") {
503
+ await ScheduledMaintenanceInternalNoteService.addNote({
504
+ scheduledMaintenanceId: scheduledMaintenanceId,
505
+ note: note || "",
506
+ projectId: data.slackRequest.projectId,
507
+ userId: data.slackRequest.userId,
508
+ });
509
+ }
510
+ }
511
+ static async viewAddScheduledMaintenanceNote(data) {
512
+ const { req, res } = data;
513
+ const { actionValue } = data.action;
514
+ if (!actionValue) {
515
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Scheduled Maintenance ID"));
516
+ }
517
+ // We send this early let slack know we're ok. We'll do the rest in the background.
518
+ Response.sendJsonObjectResponse(req, res, {
519
+ response_action: "clear",
520
+ });
521
+ // const scheduledMaintenanceId: ObjectID = new ObjectID(actionValue);
522
+ // send a modal with a dropdown that says "Public Note" or "Private Note" and a text area to add the note.
523
+ const notePickerDropdown = {
524
+ _type: "WorkspaceDropdownBlock",
525
+ label: "Note Type",
526
+ blockId: "noteType",
527
+ placeholder: "Select Note Type",
528
+ options: [
529
+ {
530
+ label: "Public Note (Will be posted on Status Page)",
531
+ value: "public",
532
+ },
533
+ {
534
+ label: "Private Note (Only visible to team members)",
535
+ value: "private",
536
+ },
537
+ ],
538
+ };
539
+ const noteTextArea = {
540
+ _type: "WorkspaceTextAreaBlock",
541
+ label: "Note",
542
+ blockId: "note",
543
+ placeholder: "Note",
544
+ description: "Please type in plain text or markdown.",
545
+ };
546
+ const modalBlock = {
547
+ _type: "WorkspaceModalBlock",
548
+ title: "Add Note",
549
+ submitButtonTitle: "Submit",
550
+ cancelButtonTitle: "Cancel",
551
+ actionId: SlackActionType.SubmitScheduledMaintenanceNote,
552
+ actionValue: actionValue,
553
+ blocks: [notePickerDropdown, noteTextArea],
554
+ };
555
+ await SlackUtil.showModalToUser({
556
+ authToken: data.slackRequest.projectAuthToken,
557
+ modalBlock: modalBlock,
558
+ triggerId: data.slackRequest.triggerId,
559
+ });
560
+ }
561
+ static async handleScheduledMaintenanceAction(data) {
562
+ // now we should be all set, project is authorized and user is authorized. Lets perform some actions based on the action type.
563
+ const actionType = data.action.actionType;
564
+ if (actionType === SlackActionType.MarkScheduledMaintenanceAsOngoing) {
565
+ return await this.markScheduledMaintenanceAsOngoing(data);
566
+ }
567
+ if (actionType === SlackActionType.MarkScheduledMaintenanceAsComplete) {
568
+ return await this.resolveScheduledMaintenance(data);
569
+ }
570
+ if (actionType === SlackActionType.ViewAddScheduledMaintenanceNote) {
571
+ return await this.viewAddScheduledMaintenanceNote(data);
572
+ }
573
+ if (actionType === SlackActionType.SubmitScheduledMaintenanceNote) {
574
+ return await this.submitScheduledMaintenanceNote(data);
575
+ }
576
+ if (actionType === SlackActionType.ViewChangeScheduledMaintenanceState) {
577
+ return await this.viewChangeScheduledMaintenanceState(data);
578
+ }
579
+ if (actionType === SlackActionType.SubmitChangeScheduledMaintenanceState) {
580
+ return await this.submitChangeScheduledMaintenanceState(data);
581
+ }
582
+ if (actionType === SlackActionType.NewScheduledMaintenance) {
583
+ return await this.viewNewScheduledMaintenanceModal(data);
584
+ }
585
+ if (actionType === SlackActionType.SubmitNewScheduledMaintenance) {
586
+ return await this.submitNewScheduledMaintenance(data);
587
+ }
588
+ if (actionType === SlackActionType.ViewScheduledMaintenance) {
589
+ // do nothing. This is just a view scheduledMaintenance action.
590
+ // clear response.
591
+ return Response.sendJsonObjectResponse(data.req, data.res, {
592
+ response_action: "clear",
593
+ });
594
+ }
595
+ // invalid action type.
596
+ return Response.sendErrorResponse(data.req, data.res, new BadDataException("Invalid Action Type"));
597
+ }
598
+ }
599
+ //# sourceMappingURL=ScheduledMaintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScheduledMaintenance.js","sourceRoot":"","sources":["../../../../../../../Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts"],"names":[],"mappings":"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"}