@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,383 @@
1
+ import AlertGroupingRule from "../../../Models/DatabaseModels/AlertGroupingRule";
2
+ import Monitor from "../../../Models/DatabaseModels/Monitor";
3
+ import AlertSeverity from "../../../Models/DatabaseModels/AlertSeverity";
4
+ import Label from "../../../Models/DatabaseModels/Label";
5
+ import Team from "../../../Models/DatabaseModels/Team";
6
+ import User from "../../../Models/DatabaseModels/User";
7
+ import OnCallDutyPolicy from "../../../Models/DatabaseModels/OnCallDutyPolicy";
8
+ import ObjectID from "../../../Types/ObjectID";
9
+ import { describe, expect, test, beforeEach } from "@jest/globals";
10
+
11
+ describe("AlertGroupingRule Model", () => {
12
+ let rule: AlertGroupingRule;
13
+
14
+ beforeEach(() => {
15
+ rule = new AlertGroupingRule();
16
+ });
17
+
18
+ describe("constructor", () => {
19
+ test("should create a new AlertGroupingRule instance", () => {
20
+ expect(rule).toBeInstanceOf(AlertGroupingRule);
21
+ });
22
+
23
+ test("should create AlertGroupingRule with an ID", () => {
24
+ const id: ObjectID = ObjectID.generate();
25
+ const ruleWithId: AlertGroupingRule = new AlertGroupingRule(id);
26
+ expect(ruleWithId.id).toEqual(id);
27
+ });
28
+ });
29
+
30
+ describe("Basic properties", () => {
31
+ test("should set and get name correctly", () => {
32
+ rule.name = "Critical Production Alerts";
33
+ expect(rule.name).toBe("Critical Production Alerts");
34
+ });
35
+
36
+ test("should set and get description correctly", () => {
37
+ rule.description = "Groups all critical alerts from production services";
38
+ expect(rule.description).toBe(
39
+ "Groups all critical alerts from production services",
40
+ );
41
+ });
42
+
43
+ test("should set and get priority correctly", () => {
44
+ rule.priority = 1;
45
+ expect(rule.priority).toBe(1);
46
+ });
47
+
48
+ test("should set and get isEnabled correctly", () => {
49
+ rule.isEnabled = true;
50
+ expect(rule.isEnabled).toBe(true);
51
+
52
+ rule.isEnabled = false;
53
+ expect(rule.isEnabled).toBe(false);
54
+ });
55
+
56
+ test("should set and get projectId correctly", () => {
57
+ const projectId: ObjectID = ObjectID.generate();
58
+ rule.projectId = projectId;
59
+ expect(rule.projectId).toEqual(projectId);
60
+ });
61
+ });
62
+
63
+ describe("Match Criteria", () => {
64
+ describe("Monitors", () => {
65
+ test("should set and get monitors correctly", () => {
66
+ const monitor1: Monitor = new Monitor();
67
+ monitor1._id = ObjectID.generate().toString();
68
+ const monitor2: Monitor = new Monitor();
69
+ monitor2._id = ObjectID.generate().toString();
70
+
71
+ rule.monitors = [monitor1, monitor2];
72
+ expect(rule.monitors).toHaveLength(2);
73
+ expect(rule.monitors).toContain(monitor1);
74
+ expect(rule.monitors).toContain(monitor2);
75
+ });
76
+
77
+ test("should handle empty monitors array", () => {
78
+ rule.monitors = [];
79
+ expect(rule.monitors).toHaveLength(0);
80
+ });
81
+ });
82
+
83
+ describe("Alert Severities", () => {
84
+ test("should set and get alertSeverities correctly", () => {
85
+ const severity: AlertSeverity = new AlertSeverity();
86
+ severity._id = ObjectID.generate().toString();
87
+ severity.name = "Critical";
88
+
89
+ rule.alertSeverities = [severity];
90
+ expect(rule.alertSeverities).toHaveLength(1);
91
+ expect(rule.alertSeverities![0]).toBe(severity);
92
+ });
93
+ });
94
+
95
+ describe("Labels", () => {
96
+ test("should set and get monitorLabels correctly", () => {
97
+ const label: Label = new Label();
98
+ label._id = ObjectID.generate().toString();
99
+ label.name = "production";
100
+
101
+ rule.monitorLabels = [label];
102
+ expect(rule.monitorLabels).toHaveLength(1);
103
+ expect(rule.monitorLabels![0]).toBe(label);
104
+ });
105
+ });
106
+
107
+ describe("Pattern Matching", () => {
108
+ test("should set and get alertTitlePattern correctly", () => {
109
+ rule.alertTitlePattern = "CPU.*High";
110
+ expect(rule.alertTitlePattern).toBe("CPU.*High");
111
+ });
112
+
113
+ test("should set and get alertDescriptionPattern correctly", () => {
114
+ rule.alertDescriptionPattern = "memory.*exceeded";
115
+ expect(rule.alertDescriptionPattern).toBe("memory.*exceeded");
116
+ });
117
+
118
+ test("should set and get monitorNamePattern correctly", () => {
119
+ rule.monitorNamePattern = "prod-.*-api";
120
+ expect(rule.monitorNamePattern).toBe("prod-.*-api");
121
+ });
122
+
123
+ test("should set and get monitorDescriptionPattern correctly", () => {
124
+ rule.monitorDescriptionPattern = ".*production.*";
125
+ expect(rule.monitorDescriptionPattern).toBe(".*production.*");
126
+ });
127
+ });
128
+ });
129
+
130
+ describe("Group By settings", () => {
131
+ test("should set and get groupByMonitor correctly", () => {
132
+ rule.groupByMonitor = true;
133
+ expect(rule.groupByMonitor).toBe(true);
134
+ });
135
+
136
+ test("should set and get groupBySeverity correctly", () => {
137
+ rule.groupBySeverity = true;
138
+ expect(rule.groupBySeverity).toBe(true);
139
+ });
140
+
141
+ test("should set and get groupByAlertTitle correctly", () => {
142
+ rule.groupByAlertTitle = true;
143
+ expect(rule.groupByAlertTitle).toBe(true);
144
+ });
145
+
146
+ test("should handle all groupBy options as false", () => {
147
+ rule.groupByMonitor = false;
148
+ rule.groupBySeverity = false;
149
+ rule.groupByAlertTitle = false;
150
+
151
+ expect(rule.groupByMonitor).toBe(false);
152
+ expect(rule.groupBySeverity).toBe(false);
153
+ expect(rule.groupByAlertTitle).toBe(false);
154
+ });
155
+
156
+ test("should handle combination of groupBy options", () => {
157
+ rule.groupByMonitor = true;
158
+ rule.groupBySeverity = true;
159
+ rule.groupByAlertTitle = false;
160
+
161
+ expect(rule.groupByMonitor).toBe(true);
162
+ expect(rule.groupBySeverity).toBe(true);
163
+ expect(rule.groupByAlertTitle).toBe(false);
164
+ });
165
+ });
166
+
167
+ describe("Time settings", () => {
168
+ test("should set and get enableTimeWindow correctly", () => {
169
+ rule.enableTimeWindow = true;
170
+ expect(rule.enableTimeWindow).toBe(true);
171
+ });
172
+
173
+ test("should set and get timeWindowMinutes correctly", () => {
174
+ rule.timeWindowMinutes = 30;
175
+ expect(rule.timeWindowMinutes).toBe(30);
176
+ });
177
+
178
+ test("should set and get enableReopenWindow correctly", () => {
179
+ rule.enableReopenWindow = true;
180
+ expect(rule.enableReopenWindow).toBe(true);
181
+ });
182
+
183
+ test("should set and get reopenWindowMinutes correctly", () => {
184
+ rule.reopenWindowMinutes = 60;
185
+ expect(rule.reopenWindowMinutes).toBe(60);
186
+ });
187
+
188
+ test("should set and get enableInactivityTimeout correctly", () => {
189
+ rule.enableInactivityTimeout = true;
190
+ expect(rule.enableInactivityTimeout).toBe(true);
191
+ });
192
+
193
+ test("should set and get inactivityTimeoutMinutes correctly", () => {
194
+ rule.inactivityTimeoutMinutes = 120;
195
+ expect(rule.inactivityTimeoutMinutes).toBe(120);
196
+ });
197
+
198
+ test("should set and get enableResolveDelay correctly", () => {
199
+ rule.enableResolveDelay = true;
200
+ expect(rule.enableResolveDelay).toBe(true);
201
+ });
202
+
203
+ test("should set and get resolveDelayMinutes correctly", () => {
204
+ rule.resolveDelayMinutes = 15;
205
+ expect(rule.resolveDelayMinutes).toBe(15);
206
+ });
207
+ });
208
+
209
+ describe("Episode Template settings", () => {
210
+ test("should set and get episodeTitleTemplate correctly", () => {
211
+ rule.episodeTitleTemplate = "{{alertSeverity}}: {{alertTitle}}";
212
+ expect(rule.episodeTitleTemplate).toBe(
213
+ "{{alertSeverity}}: {{alertTitle}}",
214
+ );
215
+ });
216
+
217
+ test("should set and get episodeDescriptionTemplate correctly", () => {
218
+ rule.episodeDescriptionTemplate =
219
+ "Episode with {{alertCount}} alerts from {{monitorName}}";
220
+ expect(rule.episodeDescriptionTemplate).toBe(
221
+ "Episode with {{alertCount}} alerts from {{monitorName}}",
222
+ );
223
+ });
224
+
225
+ test("should handle template with all supported variables", () => {
226
+ rule.episodeTitleTemplate =
227
+ "{{alertSeverity}} on {{monitorName}}: {{alertTitle}} ({{alertCount}})";
228
+ expect(rule.episodeTitleTemplate).toBe(
229
+ "{{alertSeverity}} on {{monitorName}}: {{alertTitle}} ({{alertCount}})",
230
+ );
231
+ });
232
+ });
233
+
234
+ describe("Ownership settings", () => {
235
+ test("should set and get defaultAssignToUser correctly", () => {
236
+ const user: User = new User();
237
+ user._id = ObjectID.generate().toString();
238
+
239
+ rule.defaultAssignToUser = user;
240
+ expect(rule.defaultAssignToUser).toBe(user);
241
+ });
242
+
243
+ test("should set and get defaultAssignToUserId correctly", () => {
244
+ const userId: ObjectID = ObjectID.generate();
245
+ rule.defaultAssignToUserId = userId;
246
+ expect(rule.defaultAssignToUserId).toEqual(userId);
247
+ });
248
+
249
+ test("should set and get defaultAssignToTeam correctly", () => {
250
+ const team: Team = new Team();
251
+ team._id = ObjectID.generate().toString();
252
+
253
+ rule.defaultAssignToTeam = team;
254
+ expect(rule.defaultAssignToTeam).toBe(team);
255
+ });
256
+
257
+ test("should set and get defaultAssignToTeamId correctly", () => {
258
+ const teamId: ObjectID = ObjectID.generate();
259
+ rule.defaultAssignToTeamId = teamId;
260
+ expect(rule.defaultAssignToTeamId).toEqual(teamId);
261
+ });
262
+ });
263
+
264
+ describe("On-Call Policy settings", () => {
265
+ test("should set and get onCallDutyPolicies correctly", () => {
266
+ const policy1: OnCallDutyPolicy = new OnCallDutyPolicy();
267
+ policy1._id = ObjectID.generate().toString();
268
+ const policy2: OnCallDutyPolicy = new OnCallDutyPolicy();
269
+ policy2._id = ObjectID.generate().toString();
270
+
271
+ rule.onCallDutyPolicies = [policy1, policy2];
272
+ expect(rule.onCallDutyPolicies).toHaveLength(2);
273
+ });
274
+
275
+ test("should handle empty onCallDutyPolicies array", () => {
276
+ rule.onCallDutyPolicies = [];
277
+ expect(rule.onCallDutyPolicies).toHaveLength(0);
278
+ });
279
+ });
280
+
281
+ describe("Full AlertGroupingRule", () => {
282
+ test("should handle complete rule configuration", () => {
283
+ const id: ObjectID = ObjectID.generate();
284
+ const projectId: ObjectID = ObjectID.generate();
285
+ const userId: ObjectID = ObjectID.generate();
286
+ const teamId: ObjectID = ObjectID.generate();
287
+
288
+ const fullRule: AlertGroupingRule = new AlertGroupingRule(id);
289
+ fullRule.projectId = projectId;
290
+ fullRule.name = "Production Critical Alerts";
291
+ fullRule.description = "Groups critical alerts from production";
292
+ fullRule.priority = 1;
293
+ fullRule.isEnabled = true;
294
+
295
+ // Match criteria
296
+ fullRule.alertTitlePattern = ".*critical.*";
297
+ fullRule.alertDescriptionPattern = ".*production.*";
298
+
299
+ // Group by
300
+ fullRule.groupByMonitor = true;
301
+ fullRule.groupBySeverity = true;
302
+ fullRule.groupByAlertTitle = false;
303
+
304
+ // Time settings
305
+ fullRule.enableTimeWindow = true;
306
+ fullRule.timeWindowMinutes = 30;
307
+ fullRule.enableReopenWindow = true;
308
+ fullRule.reopenWindowMinutes = 60;
309
+ fullRule.enableInactivityTimeout = true;
310
+ fullRule.inactivityTimeoutMinutes = 120;
311
+ fullRule.enableResolveDelay = true;
312
+ fullRule.resolveDelayMinutes = 15;
313
+
314
+ // Templates
315
+ fullRule.episodeTitleTemplate =
316
+ "{{alertSeverity}} Episode: {{alertTitle}}";
317
+ fullRule.episodeDescriptionTemplate = "{{alertCount}} related alerts";
318
+
319
+ // Ownership
320
+ fullRule.defaultAssignToUserId = userId;
321
+ fullRule.defaultAssignToTeamId = teamId;
322
+
323
+ // Verify all fields
324
+ expect(fullRule.id).toEqual(id);
325
+ expect(fullRule.projectId).toEqual(projectId);
326
+ expect(fullRule.name).toBe("Production Critical Alerts");
327
+ expect(fullRule.description).toBe(
328
+ "Groups critical alerts from production",
329
+ );
330
+ expect(fullRule.priority).toBe(1);
331
+ expect(fullRule.isEnabled).toBe(true);
332
+ expect(fullRule.alertTitlePattern).toBe(".*critical.*");
333
+ expect(fullRule.groupByMonitor).toBe(true);
334
+ expect(fullRule.groupBySeverity).toBe(true);
335
+ expect(fullRule.enableTimeWindow).toBe(true);
336
+ expect(fullRule.timeWindowMinutes).toBe(30);
337
+ expect(fullRule.episodeTitleTemplate).toBe(
338
+ "{{alertSeverity}} Episode: {{alertTitle}}",
339
+ );
340
+ expect(fullRule.defaultAssignToUserId).toEqual(userId);
341
+ });
342
+
343
+ test("should create rule with minimal configuration", () => {
344
+ const minRule: AlertGroupingRule = new AlertGroupingRule();
345
+ minRule.name = "Basic Rule";
346
+ minRule.priority = 10;
347
+ minRule.isEnabled = true;
348
+
349
+ expect(minRule.name).toBe("Basic Rule");
350
+ expect(minRule.priority).toBe(10);
351
+ expect(minRule.isEnabled).toBe(true);
352
+
353
+ // All other fields should be undefined or default
354
+ expect(minRule.monitors).toBeUndefined();
355
+ expect(minRule.alertSeverities).toBeUndefined();
356
+ expect(minRule.alertTitlePattern).toBeUndefined();
357
+ expect(minRule.groupByMonitor).toBeUndefined();
358
+ expect(minRule.episodeTitleTemplate).toBeUndefined();
359
+ });
360
+ });
361
+
362
+ describe("Priority ordering", () => {
363
+ test("should correctly compare priority values", () => {
364
+ const rule1: AlertGroupingRule = new AlertGroupingRule();
365
+ rule1.priority = 1;
366
+
367
+ const rule2: AlertGroupingRule = new AlertGroupingRule();
368
+ rule2.priority = 10;
369
+
370
+ const rule3: AlertGroupingRule = new AlertGroupingRule();
371
+ rule3.priority = 5;
372
+
373
+ const rules: AlertGroupingRule[] = [rule2, rule3, rule1];
374
+ rules.sort((a: AlertGroupingRule, b: AlertGroupingRule) => {
375
+ return (a.priority || 0) - (b.priority || 0);
376
+ });
377
+
378
+ expect(rules[0]!.priority).toBe(1);
379
+ expect(rules[1]!.priority).toBe(5);
380
+ expect(rules[2]!.priority).toBe(10);
381
+ });
382
+ });
383
+ });
@@ -176,7 +176,7 @@ describe("StatementGenerator", () => {
176
176
  p0: "_id",
177
177
  p1: "<value>",
178
178
  p2: "updatedAt",
179
- p3: OneUptimeDate.toDatabaseDate(date),
179
+ p3: OneUptimeDate.toClickhouseDateTime(date),
180
180
  });
