@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.
Files changed (240) hide show
  1. package/Models/DatabaseModels/Alert.ts +3 -2
  2. package/Models/DatabaseModels/Incident.ts +3 -2
  3. package/Models/DatabaseModels/Index.ts +3 -0
  4. package/Models/DatabaseModels/ProjectUser.ts +335 -0
  5. package/Models/DatabaseModels/ScheduledMaintenance.ts +3 -2
  6. package/Server/API/SlackAPI.ts +127 -91
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.ts +17 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.ts +17 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.ts +17 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.ts +101 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  12. package/Server/Middleware/SlackAuthorization.ts +11 -2
  13. package/Server/Services/AccessTokenService.ts +21 -0
  14. package/Server/Services/AlertFeedService.ts +100 -2
  15. package/Server/Services/AlertInternalNoteService.ts +51 -10
  16. package/Server/Services/AlertOwnerTeamService.ts +52 -4
  17. package/Server/Services/AlertOwnerUserService.ts +54 -4
  18. package/Server/Services/AlertService.ts +295 -54
  19. package/Server/Services/AlertStateService.ts +24 -0
  20. package/Server/Services/AlertStateTimelineService.ts +38 -20
  21. package/Server/Services/IncidentFeedService.ts +101 -2
  22. package/Server/Services/IncidentInternalNoteService.ts +47 -4
  23. package/Server/Services/IncidentOwnerTeamService.ts +57 -4
  24. package/Server/Services/IncidentOwnerUserService.ts +59 -15
  25. package/Server/Services/IncidentPublicNoteService.ts +47 -7
  26. package/Server/Services/IncidentService.ts +279 -193
  27. package/Server/Services/IncidentStateService.ts +25 -0
  28. package/Server/Services/IncidentStateTimelineService.ts +38 -19
  29. package/Server/Services/MonitorStatusTimelineService.ts +7 -17
  30. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -0
  31. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +74 -7
  32. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +63 -4
  33. package/Server/Services/OnCallDutyPolicyService.ts +13 -0
  34. package/Server/Services/ProjectUserService.ts +130 -0
  35. package/Server/Services/ScheduledMaintenanceFeedService.ts +105 -2
  36. package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +61 -15
  37. package/Server/Services/ScheduledMaintenanceOwnerTeamService.ts +59 -18
  38. package/Server/Services/ScheduledMaintenanceOwnerUserService.ts +62 -30
  39. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +59 -15
  40. package/Server/Services/ScheduledMaintenanceService.ts +390 -21
  41. package/Server/Services/ScheduledMaintenanceStateService.ts +122 -34
  42. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +34 -2
  43. package/Server/Services/StatusPageSubscriberService.ts +3 -0
  44. package/Server/Services/TeamMemberService.ts +20 -0
  45. package/Server/Services/UserNotificationRuleService.ts +74 -0
  46. package/Server/Services/UserOnCallLogService.ts +1 -1
  47. package/Server/Services/UserService.ts +35 -0
  48. package/Server/Services/WorkspaceNotificationRuleService.ts +520 -149
  49. package/Server/Services/WorkspaceUserAuthTokenService.ts +23 -0
  50. package/Server/Utils/Express.ts +1 -1
  51. package/Server/Utils/StartServer.ts +6 -1
  52. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.ts +38 -0
  53. package/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.ts +116 -0
  54. package/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.ts +116 -0
  55. package/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.ts +108 -0
  56. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +38 -0
  57. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +697 -0
  58. package/Server/Utils/Workspace/Slack/Actions/Auth.ts +273 -0
  59. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +1123 -0
  60. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +956 -0
  61. package/Server/Utils/Workspace/Slack/Messages/Alert.ts +116 -0
  62. package/Server/Utils/Workspace/Slack/Messages/Incident.ts +116 -0
  63. package/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.ts +108 -0
  64. package/Server/Utils/Workspace/Slack/Slack.ts +601 -18
  65. package/Server/Utils/Workspace/Slack/app-manifest.json +19 -11
  66. package/Server/Utils/Workspace/Workspace.ts +194 -1
  67. package/Server/Utils/Workspace/WorkspaceBase.ts +159 -19
  68. package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +69 -0
  69. package/Server/Utils/Workspace/WorkspaceMessages/Incident.ts +68 -0
  70. package/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.ts +73 -0
  71. package/Types/Date.ts +5 -0
  72. package/Types/Icon/IconProp.ts +1 -0
  73. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +2 -1
  74. package/Types/Workspace/NotificationRules/NotificationRuleUtil.ts +251 -121
  75. package/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.ts +6 -0
  76. package/Types/Workspace/WorkspaceMessagePayload.ts +80 -2
  77. package/UI/Components/ComingSoon/ComingSoon.tsx +13 -3
  78. package/UI/Components/Forms/Fields/FormField.tsx +2 -2
  79. package/UI/Components/Icon/Icon.tsx +39 -2
  80. package/UI/Components/ModelTable/BaseModelTable.tsx +16 -0
  81. package/UI/Components/Radio/Radio.tsx +11 -2
  82. package/UI/Components/Table/TableCard.tsx +2 -2
  83. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  84. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  85. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  86. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  87. package/build/dist/Models/DatabaseModels/ProjectUser.js +340 -0
  88. package/build/dist/Models/DatabaseModels/ProjectUser.js.map +1 -0
  89. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  90. package/build/dist/Server/API/SlackAPI.js +93 -79
  91. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  92. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js +12 -0
  93. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740597525803-MigrationName.js.map +1 -0
  94. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js +12 -0
  95. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1740598793630-MigrationName.js.map +1 -0
  96. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js +12 -0
  97. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741031019972-MigrationName.js.map +1 -0
  98. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js +42 -0
  99. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1741209339971-MigrationName.js.map +1 -0
  100. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  101. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  102. package/build/dist/Server/Middleware/SlackAuthorization.js +8 -2
  103. package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
  104. package/build/dist/Server/Services/AccessTokenService.js +11 -0
  105. package/build/dist/Server/Services/AccessTokenService.js.map +1 -1
  106. package/build/dist/Server/Services/AlertFeedService.js +62 -2
  107. package/build/dist/Server/Services/AlertFeedService.js.map +1 -1
  108. package/build/dist/Server/Services/AlertInternalNoteService.js +41 -10
  109. package/build/dist/Server/Services/AlertInternalNoteService.js.map +1 -1
  110. package/build/dist/Server/Services/AlertOwnerTeamService.js +42 -4
  111. package/build/dist/Server/Services/AlertOwnerTeamService.js.map +1 -1
  112. package/build/dist/Server/Services/AlertOwnerUserService.js +43 -5
  113. package/build/dist/Server/Services/AlertOwnerUserService.js.map +1 -1
  114. package/build/dist/Server/Services/AlertService.js +233 -51
  115. package/build/dist/Server/Services/AlertService.js.map +1 -1
  116. package/build/dist/Server/Services/AlertStateService.js +13 -0
  117. package/build/dist/Server/Services/AlertStateService.js.map +1 -1
  118. package/build/dist/Server/Services/AlertStateTimelineService.js +32 -18
  119. package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
  120. package/build/dist/Server/Services/IncidentFeedService.js +62 -2
  121. package/build/dist/Server/Services/IncidentFeedService.js.map +1 -1
  122. package/build/dist/Server/Services/IncidentInternalNoteService.js +35 -4
  123. package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
  124. package/build/dist/Server/Services/IncidentOwnerTeamService.js +42 -4
  125. package/build/dist/Server/Services/IncidentOwnerTeamService.js.map +1 -1
  126. package/build/dist/Server/Services/IncidentOwnerUserService.js +43 -15
  127. package/build/dist/Server/Services/IncidentOwnerUserService.js.map +1 -1
  128. package/build/dist/Server/Services/IncidentPublicNoteService.js +36 -7
  129. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  130. package/build/dist/Server/Services/IncidentService.js +221 -170
  131. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  132. package/build/dist/Server/Services/IncidentStateService.js +14 -0
  133. package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
  134. package/build/dist/Server/Services/IncidentStateTimelineService.js +31 -17
  135. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  136. package/build/dist/Server/Services/MonitorStatusTimelineService.js +5 -15
  137. package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
  138. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +1 -0
  139. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  140. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +62 -7
  141. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  142. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +51 -5
  143. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  144. package/build/dist/Server/Services/OnCallDutyPolicyService.js +6 -0
  145. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  146. package/build/dist/Server/Services/ProjectUserService.js +106 -0
  147. package/build/dist/Server/Services/ProjectUserService.js.map +1 -0
  148. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js +62 -2
  149. package/build/dist/Server/Services/ScheduledMaintenanceFeedService.js.map +1 -1
  150. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +38 -8
  151. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
  152. package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js +28 -4
  153. package/build/dist/Server/Services/ScheduledMaintenanceOwnerTeamService.js.map +1 -1
  154. package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js +30 -16
  155. package/build/dist/Server/Services/ScheduledMaintenanceOwnerUserService.js.map +1 -1
  156. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +38 -9
  157. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  158. package/build/dist/Server/Services/ScheduledMaintenanceService.js +279 -14
  159. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  160. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +52 -4
  161. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
  162. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +29 -2
  163. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  164. package/build/dist/Server/Services/StatusPageSubscriberService.js +3 -0
  165. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  166. package/build/dist/Server/Services/TeamMemberService.js +17 -0
  167. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  168. package/build/dist/Server/Services/UserNotificationRuleService.js +52 -0
  169. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  170. package/build/dist/Server/Services/UserOnCallLogService.js +1 -1
  171. package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
  172. package/build/dist/Server/Services/UserService.js +23 -0
  173. package/build/dist/Server/Services/UserService.js.map +1 -1
  174. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +316 -84
  175. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  176. package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js +18 -0
  177. package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js.map +1 -1
  178. package/build/dist/Server/Utils/StartServer.js +4 -0
  179. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  180. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js +37 -0
  181. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js.map +1 -0
  182. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js +82 -0
  183. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.js.map +1 -0
  184. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js +82 -0
  185. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.js.map +1 -0
  186. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js +74 -0
  187. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.js.map +1 -0
  188. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +37 -0
  189. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -0
  190. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +425 -0
  191. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -0
  192. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js +169 -0
  193. package/build/dist/Server/Utils/Workspace/Slack/Actions/Auth.js.map +1 -0
  194. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +730 -0
  195. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -0
  196. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +599 -0
  197. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -0
  198. package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js +82 -0
  199. package/build/dist/Server/Utils/Workspace/Slack/Messages/Alert.js.map +1 -0
  200. package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js +82 -0
  201. package/build/dist/Server/Utils/Workspace/Slack/Messages/Incident.js.map +1 -0
  202. package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js +74 -0
  203. package/build/dist/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.js.map +1 -0
  204. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +431 -14
  205. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  206. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +19 -11
  207. package/build/dist/Server/Utils/Workspace/Workspace.js +126 -0
  208. package/build/dist/Server/Utils/Workspace/Workspace.js.map +1 -1
  209. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js +77 -11
  210. package/build/dist/Server/Utils/Workspace/WorkspaceBase.js.map +1 -1
  211. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js +48 -0
  212. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -0
  213. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js +47 -0
  214. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js.map +1 -0
  215. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js +47 -0
  216. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js.map +1 -0
  217. package/build/dist/Types/Date.js +4 -0
  218. package/build/dist/Types/Date.js.map +1 -1
  219. package/build/dist/Types/Icon/IconProp.js +1 -0
  220. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  221. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +2 -1
  222. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  223. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js +214 -120
  224. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleUtil.js.map +1 -1
  225. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js +2 -0
  226. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel.js.map +1 -0
  227. package/build/dist/UI/Components/ComingSoon/ComingSoon.js +3 -2
  228. package/build/dist/UI/Components/ComingSoon/ComingSoon.js.map +1 -1
  229. package/build/dist/UI/Components/Forms/Fields/FormField.js +2 -2
  230. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  231. package/build/dist/UI/Components/Icon/Icon.js +19 -2
  232. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  233. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +11 -0
  234. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  235. package/build/dist/UI/Components/Radio/Radio.js +5 -2
  236. package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
  237. package/build/dist/UI/Components/Table/TableCard.js +2 -2
  238. package/build/dist/UI/Components/Table/TableCard.js.map +1 -1
  239. package/package.json +3 -2
  240. package/Server/Utils/Workspace/Slack/app-manifest.example.json +0 -198
