@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,1432 @@
1
+ import AlertSeverity from "./AlertSeverity";
2
+ import Label from "./Label";
3
+ import Monitor from "./Monitor";
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 ColumnLength from "../../Types/Database/ColumnLength";
13
+ import ColumnType from "../../Types/Database/ColumnType";
14
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
15
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
16
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
17
+ import TableColumn from "../../Types/Database/TableColumn";
18
+ import TableColumnType from "../../Types/Database/TableColumnType";
19
+ import TableMetadata from "../../Types/Database/TableMetadata";
20
+ import TenantColumn from "../../Types/Database/TenantColumn";
21
+ import IconProp from "../../Types/Icon/IconProp";
22
+ import ObjectID from "../../Types/ObjectID";
23
+ import Permission from "../../Types/Permission";
24
+ import {
25
+ Column,
26
+ Entity,
27
+ Index,
28
+ JoinColumn,
29
+ JoinTable,
30
+ ManyToMany,
31
+ ManyToOne,
32
+ } from "typeorm";
33
+
34
+ export interface AlertGroupingRuleMatchCriteria {
35
+ monitorIds?: Array<string>;
36
+ monitorCustomFields?: Record<string, string>;
37
+ alertSeverityIds?: Array<string>;
38
+ labelIds?: Array<string>;
39
+ alertTitlePattern?: string;
40
+ alertDescriptionPattern?: string;
41
+ telemetryQueryMatch?: boolean;
42
+ }
43
+
44
+ export interface AlertGroupingRuleGroupByFields {
45
+ monitorId?: boolean;
46
+ alertSeverityId?: boolean;
47
+ alertTitle?: boolean;
48
+ telemetryQuery?: boolean;
49
+ customFieldValues?: Array<string>;
50
+ }
51
+
52
+ @EnableDocumentation()
53
+ @TenantColumn("projectId")
54
+ @TableAccessControl({
55
+ create: [
56
+ Permission.ProjectOwner,
57
+ Permission.ProjectAdmin,
58
+ Permission.CreateAlertGroupingRule,
59
+ ],
60
+ read: [
61
+ Permission.ProjectOwner,
62
+ Permission.ProjectAdmin,
63
+ Permission.ProjectMember,
64
+ Permission.ReadAlertGroupingRule,
65
+ ],
66
+ delete: [
67
+ Permission.ProjectOwner,
68
+ Permission.ProjectAdmin,
69
+ Permission.DeleteAlertGroupingRule,
70
+ ],
71
+ update: [
72
+ Permission.ProjectOwner,
73
+ Permission.ProjectAdmin,
74
+ Permission.EditAlertGroupingRule,
75
+ ],
76
+ })
77
+ @CrudApiEndpoint(new Route("/alert-grouping-rule"))
78
+ @Entity({
79
+ name: "AlertGroupingRule",
80
+ })
81
+ @EnableWorkflow({
82
+ create: true,
83
+ delete: true,
84
+ update: true,
85
+ read: true,
86
+ })
87
+ @TableMetadata({
88
+ tableName: "AlertGroupingRule",
89
+ singularName: "Alert Grouping Rule",
90
+ pluralName: "Alert Grouping Rules",
91
+ icon: IconProp.Layers,
92
+ tableDescription:
93
+ "Configure rules for automatically grouping related alerts into episodes",
94
+ })
95
+ export default class AlertGroupingRule extends BaseModel {
96
+ @ColumnAccessControl({
97
+ create: [
98
+ Permission.ProjectOwner,
99
+ Permission.ProjectAdmin,
100
+ Permission.CreateAlertGroupingRule,
101
+ ],
102
+ read: [
103
+ Permission.ProjectOwner,
104
+ Permission.ProjectAdmin,
105
+ Permission.ProjectMember,
106
+ Permission.ReadAlertGroupingRule,
107
+ ],
108
+ update: [],
109
+ })
110
+ @TableColumn({
111
+ manyToOneRelationColumn: "projectId",
112
+ type: TableColumnType.Entity,
113
+ modelType: Project,
114
+ title: "Project",
115
+ description: "Relation to Project Resource in which this object belongs",
116
+ })
117
+ @ManyToOne(
118
+ () => {
119
+ return Project;
120
+ },
121
+ {
122
+ eager: false,
123
+ nullable: true,
124
+ onDelete: "CASCADE",
125
+ orphanedRowAction: "nullify",
126
+ },
127
+ )
128
+ @JoinColumn({ name: "projectId" })
129
+ public project?: Project = undefined;
130
+
131
+ @ColumnAccessControl({
132
+ create: [
133
+ Permission.ProjectOwner,
134
+ Permission.ProjectAdmin,
135
+ Permission.CreateAlertGroupingRule,
136
+ ],
137
+ read: [
138
+ Permission.ProjectOwner,
139
+ Permission.ProjectAdmin,
140
+ Permission.ProjectMember,
141
+ Permission.ReadAlertGroupingRule,
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.CreateAlertGroupingRule,
165
+ ],
166
+ read: [
167
+ Permission.ProjectOwner,
168
+ Permission.ProjectAdmin,
169
+ Permission.ProjectMember,
170
+ Permission.ReadAlertGroupingRule,
171
+ ],
172
+ update: [
173
+ Permission.ProjectOwner,
174
+ Permission.ProjectAdmin,
175
+ Permission.EditAlertGroupingRule,
176
+ ],
177
+ })
178
+ @Index()
179
+ @TableColumn({
180
+ required: true,
181
+ type: TableColumnType.ShortText,
182
+ canReadOnRelationQuery: true,
183
+ title: "Name",
184
+ description: "Name of this alert grouping rule",
185
+ })
186
+ @Column({
187
+ nullable: false,
188
+ type: ColumnType.ShortText,
189
+ length: ColumnLength.ShortText,
190
+ })
191
+ public name?: string = undefined;
192
+
193
+ @ColumnAccessControl({
194
+ create: [
195
+ Permission.ProjectOwner,
196
+ Permission.ProjectAdmin,
197
+ Permission.CreateAlertGroupingRule,
198
+ ],
199
+ read: [
200
+ Permission.ProjectOwner,
201
+ Permission.ProjectAdmin,
202
+ Permission.ProjectMember,
203
+ Permission.ReadAlertGroupingRule,
204
+ ],
205
+ update: [
206
+ Permission.ProjectOwner,
207
+ Permission.ProjectAdmin,
208
+ Permission.EditAlertGroupingRule,
209
+ ],
210
+ })
211
+ @TableColumn({
212
+ required: false,
213
+ type: TableColumnType.LongText,
214
+ title: "Description",
215
+ description: "Description of this alert grouping rule",
216
+ })
217
+ @Column({
218
+ nullable: true,
219
+ type: ColumnType.LongText,
220
+ length: ColumnLength.LongText,
221
+ })
222
+ public description?: string = undefined;
223
+
224
+ @ColumnAccessControl({
225
+ create: [
226
+ Permission.ProjectOwner,
227
+ Permission.ProjectAdmin,
228
+ Permission.CreateAlertGroupingRule,
229
+ ],
230
+ read: [
231
+ Permission.ProjectOwner,
232
+ Permission.ProjectAdmin,
233
+ Permission.ProjectMember,
234
+ Permission.ReadAlertGroupingRule,
235
+ ],
236
+ update: [
237
+ Permission.ProjectOwner,
238
+ Permission.ProjectAdmin,
239
+ Permission.EditAlertGroupingRule,
240
+ ],
241
+ })
242
+ @Index()
243
+ @TableColumn({
244
+ required: true,
245
+ type: TableColumnType.Number,
246
+ title: "Priority",
247
+ description:
248
+ "Priority of this rule. Lower number = higher priority. Rules are evaluated in priority order.",
249
+ defaultValue: 1,
250
+ isDefaultValueColumn: true,
251
+ })
252
+ @Column({
253
+ type: ColumnType.Number,
254
+ nullable: false,
255
+ default: 1,
256
+ })
257
+ public priority?: number = undefined;
258
+
259
+ @ColumnAccessControl({
260
+ create: [
261
+ Permission.ProjectOwner,
262
+ Permission.ProjectAdmin,
263
+ Permission.CreateAlertGroupingRule,
264
+ ],
265
+ read: [
266
+ Permission.ProjectOwner,
267
+ Permission.ProjectAdmin,
268
+ Permission.ProjectMember,
269
+ Permission.ReadAlertGroupingRule,
270
+ ],
271
+ update: [
272
+ Permission.ProjectOwner,
273
+ Permission.ProjectAdmin,
274
+ Permission.EditAlertGroupingRule,
275
+ ],
276
+ })
277
+ @Index()
278
+ @TableColumn({
279
+ required: true,
280
+ type: TableColumnType.Boolean,
281
+ title: "Is Enabled",
282
+ description: "Whether this rule is enabled",
283
+ defaultValue: true,
284
+ isDefaultValueColumn: true,
285
+ })
286
+ @Column({
287
+ type: ColumnType.Boolean,
288
+ nullable: false,
289
+ default: true,
290
+ })
291
+ public isEnabled?: boolean = undefined;
292
+
293
+ @ColumnAccessControl({
294
+ create: [
295
+ Permission.ProjectOwner,
296
+ Permission.ProjectAdmin,
297
+ Permission.CreateAlertGroupingRule,
298
+ ],
299
+ read: [
300
+ Permission.ProjectOwner,
301
+ Permission.ProjectAdmin,
302
+ Permission.ProjectMember,
303
+ Permission.ReadAlertGroupingRule,
304
+ ],
305
+ update: [
306
+ Permission.ProjectOwner,
307
+ Permission.ProjectAdmin,
308
+ Permission.EditAlertGroupingRule,
309
+ ],
310
+ })
311
+ @TableColumn({
312
+ required: false,
313
+ type: TableColumnType.JSON,
314
+ title: "Match Criteria",
315
+ description:
316
+ "JSON object defining the criteria for matching alerts to this rule",
317
+ })
318
+ @Column({
319
+ type: ColumnType.JSON,
320
+ nullable: true,
321
+ })
322
+ public matchCriteria?: AlertGroupingRuleMatchCriteria = undefined;
323
+
324
+ // Match Criteria Fields (individual columns for form support)
325
+
326
+ @ColumnAccessControl({
327
+ create: [
328
+ Permission.ProjectOwner,
329
+ Permission.ProjectAdmin,
330
+ Permission.CreateAlertGroupingRule,
331
+ ],
332
+ read: [
333
+ Permission.ProjectOwner,
334
+ Permission.ProjectAdmin,
335
+ Permission.ProjectMember,
336
+ Permission.ReadAlertGroupingRule,
337
+ ],
338
+ update: [
339
+ Permission.ProjectOwner,
340
+ Permission.ProjectAdmin,
341
+ Permission.EditAlertGroupingRule,
342
+ ],
343
+ })
344
+ @TableColumn({
345
+ required: false,
346
+ type: TableColumnType.EntityArray,
347
+ modelType: Monitor,
348
+ title: "Monitors",
349
+ description:
350
+ "Only group alerts from these monitors. Leave empty to match alerts from any monitor.",
351
+ })
352
+ @ManyToMany(
353
+ () => {
354
+ return Monitor;
355
+ },
356
+ { eager: false },
357
+ )
358
+ @JoinTable({
359
+ name: "AlertGroupingRuleMonitor",
360
+ inverseJoinColumn: {
361
+ name: "monitorId",
362
+ referencedColumnName: "_id",
363
+ },
364
+ joinColumn: {
365
+ name: "alertGroupingRuleId",
366
+ referencedColumnName: "_id",
367
+ },
368
+ })
369
+ public monitors?: Array<Monitor> = undefined;
370
+
371
+ @ColumnAccessControl({
372
+ create: [
373
+ Permission.ProjectOwner,
374
+ Permission.ProjectAdmin,
375
+ Permission.CreateAlertGroupingRule,
376
+ ],
377
+ read: [
378
+ Permission.ProjectOwner,
379
+ Permission.ProjectAdmin,
380
+ Permission.ProjectMember,
381
+ Permission.ReadAlertGroupingRule,
382
+ ],
383
+ update: [
384
+ Permission.ProjectOwner,
385
+ Permission.ProjectAdmin,
386
+ Permission.EditAlertGroupingRule,
387
+ ],
388
+ })
389
+ @TableColumn({
390
+ required: false,
391
+ type: TableColumnType.EntityArray,
392
+ modelType: AlertSeverity,
393
+ title: "Alert Severities",
394
+ description:
395
+ "Only group alerts with these severities. Leave empty to match alerts of any severity.",
396
+ })
397
+ @ManyToMany(
398
+ () => {
399
+ return AlertSeverity;
400
+ },
401
+ { eager: false },
402
+ )
403
+ @JoinTable({
404
+ name: "AlertGroupingRuleAlertSeverity",
405
+ inverseJoinColumn: {
406
+ name: "alertSeverityId",
407
+ referencedColumnName: "_id",
408
+ },
409
+ joinColumn: {
410
+ name: "alertGroupingRuleId",
411
+ referencedColumnName: "_id",
412
+ },
413
+ })
414
+ public alertSeverities?: Array<AlertSeverity> = undefined;
415
+
416
+ @ColumnAccessControl({
417
+ create: [
418
+ Permission.ProjectOwner,
419
+ Permission.ProjectAdmin,
420
+ Permission.CreateAlertGroupingRule,
421
+ ],
422
+ read: [
423
+ Permission.ProjectOwner,
424
+ Permission.ProjectAdmin,
425
+ Permission.ProjectMember,
426
+ Permission.ReadAlertGroupingRule,
427
+ ],
428
+ update: [
429
+ Permission.ProjectOwner,
430
+ Permission.ProjectAdmin,
431
+ Permission.EditAlertGroupingRule,
432
+ ],
433
+ })
434
+ @TableColumn({
435
+ required: false,
436
+ type: TableColumnType.EntityArray,
437
+ modelType: Label,
438
+ title: "Alert Labels",
439
+ description:
440
+ "Only group alerts that have at least one of these labels. Leave empty to match alerts regardless of alert labels.",
441
+ })
442
+ @ManyToMany(
443
+ () => {
444
+ return Label;
445
+ },
446
+ { eager: false },
447
+ )
448
+ @JoinTable({
449
+ name: "AlertGroupingRuleAlertLabel",
450
+ inverseJoinColumn: {
451
+ name: "labelId",
452
+ referencedColumnName: "_id",
453
+ },
454
+ joinColumn: {
455
+ name: "alertGroupingRuleId",
456
+ referencedColumnName: "_id",
457
+ },
458
+ })
459
+ public alertLabels?: Array<Label> = undefined;
460
+
461
+ @ColumnAccessControl({
462
+ create: [
463
+ Permission.ProjectOwner,
464
+ Permission.ProjectAdmin,
465
+ Permission.CreateAlertGroupingRule,
466
+ ],
467
+ read: [
468
+ Permission.ProjectOwner,
469
+ Permission.ProjectAdmin,
470
+ Permission.ProjectMember,
471
+ Permission.ReadAlertGroupingRule,
472
+ ],
473
+ update: [
474
+ Permission.ProjectOwner,
475
+ Permission.ProjectAdmin,
476
+ Permission.EditAlertGroupingRule,
477
+ ],
478
+ })
479
+ @TableColumn({
480
+ required: false,
481
+ type: TableColumnType.EntityArray,
482
+ modelType: Label,
483
+ title: "Monitor Labels",
484
+ description:
485
+ "Only group alerts from monitors that have at least one of these labels. Leave empty to match alerts regardless of monitor labels.",
486
+ })
487
+ @ManyToMany(
488
+ () => {
489
+ return Label;
490
+ },
491
+ { eager: false },
492
+ )
493
+ @JoinTable({
494
+ name: "AlertGroupingRuleMonitorLabel",
495
+ inverseJoinColumn: {
496
+ name: "labelId",
497
+ referencedColumnName: "_id",
498
+ },
499
+ joinColumn: {
500
+ name: "alertGroupingRuleId",
501
+ referencedColumnName: "_id",
502
+ },
503
+ })
504
+ public monitorLabels?: Array<Label> = undefined;
505
+
506
+ @ColumnAccessControl({
507
+ create: [
508
+ Permission.ProjectOwner,
509
+ Permission.ProjectAdmin,
510
+ Permission.CreateAlertGroupingRule,
511
+ ],
512
+ read: [
513
+ Permission.ProjectOwner,
514
+ Permission.ProjectAdmin,
515
+ Permission.ProjectMember,
516
+ Permission.ReadAlertGroupingRule,
517
+ ],
518
+ update: [
519
+ Permission.ProjectOwner,
520
+ Permission.ProjectAdmin,
521
+ Permission.EditAlertGroupingRule,
522
+ ],
523
+ })
524
+ @TableColumn({
525
+ required: false,
526
+ type: TableColumnType.LongText,
527
+ title: "Alert Title Pattern",
528
+ description:
529
+ "Regular expression pattern to match alert titles. Leave empty to match any title. Example: 'CPU.*high' matches titles containing 'CPU' followed by 'high'.",
530
+ })
531
+ @Column({
532
+ type: ColumnType.LongText,
533
+ nullable: true,
534
+ length: ColumnLength.LongText,
535
+ })
536
+ public alertTitlePattern?: string = undefined;
537
+
538
+ @ColumnAccessControl({
539
+ create: [
540
+ Permission.ProjectOwner,
541
+ Permission.ProjectAdmin,
542
+ Permission.CreateAlertGroupingRule,
543
+ ],
544
+ read: [
545
+ Permission.ProjectOwner,
546
+ Permission.ProjectAdmin,
547
+ Permission.ProjectMember,
548
+ Permission.ReadAlertGroupingRule,
549
+ ],
550
+ update: [
551
+ Permission.ProjectOwner,
552
+ Permission.ProjectAdmin,
553
+ Permission.EditAlertGroupingRule,
554
+ ],
555
+ })
556
+ @TableColumn({
557
+ required: false,
558
+ type: TableColumnType.LongText,
559
+ title: "Alert Description Pattern",
560
+ description:
561
+ "Regular expression pattern to match alert descriptions. Leave empty to match any description.",
562
+ })
563
+ @Column({
564
+ type: ColumnType.LongText,
565
+ nullable: true,
566
+ length: ColumnLength.LongText,
567
+ })
568
+ public alertDescriptionPattern?: string = undefined;
569
+
570
+ @ColumnAccessControl({
571
+ create: [
572
+ Permission.ProjectOwner,
573
+ Permission.ProjectAdmin,
574
+ Permission.CreateAlertGroupingRule,
575
+ ],
576
+ read: [
577
+ Permission.ProjectOwner,
578
+ Permission.ProjectAdmin,
579
+ Permission.ProjectMember,
580
+ Permission.ReadAlertGroupingRule,
581
+ ],
582
+ update: [
583
+ Permission.ProjectOwner,
584
+ Permission.ProjectAdmin,
585
+ Permission.EditAlertGroupingRule,
586
+ ],
587
+ })
588
+ @TableColumn({
589
+ required: false,
590
+ type: TableColumnType.LongText,
591
+ title: "Monitor Name Pattern",
592
+ description:
593
+ "Regular expression pattern to match monitor names. Leave empty to match any monitor name. Example: 'prod-.*' matches monitors starting with 'prod-'.",
594
+ })
595
+ @Column({
596
+ type: ColumnType.LongText,
597
+ nullable: true,
598
+ length: ColumnLength.LongText,
599
+ })
600
+ public monitorNamePattern?: string = undefined;
601
+
602
+ @ColumnAccessControl({
603
+ create: [
604
+ Permission.ProjectOwner,
605
+ Permission.ProjectAdmin,
606
+ Permission.CreateAlertGroupingRule,
607
+ ],
608
+ read: [
609
+ Permission.ProjectOwner,
610
+ Permission.ProjectAdmin,
611
+ Permission.ProjectMember,
612
+ Permission.ReadAlertGroupingRule,
613
+ ],
614
+ update: [
615
+ Permission.ProjectOwner,
616
+ Permission.ProjectAdmin,
617
+ Permission.EditAlertGroupingRule,
618
+ ],
619
+ })
620
+ @TableColumn({
621
+ required: false,
622
+ type: TableColumnType.LongText,
623
+ title: "Monitor Description Pattern",
624
+ description:
625
+ "Regular expression pattern to match monitor descriptions. Leave empty to match any monitor description.",
626
+ })
627
+ @Column({
628
+ type: ColumnType.LongText,
629
+ nullable: true,
630
+ length: ColumnLength.LongText,
631
+ })
632
+ public monitorDescriptionPattern?: string = undefined;
633
+
634
+ // Group By Fields (how to group matching alerts)
635
+
636
+ @ColumnAccessControl({
637
+ create: [
638
+ Permission.ProjectOwner,
639
+ Permission.ProjectAdmin,
640
+ Permission.CreateAlertGroupingRule,
641
+ ],
642
+ read: [
643
+ Permission.ProjectOwner,
644
+ Permission.ProjectAdmin,
645
+ Permission.ProjectMember,
646
+ Permission.ReadAlertGroupingRule,
647
+ ],
648
+ update: [
649
+ Permission.ProjectOwner,
650
+ Permission.ProjectAdmin,
651
+ Permission.EditAlertGroupingRule,
652
+ ],
653
+ })
654
+ @TableColumn({
655
+ required: false,
656
+ type: TableColumnType.Boolean,
657
+ title: "Group By Monitor",
658
+ description:
659
+ "When enabled, alerts from different monitors will be grouped into separate episodes. When disabled, alerts from any monitor can be grouped together.",
660
+ defaultValue: true,
661
+ isDefaultValueColumn: true,
662
+ })
663
+ @Column({
664
+ type: ColumnType.Boolean,
665
+ nullable: false,
666
+ default: true,
667
+ })
668
+ public groupByMonitor?: boolean = undefined;
669
+
670
+ @ColumnAccessControl({
671
+ create: [
672
+ Permission.ProjectOwner,
673
+ Permission.ProjectAdmin,
674
+ Permission.CreateAlertGroupingRule,
675
+ ],
676
+ read: [
677
+ Permission.ProjectOwner,
678
+ Permission.ProjectAdmin,
679
+ Permission.ProjectMember,
680
+ Permission.ReadAlertGroupingRule,
681
+ ],
682
+ update: [
683
+ Permission.ProjectOwner,
684
+ Permission.ProjectAdmin,
685
+ Permission.EditAlertGroupingRule,
686
+ ],
687
+ })
688
+ @TableColumn({
689
+ required: false,
690
+ type: TableColumnType.Boolean,
691
+ title: "Group By Alert Severity",
692
+ description:
693
+ "When enabled, alerts with different severities will be grouped into separate episodes. When disabled, alerts of any severity can be grouped together.",
694
+ defaultValue: false,
695
+ isDefaultValueColumn: true,
696
+ })
697
+ @Column({
698
+ type: ColumnType.Boolean,
699
+ nullable: false,
700
+ default: false,
701
+ })
702
+ public groupBySeverity?: boolean = undefined;
703
+
704
+ @ColumnAccessControl({
705
+ create: [
706
+ Permission.ProjectOwner,
707
+ Permission.ProjectAdmin,
708
+ Permission.CreateAlertGroupingRule,
709
+ ],
710
+ read: [
711
+ Permission.ProjectOwner,
712
+ Permission.ProjectAdmin,
713
+ Permission.ProjectMember,
714
+ Permission.ReadAlertGroupingRule,
715
+ ],
716
+ update: [
717
+ Permission.ProjectOwner,
718
+ Permission.ProjectAdmin,
719
+ Permission.EditAlertGroupingRule,
720
+ ],
721
+ })
722
+ @TableColumn({
723
+ required: false,
724
+ type: TableColumnType.Boolean,
725
+ title: "Group By Alert Title",
726
+ description:
727
+ "When enabled, alerts with different titles will be grouped into separate episodes. When disabled, alerts with any title can be grouped together.",
728
+ defaultValue: false,
729
+ isDefaultValueColumn: true,
730
+ })
731
+ @Column({
732
+ type: ColumnType.Boolean,
733
+ nullable: false,
734
+ default: false,
735
+ })
736
+ public groupByAlertTitle?: boolean = undefined;
737
+
738
+ @ColumnAccessControl({
739
+ create: [
740
+ Permission.ProjectOwner,
741
+ Permission.ProjectAdmin,
742
+ Permission.CreateAlertGroupingRule,
743
+ ],
744
+ read: [
745
+ Permission.ProjectOwner,
746
+ Permission.ProjectAdmin,
747
+ Permission.ProjectMember,
748
+ Permission.ReadAlertGroupingRule,
749
+ ],
750
+ update: [
751
+ Permission.ProjectOwner,
752
+ Permission.ProjectAdmin,
753
+ Permission.EditAlertGroupingRule,
754
+ ],
755
+ })
756
+ @TableColumn({
757
+ required: false,
758
+ type: TableColumnType.Boolean,
759
+ title: "Group By Service",
760
+ description:
761
+ "When enabled, alerts from monitors belonging to different services will be grouped into separate episodes. When disabled, alerts can be grouped together regardless of which service the monitor belongs to.",
762
+ defaultValue: false,
763
+ isDefaultValueColumn: true,
764
+ })
765
+ @Column({
766
+ type: ColumnType.Boolean,
767
+ nullable: false,
768
+ default: false,
769
+ })
770
+ public groupByService?: boolean = undefined;
771
+
772
+ @ColumnAccessControl({
773
+ create: [
774
+ Permission.ProjectOwner,
775
+ Permission.ProjectAdmin,
776
+ Permission.CreateAlertGroupingRule,
777
+ ],
778
+ read: [
779
+ Permission.ProjectOwner,
780
+ Permission.ProjectAdmin,
781
+ Permission.ProjectMember,
782
+ Permission.ReadAlertGroupingRule,
783
+ ],
784
+ update: [
785
+ Permission.ProjectOwner,
786
+ Permission.ProjectAdmin,
787
+ Permission.EditAlertGroupingRule,
788
+ ],
789
+ })
790
+ @TableColumn({
791
+ required: false,
792
+ type: TableColumnType.Boolean,
793
+ title: "Enable Time Window",
794
+ description:
795
+ "Enable time-based grouping. When enabled, alerts are grouped within the specified time window. When disabled, all matching alerts are grouped into a single ongoing episode regardless of time.",
796
+ defaultValue: false,
797
+ isDefaultValueColumn: true,
798
+ })
799
+ @Column({
800
+ type: ColumnType.Boolean,
801
+ nullable: false,
802
+ default: false,
803
+ })
804
+ public enableTimeWindow?: boolean = undefined;
805
+
806
+ @ColumnAccessControl({
807
+ create: [
808
+ Permission.ProjectOwner,
809
+ Permission.ProjectAdmin,
810
+ Permission.CreateAlertGroupingRule,
811
+ ],
812
+ read: [
813
+ Permission.ProjectOwner,
814
+ Permission.ProjectAdmin,
815
+ Permission.ProjectMember,
816
+ Permission.ReadAlertGroupingRule,
817
+ ],
818
+ update: [
819
+ Permission.ProjectOwner,
820
+ Permission.ProjectAdmin,
821
+ Permission.EditAlertGroupingRule,
822
+ ],
823
+ })
824
+ @TableColumn({
825
+ required: false,
826
+ type: TableColumnType.Number,
827
+ title: "Time Window (Minutes)",
828
+ description:
829
+ "Rolling time window in minutes. Alerts are grouped if they arrive within this gap from the last alert.",
830
+ defaultValue: 60,
831
+ isDefaultValueColumn: true,
832
+ })
833
+ @Column({
834
+ type: ColumnType.Number,
835
+ nullable: false,
836
+ default: 60,
837
+ })
838
+ public timeWindowMinutes?: number = undefined;
839
+
840
+ @ColumnAccessControl({
841
+ create: [
842
+ Permission.ProjectOwner,
843
+ Permission.ProjectAdmin,
844
+ Permission.CreateAlertGroupingRule,
845
+ ],
846
+ read: [
847
+ Permission.ProjectOwner,
848
+ Permission.ProjectAdmin,
849
+ Permission.ProjectMember,
850
+ Permission.ReadAlertGroupingRule,
851
+ ],
852
+ update: [
853
+ Permission.ProjectOwner,
854
+ Permission.ProjectAdmin,
855
+ Permission.EditAlertGroupingRule,
856
+ ],
857
+ })
858
+ @TableColumn({
859
+ required: false,
860
+ type: TableColumnType.JSON,
861
+ title: "Group By Fields",
862
+ description:
863
+ "JSON object defining the fields to group alerts by (e.g., monitorId, severity)",
864
+ })
865
+ @Column({
866
+ type: ColumnType.JSON,
867
+ nullable: true,
868
+ })
869
+ public groupByFields?: AlertGroupingRuleGroupByFields = undefined;
870
+
871
+ @ColumnAccessControl({
872
+ create: [
873
+ Permission.ProjectOwner,
874
+ Permission.ProjectAdmin,
875
+ Permission.CreateAlertGroupingRule,
876
+ ],
877
+ read: [
878
+ Permission.ProjectOwner,
879
+ Permission.ProjectAdmin,
880
+ Permission.ProjectMember,
881
+ Permission.ReadAlertGroupingRule,
882
+ ],
883
+ update: [
884
+ Permission.ProjectOwner,
885
+ Permission.ProjectAdmin,
886
+ Permission.EditAlertGroupingRule,
887
+ ],
888
+ })
889
+ @TableColumn({
890
+ required: false,
891
+ type: TableColumnType.LongText,
892
+ title: "Episode Title Template",
893
+ description:
894
+ "Template for generating episode titles. Supports placeholders like {{alertSeverity}}, {{monitorName}}, {{alertTitle}}, {{alertDescription}}",
895
+ })
896
+ @Column({
897
+ type: ColumnType.LongText,
898
+ nullable: true,
899
+ })
900
+ public episodeTitleTemplate?: string = undefined;
901
+
902
+ @ColumnAccessControl({
903
+ create: [
904
+ Permission.ProjectOwner,
905
+ Permission.ProjectAdmin,
906
+ Permission.CreateAlertGroupingRule,
907
+ ],
908
+ read: [
909
+ Permission.ProjectOwner,
910
+ Permission.ProjectAdmin,
911
+ Permission.ProjectMember,
912
+ Permission.ReadAlertGroupingRule,
913
+ ],
914
+ update: [
915
+ Permission.ProjectOwner,
916
+ Permission.ProjectAdmin,
917
+ Permission.EditAlertGroupingRule,
918
+ ],
919
+ })
920
+ @TableColumn({
921
+ required: false,
922
+ type: TableColumnType.LongText,
923
+ title: "Episode Description Template",
924
+ description:
925
+ "Template for generating episode descriptions. Supports placeholders like {{alertSeverity}}, {{monitorName}}, {{alertTitle}}, {{alertDescription}}",
926
+ })
927
+ @Column({
928
+ type: ColumnType.LongText,
929
+ nullable: true,
930
+ })
931
+ public episodeDescriptionTemplate?: string = undefined;
932
+
933
+ @ColumnAccessControl({
934
+ create: [
935
+ Permission.ProjectOwner,
936
+ Permission.ProjectAdmin,
937
+ Permission.CreateAlertGroupingRule,
938
+ ],
939
+ read: [
940
+ Permission.ProjectOwner,
941
+ Permission.ProjectAdmin,
942
+ Permission.ProjectMember,
943
+ Permission.ReadAlertGroupingRule,
944
+ ],
945
+ update: [
946
+ Permission.ProjectOwner,
947
+ Permission.ProjectAdmin,
948
+ Permission.EditAlertGroupingRule,
949
+ ],
950
+ })
951
+ @TableColumn({
952
+ required: false,
953
+ type: TableColumnType.Boolean,
954
+ title: "Enable Resolve Delay",
955
+ description:
956
+ "Enable grace period before auto-resolving episode after all alerts resolve. Helps prevent rapid state changes during alert flapping.",
957
+ defaultValue: false,
958
+ isDefaultValueColumn: true,
959
+ })
960
+ @Column({
961
+ type: ColumnType.Boolean,
962
+ nullable: false,
963
+ default: false,
964
+ })
965
+ public enableResolveDelay?: boolean = undefined;
966
+
967
+ @ColumnAccessControl({
968
+ create: [
969
+ Permission.ProjectOwner,
970
+ Permission.ProjectAdmin,
971
+ Permission.CreateAlertGroupingRule,
972
+ ],
973
+ read: [
974
+ Permission.ProjectOwner,
975
+ Permission.ProjectAdmin,
976
+ Permission.ProjectMember,
977
+ Permission.ReadAlertGroupingRule,
978
+ ],
979
+ update: [
980
+ Permission.ProjectOwner,
981
+ Permission.ProjectAdmin,
982
+ Permission.EditAlertGroupingRule,
983
+ ],
984
+ })
985
+ @TableColumn({
986
+ required: false,
987
+ type: TableColumnType.Number,
988
+ title: "Resolve Delay (Minutes)",
989
+ description:
990
+ "Grace period in minutes before auto-resolving an episode after all alerts are resolved",
991
+ defaultValue: 0,
992
+ isDefaultValueColumn: true,
993
+ })
994
+ @Column({
995
+ type: ColumnType.Number,
996
+ nullable: false,
997
+ default: 0,
998
+ })
999
+ public resolveDelayMinutes?: number = undefined;
1000
+
1001
+ @ColumnAccessControl({
1002
+ create: [
1003
+ Permission.ProjectOwner,
1004
+ Permission.ProjectAdmin,
1005
+ Permission.CreateAlertGroupingRule,
1006
+ ],
1007
+ read: [
1008
+ Permission.ProjectOwner,
1009
+ Permission.ProjectAdmin,
1010
+ Permission.ProjectMember,
1011
+ Permission.ReadAlertGroupingRule,
1012
+ ],
1013
+ update: [
1014
+ Permission.ProjectOwner,
1015
+ Permission.ProjectAdmin,
1016
+ Permission.EditAlertGroupingRule,
1017
+ ],
1018
+ })
1019
+ @TableColumn({
1020
+ required: false,
1021
+ type: TableColumnType.Boolean,
1022
+ title: "Enable Reopen Window",
1023
+ description:
1024
+ "Enable reopening recently resolved episodes instead of creating new ones. Useful when related issues recur shortly after resolution.",
1025
+ defaultValue: false,
1026
+ isDefaultValueColumn: true,
1027
+ })
1028
+ @Column({
1029
+ type: ColumnType.Boolean,
1030
+ nullable: false,
1031
+ default: false,
1032
+ })
1033
+ public enableReopenWindow?: boolean = undefined;
1034
+
1035
+ @ColumnAccessControl({
1036
+ create: [
1037
+ Permission.ProjectOwner,
1038
+ Permission.ProjectAdmin,
1039
+ Permission.CreateAlertGroupingRule,
1040
+ ],
1041
+ read: [
1042
+ Permission.ProjectOwner,
1043
+ Permission.ProjectAdmin,
1044
+ Permission.ProjectMember,
1045
+ Permission.ReadAlertGroupingRule,
1046
+ ],
1047
+ update: [
1048
+ Permission.ProjectOwner,
1049
+ Permission.ProjectAdmin,
1050
+ Permission.EditAlertGroupingRule,
1051
+ ],
1052
+ })
1053
+ @TableColumn({
1054
+ required: false,
1055
+ type: TableColumnType.Number,
1056
+ title: "Reopen Window (Minutes)",
1057
+ description:
1058
+ "Time window in minutes to reopen a recently resolved episode instead of creating a new one",
1059
+ defaultValue: 0,
1060
+ isDefaultValueColumn: true,
1061
+ })
1062
+ @Column({
1063
+ type: ColumnType.Number,
1064
+ nullable: false,
1065
+ default: 0,
1066
+ })
1067
+ public reopenWindowMinutes?: number = undefined;
1068
+
1069
+ @ColumnAccessControl({
1070
+ create: [
1071
+ Permission.ProjectOwner,
1072
+ Permission.ProjectAdmin,
1073
+ Permission.CreateAlertGroupingRule,
1074
+ ],
1075
+ read: [
1076
+ Permission.ProjectOwner,
1077
+ Permission.ProjectAdmin,
1078
+ Permission.ProjectMember,
1079
+ Permission.ReadAlertGroupingRule,
1080
+ ],
1081
+ update: [
1082
+ Permission.ProjectOwner,
1083
+ Permission.ProjectAdmin,
1084
+ Permission.EditAlertGroupingRule,
1085
+ ],
1086
+ })
1087
+ @TableColumn({
1088
+ required: false,
1089
+ type: TableColumnType.Boolean,
1090
+ title: "Enable Inactivity Timeout",
1091
+ description:
1092
+ "Enable auto-resolving episodes after a period of inactivity. Helps automatically close episodes when no new alerts arrive.",
1093
+ defaultValue: false,
1094
+ isDefaultValueColumn: true,
1095
+ })
1096
+ @Column({
1097
+ type: ColumnType.Boolean,
1098
+ nullable: false,
1099
+ default: false,
1100
+ })
1101
+ public enableInactivityTimeout?: boolean = undefined;
1102
+
1103
+ @ColumnAccessControl({
1104
+ create: [
1105
+ Permission.ProjectOwner,
1106
+ Permission.ProjectAdmin,
1107
+ Permission.CreateAlertGroupingRule,
1108
+ ],
1109
+ read: [
1110
+ Permission.ProjectOwner,
1111
+ Permission.ProjectAdmin,
1112
+ Permission.ProjectMember,
1113
+ Permission.ReadAlertGroupingRule,
1114
+ ],
1115
+ update: [
1116
+ Permission.ProjectOwner,
1117
+ Permission.ProjectAdmin,
1118
+ Permission.EditAlertGroupingRule,
1119
+ ],
1120
+ })
1121
+ @TableColumn({
1122
+ required: false,
1123
+ type: TableColumnType.Number,
1124
+ title: "Inactivity Timeout (Minutes)",
1125
+ description:
1126
+ "Time in minutes after which an inactive episode will be auto-resolved",
1127
+ defaultValue: 60,
1128
+ isDefaultValueColumn: true,
1129
+ })
1130
+ @Column({
1131
+ type: ColumnType.Number,
1132
+ nullable: false,
1133
+ default: 60,
1134
+ })
1135
+ public inactivityTimeoutMinutes?: number = undefined;
1136
+
1137
+ @ColumnAccessControl({
1138
+ create: [
1139
+ Permission.ProjectOwner,
1140
+ Permission.ProjectAdmin,
1141
+ Permission.CreateAlertGroupingRule,
1142
+ ],
1143
+ read: [
1144
+ Permission.ProjectOwner,
1145
+ Permission.ProjectAdmin,
1146
+ Permission.ProjectMember,
1147
+ Permission.ReadAlertGroupingRule,
1148
+ ],
1149
+ update: [
1150
+ Permission.ProjectOwner,
1151
+ Permission.ProjectAdmin,
1152
+ Permission.EditAlertGroupingRule,
1153
+ ],
1154
+ })
1155
+ @TableColumn({
1156
+ required: false,
1157
+ type: TableColumnType.EntityArray,
1158
+ modelType: OnCallDutyPolicy,
1159
+ title: "On-Call Duty Policies",
1160
+ description:
1161
+ "List of on-call duty policies to execute for episodes created by this rule.",
1162
+ })
1163
+ @ManyToMany(
1164
+ () => {
1165
+ return OnCallDutyPolicy;
1166
+ },
1167
+ { eager: false },
1168
+ )
1169
+ @JoinTable({
1170
+ name: "AlertGroupingRuleOnCallDutyPolicy",
1171
+ inverseJoinColumn: {
1172
+ name: "onCallDutyPolicyId",
1173
+ referencedColumnName: "_id",
1174
+ },
1175
+ joinColumn: {
1176
+ name: "alertGroupingRuleId",
1177
+ referencedColumnName: "_id",
1178
+ },
1179
+ })
1180
+ public onCallDutyPolicies?: Array<OnCallDutyPolicy> = undefined;
1181
+
1182
+ @ColumnAccessControl({
1183
+ create: [
1184
+ Permission.ProjectOwner,
1185
+ Permission.ProjectAdmin,
1186
+ Permission.CreateAlertGroupingRule,
1187
+ ],
1188
+ read: [
1189
+ Permission.ProjectOwner,
1190
+ Permission.ProjectAdmin,
1191
+ Permission.ProjectMember,
1192
+ Permission.ReadAlertGroupingRule,
1193
+ ],
1194
+ update: [
1195
+ Permission.ProjectOwner,
1196
+ Permission.ProjectAdmin,
1197
+ Permission.EditAlertGroupingRule,
1198
+ ],
1199
+ })
1200
+ @TableColumn({
1201
+ manyToOneRelationColumn: "defaultAssignToUserId",
1202
+ type: TableColumnType.Entity,
1203
+ modelType: User,
1204
+ title: "Default Assign To User",
1205
+ description: "Default user to assign episodes created by this rule",
1206
+ })
1207
+ @ManyToOne(
1208
+ () => {
1209
+ return User;
1210
+ },
1211
+ {
1212
+ eager: false,
1213
+ nullable: true,
1214
+ onDelete: "SET NULL",
1215
+ orphanedRowAction: "nullify",
1216
+ },
1217
+ )
1218
+ @JoinColumn({ name: "defaultAssignToUserId" })
1219
+ public defaultAssignToUser?: User = undefined;
1220
+
1221
+ @ColumnAccessControl({
1222
+ create: [
1223
+ Permission.ProjectOwner,
1224
+ Permission.ProjectAdmin,
1225
+ Permission.CreateAlertGroupingRule,
1226
+ ],
1227
+ read: [
1228
+ Permission.ProjectOwner,
1229
+ Permission.ProjectAdmin,
1230
+ Permission.ProjectMember,
1231
+ Permission.ReadAlertGroupingRule,
1232
+ ],
1233
+ update: [
1234
+ Permission.ProjectOwner,
1235
+ Permission.ProjectAdmin,
1236
+ Permission.EditAlertGroupingRule,
1237
+ ],
1238
+ })
1239
+ @Index()
1240
+ @TableColumn({
1241
+ type: TableColumnType.ObjectID,
1242
+ required: false,
1243
+ title: "Default Assign To User ID",
1244
+ description: "Default User ID to assign episodes created by this rule",
1245
+ })
1246
+ @Column({
1247
+ type: ColumnType.ObjectID,
1248
+ nullable: true,
1249
+ transformer: ObjectID.getDatabaseTransformer(),
1250
+ })
1251
+ public defaultAssignToUserId?: ObjectID = undefined;
1252
+
1253
+ @ColumnAccessControl({
1254
+ create: [
1255
+ Permission.ProjectOwner,
1256
+ Permission.ProjectAdmin,
1257
+ Permission.CreateAlertGroupingRule,
1258
+ ],
1259
+ read: [
1260
+ Permission.ProjectOwner,
1261
+ Permission.ProjectAdmin,
1262
+ Permission.ProjectMember,
1263
+ Permission.ReadAlertGroupingRule,
1264
+ ],
1265
+ update: [
1266
+ Permission.ProjectOwner,
1267
+ Permission.ProjectAdmin,
1268
+ Permission.EditAlertGroupingRule,
1269
+ ],
1270
+ })
1271
+ @TableColumn({
1272
+ manyToOneRelationColumn: "defaultAssignToTeamId",
1273
+ type: TableColumnType.Entity,
1274
+ modelType: Team,
1275
+ title: "Default Assign To Team",
1276
+ description: "Default team to assign episodes created by this rule",
1277
+ })
1278
+ @ManyToOne(
1279
+ () => {
1280
+ return Team;
1281
+ },
1282
+ {
1283
+ eager: false,
1284
+ nullable: true,
1285
+ onDelete: "SET NULL",
1286
+ orphanedRowAction: "nullify",
1287
+ },
1288
+ )
1289
+ @JoinColumn({ name: "defaultAssignToTeamId" })
1290
+ public defaultAssignToTeam?: Team = undefined;
1291
+
1292
+ @ColumnAccessControl({
1293
+ create: [
1294
+ Permission.ProjectOwner,
1295
+ Permission.ProjectAdmin,
1296
+ Permission.CreateAlertGroupingRule,
1297
+ ],
1298
+ read: [
1299
+ Permission.ProjectOwner,
1300
+ Permission.ProjectAdmin,
1301
+ Permission.ProjectMember,
1302
+ Permission.ReadAlertGroupingRule,
1303
+ ],
1304
+ update: [
1305
+ Permission.ProjectOwner,
1306
+ Permission.ProjectAdmin,
1307
+ Permission.EditAlertGroupingRule,
1308
+ ],
1309
+ })
1310
+ @Index()
1311
+ @TableColumn({
1312
+ type: TableColumnType.ObjectID,
1313
+ required: false,
1314
+ title: "Default Assign To Team ID",
1315
+ description: "Default Team ID to assign episodes created by this rule",
1316
+ })
1317
+ @Column({
1318
+ type: ColumnType.ObjectID,
1319
+ nullable: true,
1320
+ transformer: ObjectID.getDatabaseTransformer(),
1321
+ })
1322
+ public defaultAssignToTeamId?: ObjectID = undefined;
1323
+
1324
+ @ColumnAccessControl({
1325
+ create: [
1326
+ Permission.ProjectOwner,
1327
+ Permission.ProjectAdmin,
1328
+ Permission.CreateAlertGroupingRule,
1329
+ ],
1330
+ read: [
1331
+ Permission.ProjectOwner,
1332
+ Permission.ProjectAdmin,
1333
+ Permission.ProjectMember,
1334
+ Permission.ReadAlertGroupingRule,
1335
+ ],
1336
+ update: [],
1337
+ })
1338
+ @TableColumn({
1339
+ manyToOneRelationColumn: "createdByUserId",
1340
+ type: TableColumnType.Entity,
1341
+ modelType: User,
1342
+ title: "Created by User",
1343
+ description:
1344
+ "Relation to User who created this object (if this object was created by a User)",
1345
+ })
1346
+ @ManyToOne(
1347
+ () => {
1348
+ return User;
1349
+ },
1350
+ {
1351
+ eager: false,
1352
+ nullable: true,
1353
+ onDelete: "SET NULL",
1354
+ orphanedRowAction: "nullify",
1355
+ },
1356
+ )
1357
+ @JoinColumn({ name: "createdByUserId" })
1358
+ public createdByUser?: User = undefined;
1359
+
1360
+ @ColumnAccessControl({
1361
+ create: [
1362
+ Permission.ProjectOwner,
1363
+ Permission.ProjectAdmin,
1364
+ Permission.CreateAlertGroupingRule,
1365
+ ],
1366
+ read: [
1367
+ Permission.ProjectOwner,
1368
+ Permission.ProjectAdmin,
1369
+ Permission.ProjectMember,
1370
+ Permission.ReadAlertGroupingRule,
1371
+ ],
1372
+ update: [],
1373
+ })
1374
+ @TableColumn({
1375
+ type: TableColumnType.ObjectID,
1376
+ title: "Created by User ID",
1377
+ description:
1378
+ "User ID who created this object (if this object was created by a User)",
1379
+ })
1380
+ @Column({
1381
+ type: ColumnType.ObjectID,
1382
+ nullable: true,
1383
+ transformer: ObjectID.getDatabaseTransformer(),
1384
+ })
1385
+ public createdByUserId?: ObjectID = undefined;
1386
+
1387
+ @ColumnAccessControl({
1388
+ create: [],
1389
+ read: [],
1390
+ update: [],
1391
+ })
1392
+ @TableColumn({
1393
+ manyToOneRelationColumn: "deletedByUserId",
1394
+ type: TableColumnType.Entity,
1395
+ title: "Deleted by User",
1396
+ modelType: User,
1397
+ description:
1398
+ "Relation to User who deleted this object (if this object was deleted by a User)",
1399
+ })
1400
+ @ManyToOne(
1401
+ () => {
1402
+ return User;
1403
+ },
1404
+ {
1405
+ cascade: false,
1406
+ eager: false,
1407
+ nullable: true,
1408
+ onDelete: "SET NULL",
1409
+ orphanedRowAction: "nullify",
1410
+ },
1411
+ )
1412
+ @JoinColumn({ name: "deletedByUserId" })
1413
+ public deletedByUser?: User = undefined;
1414
+
1415
+ @ColumnAccessControl({
1416
+ create: [],
1417
+ read: [],
1418
+ update: [],
1419
+ })
1420
+ @TableColumn({
1421
+ type: TableColumnType.ObjectID,
1422
+ title: "Deleted by User ID",
1423
+ description:
1424
+ "User ID who deleted this object (if this object was deleted by a User)",
1425
+ })
1426
+ @Column({
1427
+ type: ColumnType.ObjectID,
1428
+ nullable: true,
1429
+ transformer: ObjectID.getDatabaseTransformer(),
1430
+ })
1431
+ public deletedByUserId?: ObjectID = undefined;
1432
+ }