@oneuptime/common 9.4.7 → 9.4.9

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 (342) hide show
  1. package/Models/DatabaseModels/Alert.ts +76 -0
  2. package/Models/DatabaseModels/AlertEpisode.ts +1201 -0
  3. package/Models/DatabaseModels/AlertEpisodeFeed.ts +529 -0
  4. package/Models/DatabaseModels/AlertEpisodeInternalNote.ts +455 -0
  5. package/Models/DatabaseModels/AlertEpisodeMember.ts +586 -0
  6. package/Models/DatabaseModels/AlertEpisodeOwnerTeam.ts +421 -0
  7. package/Models/DatabaseModels/AlertEpisodeOwnerUser.ts +419 -0
  8. package/Models/DatabaseModels/AlertEpisodeStateTimeline.ts +523 -0
  9. package/Models/DatabaseModels/AlertFeed.ts +1 -0
  10. package/Models/DatabaseModels/AlertGroupingRule.ts +1432 -0
  11. package/Models/DatabaseModels/Index.ts +18 -0
  12. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +70 -0
  13. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.ts +59 -0
  14. package/Models/DatabaseModels/StatusPageDomain.ts +2 -0
  15. package/Models/DatabaseModels/UserOnCallLog.ts +48 -0
  16. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +49 -0
  17. package/Models/DatabaseModels/WorkspaceNotificationLog.ts +57 -0
  18. package/Server/API/SlackAPI.ts +21 -0
  19. package/Server/API/UserOnCallLogTimelineAPI.ts +65 -25
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1768938069147-MigrationName.ts +751 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1769125561322-MigrationName.ts +41 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1769170578688-MigrationName.ts +29 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1769172358833-MigrationName.ts +177 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1769176450526-MigrationName.ts +71 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1769190495840-MigrationName.ts +35 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1769199303656-MigrationName.ts +29 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1769202898645-MigrationName.ts +29 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1769428619414-MigrationName.ts +35 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1769428821686-MigrationName.ts +47 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1769469813786-MigrationName.ts +71 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/1769517677937-RenameNotificationRuleTypes.ts +67 -0
  32. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +24 -0
  33. package/Server/Services/AlertEpisodeFeedService.ts +94 -0
  34. package/Server/Services/AlertEpisodeInternalNoteService.ts +71 -0
  35. package/Server/Services/AlertEpisodeMemberService.ts +267 -0
  36. package/Server/Services/AlertEpisodeOwnerTeamService.ts +10 -0
  37. package/Server/Services/AlertEpisodeOwnerUserService.ts +10 -0
  38. package/Server/Services/AlertEpisodeService.ts +1096 -0
  39. package/Server/Services/AlertEpisodeStateTimelineService.ts +557 -0
  40. package/Server/Services/AlertGroupingEngineService.ts +1120 -0
  41. package/Server/Services/AlertGroupingRuleService.ts +14 -0
  42. package/Server/Services/AlertService.ts +12 -0
  43. package/Server/Services/CallService.ts +2 -0
  44. package/Server/Services/Index.ts +21 -0
  45. package/Server/Services/MailService.ts +5 -0
  46. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +18 -1
  47. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +64 -2
  48. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +27 -1
  49. package/Server/Services/OnCallDutyPolicyService.ts +16 -1
  50. package/Server/Services/PushNotificationService.ts +1 -0
  51. package/Server/Services/SmsService.ts +2 -0
  52. package/Server/Services/UserNotificationRuleService.ts +641 -10
  53. package/Server/Services/UserNotificationSettingService.ts +23 -0
  54. package/Server/Services/UserOnCallLogService.ts +58 -14
  55. package/Server/Services/WhatsAppService.ts +5 -0
  56. package/Server/Services/WorkspaceNotificationRuleService.ts +26 -0
  57. package/Server/Utils/AnalyticsDatabase/Statement.ts +6 -2
  58. package/Server/Utils/PushNotificationUtil.ts +75 -16
  59. package/Server/Utils/WhatsAppTemplateUtil.ts +13 -0
  60. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.ts +18 -0
  61. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +689 -0
  62. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +16 -0
  63. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +11 -0
  64. package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +915 -0
  65. package/Server/Utils/Workspace/Slack/Messages/AlertEpisode.ts +120 -0
  66. package/Server/Utils/Workspace/WorkspaceMessages/AlertEpisode.ts +74 -0
  67. package/Tests/Server/Services/AlertEpisodeMemberService.test.ts +200 -0
  68. package/Tests/Server/Services/AlertEpisodeService.test.ts +240 -0
  69. package/Tests/Server/Services/AlertGroupingEngineService.test.ts +542 -0
  70. package/Tests/Server/Services/AlertGroupingRuleService.test.ts +383 -0
  71. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +1 -1
  72. package/Tests/UI/Components/Input.test.tsx +1 -1
  73. package/Tests/UI/Components/TextArea.test.tsx +2 -2
  74. package/Types/BaseDatabase/SortOrder.ts +9 -0
  75. package/Types/Email/EmailTemplateType.ts +6 -0
  76. package/Types/NotificationRule/NotificationRuleType.ts +3 -1
  77. package/Types/NotificationSetting/NotificationSettingEventType.ts +7 -0
  78. package/Types/Permission.ts +309 -0
  79. package/Types/UserNotification/UserNotificationEventType.ts +1 -0
  80. package/Types/WhatsApp/WhatsAppTemplates.ts +24 -0
  81. package/Types/Workspace/NotificationRules/EventType.ts +1 -0
  82. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +32 -3
  83. package/UI/Components/Accordion/Accordion.tsx +20 -2
  84. package/UI/Components/Alerts/Alert.tsx +1 -0
  85. package/UI/Components/Button/Button.tsx +29 -0
  86. package/UI/Components/CardSelect/CardSelect.tsx +5 -1
  87. package/UI/Components/Checkbox/Checkbox.tsx +7 -3
  88. package/UI/Components/ColorCircle/ColorCircle.tsx +2 -0
  89. package/UI/Components/ColorViewer/ColorViewer.tsx +19 -3
  90. package/UI/Components/CopyableButton/CopyableButton.tsx +22 -5
  91. package/UI/Components/Detail/Detail.tsx +1 -1
  92. package/UI/Components/Dropdown/Dropdown.tsx +14 -1
  93. package/UI/Components/Forms/Fields/FormField.tsx +28 -0
  94. package/UI/Components/FullPageModal/FullPageModal.tsx +35 -4
  95. package/UI/Components/Input/Input.tsx +14 -2
  96. package/UI/Components/Link/Link.tsx +1 -0
  97. package/UI/Components/Loader/Loader.tsx +8 -2
  98. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +76 -1
  99. package/UI/Components/Modal/Modal.tsx +47 -3
  100. package/UI/Components/ModelTable/BaseModelTable.tsx +42 -1
  101. package/UI/Components/MoreMenu/MoreMenu.tsx +84 -2
  102. package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +30 -8
  103. package/UI/Components/Pagination/Pagination.tsx +113 -8
  104. package/UI/Components/ProgressBar/ProgressBar.tsx +12 -2
  105. package/UI/Components/Radio/Radio.tsx +21 -3
  106. package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +54 -27
  107. package/UI/Components/StatusBubble/StatusBubble.tsx +7 -2
  108. package/UI/Components/Table/TableHeader.tsx +20 -3
  109. package/UI/Components/Tabs/Tab.tsx +16 -1
  110. package/UI/Components/Tabs/Tabs.tsx +12 -1
  111. package/UI/Components/TextArea/TextArea.tsx +12 -2
  112. package/UI/Components/Toggle/Toggle.tsx +14 -3
  113. package/UI/Components/Tooltip/Tooltip.tsx +11 -1
  114. package/UI/Components/TopAlert/TopAlert.tsx +2 -0
  115. package/build/dist/Models/DatabaseModels/Alert.js +77 -0
  116. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  117. package/build/dist/Models/DatabaseModels/AlertEpisode.js +1225 -0
  118. package/build/dist/Models/DatabaseModels/AlertEpisode.js.map +1 -0
  119. package/build/dist/Models/DatabaseModels/AlertEpisodeFeed.js +553 -0
  120. package/build/dist/Models/DatabaseModels/AlertEpisodeFeed.js.map +1 -0
  121. package/build/dist/Models/DatabaseModels/AlertEpisodeInternalNote.js +467 -0
  122. package/build/dist/Models/DatabaseModels/AlertEpisodeInternalNote.js.map +1 -0
  123. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +607 -0
  124. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -0
  125. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js +437 -0
  126. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js.map +1 -0
  127. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js +436 -0
  128. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js.map +1 -0
  129. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +546 -0
  130. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -0
  131. package/build/dist/Models/DatabaseModels/AlertFeed.js +1 -0
  132. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  133. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +1437 -0
  134. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -0
  135. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  136. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  137. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +69 -0
  138. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  139. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js +58 -0
  140. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js.map +1 -1
  141. package/build/dist/Models/DatabaseModels/StatusPageDomain.js +2 -0
  142. package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
  143. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +47 -0
  144. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  145. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +48 -0
  146. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  147. package/build/dist/Models/DatabaseModels/WorkspaceNotificationLog.js +58 -0
  148. package/build/dist/Models/DatabaseModels/WorkspaceNotificationLog.js.map +1 -1
  149. package/build/dist/Server/API/SlackAPI.js +18 -0
  150. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  151. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +55 -15
  152. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
  153. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768938069147-MigrationName.js +266 -0
  154. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768938069147-MigrationName.js.map +1 -0
  155. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769125561322-MigrationName.js +20 -0
  156. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769125561322-MigrationName.js.map +1 -0
  157. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769170578688-MigrationName.js +16 -0
  158. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769170578688-MigrationName.js.map +1 -0
  159. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769172358833-MigrationName.js +68 -0
  160. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769172358833-MigrationName.js.map +1 -0
  161. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769176450526-MigrationName.js +30 -0
  162. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769176450526-MigrationName.js.map +1 -0
  163. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769190495840-MigrationName.js +18 -0
  164. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769190495840-MigrationName.js.map +1 -0
  165. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769199303656-MigrationName.js +16 -0
  166. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769199303656-MigrationName.js.map +1 -0
  167. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769202898645-MigrationName.js +16 -0
  168. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769202898645-MigrationName.js.map +1 -0
  169. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428619414-MigrationName.js +18 -0
  170. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428619414-MigrationName.js.map +1 -0
  171. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428821686-MigrationName.js +22 -0
  172. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428821686-MigrationName.js.map +1 -0
  173. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769469813786-MigrationName.js +30 -0
  174. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769469813786-MigrationName.js.map +1 -0
  175. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769517677937-RenameNotificationRuleTypes.js +67 -0
  176. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769517677937-RenameNotificationRuleTypes.js.map +1 -0
  177. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +24 -0
  178. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  179. package/build/dist/Server/Services/AlertEpisodeFeedService.js +83 -0
  180. package/build/dist/Server/Services/AlertEpisodeFeedService.js.map +1 -0
  181. package/build/dist/Server/Services/AlertEpisodeInternalNoteService.js +70 -0
  182. package/build/dist/Server/Services/AlertEpisodeInternalNoteService.js.map +1 -0
  183. package/build/dist/Server/Services/AlertEpisodeMemberService.js +256 -0
  184. package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -0
  185. package/build/dist/Server/Services/AlertEpisodeOwnerTeamService.js +9 -0
  186. package/build/dist/Server/Services/AlertEpisodeOwnerTeamService.js.map +1 -0
  187. package/build/dist/Server/Services/AlertEpisodeOwnerUserService.js +9 -0
  188. package/build/dist/Server/Services/AlertEpisodeOwnerUserService.js.map +1 -0
  189. package/build/dist/Server/Services/AlertEpisodeService.js +973 -0
  190. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -0
  191. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +494 -0
  192. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -0
  193. package/build/dist/Server/Services/AlertGroupingEngineService.js +893 -0
  194. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -0
  195. package/build/dist/Server/Services/AlertGroupingRuleService.js +13 -0
  196. package/build/dist/Server/Services/AlertGroupingRuleService.js.map +1 -0
  197. package/build/dist/Server/Services/AlertService.js +11 -0
  198. package/build/dist/Server/Services/AlertService.js.map +1 -1
  199. package/build/dist/Server/Services/CallService.js +11 -10
  200. package/build/dist/Server/Services/CallService.js.map +1 -1
  201. package/build/dist/Server/Services/Index.js +18 -0
  202. package/build/dist/Server/Services/Index.js.map +1 -1
  203. package/build/dist/Server/Services/MailService.js +3 -0
  204. package/build/dist/Server/Services/MailService.js.map +1 -1
  205. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +10 -1
  206. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  207. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +49 -2
  208. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  209. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +21 -1
  210. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  211. package/build/dist/Server/Services/OnCallDutyPolicyService.js +9 -1
  212. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  213. package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
  214. package/build/dist/Server/Services/SmsService.js +11 -10
  215. package/build/dist/Server/Services/SmsService.js.map +1 -1
  216. package/build/dist/Server/Services/UserNotificationRuleService.js +521 -43
  217. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  218. package/build/dist/Server/Services/UserNotificationSettingService.js +9 -0
  219. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  220. package/build/dist/Server/Services/UserOnCallLogService.js +48 -12
  221. package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
  222. package/build/dist/Server/Services/WhatsAppService.js +3 -0
  223. package/build/dist/Server/Services/WhatsAppService.js.map +1 -1
  224. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +25 -0
  225. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  226. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +4 -2
  227. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  228. package/build/dist/Server/Utils/PushNotificationUtil.js +51 -16
  229. package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
  230. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +8 -0
  231. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  232. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js +17 -0
  233. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js.map +1 -1
  234. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +545 -0
  235. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -0
  236. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +13 -0
  237. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  238. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +10 -0
  239. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
  240. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +651 -0
  241. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -0
  242. package/build/dist/Server/Utils/Workspace/Slack/Messages/AlertEpisode.js +100 -0
  243. package/build/dist/Server/Utils/Workspace/Slack/Messages/AlertEpisode.js.map +1 -0
  244. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/AlertEpisode.js +70 -0
  245. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/AlertEpisode.js.map +1 -0
  246. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js +165 -0
  247. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js.map +1 -0
  248. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js +193 -0
  249. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js.map +1 -0
  250. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js +412 -0
  251. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js.map +1 -0
  252. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js +308 -0
  253. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js.map +1 -0
  254. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +1 -1
  255. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
  256. package/build/dist/Tests/UI/Components/Input.test.js +1 -1
  257. package/build/dist/Tests/UI/Components/Input.test.js.map +1 -1
  258. package/build/dist/Tests/UI/Components/TextArea.test.js +2 -2
  259. package/build/dist/Tests/UI/Components/TextArea.test.js.map +1 -1
  260. package/build/dist/Types/BaseDatabase/SortOrder.js +5 -0
  261. package/build/dist/Types/BaseDatabase/SortOrder.js.map +1 -1
  262. package/build/dist/Types/Email/EmailTemplateType.js +5 -0
  263. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  264. package/build/dist/Types/NotificationRule/NotificationRuleType.js +3 -1
  265. package/build/dist/Types/NotificationRule/NotificationRuleType.js.map +1 -1
  266. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +5 -0
  267. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  268. package/build/dist/Types/Permission.js +264 -0
  269. package/build/dist/Types/Permission.js.map +1 -1
  270. package/build/dist/Types/UserNotification/UserNotificationEventType.js +1 -0
  271. package/build/dist/Types/UserNotification/UserNotificationEventType.js.map +1 -1
  272. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +15 -0
  273. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
  274. package/build/dist/Types/Workspace/NotificationRules/EventType.js +1 -0
  275. package/build/dist/Types/Workspace/NotificationRules/EventType.js.map +1 -1
  276. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +28 -3
  277. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  278. package/build/dist/UI/Components/Accordion/Accordion.js +10 -3
  279. package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
  280. package/build/dist/UI/Components/Alerts/Alert.js +1 -1
  281. package/build/dist/UI/Components/Alerts/Alert.js.map +1 -1
  282. package/build/dist/UI/Components/Button/Button.js +8 -2
  283. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  284. package/build/dist/UI/Components/CardSelect/CardSelect.js +1 -1
  285. package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
  286. package/build/dist/UI/Components/Checkbox/Checkbox.js +2 -2
  287. package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
  288. package/build/dist/UI/Components/ColorCircle/ColorCircle.js +1 -1
  289. package/build/dist/UI/Components/ColorCircle/ColorCircle.js.map +1 -1
  290. package/build/dist/UI/Components/ColorViewer/ColorViewer.js +12 -3
  291. package/build/dist/UI/Components/ColorViewer/ColorViewer.js.map +1 -1
  292. package/build/dist/UI/Components/CopyableButton/CopyableButton.js +12 -5
  293. package/build/dist/UI/Components/CopyableButton/CopyableButton.js.map +1 -1
  294. package/build/dist/UI/Components/Detail/Detail.js +1 -1
  295. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  296. package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -3
  297. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  298. package/build/dist/UI/Components/Forms/Fields/FormField.js +19 -1
  299. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  300. package/build/dist/UI/Components/FullPageModal/FullPageModal.js +24 -5
  301. package/build/dist/UI/Components/FullPageModal/FullPageModal.js.map +1 -1
  302. package/build/dist/UI/Components/Input/Input.js +3 -3
  303. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  304. package/build/dist/UI/Components/Link/Link.js +1 -1
  305. package/build/dist/UI/Components/Link/Link.js.map +1 -1
  306. package/build/dist/UI/Components/Loader/Loader.js +6 -4
  307. package/build/dist/UI/Components/Loader/Loader.js.map +1 -1
  308. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +56 -3
  309. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  310. package/build/dist/UI/Components/Modal/Modal.js +28 -3
  311. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  312. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +23 -1
  313. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  314. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +67 -6
  315. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  316. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +14 -3
  317. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
  318. package/build/dist/UI/Components/Pagination/Pagination.js +69 -13
  319. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  320. package/build/dist/UI/Components/ProgressBar/ProgressBar.js +2 -2
  321. package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
  322. package/build/dist/UI/Components/Radio/Radio.js +8 -5
  323. package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
  324. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -4
  325. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
  326. package/build/dist/UI/Components/StatusBubble/StatusBubble.js +2 -2
  327. package/build/dist/UI/Components/StatusBubble/StatusBubble.js.map +1 -1
  328. package/build/dist/UI/Components/Table/TableHeader.js +12 -4
  329. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  330. package/build/dist/UI/Components/Tabs/Tab.js +8 -1
  331. package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
  332. package/build/dist/UI/Components/Tabs/Tabs.js +4 -3
  333. package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
  334. package/build/dist/UI/Components/TextArea/TextArea.js +3 -3
  335. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  336. package/build/dist/UI/Components/Toggle/Toggle.js +7 -4
  337. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  338. package/build/dist/UI/Components/Tooltip/Tooltip.js +4 -1
  339. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  340. package/build/dist/UI/Components/TopAlert/TopAlert.js +1 -1
  341. package/build/dist/UI/Components/TopAlert/TopAlert.js.map +1 -1
  342. package/package.json +2 -1