@@ -150,20 +150,52 @@ export class Service extends DatabaseService<ScheduledMaintenanceStateTimeline>
150
150
  _id: true,
151
151
  color: true,
152
152
  name: true,
153
+ isResolvedState: true,
154
+ isOngoingState: true,
155
+ isScheduledState: true,
153
156
  },
154
157
  });
155
158
 
156
159
  const stateName: string = scheduledMaintenanceState?.name || "";
157
160
 
158
- await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeed({
161
+ const scheduledMaintenanceNumber: number | null =
162
+ await ScheduledMaintenanceService.getScheduledMaintenanceNumber({
163
+ scheduledMaintenanceId: createdItem.scheduledMaintenanceId,
164
+ });
165
+
166
+ // if resolved state then change emoji to ✅.
167
+ let stateEmoji: string = "➡️";
168
+
169
+ if (scheduledMaintenanceState?.isResolvedState) {
170
+ stateEmoji = "✅";
171
+ } else if (scheduledMaintenanceState?.isOngoingState) {
172
+ // eyes emoji for acknowledged state.
173
+ stateEmoji = "⏳";
174
+ } else if (scheduledMaintenanceState?.isScheduledState) {
175
+ stateEmoji = "🕒";
176
+ }
177
+
178
+ const projectId: ObjectID = createdItem.projectId!;
179
+ const scheduledMaintenanceId: ObjectID =
180
+ createdItem.scheduledMaintenanceId!;
181
+
182
+ await ScheduledMaintenanceFeedService.createScheduledMaintenanceFeedItem({
159
183
  scheduledMaintenanceId: createdItem.scheduledMaintenanceId!,
160
184
  projectId: createdItem.projectId!,
161
185
  scheduledMaintenanceFeedEventType:
162
186
  ScheduledMaintenanceFeedEventType.ScheduledMaintenanceStateChanged,
163
187
  displayColor: scheduledMaintenanceState?.color,
164
188
  feedInfoInMarkdown:
165
- "**Scheduled Maintenance State** changed to **" + stateName + "**",
189
+ stateEmoji +
190
+ ` Changed **[Scheduled Maintenance ${scheduledMaintenanceNumber}](${(await ScheduledMaintenanceService.getScheduledMaintenanceLinkInDashboard(projectId!, scheduledMaintenanceId!)).toString()}) State** to **` +
191
+ stateName +
192
+ "**",
166
193
  userId: createdItem.createdByUserId || onCreate.createBy.props.userId,
194
+ workspaceNotification: {
195
+ sendWorkspaceNotification: true,
196
+ notifyUserId:
197
+ createdItem.createdByUserId || onCreate.createBy.props.userId,
198
+ },
167
199
  });
168
200
 
169
201
  // TODO: DELETE THIS WHEN WORKFLOW IS IMPLEMENMTED.
@@ -800,6 +800,9 @@ export class Service extends DatabaseService<Model> {
800
800
  subscriberTimezones: true,
801
801
  reportDataInDays: true,
802
802
  isReportEnabled: true,
803
+ showAnnouncementsOnStatusPage: true,
804
+ showIncidentsOnStatusPage: true,
805
+ showScheduledMaintenanceEventsOnStatusPage: true,
803
806
  },
804
807
  });