181
181
  });
182
182
  });
@@ -283,7 +283,7 @@ describe("Input", () => {
283
283
 
284
284
  render(<Input {...{ error }} />);
285
285
 
286
- expect(screen.getByRole("icon")).toBeInTheDocument();
286
+ expect(screen.getByRole("icon", { hidden: true })).toBeInTheDocument();
287
287
  });
288
288
 
289
289
  test("sets error style if error exists", () => {
@@ -118,12 +118,12 @@ describe("TextArea", () => {
118
118
 
119
119
  test("displays error icon", () => {
120
120
  const { getByRole } = render(<TextArea error="error" initialValue="" />);
121
- expect(getByRole("icon")).toBeInTheDocument();
121
+ expect(getByRole("icon", { hidden: true })).toBeInTheDocument();
122
122
  });
123
123
 
124
124
  test("does not display error icon without error", () => {
125
125
  const { queryByRole } = render(<TextArea initialValue="" />);
126
- expect(queryByRole("icon")).not.toBeInTheDocument();
126
+ expect(queryByRole("icon", { hidden: true })).not.toBeInTheDocument();
127
127
  });
128
128
 
129
129
  test("applies error styles", () => {
@@ -3,4 +3,13 @@ enum SortOrder {
3
3
  Descending = "DESC",
4
4
  }
5
5
 
6
+ // Maps SortOrder to ARIA sort values for accessibility
7
+ export const SortOrderToAriaSortMap: Record<
8
+ SortOrder,
9
+ "ascending" | "descending"
10
+ > = {
11
+ [SortOrder.Ascending]: "ascending",
12
+ [SortOrder.Descending]: "descending",
13
+ };
14
+
6
15
  export default SortOrder;
@@ -42,6 +42,11 @@ enum EmailTemplateType {
42
42
  AlertOwnerNotePosted = "AlertOwnerNotePosted.hbs",
43
43
  AlertOwnerResourceCreated = "AlertOwnerResourceCreated.hbs",
44
44
 
45
+ AlertEpisodeOwnerAdded = "AlertEpisodeOwnerAdded.hbs",
46
+ AlertEpisodeOwnerStateChanged = "AlertEpisodeOwnerStateChanged.hbs",
47
+ AlertEpisodeOwnerNotePosted = "AlertEpisodeOwnerNotePosted.hbs",
48
+ AlertEpisodeOwnerResourceCreated = "AlertEpisodeOwnerResourceCreated.hbs",
49
+
45
50
  ScheduledMaintenanceOwnerNotePosted = "ScheduledMaintenanceOwnerNotePosted.hbs",
46
51
  ScheduledMaintenanceOwnerAdded = "ScheduledMaintenanceOwnerAdded.hbs",
47
52
  ScheduledMaintenanceOwnerStateChanged = "ScheduledMaintenanceOwnerStateChanged.hbs",
@@ -1,5 +1,6 @@
1
1
  enum NotificationRuleType {
2
2
  ON_CALL_EXECUTED = "When on-call policy is executed",
3
+ ON_CALL_EXECUTED_EPISODE = "When episode on-call policy is executed",
3
4
  WHEN_USER_GOES_ON_CALL = "When user goes on call",
4
5
  WHEN_USER_GOES_OFF_CALL = "When user goes off call",
5
6
  }
@@ -12,6 +12,13 @@ enum NotificationSettingEventType {
12
12
  SEND_ALERT_STATE_CHANGED_OWNER_NOTIFICATION = "Send alert state changed notification when I am the owner of the alert",
13
13
  SEND_ALERT_OWNER_ADDED_NOTIFICATION = "Send notification when I am added as a owner to the alert",
14
14
 
15
+ // Alert Episodes
16
+
17
+ SEND_ALERT_EPISODE_CREATED_OWNER_NOTIFICATION = "Send alert episode created notification when I am the owner of the alert episode",
18
+ SEND_ALERT_EPISODE_NOTE_POSTED_OWNER_NOTIFICATION = "Send alert episode note posted notification when I am the owner of the alert episode",
19
+ SEND_ALERT_EPISODE_STATE_CHANGED_OWNER_NOTIFICATION = "Send alert episode state changed notification when I am the owner of the alert episode",
20
+ SEND_ALERT_EPISODE_OWNER_ADDED_NOTIFICATION = "Send notification when I am added as a owner to the alert episode",
21
+
15
22
  // Monitors
16
23
  SEND_MONITOR_OWNER_ADDED_NOTIFICATION = "Send notification when I am added as a owner to the monitor",
17
24
  SEND_MONITOR_CREATED_OWNER_NOTIFICATION = "Send monitor created notification when I am the owner of the monitor",