@oneuptime/common 7.0.3718 → 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.
- package/Models/DatabaseModels/Alert.ts +3 -2
- package/Models/DatabaseModels/Incident.ts +3 -2
- package/Models/DatabaseModels/Index.ts +3 -0
- package/Models/DatabaseModels/ProjectUser.ts +335 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +3 -2
- package/Server/API/SlackAPI.ts +127 -91
- package/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.ts +101 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Middleware/SlackAuthorization.ts +11 -2
- package/Server/Services/AccessTokenService.ts +21 -0
- package/Server/Services/AlertFeedService.ts +100 -2
- package/Server/Services/AlertInternalNoteService.ts +51 -10
- package/Server/Services/AlertOwnerTeamService.ts +52 -4
- package/Server/Services/AlertOwnerUserService.ts +54 -4
- package/Server/Services/AlertService.ts +295 -54
- package/Server/Services/AlertStateService.ts +24 -0
- package/Server/Services/AlertStateTimelineService.ts +38 -20
- package/Server/Services/IncidentFeedService.ts +101 -2
- package/Server/Services/IncidentInternalNoteService.ts +47 -4
- package/Server/Services/IncidentOwnerTeamService.ts +57 -4
- package/Server/Services/IncidentOwnerUserService.ts +59 -15
- package/Server/Services/IncidentPublicNoteService.ts +47 -7
- package/Server/Services/IncidentService.ts +279 -193
- package/Server/Services/IncidentStateService.ts +25 -0
- package/Server/Services/IncidentStateTimelineService.ts +38 -19
- package/Server/Services/MonitorStatusTimelineService.ts +7 -17
- package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -0
- package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +74 -7
- package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +63 -4
- package/Server/Services/OnCallDutyPolicyService.ts +13 -0
- package/Server/Services/ProjectUserService.ts +130 -0
- package/Server/Services/ScheduledMaintenanceFeedService.ts +105 -2
- package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +61 -15
- package/Server/Services/ScheduledMaintenanceOwnerTeamService.ts +59 -18
- package/Server/Services/ScheduledMaintenanceOwnerUserService.ts +62 -30
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +59 -15
- package/Server/Services/ScheduledMaintenanceService.ts +390 -21
- package/Server/Services/ScheduledMaintenanceStateService.ts +122 -34
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +34 -2
- package/Server/Services/StatusPageSubscriberService.ts +3 -0
- package/Server/Services/TeamMemberService.ts +20 -0
- package/Server/Services/UserNotificationRuleService.ts +74 -0
- package/Server/Services/UserOnCallLogService.ts +1 -1
- package/Server/Services/UserService.ts +35 -0
- package/Server/Services/WorkspaceNotificationRuleService.ts +520 -149
- package/Server/Services/WorkspaceUserAuthTokenService.ts +23 -0
- package/Server/Utils/Express.ts +1 -1
- package/Server/Utils/StartServer.ts +6 -1
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.ts +38 -0
- package/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.ts +116 -0
- package/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.ts +116 -0
- package/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.ts +108 -0
- package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +38 -0
- package/Server/Utils/Workspace/Slack/Actions/Alert.ts +697 -0
- package/Server/Utils/Workspace/Slack/Actions/Auth.ts +273 -0
- package/Server/Utils/Workspace/Slack/Actions/Incident.ts +1123 -0
- package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +956 -0
- package/Server/Utils/Workspace/Slack/Messages/Alert.ts +116 -0
- package/Server/Utils/Workspace/Slack/Messages/Incident.ts +116 -0
- package/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.ts +108 -0
- package/Server/Utils/Workspace/Slack/Slack.ts +601 -18
- package/Server/Utils/Workspace/Slack/app-manifest.json +19 -11
- package/Server/Utils/Workspace/Workspace.ts +194 -1
- package/Server/Utils/Workspace/WorkspaceBase.ts +159 -19
- package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +69 -0
- package/Server/Utils/Workspace/WorkspaceMessages/Incident.ts +68 -0
- package/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.ts +73 -0
- package/Types/Date.ts +5 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +2 -1
- package/Types/Workspace/NotificationRules/NotificationRuleUtil.ts +251 -121
- package/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.ts +6 -0
- package/Types/Workspace/WorkspaceMessagePayload.ts +80 -2
- package/UI/Components/ComingSoon/ComingSoon.tsx +13 -3
- package/UI/Components/Forms/Fields/FormField.tsx +2 -2
- package/UI/Components/Icon/Icon.tsx +39 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +16 -0
- package/UI/Components/Radio/Radio.tsx +11 -2
- package/UI/Components/Table/TableCard.tsx +2 -2
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectUser.js +340 -0
- package/build/dist/Models/DatabaseModels/ProjectUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +93 -79
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js +42 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/SlackAuthorization.js +8 -2
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AccessTokenService.js +11 -0
- package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
- package/build/dist/Server/Services/AlertFeedService.js +62 -2
- package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
- package/build/dist/Server/Services/AlertInternalNoteService.js +41 -10
- package/build/dist/Server/Services/AlertInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerTeamService.js +42 -4
- package/build/dist/Server/Services/AlertOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/AlertOwnerUserService.js +43 -5
- package/build/dist/Server/Services/AlertOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +233 -51
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertStateService.js +13 -0
- package/build/dist/Server/Services/AlertStateService.js.map +1 -1
- package/build/dist/Server/Services/AlertStateTimelineService.js +32 -18
- package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFeedService.js +62 -2
- package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
- package/build/dist/Server/Services/IncidentInternalNoteService.js +35 -4
- package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerTeamService.js +42 -4
- package/build/dist/Server/Services/IncidentOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/IncidentOwnerUserService.js +43 -15
- package/build/dist/Server/Services/IncidentOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +36 -7
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +221 -170
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateService.js +14 -0
- package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +31 -17
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +5 -15
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +62 -7
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -5
- package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyService.js +6 -0
- package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
- package/build/dist/Server/Services/ProjectUserService.js +106 -0
- package/build/dist/Server/Services/ProjectUserService.js.map +1 -0
- package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js +62 -2
- package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +38 -8
- package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js +28 -4
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js +30 -16
- package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +38 -9
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +279 -14
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +52 -4
- package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +29 -2
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +3 -0
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +17 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +52 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallLogService.js +1 -1
- package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +23 -0
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +316 -84
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js +18 -0
- package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +4 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js +37 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js +82 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js +82 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js +74 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +37 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +425 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +169 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +730 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +599 -0
- package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js +82 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js +82 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js +74 -0
- package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +431 -14
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +19 -11
- package/build/dist/Server/Utils/Workspace/Workspace.js +126 -0
- package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +77 -11
- package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js +48 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js +47 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js +47 -0
- package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js.map +1 -0
- package/build/dist/Types/Date.js +4 -0
- package/build/dist/Types/Date.js.map +1 -1
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +2 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js +214 -120
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js.map +1 -1
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js +2 -0
- package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js.map +1 -0
- package/build/dist/UI/Components/ComingSoon/ComingSoon.js +3 -2
- package/build/dist/UI/Components/ComingSoon/ComingSoon.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +2 -2
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +19 -2
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +11 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/Radio/Radio.js +5 -2
- package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
- package/build/dist/UI/Components/Table/TableCard.js +2 -2
- package/build/dist/UI/Components/Table/TableCard.js.map +1 -1
- package/package.json +3 -2
- package/Server/Utils/Workspace/Slack/app-manifest.example.json +0 -198
|
@@ -6,12 +6,34 @@ import IncidentFeedService from "./IncidentFeedService";
|
|
|
6
6
|
import { IncidentFeedEventType } from "../../Models/DatabaseModels/IncidentFeed";
|
|
7
7
|
import { Blue500 } from "../../Types/BrandColors";
|
|
8
8
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
9
|
+
import IncidentService from "./IncidentService";
|
|
10
|
+
import Incident from "../../Models/DatabaseModels/Incident";
|
|
9
11
|
|
|
10
12
|
export class Service extends DatabaseService<Model> {
|
|
11
13
|
public constructor() {
|
|
12
14
|
super(Model);
|
|
13
15
|
}
|
|
14
16
|
|
|
17
|
+
public async addNote(data: {
|
|
18
|
+
userId: ObjectID;
|
|
19
|
+
incidentId: ObjectID;
|
|
20
|
+
projectId: ObjectID;
|
|
21
|
+
note: string;
|
|
22
|
+
}): Promise<Model> {
|
|
23
|
+
const internalNote: Model = new Model();
|
|
24
|
+
internalNote.createdByUserId = data.userId;
|
|
25
|
+
internalNote.incidentId = data.incidentId;
|
|
26
|
+
internalNote.projectId = data.projectId;
|
|
27
|
+
internalNote.note = data.note;
|
|
28
|
+
|
|
29
|
+
return this.create({
|
|
30
|
+
data: internalNote,
|
|
31
|
+
props: {
|
|
32
|
+
isRoot: true,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
15
37
|
public override async onCreateSuccess(
|
|
16
38
|
_onCreate: OnCreate<Model>,
|
|
17
39
|
createdItem: Model,
|
|
@@ -19,17 +41,28 @@ export class Service extends DatabaseService<Model> {
|
|
|
19
41
|
const userId: ObjectID | null | undefined =
|
|
20
42
|
createdItem.createdByUserId || createdItem.createdByUser?.id;
|
|
21
43
|
|
|
22
|
-
|
|
44
|
+
const incidentId: ObjectID = createdItem.incidentId!;
|
|
45
|
+
|
|
46
|
+
const incidentNumber: number | null =
|
|
47
|
+
await IncidentService.getIncidentNumber({
|
|
48
|
+
incidentId: incidentId,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
23
52
|
incidentId: createdItem.incidentId!,
|
|
24
53
|
projectId: createdItem.projectId!,
|
|
25
54
|
incidentFeedEventType: IncidentFeedEventType.PrivateNote,
|
|
26
55
|
displayColor: Blue500,
|
|
27
56
|
userId: userId || undefined,
|
|
28
57
|
|
|
29
|
-
feedInfoInMarkdown:
|
|
58
|
+
feedInfoInMarkdown: `📄 posted **private note** for this [Incident ${incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(createdItem.projectId!, incidentId)).toString()}):
|
|
30
59
|
|
|
31
60
|
${createdItem.note}
|
|
32
61
|
`,
|
|
62
|
+
workspaceNotification: {
|
|
63
|
+
sendWorkspaceNotification: true,
|
|
64
|
+
notifyUserId: userId || undefined,
|
|
65
|
+
},
|
|
33
66
|
});
|
|
34
67
|
|
|
35
68
|
return createdItem;
|
|
@@ -49,6 +82,10 @@ ${createdItem.note}
|
|
|
49
82
|
},
|
|
50
83
|
select: {
|
|
51
84
|
incidentId: true,
|
|
85
|
+
incident: {
|
|
86
|
+
projectId: true,
|
|
87
|
+
incidentNumber: true,
|
|
88
|
+
},
|
|
52
89
|
projectId: true,
|
|
53
90
|
note: true,
|
|
54
91
|
createdByUserId: true,
|
|
@@ -62,17 +99,23 @@ ${createdItem.note}
|
|
|
62
99
|
onUpdate.updateBy.props.userId;
|
|
63
100
|
|
|
64
101
|
for (const updatedItem of updatedItems) {
|
|
65
|
-
|
|
102
|
+
const incident: Incident = updatedItem.incident!;
|
|
103
|
+
|
|
104
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
66
105
|
incidentId: updatedItem.incidentId!,
|
|
67
106
|
projectId: updatedItem.projectId!,
|
|
68
107
|
incidentFeedEventType: IncidentFeedEventType.PrivateNote,
|
|
69
108
|
displayColor: Blue500,
|
|
70
109
|
userId: userId || undefined,
|
|
71
110
|
|
|
72
|
-
feedInfoInMarkdown:
|
|
111
|
+
feedInfoInMarkdown: `📄 updated **Private Note** for this [Incident ${incident.incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(incident.projectId!, incident.id!)).toString()})
|
|
73
112
|
|
|
74
113
|
${updatedItem.note}
|
|
75
114
|
`,
|
|
115
|
+
workspaceNotification: {
|
|
116
|
+
sendWorkspaceNotification: true,
|
|
117
|
+
notifyUserId: userId || undefined,
|
|
118
|
+
},
|
|
76
119
|
});
|
|
77
120
|
}
|
|
78
121
|
}
|
|
@@ -8,6 +8,11 @@ import { Gray500, Red500 } from "../../Types/BrandColors";
|
|
|
8
8
|
import TeamService from "./TeamService";
|
|
9
9
|
import Team from "../../Models/DatabaseModels/Team";
|
|
10
10
|
import DeleteBy from "../Types/Database/DeleteBy";
|
|
11
|
+
import IncidentService from "./IncidentService";
|
|
12
|
+
import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
|
|
13
|
+
import NotificationRuleEventType from "../../Types/Workspace/NotificationRules/EventType";
|
|
14
|
+
import WorkspaceNotificationRule from "../../Models/DatabaseModels/WorkspaceNotificationRule";
|
|
15
|
+
import logger from "../Utils/Logger";
|
|
11
16
|
|
|
12
17
|
export class Service extends DatabaseService<Model> {
|
|
13
18
|
public constructor() {
|
|
@@ -64,14 +69,23 @@ export class Service extends DatabaseService<Model> {
|
|
|
64
69
|
},
|
|
65
70
|
});
|
|
66
71
|
|
|
72
|
+
const incidentNumber: number | null =
|
|
73
|
+
await IncidentService.getIncidentNumber({
|
|
74
|
+
incidentId: incidentId,
|
|
75
|
+
});
|
|
76
|
+
|
|
67
77
|
if (team && team.name) {
|
|
68
|
-
await IncidentFeedService.
|
|
78
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
69
79
|
incidentId: incidentId,
|
|
70
80
|
projectId: projectId,
|
|
71
81
|
incidentFeedEventType: IncidentFeedEventType.OwnerTeamRemoved,
|
|
72
82
|
displayColor: Red500,
|
|
73
|
-
feedInfoInMarkdown:
|
|
83
|
+
feedInfoInMarkdown: `👨🏻👩🏻👦🏻 Removed team **${team.name}** from the [Incident ${incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(projectId!, incidentId!)).toString()}) as the owner.`,
|
|
74
84
|
userId: deleteByUserId || undefined,
|
|
85
|
+
workspaceNotification: {
|
|
86
|
+
sendWorkspaceNotification: true,
|
|
87
|
+
notifyUserId: deleteByUserId || undefined,
|
|
88
|
+
},
|
|
75
89
|
});
|
|
76
90
|
}
|
|
77
91
|
}
|
|
@@ -104,17 +118,56 @@ export class Service extends DatabaseService<Model> {
|
|
|
104
118
|
});
|
|
105
119
|
|
|
106
120
|
if (team && team.name) {
|
|
107
|
-
|
|
121
|
+
const incidentNumber: number | null =
|
|
122
|
+
await IncidentService.getIncidentNumber({
|
|
123
|
+
incidentId: incidentId,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
108
127
|
incidentId: incidentId,
|
|
109
128
|
projectId: projectId,
|
|
110
129
|
incidentFeedEventType: IncidentFeedEventType.OwnerTeamAdded,
|
|
111
130
|
displayColor: Gray500,
|
|
112
|
-
feedInfoInMarkdown:
|
|
131
|
+
feedInfoInMarkdown: `👨🏻👩🏻👦🏻 Added team **${team.name}** to the [Incident ${incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(projectId!, incidentId!)).toString()}) as the owner.`,
|
|
113
132
|
userId: createdByUserId || undefined,
|
|
133
|
+
workspaceNotification: {
|
|
134
|
+
sendWorkspaceNotification: true,
|
|
135
|
+
notifyUserId: createdByUserId || undefined,
|
|
136
|
+
},
|
|
114
137
|
});
|
|
115
138
|
}
|
|
116
139
|
}
|
|
117
140
|
|
|
141
|
+
// get notification rule where inviteOwners is true.
|
|
142
|
+
const notificationRules: Array<WorkspaceNotificationRule> =
|
|
143
|
+
await WorkspaceNotificationRuleService.getNotificationRulesWhereInviteOwnersIsTrue(
|
|
144
|
+
{
|
|
145
|
+
projectId: projectId!,
|
|
146
|
+
notificationFor: {
|
|
147
|
+
incidentId: incidentId,
|
|
148
|
+
},
|
|
149
|
+
notificationRuleEventType: NotificationRuleEventType.Incident,
|
|
150
|
+
},
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
logger.debug(`Notification Rules for Incident Owner Teams`);
|
|
154
|
+
logger.debug(notificationRules);
|
|
155
|
+
|
|
156
|
+
WorkspaceNotificationRuleService.inviteTeamsBasedOnRulesAndWorkspaceChannels(
|
|
157
|
+
{
|
|
158
|
+
notificationRules: notificationRules,
|
|
159
|
+
projectId: projectId!,
|
|
160
|
+
workspaceChannels: await IncidentService.getWorkspaceChannelForIncident(
|
|
161
|
+
{
|
|
162
|
+
incidentId: incidentId!,
|
|
163
|
+
},
|
|
164
|
+
),
|
|
165
|
+
teamIds: [teamId!],
|
|
166
|
+
},
|
|
167
|
+
).catch((error: Error) => {
|
|
168
|
+
logger.error(error);
|
|
169
|
+
});
|
|
170
|
+
|
|
118
171
|
return createdItem;
|
|
119
172
|
}
|
|
120
173
|
}
|
|
@@ -8,6 +8,11 @@ import User from "../../Models/DatabaseModels/User";
|
|
|
8
8
|
import UserService from "./UserService";
|
|
9
9
|
import { OnCreate, OnDelete } from "../Types/Database/Hooks";
|
|
10
10
|
import DeleteBy from "../Types/Database/DeleteBy";
|
|
11
|
+
import IncidentService from "./IncidentService";
|
|
12
|
+
import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
|
|
13
|
+
import NotificationRuleEventType from "../../Types/Workspace/NotificationRules/EventType";
|
|
14
|
+
import WorkspaceNotificationRule from "../../Models/DatabaseModels/WorkspaceNotificationRule";
|
|
15
|
+
import logger from "../Utils/Logger";
|
|
11
16
|
|
|
12
17
|
export class Service extends DatabaseService<Model> {
|
|
13
18
|
public constructor() {
|
|
@@ -65,14 +70,23 @@ export class Service extends DatabaseService<Model> {
|
|
|
65
70
|
},
|
|
66
71
|
});
|
|
67
72
|
|
|
73
|
+
const incidentNumber: number | null =
|
|
74
|
+
await IncidentService.getIncidentNumber({
|
|
75
|
+
incidentId: incidentId,
|
|
76
|
+
});
|
|
77
|
+
|
|
68
78
|
if (user && user.name) {
|
|
69
|
-
await IncidentFeedService.
|
|
79
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
70
80
|
incidentId: incidentId,
|
|
71
81
|
projectId: projectId,
|
|
72
82
|
incidentFeedEventType: IncidentFeedEventType.OwnerUserRemoved,
|
|
73
83
|
displayColor: Red500,
|
|
74
|
-
feedInfoInMarkdown:
|
|
84
|
+
feedInfoInMarkdown: `👨🏻💻 Removed **${user.name.toString()}** (${user.email?.toString()}) from the [Incident ${incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(projectId!, incidentId!)).toString()}) as the owner.`,
|
|
75
85
|
userId: deleteByUserId || undefined,
|
|
86
|
+
workspaceNotification: {
|
|
87
|
+
sendWorkspaceNotification: true,
|
|
88
|
+
notifyUserId: userId || undefined,
|
|
89
|
+
},
|
|
76
90
|
});
|
|
77
91
|
}
|
|
78
92
|
}
|
|
@@ -94,29 +108,59 @@ export class Service extends DatabaseService<Model> {
|
|
|
94
108
|
createdItem.createdByUserId || onCreate.createBy.props.userId;
|
|
95
109
|
|
|
96
110
|
if (incidentId && userId && projectId) {
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
email: true,
|
|
102
|
-
},
|
|
103
|
-
props: {
|
|
104
|
-
isRoot: true,
|
|
105
|
-
},
|
|
106
|
-
});
|
|
111
|
+
const incidentNumber: number | null =
|
|
112
|
+
await IncidentService.getIncidentNumber({
|
|
113
|
+
incidentId: incidentId,
|
|
114
|
+
});
|
|
107
115
|
|
|
108
|
-
if (
|
|
109
|
-
await IncidentFeedService.
|
|
116
|
+
if (userId) {
|
|
117
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
110
118
|
incidentId: incidentId,
|
|
111
119
|
projectId: projectId,
|
|
112
120
|
incidentFeedEventType: IncidentFeedEventType.OwnerUserAdded,
|
|
113
121
|
displayColor: Gray500,
|
|
114
|
-
feedInfoInMarkdown:
|
|
122
|
+
feedInfoInMarkdown: `👨🏻💻 Added **${await UserService.getUserMarkdownString(
|
|
123
|
+
{
|
|
124
|
+
userId: userId,
|
|
125
|
+
projectId: projectId,
|
|
126
|
+
},
|
|
127
|
+
)}** to the [Incident ${incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(projectId!, incidentId!)).toString()}) as the owner.`,
|
|
115
128
|
userId: createdByUserId || undefined,
|
|
129
|
+
workspaceNotification: {
|
|
130
|
+
sendWorkspaceNotification: true,
|
|
131
|
+
notifyUserId: userId || undefined,
|
|
132
|
+
},
|
|
116
133
|
});
|
|
117
134
|
}
|
|
118
135
|
}
|
|
119
136
|
|
|
137
|
+
// get notification rule where inviteOwners is true.
|
|
138
|
+
const notificationRules: Array<WorkspaceNotificationRule> =
|
|
139
|
+
await WorkspaceNotificationRuleService.getNotificationRulesWhereInviteOwnersIsTrue(
|
|
140
|
+
{
|
|
141
|
+
projectId: projectId!,
|
|
142
|
+
notificationFor: {
|
|
143
|
+
incidentId: incidentId,
|
|
144
|
+
},
|
|
145
|
+
notificationRuleEventType: NotificationRuleEventType.Incident,
|
|
146
|
+
},
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
WorkspaceNotificationRuleService.inviteUsersBasedOnRulesAndWorkspaceChannels(
|
|
150
|
+
{
|
|
151
|
+
notificationRules: notificationRules,
|
|
152
|
+
projectId: projectId!,
|
|
153
|
+
workspaceChannels: await IncidentService.getWorkspaceChannelForIncident(
|
|
154
|
+
{
|
|
155
|
+
incidentId: incidentId!,
|
|
156
|
+
},
|
|
157
|
+
),
|
|
158
|
+
userIds: [userId!],
|
|
159
|
+
},
|
|
160
|
+
).catch((error: Error) => {
|
|
161
|
+
logger.error(error);
|
|
162
|
+
});
|
|
163
|
+
|
|
120
164
|
return createdItem;
|
|
121
165
|
}
|
|
122
166
|
}
|
|
@@ -8,12 +8,35 @@ import { IncidentFeedEventType } from "../../Models/DatabaseModels/IncidentFeed"
|
|
|
8
8
|
import { Blue500, Indigo500 } from "../../Types/BrandColors";
|
|
9
9
|
import ObjectID from "../../Types/ObjectID";
|
|
10
10
|
import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
|
|
11
|
+
import IncidentService from "./IncidentService";
|
|
12
|
+
import Incident from "../../Models/DatabaseModels/Incident";
|
|
11
13
|
|
|
12
14
|
export class Service extends DatabaseService<Model> {
|
|
13
15
|
public constructor() {
|
|
14
16
|
super(Model);
|
|
15
17
|
}
|
|
16
18
|
|
|
19
|
+
public async addNote(data: {
|
|
20
|
+
userId: ObjectID;
|
|
21
|
+
incidentId: ObjectID;
|
|
22
|
+
projectId: ObjectID;
|
|
23
|
+
note: string;
|
|
24
|
+
}): Promise<Model> {
|
|
25
|
+
const publicNote: Model = new Model();
|
|
26
|
+
publicNote.createdByUserId = data.userId;
|
|
27
|
+
publicNote.incidentId = data.incidentId;
|
|
28
|
+
publicNote.projectId = data.projectId;
|
|
29
|
+
publicNote.note = data.note;
|
|
30
|
+
publicNote.postedAt = OneUptimeDate.getCurrentDate();
|
|
31
|
+
|
|
32
|
+
return this.create({
|
|
33
|
+
data: publicNote,
|
|
34
|
+
props: {
|
|
35
|
+
isRoot: true,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
17
40
|
protected override async onBeforeCreate(
|
|
18
41
|
createBy: CreateBy<Model>,
|
|
19
42
|
): Promise<OnCreate<Model>> {
|
|
@@ -34,16 +57,27 @@ export class Service extends DatabaseService<Model> {
|
|
|
34
57
|
const userId: ObjectID | null | undefined =
|
|
35
58
|
createdItem.createdByUserId || createdItem.createdByUser?.id;
|
|
36
59
|
|
|
37
|
-
|
|
60
|
+
const incidentId: ObjectID = createdItem.incidentId!;
|
|
61
|
+
const projectId: ObjectID = createdItem.projectId!;
|
|
62
|
+
const incidentNumber: number | null =
|
|
63
|
+
await IncidentService.getIncidentNumber({
|
|
64
|
+
incidentId: incidentId,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
38
68
|
incidentId: createdItem.incidentId!,
|
|
39
69
|
projectId: createdItem.projectId!,
|
|
40
70
|
incidentFeedEventType: IncidentFeedEventType.PublicNote,
|
|
41
71
|
displayColor: Indigo500,
|
|
42
72
|
userId: userId || undefined,
|
|
43
|
-
feedInfoInMarkdown:
|
|
73
|
+
feedInfoInMarkdown: `📄 posted **public note** for this [Incident ${incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(projectId!, incidentId!)).toString()}) on status page:
|
|
44
74
|
|
|
45
75
|
${createdItem.note}
|
|
46
76
|
`,
|
|
77
|
+
workspaceNotification: {
|
|
78
|
+
sendWorkspaceNotification: true,
|
|
79
|
+
notifyUserId: userId || undefined,
|
|
80
|
+
},
|
|
47
81
|
});
|
|
48
82
|
|
|
49
83
|
return createdItem;
|
|
@@ -76,17 +110,23 @@ ${createdItem.note}
|
|
|
76
110
|
onUpdate.updateBy.props.userId;
|
|
77
111
|
|
|
78
112
|
for (const updatedItem of updatedItems) {
|
|
79
|
-
|
|
113
|
+
const incident: Incident = updatedItem.incident!;
|
|
114
|
+
|
|
115
|
+
await IncidentFeedService.createIncidentFeedItem({
|
|
80
116
|
incidentId: updatedItem.incidentId!,
|
|
81
117
|
projectId: updatedItem.projectId!,
|
|
82
|
-
incidentFeedEventType: IncidentFeedEventType.
|
|
118
|
+
incidentFeedEventType: IncidentFeedEventType.PrivateNote,
|
|
83
119
|
displayColor: Blue500,
|
|
84
120
|
userId: userId || undefined,
|
|
85
121
|
|
|
86
|
-
feedInfoInMarkdown:
|
|
87
|
-
|
|
122
|
+
feedInfoInMarkdown: `📄 updated **Public Note** for this [Incident ${incident.incidentNumber}](${(await IncidentService.getIncidentLinkInDashboard(incident.projectId!, incident.id!)).toString()})
|
|
123
|
+
|
|
88
124
|
${updatedItem.note}
|
|
89
|
-
|
|
125
|
+
`,
|
|
126
|
+
workspaceNotification: {
|
|
127
|
+
sendWorkspaceNotification: true,
|
|
128
|
+
notifyUserId: userId || undefined,
|
|
129
|
+
},
|
|
90
130
|
});
|
|
91
131
|
}
|
|
92
132
|
}
|