805
808
 
@@ -32,6 +32,7 @@ import PositiveNumber from "../../Types/PositiveNumber";
32
32
  import Project from "Common/Models/DatabaseModels/Project";
33
33
  import TeamMember from "Common/Models/DatabaseModels/TeamMember";
34
34
  import User from "Common/Models/DatabaseModels/User";
35
+ import ProjectUserService from "./ProjectUserService";
35
36
 
36
37
  export class TeamMemberService extends DatabaseService<TeamMember> {
37
38
  public constructor() {
@@ -190,6 +191,12 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
190
191
  onCreate.createBy.data.projectId!,
191
192
  );
192
193
 
194
+ ProjectUserService.refreshProjectUsersByProject({
195
+ projectId: onCreate.createBy.data.projectId!,
196
+ }).catch((err: Error) => {
197
+ logger.error(err);
198
+ });
199
+
193
200
  return createdItem;
194
201
  }
195
202
 
@@ -232,6 +239,12 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
232
239
  item.user?.email as Email,
233
240
  );
234
241
  }
242
+
243
+ ProjectUserService.refreshProjectUsersByProject({
244
+ projectId: item.projectId!,
245
+ }).catch((err: Error) => {
246
+ logger.error(err);
247
+ });
235
248
  }
236
249
 
237
250
  return { updateBy, carryForward: onUpdate.carryForward };
