@oneuptime/common 9.4.7 → 9.4.8

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 (304) 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/StatusPageDomain.ts +2 -0
  14. package/Models/DatabaseModels/WorkspaceNotificationLog.ts +57 -0
  15. package/Server/API/SlackAPI.ts +21 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1768938069147-MigrationName.ts +751 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1769125561322-MigrationName.ts +41 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/1769170578688-MigrationName.ts +29 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1769172358833-MigrationName.ts +177 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1769176450526-MigrationName.ts +71 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1769190495840-MigrationName.ts +35 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1769199303656-MigrationName.ts +29 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1769202898645-MigrationName.ts +29 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1769428619414-MigrationName.ts +35 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1769428821686-MigrationName.ts +47 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
  27. package/Server/Services/AlertEpisodeFeedService.ts +94 -0
  28. package/Server/Services/AlertEpisodeInternalNoteService.ts +71 -0
  29. package/Server/Services/AlertEpisodeMemberService.ts +267 -0
  30. package/Server/Services/AlertEpisodeOwnerTeamService.ts +10 -0
  31. package/Server/Services/AlertEpisodeOwnerUserService.ts +10 -0
  32. package/Server/Services/AlertEpisodeService.ts +988 -0
  33. package/Server/Services/AlertEpisodeStateTimelineService.ts +557 -0
  34. package/Server/Services/AlertGroupingEngineService.ts +1120 -0
  35. package/Server/Services/AlertGroupingRuleService.ts +14 -0
  36. package/Server/Services/AlertService.ts +12 -0
  37. package/Server/Services/CallService.ts +2 -0
  38. package/Server/Services/Index.ts +21 -0
  39. package/Server/Services/MailService.ts +5 -0
  40. package/Server/Services/OnCallDutyPolicyService.ts +5 -0
  41. package/Server/Services/SmsService.ts +2 -0
  42. package/Server/Services/UserNotificationSettingService.ts +23 -0
  43. package/Server/Services/WhatsAppService.ts +5 -0
  44. package/Server/Services/WorkspaceNotificationRuleService.ts +26 -0
  45. package/Server/Utils/AnalyticsDatabase/Statement.ts +6 -2
  46. package/Server/Utils/WhatsAppTemplateUtil.ts +13 -0
  47. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.ts +18 -0
  48. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +689 -0
  49. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +16 -0
  50. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +11 -0
  51. package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +915 -0
  52. package/Server/Utils/Workspace/Slack/Messages/AlertEpisode.ts +120 -0
  53. package/Server/Utils/Workspace/WorkspaceMessages/AlertEpisode.ts +74 -0
  54. package/Tests/Server/Services/AlertEpisodeMemberService.test.ts +200 -0
  55. package/Tests/Server/Services/AlertEpisodeService.test.ts +240 -0
  56. package/Tests/Server/Services/AlertGroupingEngineService.test.ts +542 -0
  57. package/Tests/Server/Services/AlertGroupingRuleService.test.ts +383 -0
  58. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +1 -1
  59. package/Tests/UI/Components/Input.test.tsx +1 -1
  60. package/Tests/UI/Components/TextArea.test.tsx +2 -2
  61. package/Types/BaseDatabase/SortOrder.ts +9 -0
  62. package/Types/Email/EmailTemplateType.ts +5 -0
  63. package/Types/NotificationRule/NotificationRuleType.ts +1 -0
  64. package/Types/NotificationSetting/NotificationSettingEventType.ts +7 -0
  65. package/Types/Permission.ts +309 -0
  66. package/Types/UserNotification/UserNotificationEventType.ts +1 -0
  67. package/Types/WhatsApp/WhatsAppTemplates.ts +20 -0
  68. package/Types/Workspace/NotificationRules/EventType.ts +1 -0
  69. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +32 -3
  70. package/UI/Components/Accordion/Accordion.tsx +20 -2
  71. package/UI/Components/Alerts/Alert.tsx +1 -0
  72. package/UI/Components/Button/Button.tsx +29 -0
  73. package/UI/Components/CardSelect/CardSelect.tsx +5 -1
  74. package/UI/Components/Checkbox/Checkbox.tsx +7 -3
  75. package/UI/Components/ColorCircle/ColorCircle.tsx +2 -0
  76. package/UI/Components/ColorViewer/ColorViewer.tsx +19 -3
  77. package/UI/Components/CopyableButton/CopyableButton.tsx +22 -5
  78. package/UI/Components/Detail/Detail.tsx +1 -1
  79. package/UI/Components/Dropdown/Dropdown.tsx +14 -1
  80. package/UI/Components/Forms/Fields/FormField.tsx +28 -0
  81. package/UI/Components/FullPageModal/FullPageModal.tsx +35 -4
  82. package/UI/Components/Input/Input.tsx +14 -2
  83. package/UI/Components/Link/Link.tsx +1 -0
  84. package/UI/Components/Loader/Loader.tsx +8 -2
  85. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +76 -1
  86. package/UI/Components/Modal/Modal.tsx +47 -3
  87. package/UI/Components/ModelTable/BaseModelTable.tsx +42 -1
  88. package/UI/Components/MoreMenu/MoreMenu.tsx +84 -2
  89. package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +30 -8
  90. package/UI/Components/Pagination/Pagination.tsx +113 -8
  91. package/UI/Components/ProgressBar/ProgressBar.tsx +12 -2
  92. package/UI/Components/Radio/Radio.tsx +21 -3
  93. package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +54 -27
  94. package/UI/Components/StatusBubble/StatusBubble.tsx +7 -2
  95. package/UI/Components/Table/TableHeader.tsx +20 -3
  96. package/UI/Components/Tabs/Tab.tsx +16 -1
  97. package/UI/Components/Tabs/Tabs.tsx +12 -1
  98. package/UI/Components/TextArea/TextArea.tsx +12 -2
  99. package/UI/Components/Toggle/Toggle.tsx +14 -3
  100. package/UI/Components/Tooltip/Tooltip.tsx +11 -1
  101. package/UI/Components/TopAlert/TopAlert.tsx +2 -0
  102. package/build/dist/Models/DatabaseModels/Alert.js +77 -0
  103. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  104. package/build/dist/Models/DatabaseModels/AlertEpisode.js +1225 -0
  105. package/build/dist/Models/DatabaseModels/AlertEpisode.js.map +1 -0
  106. package/build/dist/Models/DatabaseModels/AlertEpisodeFeed.js +553 -0
  107. package/build/dist/Models/DatabaseModels/AlertEpisodeFeed.js.map +1 -0
  108. package/build/dist/Models/DatabaseModels/AlertEpisodeInternalNote.js +467 -0
  109. package/build/dist/Models/DatabaseModels/AlertEpisodeInternalNote.js.map +1 -0
  110. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js +607 -0
  111. package/build/dist/Models/DatabaseModels/AlertEpisodeMember.js.map +1 -0
  112. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js +437 -0
  113. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerTeam.js.map +1 -0
  114. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js +436 -0
  115. package/build/dist/Models/DatabaseModels/AlertEpisodeOwnerUser.js.map +1 -0
  116. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +546 -0
  117. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -0
  118. package/build/dist/Models/DatabaseModels/AlertFeed.js +1 -0
  119. package/build/dist/Models/DatabaseModels/AlertFeed.js.map +1 -1
  120. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +1437 -0
  121. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -0
  122. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  123. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  124. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +69 -0
  125. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  126. package/build/dist/Models/DatabaseModels/StatusPageDomain.js +2 -0
  127. package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
  128. package/build/dist/Models/DatabaseModels/WorkspaceNotificationLog.js +58 -0
  129. package/build/dist/Models/DatabaseModels/WorkspaceNotificationLog.js.map +1 -1
  130. package/build/dist/Server/API/SlackAPI.js +18 -0
  131. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  132. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768938069147-MigrationName.js +266 -0
  133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768938069147-MigrationName.js.map +1 -0
  134. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769125561322-MigrationName.js +20 -0
  135. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769125561322-MigrationName.js.map +1 -0
  136. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769170578688-MigrationName.js +16 -0
  137. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769170578688-MigrationName.js.map +1 -0
  138. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769172358833-MigrationName.js +68 -0
  139. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769172358833-MigrationName.js.map +1 -0
  140. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769176450526-MigrationName.js +30 -0
  141. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769176450526-MigrationName.js.map +1 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769190495840-MigrationName.js +18 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769190495840-MigrationName.js.map +1 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769199303656-MigrationName.js +16 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769199303656-MigrationName.js.map +1 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769202898645-MigrationName.js +16 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769202898645-MigrationName.js.map +1 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428619414-MigrationName.js +18 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428619414-MigrationName.js.map +1 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428821686-MigrationName.js +22 -0
  151. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769428821686-MigrationName.js.map +1 -0
  152. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
  153. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  154. package/build/dist/Server/Services/AlertEpisodeFeedService.js +83 -0
  155. package/build/dist/Server/Services/AlertEpisodeFeedService.js.map +1 -0
  156. package/build/dist/Server/Services/AlertEpisodeInternalNoteService.js +70 -0
  157. package/build/dist/Server/Services/AlertEpisodeInternalNoteService.js.map +1 -0
  158. package/build/dist/Server/Services/AlertEpisodeMemberService.js +256 -0
  159. package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -0
  160. package/build/dist/Server/Services/AlertEpisodeOwnerTeamService.js +9 -0
  161. package/build/dist/Server/Services/AlertEpisodeOwnerTeamService.js.map +1 -0
  162. package/build/dist/Server/Services/AlertEpisodeOwnerUserService.js +9 -0
  163. package/build/dist/Server/Services/AlertEpisodeOwnerUserService.js.map +1 -0
  164. package/build/dist/Server/Services/AlertEpisodeService.js +885 -0
  165. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -0
  166. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +494 -0
  167. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -0
  168. package/build/dist/Server/Services/AlertGroupingEngineService.js +893 -0
  169. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -0
  170. package/build/dist/Server/Services/AlertGroupingRuleService.js +13 -0
  171. package/build/dist/Server/Services/AlertGroupingRuleService.js.map +1 -0
  172. package/build/dist/Server/Services/AlertService.js +11 -0
  173. package/build/dist/Server/Services/AlertService.js.map +1 -1
  174. package/build/dist/Server/Services/CallService.js +11 -10
  175. package/build/dist/Server/Services/CallService.js.map +1 -1
  176. package/build/dist/Server/Services/Index.js +18 -0
  177. package/build/dist/Server/Services/Index.js.map +1 -1
  178. package/build/dist/Server/Services/MailService.js +3 -0
  179. package/build/dist/Server/Services/MailService.js.map +1 -1
  180. package/build/dist/Server/Services/OnCallDutyPolicyService.js +3 -0
  181. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  182. package/build/dist/Server/Services/SmsService.js +11 -10
  183. package/build/dist/Server/Services/SmsService.js.map +1 -1
  184. package/build/dist/Server/Services/UserNotificationSettingService.js +9 -0
  185. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  186. package/build/dist/Server/Services/WhatsAppService.js +3 -0
  187. package/build/dist/Server/Services/WhatsAppService.js.map +1 -1
  188. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +25 -0
  189. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  190. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +4 -2
  191. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  192. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +8 -0
  193. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  194. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js +17 -0
  195. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js.map +1 -1
  196. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +545 -0
  197. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -0
  198. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +13 -0
  199. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  200. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +10 -0
  201. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
  202. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +651 -0
  203. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -0
  204. package/build/dist/Server/Utils/Workspace/Slack/Messages/AlertEpisode.js +100 -0
  205. package/build/dist/Server/Utils/Workspace/Slack/Messages/AlertEpisode.js.map +1 -0
  206. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/AlertEpisode.js +70 -0
  207. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/AlertEpisode.js.map +1 -0
  208. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js +165 -0
  209. package/build/dist/Tests/Server/Services/AlertEpisodeMemberService.test.js.map +1 -0
  210. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js +193 -0
  211. package/build/dist/Tests/Server/Services/AlertEpisodeService.test.js.map +1 -0
  212. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js +412 -0
  213. package/build/dist/Tests/Server/Services/AlertGroupingEngineService.test.js.map +1 -0
  214. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js +308 -0
  215. package/build/dist/Tests/Server/Services/AlertGroupingRuleService.test.js.map +1 -0
  216. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +1 -1
  217. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
  218. package/build/dist/Tests/UI/Components/Input.test.js +1 -1
  219. package/build/dist/Tests/UI/Components/Input.test.js.map +1 -1
  220. package/build/dist/Tests/UI/Components/TextArea.test.js +2 -2
  221. package/build/dist/Tests/UI/Components/TextArea.test.js.map +1 -1
  222. package/build/dist/Types/BaseDatabase/SortOrder.js +5 -0
  223. package/build/dist/Types/BaseDatabase/SortOrder.js.map +1 -1
  224. package/build/dist/Types/Email/EmailTemplateType.js +4 -0
  225. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  226. package/build/dist/Types/NotificationRule/NotificationRuleType.js +1 -0
  227. package/build/dist/Types/NotificationRule/NotificationRuleType.js.map +1 -1
  228. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +5 -0
  229. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  230. package/build/dist/Types/Permission.js +264 -0
  231. package/build/dist/Types/Permission.js.map +1 -1
  232. package/build/dist/Types/UserNotification/UserNotificationEventType.js +1 -0
  233. package/build/dist/Types/UserNotification/UserNotificationEventType.js.map +1 -1
  234. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +12 -0
  235. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
  236. package/build/dist/Types/Workspace/NotificationRules/EventType.js +1 -0
  237. package/build/dist/Types/Workspace/NotificationRules/EventType.js.map +1 -1
  238. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +28 -3
  239. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  240. package/build/dist/UI/Components/Accordion/Accordion.js +10 -3
  241. package/build/dist/UI/Components/Accordion/Accordion.js.map +1 -1
  242. package/build/dist/UI/Components/Alerts/Alert.js +1 -1
  243. package/build/dist/UI/Components/Alerts/Alert.js.map +1 -1
  244. package/build/dist/UI/Components/Button/Button.js +8 -2
  245. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  246. package/build/dist/UI/Components/CardSelect/CardSelect.js +1 -1
  247. package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
  248. package/build/dist/UI/Components/Checkbox/Checkbox.js +2 -2
  249. package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
  250. package/build/dist/UI/Components/ColorCircle/ColorCircle.js +1 -1
  251. package/build/dist/UI/Components/ColorCircle/ColorCircle.js.map +1 -1
  252. package/build/dist/UI/Components/ColorViewer/ColorViewer.js +12 -3
  253. package/build/dist/UI/Components/ColorViewer/ColorViewer.js.map +1 -1
  254. package/build/dist/UI/Components/CopyableButton/CopyableButton.js +12 -5
  255. package/build/dist/UI/Components/CopyableButton/CopyableButton.js.map +1 -1
  256. package/build/dist/UI/Components/Detail/Detail.js +1 -1
  257. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  258. package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -3
  259. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  260. package/build/dist/UI/Components/Forms/Fields/FormField.js +19 -1
  261. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  262. package/build/dist/UI/Components/FullPageModal/FullPageModal.js +24 -5
  263. package/build/dist/UI/Components/FullPageModal/FullPageModal.js.map +1 -1
  264. package/build/dist/UI/Components/Input/Input.js +3 -3
  265. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  266. package/build/dist/UI/Components/Link/Link.js +1 -1
  267. package/build/dist/UI/Components/Link/Link.js.map +1 -1
  268. package/build/dist/UI/Components/Loader/Loader.js +6 -4
  269. package/build/dist/UI/Components/Loader/Loader.js.map +1 -1
  270. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +56 -3
  271. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  272. package/build/dist/UI/Components/Modal/Modal.js +28 -3
  273. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  274. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +23 -1
  275. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  276. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +67 -6
  277. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  278. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +14 -3
  279. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
  280. package/build/dist/UI/Components/Pagination/Pagination.js +69 -13
  281. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  282. package/build/dist/UI/Components/ProgressBar/ProgressBar.js +2 -2
  283. package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
  284. package/build/dist/UI/Components/Radio/Radio.js +8 -5
  285. package/build/dist/UI/Components/Radio/Radio.js.map +1 -1
  286. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -4
  287. package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
  288. package/build/dist/UI/Components/StatusBubble/StatusBubble.js +2 -2
  289. package/build/dist/UI/Components/StatusBubble/StatusBubble.js.map +1 -1
  290. package/build/dist/UI/Components/Table/TableHeader.js +12 -4
  291. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  292. package/build/dist/UI/Components/Tabs/Tab.js +8 -1
  293. package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
  294. package/build/dist/UI/Components/Tabs/Tabs.js +4 -3
  295. package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
  296. package/build/dist/UI/Components/TextArea/TextArea.js +3 -3
  297. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  298. package/build/dist/UI/Components/Toggle/Toggle.js +7 -4
  299. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  300. package/build/dist/UI/Components/Tooltip/Tooltip.js +4 -1
  301. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  302. package/build/dist/UI/Components/TopAlert/TopAlert.js +1 -1
  303. package/build/dist/UI/Components/TopAlert/TopAlert.js.map +1 -1
  304. package/package.json +2 -1