@@ -0,0 +1,14 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/AlertGroupingRule";
3
+ import { IsBillingEnabled } from "../EnvironmentConfig";
4
+
5
+ export class Service extends DatabaseService<Model> {
6
+ public constructor() {
7
+ super(Model);
8
+ if (IsBillingEnabled) {
9
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365); // 3 years
10
+ }
11
+ }
12
+ }
13
+
14
+ export default new Service();
@@ -54,6 +54,7 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
54
54
  import MetricType from "../../Models/DatabaseModels/MetricType";
55
55
  import Dictionary from "../../Types/Dictionary";
56
56
  import OnCallDutyPolicy from "../../Models/DatabaseModels/OnCallDutyPolicy";
57
+ import AlertGroupingEngineService from "./AlertGroupingEngineService";
57
58
 
58
59
  export class Service extends DatabaseService<Model> {
59
60
  public constructor() {
@@ -351,6 +352,17 @@ export class Service extends DatabaseService<Model> {
351
352
  }
352
353
  return Promise.resolve();
353
354
  })
355
+ .then(async () => {
356
+ // Process alert for grouping into episodes
357
+ try {
358
+ await AlertGroupingEngineService.processAlert(createdItem);
359
+ } catch (error) {
360
+ logger.error(
361
+ `Alert grouping failed in AlertService.onCreateSuccess: ${error}`,
362
+ );
363
+ return Promise.resolve();
364
+ }
365
+ })
354
366
  .catch((error: Error) => {
355
367
  logger.error(
356
368
  `Critical error in AlertService sequential operations: ${error}`,
@@ -28,6 +28,7 @@ export class CallService extends BaseService {
28
28
  customTwilioConfig?: TwilioConfig | undefined;
29
29
  incidentId?: ObjectID | undefined;
30
30
  alertId?: ObjectID | undefined;
31
+ alertEpisodeId?: ObjectID | undefined;
31
32
  scheduledMaintenanceId?: ObjectID | undefined;
32
33
  statusPageId?: ObjectID | undefined;
33
34
  statusPageAnnouncementId?: ObjectID | undefined;
@@ -57,6 +58,7 @@ export class CallService extends BaseService {
57
58
  : undefined,
58
59
  incidentId: options.incidentId?.toString(),
59
60
  alertId: options.alertId?.toString(),
61
+ alertEpisodeId: options.alertEpisodeId?.toString(),
60
62
  scheduledMaintenanceId: options.scheduledMaintenanceId?.toString(),
61
63
  statusPageId: options.statusPageId?.toString(),
62
64
  statusPageAnnouncementId: options.statusPageAnnouncementId?.toString(),
@@ -158,6 +158,17 @@ import AlertOwnerTeamService from "./AlertOwnerTeamService";
158
158
  import AlertOwnerUserService from "./AlertOwnerUserService";
159
159
  import AlertSeverityService from "./AlertSeverityService";
160
160
  import AlertNoteTemplateService from "./AlertNoteTemplateService";
161
+
162
+ // AlertEpisode Services
163
+ import AlertEpisodeService from "./AlertEpisodeService";
164
+ import AlertEpisodeFeedService from "./AlertEpisodeFeedService";
165
+ import AlertEpisodeInternalNoteService from "./AlertEpisodeInternalNoteService";
166
+ import AlertEpisodeMemberService from "./AlertEpisodeMemberService";
167
+ import AlertEpisodeOwnerTeamService from "./AlertEpisodeOwnerTeamService";
168
+ import AlertEpisodeOwnerUserService from "./AlertEpisodeOwnerUserService";
169
+ import AlertEpisodeStateTimelineService from "./AlertEpisodeStateTimelineService";
170
+ import AlertGroupingRuleService from "./AlertGroupingRuleService";
171
+
161
172
  import TableViewService from "./TableViewService";
162
173
  import ScheduledMaintenanceFeedService from "./ScheduledMaintenanceFeedService";
163
174
  import AlertFeedService from "./AlertFeedService";
@@ -351,6 +362,16 @@ const services: Array<BaseService> = [
351
362
  AlertNoteTemplateService,
352
363
  AlertFeedService,
353
364
 
365
+ // AlertEpisode Services
366
+ AlertEpisodeService,
367
+ AlertEpisodeFeedService,
368
+ AlertEpisodeInternalNoteService,
369
+ AlertEpisodeMemberService,
370
+ AlertEpisodeOwnerTeamService,
371
+ AlertEpisodeOwnerUserService,
372
+ AlertEpisodeStateTimelineService,
373
+ AlertGroupingRuleService,
374
+
354
375
  TableViewService,
355
376
  MonitorTestService,
356
377
 
@@ -23,6 +23,7 @@ export class MailService extends BaseService {
23
23
  projectId?: ObjectID | undefined;
24
24
  incidentId?: ObjectID | undefined;
25
25
  alertId?: ObjectID | undefined;
26
+ alertEpisodeId?: ObjectID | undefined;
26
27
  scheduledMaintenanceId?: ObjectID | undefined;
27
28
  statusPageId?: ObjectID | undefined;
28
29
  statusPageAnnouncementId?: ObjectID | undefined;
@@ -68,6 +69,10 @@ export class MailService extends BaseService {
68
69
  body["alertId"] = options.alertId.toString();
69
70
  }
70
71
 
72
+ if (options?.alertEpisodeId) {
73
+ body["alertEpisodeId"] = options.alertEpisodeId.toString();
74
+ }
75
+
71
76
  if (options?.scheduledMaintenanceId) {
72
77
  body["scheduledMaintenanceId"] =
73
78
  options.scheduledMaintenanceId.toString();
@@ -110,6 +110,7 @@ export class Service extends DatabaseService<Model> {
110
110
  projectId: ObjectID;
111
111
  triggeredByIncidentId?: ObjectID | undefined;
112
112
  triggeredByAlertId?: ObjectID | undefined;
113
+ triggeredByAlertEpisodeId?: ObjectID | undefined;
113
114
  userNotificationEventType: UserNotificationEventType;
114
115
  onCallPolicyExecutionLogId: ObjectID;
115
116
  onCallPolicyId: ObjectID;
@@ -173,6 +174,10 @@ export class Service extends DatabaseService<Model> {
173
174
  log.triggeredByAlertId = options.triggeredByAlertId;
174
175
  }
175
176
 
177
+ if (options.triggeredByAlertEpisodeId) {
178
+ log.triggeredByAlertEpisodeId = options.triggeredByAlertEpisodeId;
179
+ }
180
+
176
181
  return log;
177
182
  };
178
183
 
@@ -192,7 +197,17 @@ export class Service extends DatabaseService<Model> {
192
197
  !options.triggeredByAlertId
193
198
  ) {
194
199
  throw new BadDataException(
195
- "triggeredByAlertId is required when userNotificationEventType is IncidentCreated",
200
+ "triggeredByAlertId is required when userNotificationEventType is AlertCreated",
201
+ );
202
+ }
203
+
204
+ if (
205
+ UserNotificationEventType.AlertEpisodeCreated ===
206
+ options.userNotificationEventType &&
207
+ !options.triggeredByAlertEpisodeId
208
+ ) {
209
+ throw new BadDataException(
210
+ "triggeredByAlertEpisodeId is required when userNotificationEventType is AlertEpisodeCreated",
196
211
  );
197
212
  }
198
213
 
@@ -307,6 +322,8 @@ export class Service extends DatabaseService<Model> {
307
322
  userNotificationEventType: options.userNotificationEventType!,
308
323
  triggeredByIncidentId: options.triggeredByIncidentId || undefined,
309
324
  triggeredByAlertId: options.triggeredByAlertId || undefined,
325
+ triggeredByAlertEpisodeId:
326
+ options.triggeredByAlertEpisodeId || undefined,
310
327
  onCallPolicyExecutionLogId: options.onCallPolicyExecutionLogId,
311
328
  onCallPolicyId: options.onCallPolicyId,
312
329
  onCallPolicyEscalationRuleId: ruleId,
@@ -17,9 +17,12 @@ import ObjectID from "../../Types/ObjectID";
17
17
  import Color from "../../Types/Color";
18
18
  import AlertFeedService from "./AlertFeedService";
19
19
  import { AlertFeedEventType } from "../../Models/DatabaseModels/AlertFeed";
20
+ import AlertEpisodeFeedService from "./AlertEpisodeFeedService";
21
+ import { AlertEpisodeFeedEventType } from "../../Models/DatabaseModels/AlertEpisodeFeed";
20
22
  import BadDataException from "../../Types/Exception/BadDataException";
21
23
  import IncidentService from "./IncidentService";
22
24
  import AlertService from "./AlertService";
25
+ import AlertEpisodeService from "./AlertEpisodeService";
23
26
 
24
27
  export class Service extends DatabaseService<Model> {
25
28
  public constructor() {
@@ -55,7 +58,11 @@ export class Service extends DatabaseService<Model> {
55
58
  _onCreate: OnCreate<Model>,
56
59
  createdItem: Model,
57
60
  ): Promise<Model> {
58
- if (createdItem.triggeredByIncidentId || createdItem.triggeredByAlertId) {
61
+ if (
62
+ createdItem.triggeredByIncidentId ||
63
+ createdItem.triggeredByAlertId ||
64
+ createdItem.triggeredByAlertEpisodeId
65
+ ) {
59
66
  const onCallPolicy: OnCallDutyPolicy | null =
60
67
  await OnCallDutyPolicyService.findOneById({
61
68
  id: createdItem.onCallDutyPolicyId!,
@@ -90,6 +97,14 @@ export class Service extends DatabaseService<Model> {
90
97
  incidentOrAlertLink = `[Alert ${alertNumber}](${(await AlertService.getAlertLinkInDashboard(createdItem.projectId!, createdItem.triggeredByAlertId)).toString()})`;
91
98
  }
92
99
 
100
+ if (createdItem.triggeredByAlertEpisodeId) {
101
+ const episodeNumber: number | null =
102
+ await AlertEpisodeService.getEpisodeNumber({
103
+ episodeId: createdItem.triggeredByAlertEpisodeId,
104
+ });
105
+ incidentOrAlertLink = `[Alert Episode ${episodeNumber}](${(await AlertEpisodeService.getEpisodeLinkInDashboard(createdItem.projectId!, createdItem.triggeredByAlertEpisodeId)).toString()})`;
106
+ }
107
+
93
108
  const feedInfoInMarkdown: string = `**📞 On Call Policy Started Executing:** On Call Policy **${onCallPolicy.name}** started executing for ${incidentOrAlertLink}. Users on call on this policy will now be notified.`;
94
109
 
95
110
  if (
@@ -118,6 +133,20 @@ export class Service extends DatabaseService<Model> {
118
133
  feedInfoInMarkdown: feedInfoInMarkdown,
119
134
  });
120
135
  }
136
+
137
+ if (
138
+ onCallPolicy &&
139
+ onCallPolicy.id &&
140
+ createdItem.triggeredByAlertEpisodeId
141
+ ) {
142
+ await AlertEpisodeFeedService.createAlertEpisodeFeedItem({
143
+ alertEpisodeId: createdItem.triggeredByAlertEpisodeId,
144
+ projectId: createdItem.projectId!,
145
+ alertEpisodeFeedEventType: AlertEpisodeFeedEventType.OnCallPolicy,
146
+ displayColor: Yellow500,
147
+ feedInfoInMarkdown: feedInfoInMarkdown,
148
+ });
149
+ }
121
150
  }
122
151
  }
123
152
 
@@ -159,6 +188,11 @@ export class Service extends DatabaseService<Model> {
159
188
  userNotificationEventType = UserNotificationEventType.AlertCreated;
160
189
  }
161
190
 
191
+ if (createdItem.triggeredByAlertEpisodeId) {
192
+ userNotificationEventType =
193
+ UserNotificationEventType.AlertEpisodeCreated;
194
+ }
195
+
162
196
  if (!userNotificationEventType) {
163
197
  throw new BadDataException("Invalid userNotificationEventType");
164
198
  }
@@ -169,6 +203,7 @@ export class Service extends DatabaseService<Model> {
169
203
  projectId: createdItem.projectId!,
170
204
  triggeredByIncidentId: createdItem.triggeredByIncidentId,
171
205
  triggeredByAlertId: createdItem.triggeredByAlertId,
206
+ triggeredByAlertEpisodeId: createdItem.triggeredByAlertEpisodeId,
172
207
  userNotificationEventType: userNotificationEventType,
173
208
  onCallPolicyExecutionLogId: createdItem.id!,
174
209
  onCallPolicyId: createdItem.onCallDutyPolicyId!,
@@ -256,6 +291,7 @@ export class Service extends DatabaseService<Model> {
256
291
  statusMessage: true,
257
292
  triggeredByIncidentId: true,
258
293
  triggeredByAlertId: true,
294
+ triggeredByAlertEpisodeId: true,
259
295
  },
260
296
  props: {
261
297
  isRoot: true,
@@ -266,7 +302,8 @@ export class Service extends DatabaseService<Model> {
266
302
  if (
267
303
  onCalldutyPolicyExecutionLog &&
268
304
  (onCalldutyPolicyExecutionLog.triggeredByIncidentId ||
269
- onCalldutyPolicyExecutionLog.triggeredByAlertId)
305
+ onCalldutyPolicyExecutionLog.triggeredByAlertId ||
306
+ onCalldutyPolicyExecutionLog.triggeredByAlertEpisodeId)
270
307
  ) {
271
308
  const onCallPolicy: OnCallDutyPolicy | null =
272
309
  await OnCallDutyPolicyService.findOneById({
@@ -308,6 +345,15 @@ export class Service extends DatabaseService<Model> {
308
345
  incidentOrAlertLink = `[Alert ${alertNumber}](${(await AlertService.getAlertLinkInDashboard(onCalldutyPolicyExecutionLog.projectId!, onCalldutyPolicyExecutionLog.triggeredByAlertId)).toString()})`;
309
346
  }
310
347
 
348
+ if (onCalldutyPolicyExecutionLog.triggeredByAlertEpisodeId) {
349
+ const episodeNumber: number | null =
350
+ await AlertEpisodeService.getEpisodeNumber({
351
+ episodeId:
352
+ onCalldutyPolicyExecutionLog.triggeredByAlertEpisodeId,
353
+ });
354
+ incidentOrAlertLink = `[Alert Episode ${episodeNumber}](${(await AlertEpisodeService.getEpisodeLinkInDashboard(onCalldutyPolicyExecutionLog.projectId!, onCalldutyPolicyExecutionLog.triggeredByAlertEpisodeId)).toString()})`;
355
+ }
356
+
311
357
  const feedInfoInMarkdown: string = `**${this.getEmojiByStatus(onCalldutyPolicyExecutionLog.status)} On Call Policy Status Updated for ${incidentOrAlertLink}:**
312
358
 
313
359
  On-call policy **[${onCallPolicy.name?.toString()}](${(await OnCallDutyPolicyService.getOnCallDutyPolicyLinkInDashboard(onCallPolicy.projectId!, onCallPolicy.id!)).toString()})** status updated to **${onCalldutyPolicyExecutionLog.status}**`;
@@ -344,6 +390,22 @@ export class Service extends DatabaseService<Model> {
344
390
  feedInfoInMarkdown: feedInfoInMarkdown,
345
391
  });
346
392
  }
393
+
394
+ if (onCalldutyPolicyExecutionLog.triggeredByAlertEpisodeId) {
395
+ await AlertEpisodeFeedService.createAlertEpisodeFeedItem({
396
+ alertEpisodeId:
397
+ onCalldutyPolicyExecutionLog.triggeredByAlertEpisodeId,
398
+ projectId: onCalldutyPolicyExecutionLog.projectId!,
399
+ alertEpisodeFeedEventType: AlertEpisodeFeedEventType.OnCallPolicy,
400
+ displayColor: onCalldutyPolicyExecutionLog.status
401
+ ? this.getDisplayColorByStatus(
402
+ onCalldutyPolicyExecutionLog.status,
403
+ )
404
+ : Blue500,
405
+ moreInformationInMarkdown: moreInformationInMarkdown,
406
+ feedInfoInMarkdown: feedInfoInMarkdown,
407
+ });
408
+ }
347
409
  }
348
410
  }
349
411
  }
@@ -11,8 +11,11 @@ import logger from "../Utils/Logger";
11
11
  import { LIMIT_PER_PROJECT } from "../../Types/Database/LimitMax";
12
12
  import AlertFeedService from "./AlertFeedService";
13
13
  import { AlertFeedEventType } from "../../Models/DatabaseModels/AlertFeed";
14
+ import AlertEpisodeFeedService from "./AlertEpisodeFeedService";
15
+ import { AlertEpisodeFeedEventType } from "../../Models/DatabaseModels/AlertEpisodeFeed";
14
16
  import OnCallDutyPolicyService from "./OnCallDutyPolicyService";
15
17
  import AlertService from "./AlertService";
18
+ import AlertEpisodeService from "./AlertEpisodeService";
16
19
  import IncidentService from "./IncidentService";
17
20
  import UserService from "./UserService";
18
21
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
@@ -80,6 +83,7 @@ export class Service extends DatabaseService<Model> {
80
83
  onCallDutyPolicyId: true,
81
84
  triggeredByIncidentId: true,
82
85
  triggeredByAlertId: true,
86
+ triggeredByAlertEpisodeId: true,
83
87
  projectId: true,
84
88
  status: true,
85
89
  statusMessage: true,
@@ -125,7 +129,8 @@ export class Service extends DatabaseService<Model> {
125
129
 
126
130
  if (
127
131
  !onCallDutyPolicyExecutionLogTimeline.triggeredByIncidentId &&
128
- !onCallDutyPolicyExecutionLogTimeline.triggeredByAlertId
132
+ !onCallDutyPolicyExecutionLogTimeline.triggeredByAlertId &&
133
+ !onCallDutyPolicyExecutionLogTimeline.triggeredByAlertEpisodeId
129
134
  ) {
130
135
  return;
131
136
  }
@@ -172,6 +177,15 @@ export class Service extends DatabaseService<Model> {
172
177
  incidentOrAlertLink = `[Alert ${alertNumber}](${(await AlertService.getAlertLinkInDashboard(onCallDutyPolicyExecutionLogTimeline.projectId!, onCallDutyPolicyExecutionLogTimeline.triggeredByAlertId)).toString()})`;
173
178
  }
174
179
 
180
+ if (onCallDutyPolicyExecutionLogTimeline.triggeredByAlertEpisodeId) {
181
+ const episodeNumber: number | null =
182
+ await AlertEpisodeService.getEpisodeNumber({
183
+ episodeId:
184
+ onCallDutyPolicyExecutionLogTimeline.triggeredByAlertEpisodeId,
185
+ });
186
+ incidentOrAlertLink = `[Alert Episode ${episodeNumber}](${(await AlertEpisodeService.getEpisodeLinkInDashboard(onCallDutyPolicyExecutionLogTimeline.projectId!, onCallDutyPolicyExecutionLogTimeline.triggeredByAlertEpisodeId)).toString()})`;
187
+ }
188
+
175
189
  let feedInfoInMarkdown: string = `**${this.getEmojiBasedOnStatus(status)} ${incidentOrAlertLink} On-Call Alert ${status} to ${await UserService.getUserMarkdownString(
176
190
  {
177
191
  userId: onCallDutyPolicyExecutionLogTimeline.alertSentToUserId!,
@@ -224,6 +238,18 @@ The on-call policy **[${onCallDutyPolicyExecutionLogTimeline.onCallDutyPolicy.na
224
238
  });
225
239
  }
226
240
 
241
+ if (onCallDutyPolicyExecutionLogTimeline.triggeredByAlertEpisodeId) {
242
+ await AlertEpisodeFeedService.createAlertEpisodeFeedItem({
243
+ alertEpisodeId:
244
+ onCallDutyPolicyExecutionLogTimeline.triggeredByAlertEpisodeId,
245
+ projectId: onCallDutyPolicyExecutionLogTimeline.projectId!,
246
+ alertEpisodeFeedEventType:
247
+ AlertEpisodeFeedEventType.OnCallNotification,
248
+ displayColor: displayColor,
249
+ feedInfoInMarkdown: feedInfoInMarkdown,
250
+ });
251
+ }
252
+
227
253
  logger.debug("Incident Feed created");
228
254
  }
229
255
  }
@@ -263,6 +263,7 @@ ${onCallPolicy.description || "No description provided."}
263
263
  options: {
264
264
  triggeredByIncidentId?: ObjectID | undefined;
265
265
  triggeredByAlertId?: ObjectID | undefined;
266
+ triggeredByAlertEpisodeId?: ObjectID | undefined;
266
267
  userNotificationEventType: UserNotificationEventType;
267
268
  },
268
269
  ): Promise<void> {
@@ -284,7 +285,17 @@ ${onCallPolicy.description || "No description provided."}
284
285
  !options.triggeredByAlertId
285
286
  ) {
286
287
  throw new BadDataException(
287
- "triggeredByAlertId is required when userNotificationEventType is IncidentCreated",
288
+ "triggeredByAlertId is required when userNotificationEventType is AlertCreated",
289
+ );
290
+ }
291
+
292
+ if (
293
+ UserNotificationEventType.AlertEpisodeCreated ===
294
+ options.userNotificationEventType &&
295
+ !options.triggeredByAlertEpisodeId
296
+ ) {
297
+ throw new BadDataException(
298
+ "triggeredByAlertEpisodeId is required when userNotificationEventType is AlertEpisodeCreated",
288
299
  );
289
300
  }
290
301
 
@@ -323,6 +334,10 @@ ${onCallPolicy.description || "No description provided."}
323
334
  log.triggeredByAlertId = options.triggeredByAlertId;
324
335
  }
325
336
 
337
+ if (options.triggeredByAlertEpisodeId) {
338
+ log.triggeredByAlertEpisodeId = options.triggeredByAlertEpisodeId;
339
+ }
340
+
326
341
  await OnCallDutyPolicyExecutionLogService.create({
327
342
  data: log,
328
343
  props: {
@@ -25,6 +25,7 @@ export interface PushNotificationOptions {
25
25
  // Optional relations for richer logging
26
26
  incidentId?: ObjectID | undefined;
27
27
  alertId?: ObjectID | undefined;
28
+ alertEpisodeId?: ObjectID | undefined;
28
29
  scheduledMaintenanceId?: ObjectID | undefined;
29
30
  statusPageId?: ObjectID | undefined;
30
31
  statusPageAnnouncementId?: ObjectID | undefined;
@@ -28,6 +28,7 @@ export class SmsService extends BaseService {
28
28
  customTwilioConfig?: TwilioConfig | undefined;
29
29
  incidentId?: ObjectID | undefined;
30
30
  alertId?: ObjectID | undefined;
31
+ alertEpisodeId?: ObjectID | undefined;
31
32
  scheduledMaintenanceId?: ObjectID | undefined;
32
33
  statusPageId?: ObjectID | undefined;
33
34
  statusPageAnnouncementId?: ObjectID | undefined;
@@ -58,6 +59,7 @@ export class SmsService extends BaseService {
58
59
  : undefined,
59
60
  incidentId: options.incidentId?.toString(),
60
61
  alertId: options.alertId?.toString(),
62
+ alertEpisodeId: options.alertEpisodeId?.toString(),
61
63
  scheduledMaintenanceId: options.scheduledMaintenanceId?.toString(),
62
64
  statusPageId: options.statusPageId?.toString(),
63
65
  statusPageAnnouncementId: options.statusPageAnnouncementId?.toString(),