@@ -304,6 +317,13 @@ export class TeamMemberService extends DatabaseService<TeamMember> {
304
317
  item.userId!,
305
318
  item.projectId!,
306
319
  );
320
+
321
+ // refresh project users.
322
+ ProjectUserService.refreshProjectUsersByProject({
323
+ projectId: item.projectId!,
324
+ }).catch((err: Error) => {
325
+ logger.error(err);
326
+ });
307
327
  }
308
328
 
309
329
  return onDelete;
@@ -43,6 +43,11 @@ import Alert from "../../Models/DatabaseModels/Alert";
43
43
  import AlertService from "./AlertService";
44
44
  import AlertSeverity from "../../Models/DatabaseModels/AlertSeverity";
45
45
  import AlertSeverityService from "./AlertSeverityService";
46
+ import WorkspaceNotificationRule from "../../Models/DatabaseModels/WorkspaceNotificationRule";
47
+ import WorkspaceNotificationRuleService from "./WorkspaceNotificationRuleService";
48
+ import NotificationRuleEventType from "../../Types/Workspace/NotificationRules/EventType";
49
+ import NotificationRuleWorkspaceChannel from "../../Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel";
50
+ import logger from "../Utils/Logger";
46
51
 
47
52
  export class Service extends DatabaseService<Model> {
48
53
  public constructor() {
@@ -888,6 +893,75 @@ export class Service extends DatabaseService<Model> {
888
893
  isRoot: true,
889
894
  },
890
895
  });