@@ -0,0 +1,1201 @@
1
+ import AlertSeverity from "./AlertSeverity";
2
+ import AlertState from "./AlertState";
3
+ import Label from "./Label";
4
+ import OnCallDutyPolicy from "./OnCallDutyPolicy";
5
+ import Project from "./Project";
6
+ import Team from "./Team";
7
+ import User from "./User";
8
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
9
+ import Route from "../../Types/API/Route";
10
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
11
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
12
+ import AccessControlColumn from "../../Types/Database/AccessControlColumn";
13
+ import ColumnLength from "../../Types/Database/ColumnLength";
14
+ import ColumnType from "../../Types/Database/ColumnType";
15
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
16
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
17
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
18
+ import MultiTenentQueryAllowed from "../../Types/Database/MultiTenentQueryAllowed";
19
+ import TableColumn from "../../Types/Database/TableColumn";
20
+ import TableColumnType from "../../Types/Database/TableColumnType";
21
+ import TableMetadata from "../../Types/Database/TableMetadata";
22
+ import TenantColumn from "../../Types/Database/TenantColumn";
23
+ import IconProp from "../../Types/Icon/IconProp";
24
+ import ObjectID from "../../Types/ObjectID";
25
+ import Permission from "../../Types/Permission";
26
+ import {
27
+ Column,
28
+ Entity,
29
+ Index,
30
+ JoinColumn,
31
+ JoinTable,
32
+ ManyToMany,
33
+ ManyToOne,
34
+ } from "typeorm";
35
+
36
+ export type AlertGroupingRuleType = typeof AlertGroupingRule;
37
+ import AlertGroupingRule from "./AlertGroupingRule";
38
+ import NotificationRuleWorkspaceChannel from "../../Types/Workspace/NotificationRules/NotificationRuleWorkspaceChannel";
39
+
40
+ @EnableDocumentation()
41
+ @AccessControlColumn("labels")
42
+ @MultiTenentQueryAllowed(true)
43
+ @TenantColumn("projectId")
44
+ @TableAccessControl({
45
+ create: [
46
+ Permission.ProjectOwner,
47
+ Permission.ProjectAdmin,
48
+ Permission.ProjectMember,
49
+ Permission.CreateAlertEpisode,
50
+ ],
51
+ read: [
52
+ Permission.ProjectOwner,
53
+ Permission.ProjectAdmin,
54
+ Permission.ProjectMember,
55
+ Permission.ReadAlertEpisode,
56
+ ],
57
+ delete: [
58
+ Permission.ProjectOwner,
59
+ Permission.ProjectAdmin,
60
+ Permission.ProjectMember,
61
+ Permission.DeleteAlertEpisode,
62
+ ],
63
+ update: [
64
+ Permission.ProjectOwner,
65
+ Permission.ProjectAdmin,
66
+ Permission.ProjectMember,
67
+ Permission.EditAlertEpisode,
68
+ ],
69
+ })
70
+ @CrudApiEndpoint(new Route("/alert-episode"))
71
+ @Entity({
72
+ name: "AlertEpisode",
73
+ })
74
+ @EnableWorkflow({
75
+ create: true,
76
+ delete: true,
77
+ update: true,
78
+ read: true,
79
+ })
80
+ @TableMetadata({
81
+ tableName: "AlertEpisode",
82
+ singularName: "Alert Episode",
83
+ pluralName: "Alert Episodes",
84
+ icon: IconProp.Layers,
85
+ tableDescription:
86
+ "Manage alert episodes (groups of related alerts) for your project",
87
+ enableRealtimeEventsOn: {
88
+ create: true,
89
+ update: true,
90
+ delete: true,
91
+ },
92
+ })
93
+ export default class AlertEpisode extends BaseModel {
94
+ @ColumnAccessControl({
95
+ create: [
96
+ Permission.ProjectOwner,
97
+ Permission.ProjectAdmin,
98
+ Permission.ProjectMember,
99
+ Permission.CreateAlertEpisode,
100
+ ],
101
+ read: [
102
+ Permission.ProjectOwner,
103
+ Permission.ProjectAdmin,
104
+ Permission.ProjectMember,
105
+ Permission.ReadAlertEpisode,
106
+ ],
107
+ update: [],
108
+ })
109
+ @TableColumn({
110
+ manyToOneRelationColumn: "projectId",
111
+ type: TableColumnType.Entity,
112
+ modelType: Project,
113
+ title: "Project",
114
+ description: "Relation to Project Resource in which this object belongs",
115
+ })
116
+ @ManyToOne(
117
+ () => {
118
+ return Project;
119
+ },
120
+ {
121
+ eager: false,
122
+ nullable: true,
123
+ onDelete: "CASCADE",
124
+ orphanedRowAction: "nullify",
125
+ },
126
+ )
127
+ @JoinColumn({ name: "projectId" })
128
+ public project?: Project = undefined;
129
+
130
+ @ColumnAccessControl({
131
+ create: [
132
+ Permission.ProjectOwner,
133
+ Permission.ProjectAdmin,
134
+ Permission.ProjectMember,
135
+ Permission.CreateAlertEpisode,
136
+ ],
137
+ read: [
138
+ Permission.ProjectOwner,
139
+ Permission.ProjectAdmin,
140
+ Permission.ProjectMember,
141
+ Permission.ReadAlertEpisode,
142
+ ],
143
+ update: [],
144
+ })
145
+ @Index()
146
+ @TableColumn({
147
+ type: TableColumnType.ObjectID,
148
+ required: true,
149
+ canReadOnRelationQuery: true,
150
+ title: "Project ID",
151
+ description: "ID of your OneUptime Project in which this object belongs",
152
+ })
153
+ @Column({
154
+ type: ColumnType.ObjectID,
155
+ nullable: false,
156
+ transformer: ObjectID.getDatabaseTransformer(),
157
+ })
158
+ public projectId?: ObjectID = undefined;
159
+
160
+ @ColumnAccessControl({
161
+ create: [
162
+ Permission.ProjectOwner,
163
+ Permission.ProjectAdmin,
164
+ Permission.ProjectMember,
165
+ Permission.CreateAlertEpisode,
166
+ ],
167
+ read: [
168
+ Permission.ProjectOwner,
169
+ Permission.ProjectAdmin,
170
+ Permission.ProjectMember,
171
+ Permission.ReadAlertEpisode,
172
+ ],
173
+ update: [
174
+ Permission.ProjectOwner,
175
+ Permission.ProjectAdmin,
176
+ Permission.ProjectMember,
177
+ Permission.EditAlertEpisode,
178
+ ],
179
+ })
180
+ @Index()
181
+ @TableColumn({
182
+ required: true,
183
+ type: TableColumnType.LongText,
184
+ canReadOnRelationQuery: true,
185
+ title: "Title",
186
+ description: "Title of this alert episode",
187
+ })
188
+ @Column({
189
+ nullable: false,
190
+ type: ColumnType.LongText,
191
+ length: ColumnLength.LongText,
192
+ })
193
+ public title?: string = undefined;
194
+
195
+ @ColumnAccessControl({
196
+ create: [
197
+ Permission.ProjectOwner,
198
+ Permission.ProjectAdmin,
199
+ Permission.ProjectMember,
200
+ Permission.CreateAlertEpisode,
201
+ ],
202
+ read: [
203
+ Permission.ProjectOwner,
204
+ Permission.ProjectAdmin,
205
+ Permission.ProjectMember,
206
+ Permission.ReadAlertEpisode,
207
+ ],
208
+ update: [
209
+ Permission.ProjectOwner,
210
+ Permission.ProjectAdmin,
211
+ Permission.ProjectMember,
212
+ Permission.EditAlertEpisode,
213
+ ],
214
+ })
215
+ @TableColumn({
216
+ required: false,
217
+ type: TableColumnType.Markdown,
218
+ title: "Description",
219
+ description:
220
+ "Description of this alert episode. This is in markdown format.",
221
+ })
222
+ @Column({
223
+ nullable: true,
224
+ type: ColumnType.Markdown,
225
+ })
226
+ public description?: string = undefined;
227
+
228
+ @ColumnAccessControl({
229
+ create: [
230
+ Permission.ProjectOwner,
231
+ Permission.ProjectAdmin,
232
+ Permission.ProjectMember,
233
+ Permission.CreateAlertEpisode,
234
+ ],
235
+ read: [
236
+ Permission.ProjectOwner,
237
+ Permission.ProjectAdmin,
238
+ Permission.ProjectMember,
239
+ Permission.ReadAlertEpisode,
240
+ ],
241
+ update: [],
242
+ })
243
+ @Index()
244
+ @TableColumn({
245
+ isDefaultValueColumn: false,
246
+ required: false,
247
+ type: TableColumnType.Number,
248
+ title: "Episode Number",
249
+ description: "Auto-incrementing episode number per project",
250
+ })
251
+ @Column({
252
+ type: ColumnType.Number,
253
+ nullable: true,
254
+ })
255
+ public episodeNumber?: number = undefined;
256
+
257
+ @ColumnAccessControl({
258
+ create: [
259
+ Permission.ProjectOwner,
260
+ Permission.ProjectAdmin,
261
+ Permission.ProjectMember,
262
+ Permission.CreateAlertEpisode,
263
+ ],
264
+ read: [
265
+ Permission.ProjectOwner,
266
+ Permission.ProjectAdmin,
267
+ Permission.ProjectMember,
268
+ Permission.ReadAlertEpisode,
269
+ ],
270
+ update: [
271
+ Permission.ProjectOwner,
272
+ Permission.ProjectAdmin,
273
+ Permission.ProjectMember,
274
+ Permission.EditAlertEpisode,
275
+ ],
276
+ })
277
+ @TableColumn({
278
+ manyToOneRelationColumn: "currentAlertStateId",
279
+ type: TableColumnType.Entity,
280
+ modelType: AlertState,
281
+ title: "Current Alert State",
282
+ description:
283
+ "Current state of this episode. Is the episode acknowledged? or resolved?",
284
+ })
285
+ @ManyToOne(
286
+ () => {
287
+ return AlertState;
288
+ },
289
+ {
290
+ eager: false,
291
+ nullable: true,
292
+ orphanedRowAction: "nullify",
293
+ },
294
+ )
295
+ @JoinColumn({ name: "currentAlertStateId" })
296
+ public currentAlertState?: AlertState = undefined;
297
+
298
+ @ColumnAccessControl({
299
+ create: [
300
+ Permission.ProjectOwner,
301
+ Permission.ProjectAdmin,
302
+ Permission.ProjectMember,
303
+ Permission.CreateAlertEpisode,
304
+ ],
305
+ read: [
306
+ Permission.ProjectOwner,
307
+ Permission.ProjectAdmin,
308
+ Permission.ProjectMember,
309
+ Permission.ReadAlertEpisode,
310
+ ],
311
+ update: [
312
+ Permission.ProjectOwner,
313
+ Permission.ProjectAdmin,
314
+ Permission.ProjectMember,
315
+ Permission.EditAlertEpisode,
316
+ ],
317
+ })
318
+ @Index()
319
+ @TableColumn({
320
+ type: TableColumnType.ObjectID,
321
+ required: true,
322
+ isDefaultValueColumn: true,
323
+ title: "Current Alert State ID",
324
+ description: "Current Alert State ID",
325
+ })
326
+ @Column({
327
+ type: ColumnType.ObjectID,
328
+ nullable: false,
329
+ transformer: ObjectID.getDatabaseTransformer(),
330
+ })
331
+ public currentAlertStateId?: ObjectID = undefined;
332
+
333
+ @ColumnAccessControl({
334
+ create: [
335
+ Permission.ProjectOwner,
336
+ Permission.ProjectAdmin,
337
+ Permission.ProjectMember,
338
+ Permission.CreateAlertEpisode,
339
+ ],
340
+ read: [
341
+ Permission.ProjectOwner,
342
+ Permission.ProjectAdmin,
343
+ Permission.ProjectMember,
344
+ Permission.ReadAlertEpisode,
345
+ ],
346
+ update: [
347
+ Permission.ProjectOwner,
348
+ Permission.ProjectAdmin,
349
+ Permission.ProjectMember,
350
+ Permission.EditAlertEpisode,
351
+ ],
352
+ })
353
+ @TableColumn({
354
+ manyToOneRelationColumn: "alertSeverityId",
355
+ type: TableColumnType.Entity,
356
+ modelType: AlertSeverity,
357
+ title: "Alert Severity",
358
+ description:
359
+ "High-water mark severity of this episode. Represents the highest severity among all member alerts.",
360
+ })
361
+ @ManyToOne(
362
+ () => {
363
+ return AlertSeverity;
364
+ },
365
+ {
366
+ eager: false,
367
+ nullable: true,
368
+ orphanedRowAction: "nullify",
369
+ },
370
+ )
371
+ @JoinColumn({ name: "alertSeverityId" })
372
+ public alertSeverity?: AlertSeverity = undefined;
373
+
374
+ @ColumnAccessControl({
375
+ create: [
376
+ Permission.ProjectOwner,
377
+ Permission.ProjectAdmin,
378
+ Permission.ProjectMember,
379
+ Permission.CreateAlertEpisode,
380
+ ],
381
+ read: [
382
+ Permission.ProjectOwner,
383
+ Permission.ProjectAdmin,
384
+ Permission.ProjectMember,
385
+ Permission.ReadAlertEpisode,
386
+ ],
387
+ update: [
388
+ Permission.ProjectOwner,
389
+ Permission.ProjectAdmin,
390
+ Permission.ProjectMember,
391
+ Permission.EditAlertEpisode,
392
+ ],
393
+ })
394
+ @Index()
395
+ @TableColumn({
396
+ type: TableColumnType.ObjectID,
397
+ required: false,
398
+ title: "Alert Severity ID",
399
+ description: "Alert Severity ID",
400
+ })
401
+ @Column({
402
+ type: ColumnType.ObjectID,
403
+ nullable: true,
404
+ transformer: ObjectID.getDatabaseTransformer(),
405
+ })
406
+ public alertSeverityId?: ObjectID = undefined;
407
+
408
+ @ColumnAccessControl({
409
+ create: [
410
+ Permission.ProjectOwner,
411
+ Permission.ProjectAdmin,
412
+ Permission.ProjectMember,
413
+ Permission.CreateAlertEpisode,
414
+ ],
415
+ read: [
416
+ Permission.ProjectOwner,
417
+ Permission.ProjectAdmin,
418
+ Permission.ProjectMember,
419
+ Permission.ReadAlertEpisode,
420
+ ],
421
+ update: [
422
+ Permission.ProjectOwner,
423
+ Permission.ProjectAdmin,
424
+ Permission.ProjectMember,
425
+ Permission.EditAlertEpisode,
426
+ ],
427
+ })
428
+ @TableColumn({
429
+ type: TableColumnType.Markdown,
430
+ required: false,
431
+ isDefaultValueColumn: false,
432
+ title: "Root Cause",
433
+ description: "User-documented root cause of this episode",
434
+ })
435
+ @Column({
436
+ type: ColumnType.Markdown,
437
+ nullable: true,
438
+ })
439
+ public rootCause?: string = undefined;
440
+
441
+ @ColumnAccessControl({
442
+ create: [
443
+ Permission.ProjectOwner,
444
+ Permission.ProjectAdmin,
445
+ Permission.ProjectMember,
446
+ Permission.CreateAlertEpisode,
447
+ ],
448
+ read: [
449
+ Permission.ProjectOwner,
450
+ Permission.ProjectAdmin,
451
+ Permission.ProjectMember,
452
+ Permission.ReadAlertEpisode,
453
+ ],
454
+ update: [
455
+ Permission.ProjectOwner,
456
+ Permission.ProjectAdmin,
457
+ Permission.ProjectMember,
458
+ Permission.EditAlertEpisode,
459
+ ],
460
+ })
461
+ @Index()
462
+ @TableColumn({
463
+ type: TableColumnType.Date,
464
+ title: "Last Alert Added At",
465
+ description: "When the last alert was added to this episode",
466
+ })
467
+ @Column({
468
+ type: ColumnType.Date,
469
+ nullable: true,
470
+ unique: false,
471
+ })
472
+ public lastAlertAddedAt?: Date = undefined;
473
+
474
+ @ColumnAccessControl({
475
+ create: [
476
+ Permission.ProjectOwner,
477
+ Permission.ProjectAdmin,
478
+ Permission.ProjectMember,
479
+ Permission.CreateAlertEpisode,
480
+ ],
481
+ read: [
482
+ Permission.ProjectOwner,
483
+ Permission.ProjectAdmin,
484
+ Permission.ProjectMember,
485
+ Permission.ReadAlertEpisode,
486
+ ],
487
+ update: [
488
+ Permission.ProjectOwner,
489
+ Permission.ProjectAdmin,
490
+ Permission.ProjectMember,
491
+ Permission.EditAlertEpisode,
492
+ ],
493
+ })
494
+ @Index()
495
+ @TableColumn({
496
+ type: TableColumnType.Date,
497
+ title: "Resolved At",
498
+ description: "When this episode was resolved",
499
+ })
500
+ @Column({
501
+ type: ColumnType.Date,
502
+ nullable: true,
503
+ unique: false,
504
+ })
505
+ public resolvedAt?: Date = undefined;
506
+
507
+ @ColumnAccessControl({
508
+ create: [
509
+ Permission.ProjectOwner,
510
+ Permission.ProjectAdmin,
511
+ Permission.ProjectMember,
512
+ Permission.CreateAlertEpisode,
513
+ ],
514
+ read: [
515
+ Permission.ProjectOwner,
516
+ Permission.ProjectAdmin,
517
+ Permission.ProjectMember,
518
+ Permission.ReadAlertEpisode,
519
+ ],
520
+ update: [
521
+ Permission.ProjectOwner,
522
+ Permission.ProjectAdmin,
523
+ Permission.ProjectMember,
524
+ Permission.EditAlertEpisode,
525
+ ],
526
+ })
527
+ @TableColumn({
528
+ manyToOneRelationColumn: "assignedToUserId",
529
+ type: TableColumnType.Entity,
530
+ modelType: User,
531
+ title: "Assigned To User",
532
+ description: "User who is assigned to this episode",
533
+ })
534
+ @ManyToOne(
535
+ () => {
536
+ return User;
537
+ },
538
+ {
539
+ eager: false,
540
+ nullable: true,
541
+ onDelete: "SET NULL",
542
+ orphanedRowAction: "nullify",
543
+ },
544
+ )
545
+ @JoinColumn({ name: "assignedToUserId" })
546
+ public assignedToUser?: User = undefined;
547
+
548
+ @ColumnAccessControl({
549
+ create: [
550
+ Permission.ProjectOwner,
551
+ Permission.ProjectAdmin,
552
+ Permission.ProjectMember,
553
+ Permission.CreateAlertEpisode,
554
+ ],
555
+ read: [
556
+ Permission.ProjectOwner,
557
+ Permission.ProjectAdmin,
558
+ Permission.ProjectMember,
559
+ Permission.ReadAlertEpisode,
560
+ ],
561
+ update: [
562
+ Permission.ProjectOwner,
563
+ Permission.ProjectAdmin,
564
+ Permission.ProjectMember,
565
+ Permission.EditAlertEpisode,
566
+ ],
567
+ })
568
+ @Index()
569
+ @TableColumn({
570
+ type: TableColumnType.ObjectID,
571
+ required: false,
572
+ title: "Assigned To User ID",
573
+ description: "User ID who is assigned to this episode",
574
+ })
575
+ @Column({
576
+ type: ColumnType.ObjectID,
577
+ nullable: true,
578
+ transformer: ObjectID.getDatabaseTransformer(),
579
+ })
580
+ public assignedToUserId?: ObjectID = undefined;
581
+
582
+ @ColumnAccessControl({
583
+ create: [
584
+ Permission.ProjectOwner,
585
+ Permission.ProjectAdmin,
586
+ Permission.ProjectMember,
587
+ Permission.CreateAlertEpisode,
588
+ ],
589
+ read: [
590
+ Permission.ProjectOwner,
591
+ Permission.ProjectAdmin,
592
+ Permission.ProjectMember,
593
+ Permission.ReadAlertEpisode,
594
+ ],
595
+ update: [
596
+ Permission.ProjectOwner,
597
+ Permission.ProjectAdmin,
598
+ Permission.ProjectMember,
599
+ Permission.EditAlertEpisode,
600
+ ],
601
+ })
602
+ @TableColumn({
603
+ manyToOneRelationColumn: "assignedToTeamId",
604
+ type: TableColumnType.Entity,
605
+ modelType: Team,
606
+ title: "Assigned To Team",
607
+ description: "Team that is assigned to this episode",
608
+ })
609
+ @ManyToOne(
610
+ () => {
611
+ return Team;
612
+ },
613
+ {
614
+ eager: false,
615
+ nullable: true,
616
+ onDelete: "SET NULL",
617
+ orphanedRowAction: "nullify",
618
+ },
619
+ )
620
+ @JoinColumn({ name: "assignedToTeamId" })
621
+ public assignedToTeam?: Team = undefined;
622
+
623
+ @ColumnAccessControl({
624
+ create: [
625
+ Permission.ProjectOwner,
626
+ Permission.ProjectAdmin,
627
+ Permission.ProjectMember,
628
+ Permission.CreateAlertEpisode,
629
+ ],
630
+ read: [
631
+ Permission.ProjectOwner,
632
+ Permission.ProjectAdmin,
633
+ Permission.ProjectMember,
634
+ Permission.ReadAlertEpisode,
635
+ ],
636
+ update: [
637
+ Permission.ProjectOwner,
638
+ Permission.ProjectAdmin,
639
+ Permission.ProjectMember,
640
+ Permission.EditAlertEpisode,
641
+ ],
642
+ })
643
+ @Index()
644
+ @TableColumn({
645
+ type: TableColumnType.ObjectID,
646
+ required: false,
647
+ title: "Assigned To Team ID",
648
+ description: "Team ID that is assigned to this episode",
649
+ })
650
+ @Column({
651
+ type: ColumnType.ObjectID,
652
+ nullable: true,
653
+ transformer: ObjectID.getDatabaseTransformer(),
654
+ })
655
+ public assignedToTeamId?: ObjectID = undefined;
656
+
657
+ @ColumnAccessControl({
658
+ create: [
659
+ Permission.ProjectOwner,
660
+ Permission.ProjectAdmin,
661
+ Permission.ProjectMember,
662
+ Permission.CreateAlertEpisode,
663
+ ],
664
+ read: [
665
+ Permission.ProjectOwner,
666
+ Permission.ProjectAdmin,
667
+ Permission.ProjectMember,
668
+ Permission.ReadAlertEpisode,
669
+ ],
670
+ update: [
671
+ Permission.ProjectOwner,
672
+ Permission.ProjectAdmin,
673
+ Permission.ProjectMember,
674
+ Permission.EditAlertEpisode,
675
+ ],
676
+ })
677
+ @TableColumn({
678
+ manyToOneRelationColumn: "alertGroupingRuleId",
679
+ type: TableColumnType.Entity,
680
+ modelType: AlertGroupingRule,
681
+ title: "Alert Grouping Rule",
682
+ description:
683
+ "The grouping rule that created this episode (null for manually created episodes)",
684
+ })
685
+ @ManyToOne(
686
+ () => {
687
+ return AlertGroupingRule;
688
+ },
689
+ {
690
+ eager: false,
691
+ nullable: true,
692
+ onDelete: "SET NULL",
693
+ orphanedRowAction: "nullify",
694
+ },
695
+ )
696
+ @JoinColumn({ name: "alertGroupingRuleId" })
697
+ public alertGroupingRule?: AlertGroupingRule = undefined;
698
+
699
+ @ColumnAccessControl({
700
+ create: [
701
+ Permission.ProjectOwner,
702
+ Permission.ProjectAdmin,
703
+ Permission.ProjectMember,
704
+ Permission.CreateAlertEpisode,
705
+ ],
706
+ read: [
707
+ Permission.ProjectOwner,
708
+ Permission.ProjectAdmin,
709
+ Permission.ProjectMember,
710
+ Permission.ReadAlertEpisode,
711
+ ],
712
+ update: [
713
+ Permission.ProjectOwner,
714
+ Permission.ProjectAdmin,
715
+ Permission.ProjectMember,
716
+ Permission.EditAlertEpisode,
717
+ ],
718
+ })
719
+ @Index()
720
+ @TableColumn({
721
+ type: TableColumnType.ObjectID,
722
+ required: false,
723
+ title: "Alert Grouping Rule ID",
724
+ description: "Alert Grouping Rule ID that created this episode",
725
+ })
726
+ @Column({
727
+ type: ColumnType.ObjectID,
728
+ nullable: true,
729
+ transformer: ObjectID.getDatabaseTransformer(),
730
+ })
731
+ public alertGroupingRuleId?: ObjectID = undefined;
732
+
733
+ @ColumnAccessControl({
734
+ create: [
735
+ Permission.ProjectOwner,
736
+ Permission.ProjectAdmin,
737
+ Permission.ProjectMember,
738
+ Permission.CreateAlertEpisode,
739
+ ],
740
+ read: [
741
+ Permission.ProjectOwner,
742
+ Permission.ProjectAdmin,
743
+ Permission.ProjectMember,
744
+ Permission.ReadAlertEpisode,
745
+ ],
746
+ update: [
747
+ Permission.ProjectOwner,
748
+ Permission.ProjectAdmin,
749
+ Permission.ProjectMember,
750
+ Permission.EditAlertEpisode,
751
+ ],
752
+ })
753
+ @TableColumn({
754
+ required: false,
755
+ type: TableColumnType.EntityArray,
756
+ modelType: OnCallDutyPolicy,
757
+ title: "On-Call Duty Policies",
758
+ description: "List of on-call duty policies to execute for this episode.",
759
+ })
760
+ @ManyToMany(
761
+ () => {
762
+ return OnCallDutyPolicy;
763
+ },
764
+ { eager: false },
765
+ )
766
+ @JoinTable({
767
+ name: "AlertEpisodeOnCallDutyPolicy",
768
+ inverseJoinColumn: {
769
+ name: "onCallDutyPolicyId",
770
+ referencedColumnName: "_id",
771
+ },
772
+ joinColumn: {
773
+ name: "alertEpisodeId",
774
+ referencedColumnName: "_id",
775
+ },
776
+ })
777
+ public onCallDutyPolicies?: Array<OnCallDutyPolicy> = undefined;
778
+
779
+ @ColumnAccessControl({
780
+ create: [],
781
+ read: [
782
+ Permission.ProjectOwner,
783
+ Permission.ProjectAdmin,
784
+ Permission.ProjectMember,
785
+ Permission.ReadAlertEpisode,
786
+ ],
787
+ update: [],
788
+ })
789
+ @Index()
790
+ @TableColumn({
791
+ type: TableColumnType.Boolean,
792
+ required: true,
793
+ isDefaultValueColumn: true,
794
+ title: "Is On-Call Policy Executed?",
795
+ description:
796
+ "Whether the on-call policy has been executed for this episode",
797
+ defaultValue: false,
798
+ })
799
+ @Column({
800
+ type: ColumnType.Boolean,
801
+ nullable: false,
802
+ default: false,
803
+ })
804
+ public isOnCallPolicyExecuted?: boolean = undefined;
805
+
806
+ @ColumnAccessControl({
807
+ create: [],
808
+ read: [
809
+ Permission.ProjectOwner,
810
+ Permission.ProjectAdmin,
811
+ Permission.ProjectMember,
812
+ Permission.ReadAlertEpisode,
813
+ ],
814
+ update: [],
815
+ })
816
+ @Index()
817
+ @TableColumn({
818
+ type: TableColumnType.Number,
819
+ required: true,
820
+ isDefaultValueColumn: true,
821
+ title: "Alert Count",
822
+ description: "Denormalized count of alerts in this episode",
823
+ defaultValue: 0,
824
+ })
825
+ @Column({
826
+ type: ColumnType.Number,
827
+ nullable: false,
828
+ default: 0,
829
+ })
830
+ public alertCount?: number = undefined;
831
+
832
+ @ColumnAccessControl({
833
+ create: [
834
+ Permission.ProjectOwner,
835
+ Permission.ProjectAdmin,
836
+ Permission.ProjectMember,
837
+ Permission.CreateAlertEpisode,
838
+ ],
839
+ read: [
840
+ Permission.ProjectOwner,
841
+ Permission.ProjectAdmin,
842
+ Permission.ProjectMember,
843
+ Permission.ReadAlertEpisode,
844
+ ],
845
+ update: [],
846
+ })
847
+ @TableColumn({
848
+ required: false,
849
+ type: TableColumnType.LongText,
850
+ title: "Title Template",
851
+ description:
852
+ "Template used to generate the episode title. Stored for dynamic variable updates.",
853
+ })
854
+ @Column({
855
+ type: ColumnType.LongText,
856
+ nullable: true,
857
+ })
858
+ public titleTemplate?: string = undefined;
859
+
860
+ @ColumnAccessControl({
861
+ create: [
862
+ Permission.ProjectOwner,
863
+ Permission.ProjectAdmin,
864
+ Permission.ProjectMember,
865
+ Permission.CreateAlertEpisode,
866
+ ],
867
+ read: [
868
+ Permission.ProjectOwner,
869
+ Permission.ProjectAdmin,
870
+ Permission.ProjectMember,
871
+ Permission.ReadAlertEpisode,
872
+ ],
873
+ update: [],
874
+ })
875
+ @TableColumn({
876
+ required: false,
877
+ type: TableColumnType.LongText,
878
+ title: "Description Template",
879
+ description:
880
+ "Template used to generate the episode description. Stored for dynamic variable updates.",
881
+ })
882
+ @Column({
883
+ type: ColumnType.LongText,
884
+ nullable: true,
885
+ })
886
+ public descriptionTemplate?: string = undefined;
887
+
888
+ @ColumnAccessControl({
889
+ create: [
890
+ Permission.ProjectOwner,
891
+ Permission.ProjectAdmin,
892
+ Permission.ProjectMember,
893
+ Permission.CreateAlertEpisode,
894
+ ],
895
+ read: [
896
+ Permission.ProjectOwner,
897
+ Permission.ProjectAdmin,
898
+ Permission.ProjectMember,
899
+ Permission.ReadAlertEpisode,
900
+ ],
901
+ update: [],
902
+ })
903
+ @Index()
904
+ @TableColumn({
905
+ type: TableColumnType.Boolean,
906
+ required: true,
907
+ isDefaultValueColumn: true,
908
+ title: "Is Manually Created?",
909
+ description:
910
+ "Whether this episode was manually created vs auto-created by a rule",
911
+ defaultValue: false,
912
+ })
913
+ @Column({
914
+ type: ColumnType.Boolean,
915
+ nullable: false,
916
+ default: false,
917
+ })
918
+ public isManuallyCreated?: boolean = undefined;
919
+
920
+ @ColumnAccessControl({
921
+ create: [
922
+ Permission.ProjectOwner,
923
+ Permission.ProjectAdmin,
924
+ Permission.ProjectMember,
925
+ Permission.CreateAlertEpisode,
926
+ ],
927
+ read: [
928
+ Permission.ProjectOwner,
929
+ Permission.ProjectAdmin,
930
+ Permission.ProjectMember,
931
+ Permission.ReadAlertEpisode,
932
+ ],
933
+ update: [
934
+ Permission.ProjectOwner,
935
+ Permission.ProjectAdmin,
936
+ Permission.ProjectMember,
937
+ Permission.EditAlertEpisode,
938
+ ],
939
+ })
940
+ @TableColumn({
941
+ required: false,
942
+ type: TableColumnType.EntityArray,
943
+ modelType: Label,
944
+ title: "Labels",
945
+ description:
946
+ "Relation to Labels Array where this object is categorized in.",
947
+ })
948
+ @ManyToMany(
949
+ () => {
950
+ return Label;
951
+ },
952
+ { eager: false },
953
+ )
954
+ @JoinTable({
955
+ name: "AlertEpisodeLabel",
956
+ inverseJoinColumn: {
957
+ name: "labelId",
958
+ referencedColumnName: "_id",
959
+ },
960
+ joinColumn: {
961
+ name: "alertEpisodeId",
962
+ referencedColumnName: "_id",
963
+ },
964
+ })
965
+ public labels?: Array<Label> = undefined;
966
+
967
+ @ColumnAccessControl({
968
+ create: [
969
+ Permission.ProjectOwner,
970
+ Permission.ProjectAdmin,
971
+ Permission.ProjectMember,
972
+ Permission.CreateAlertEpisode,
973
+ ],
974
+ read: [
975
+ Permission.ProjectOwner,
976
+ Permission.ProjectAdmin,
977
+ Permission.ProjectMember,
978
+ Permission.ReadAlertEpisode,
979
+ ],
980
+ update: [],
981
+ })
982
+ @TableColumn({
983
+ manyToOneRelationColumn: "createdByUserId",
984
+ type: TableColumnType.Entity,
985
+ modelType: User,
986
+ title: "Created by User",
987
+ description:
988
+ "Relation to User who created this object (if this object was created by a User)",
989
+ })
990
+ @ManyToOne(
991
+ () => {
992
+ return User;
993
+ },
994
+ {
995
+ eager: false,
996
+ nullable: true,
997
+ onDelete: "SET NULL",
998
+ orphanedRowAction: "nullify",
999
+ },
1000
+ )
1001
+ @JoinColumn({ name: "createdByUserId" })
1002
+ public createdByUser?: User = undefined;
1003
+
1004
+ @ColumnAccessControl({
1005
+ create: [
1006
+ Permission.ProjectOwner,
1007
+ Permission.ProjectAdmin,
1008
+ Permission.ProjectMember,
1009
+ Permission.CreateAlertEpisode,
1010
+ ],
1011
+ read: [
1012
+ Permission.ProjectOwner,
1013
+ Permission.ProjectAdmin,
1014
+ Permission.ProjectMember,
1015
+ Permission.ReadAlertEpisode,
1016
+ ],
1017
+ update: [],
1018
+ })
1019
+ @TableColumn({
1020
+ type: TableColumnType.ObjectID,
1021
+ title: "Created by User ID",
1022
+ description:
1023
+ "User ID who created this object (if this object was created by a User)",
1024
+ })
1025
+ @Column({
1026
+ type: ColumnType.ObjectID,
1027
+ nullable: true,
1028
+ transformer: ObjectID.getDatabaseTransformer(),
1029
+ })
1030
+ public createdByUserId?: ObjectID = undefined;
1031
+
1032
+ @ColumnAccessControl({
1033
+ create: [],
1034
+ read: [],
1035
+ update: [],
1036
+ })
1037
+ @TableColumn({
1038
+ manyToOneRelationColumn: "deletedByUserId",
1039
+ type: TableColumnType.Entity,
1040
+ title: "Deleted by User",
1041
+ modelType: User,
1042
+ description:
1043
+ "Relation to User who deleted this object (if this object was deleted by a User)",
1044
+ })
1045
+ @ManyToOne(
1046
+ () => {
1047
+ return User;
1048
+ },
1049
+ {
1050
+ cascade: false,
1051
+ eager: false,
1052
+ nullable: true,
1053
+ onDelete: "SET NULL",
1054
+ orphanedRowAction: "nullify",
1055
+ },
1056
+ )
1057
+ @JoinColumn({ name: "deletedByUserId" })
1058
+ public deletedByUser?: User = undefined;
1059
+
1060
+ @ColumnAccessControl({
1061
+ create: [],
1062
+ read: [],
1063
+ update: [],
1064
+ })
1065
+ @TableColumn({
1066
+ type: TableColumnType.ObjectID,
1067
+ title: "Deleted by User ID",
1068
+ description:
1069
+ "User ID who deleted this object (if this object was deleted by a User)",
1070
+ })
1071
+ @Column({
1072
+ type: ColumnType.ObjectID,
1073
+ nullable: true,
1074
+ transformer: ObjectID.getDatabaseTransformer(),
1075
+ })
1076
+ public deletedByUserId?: ObjectID = undefined;
1077
+
1078
+ @ColumnAccessControl({
1079
+ create: [],
1080
+ read: [
1081
+ Permission.ProjectOwner,
1082
+ Permission.ProjectAdmin,
1083
+ Permission.ProjectMember,
1084
+ Permission.ReadAlertEpisode,
1085
+ ],
1086
+ update: [],
1087
+ })
1088
+ @Index()
1089
+ @TableColumn({
1090
+ type: TableColumnType.Boolean,
1091
+ required: true,
1092
+ isDefaultValueColumn: true,
1093
+ title: "Are Owners Notified Of Episode Creation?",
1094
+ description: "Are owners notified when this episode is created?",
1095
+ defaultValue: false,
1096
+ })
1097
+ @Column({
1098
+ type: ColumnType.Boolean,
1099
+ nullable: false,
1100
+ default: false,
1101
+ })
1102
+ public isOwnerNotifiedOfEpisodeCreation?: boolean = undefined;
1103
+
1104
+ @ColumnAccessControl({
1105
+ create: [
1106
+ Permission.ProjectOwner,
1107
+ Permission.ProjectAdmin,
1108
+ Permission.ProjectMember,
1109
+ Permission.CreateAlertEpisode,
1110
+ ],
1111
+ read: [
1112
+ Permission.ProjectOwner,
1113
+ Permission.ProjectAdmin,
1114
+ Permission.ProjectMember,
1115
+ Permission.ReadAlertEpisode,
1116
+ ],
1117
+ update: [],
1118
+ })
1119
+ @Index()
1120
+ @TableColumn({
1121
+ type: TableColumnType.LongText,
1122
+ required: false,
1123
+ title: "Grouping Key",
1124
+ description:
1125
+ "Key used for grouping alerts into this episode. Generated from groupByFields of the matching rule.",
1126
+ })
1127
+ @Column({
1128
+ type: ColumnType.LongText,
1129
+ nullable: true,
1130
+ length: ColumnLength.LongText,
1131
+ })
1132
+ public groupingKey?: string = undefined;
1133
+
1134
+ @ColumnAccessControl({
1135
+ create: [
1136
+ Permission.ProjectOwner,
1137
+ Permission.ProjectAdmin,
1138
+ Permission.ProjectMember,
1139
+ Permission.CreateAlertEpisode,
1140
+ ],
1141
+ read: [
1142
+ Permission.ProjectOwner,
1143
+ Permission.ProjectAdmin,
1144
+ Permission.ProjectMember,
1145
+ Permission.ReadAlertEpisode,
1146
+ ],
1147
+ update: [
1148
+ Permission.ProjectOwner,
1149
+ Permission.ProjectAdmin,
1150
+ Permission.ProjectMember,
1151
+ Permission.EditAlertEpisode,
1152
+ ],
1153
+ })
1154
+ @TableColumn({
1155
+ type: TableColumnType.Markdown,
1156
+ required: false,
1157
+ isDefaultValueColumn: false,
1158
+ title: "Remediation Notes",
1159
+ description: "User-documented remediation steps and notes for this episode",
1160
+ })
1161
+ @Column({
1162
+ type: ColumnType.Markdown,
1163
+ nullable: true,
1164
+ })
1165
+ public remediationNotes?: string = undefined;
1166
+
1167
+ @ColumnAccessControl({
1168
+ create: [
1169
+ Permission.ProjectOwner,
1170
+ Permission.ProjectAdmin,
1171
+ Permission.ProjectMember,
1172
+ Permission.CreateAlertEpisode,
1173
+ ],
1174
+ read: [
1175
+ Permission.ProjectOwner,
1176
+ Permission.ProjectAdmin,
1177
+ Permission.ProjectMember,
1178
+ Permission.ReadAlertEpisode,
1179
+ ],
1180
+ update: [
1181
+ Permission.ProjectOwner,
1182
+ Permission.ProjectAdmin,
1183
+ Permission.ProjectMember,
1184
+ Permission.EditAlertEpisode,
1185
+ ],
1186
+ })
1187
+ @TableColumn({
1188
+ type: TableColumnType.JSON,
1189
+ required: false,
1190
+ isDefaultValueColumn: false,
1191
+ title: "Post Updates to Workspace Channels",
1192
+ description:
1193
+ "Workspace channels to post episode updates to (e.g., Slack, Microsoft Teams)",
1194
+ })
1195
+ @Column({
1196
+ type: ColumnType.JSON,
1197
+ nullable: true,
1198
+ })
1199
+ public postUpdatesToWorkspaceChannels?: Array<NotificationRuleWorkspaceChannel> =
1200
+ undefined;
1201
+ }