896
+
897
+ // Alert workspace here. Invite users to channels for example. If they are not invited.
898
+
899
+ this.runWorkspaceRulesForOnCallNotification({
900
+ projectId: options.projectId,
901
+ alertId: options.triggeredByAlertId,
902
+ incidentId: options.triggeredByIncidentId,
903
+ userId: userId,
904
+ }).catch((error: Error) => {
905
+ logger.error(error);
906
+ });
907
+ }
908
+
909
+ public async runWorkspaceRulesForOnCallNotification(data: {
910
+ projectId: ObjectID;
911
+ incidentId?: ObjectID | undefined;
912
+ alertId?: ObjectID | undefined;
913
+ userId: ObjectID;
914
+ }): Promise<void> {
915
+ // if alert and incidient are both present, then throw an error.
916
+ if (data.incidentId && data.alertId) {
917
+ throw new BadDataException("Either incidentId or alertId is required.");
918
+ }
919
+
920
+ // if none are present, then throw an error.
921
+
922
+ if (!data.incidentId && !data.alertId) {
923
+ throw new BadDataException("Either incidentId or alertId is required.");
924
+ }
925
+
926
+ // get notification rule where inviteOwners is true.
927
+ const notificationRules: Array<WorkspaceNotificationRule> =
928
+ await WorkspaceNotificationRuleService.getNotificationRulesWhereInviteOwnersIsTrue(
929
+ {
930
+ projectId: data.projectId!,
931
+ notificationFor: {
932
+ incidentId: data.incidentId,
933
+ alertId: data.alertId,
934
+ },
935
+ notificationRuleEventType: data.incidentId
936
+ ? NotificationRuleEventType.Incident
937
+ : NotificationRuleEventType.Alert,
938
+ },
939
+ );
940
+
941
+ let workspaceChannels: Array<NotificationRuleWorkspaceChannel> = [];
942
+
943
+ if (data.incidentId) {
944
+ workspaceChannels = await IncidentService.getWorkspaceChannelForIncident({
945
+ incidentId: data.incidentId!,
946
+ });
947
+ }
948
+
949
+ if (data.alertId) {
950
+ workspaceChannels = await AlertService.getWorkspaceChannelForAlert({
951
+ alertId: data.alertId!,
952
+ });
953
+ }
954
+
955
+ WorkspaceNotificationRuleService.inviteUsersBasedOnRulesAndWorkspaceChannels(
956
+ {
957
+ notificationRules: notificationRules,
958
+ projectId: data.projectId!,
959
+ workspaceChannels: workspaceChannels,
960
+ userIds: [data.userId],
961
+ },
962
+ ).catch((error: Error) => {
963
+ logger.error(error);
964
+ });
891
965
  }
892
966
 
893
967
  protected override async onBeforeCreate(
@@ -266,7 +266,7 @@ export class Service extends DatabaseService<Model> {
266
266
  id: createdItem.onCallDutyPolicyExecutionLogTimelineId!,
267
267
  data: {
268
268
  status: OnCallDutyExecutionLogTimelineStatus.NotificationSent,
269
- statusMessage: "Initial notification sent to the user.",
269
+ statusMessage: "Alert Sent",
270
270
  },
271
271
  props: {
272
272
  isRoot: true,
@@ -39,6 +39,41 @@ export class Service extends DatabaseService<Model> {
39
39
  super(Model);
40
40
  }
41
41
 
42
+ public async getUserMarkdownString(data: {
43
+ userId: ObjectID;
44
+ projectId: ObjectID;
45
+ }): Promise<string> {
46
+ const user: Model | null = await this.findOneBy({
47
+ query: {
48
+ _id: data.userId,
49
+ },
50
+ select: {
51
+ name: true,
52
+ email: true,
53
+ },
54
+ props: {
55
+ isRoot: true,
56
+ },
57
+ });
58
+
59
+ if (!user) {
60
+ return "";
61
+ }
62
+
63
+ return `[${user.name?.toString() || user.email?.toString() || "User"}](${(await this.getUserLinkInDashboard(data.projectId, data.userId)).toString()})`;
64
+ }
65
+
66
+ public async getUserLinkInDashboard(
67
+ projectId: ObjectID,
68
+ userId: ObjectID,
69
+ ): Promise<URL> {
70
+ const dashboardUrl: URL = await DatabaseConfig.getDashboardUrl();
71
+
72
+ return URL.fromString(dashboardUrl.toString()).addRoute(
73
+ `/${projectId.toString()}/settings/users/${userId.toString()}`,
74
+ );
75
+ }
76
+
42
77
  protected override async onCreateSuccess(
43
78
  _onCreate: OnCreate<Model>,
44
79
  createdItem: Model,