@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
@@ -223,7 +223,19 @@ import { AddIncomingEmailMonitor1768335589018 } from "./1768335589018-AddIncomin
223
223
  import { MigrationName1768422356713 } from "./1768422356713-MigrationName";
224
224
  import { MigrationName1768583966447 } from "./1768583966447-MigrationName";
225
225
  import { MigrationName1768825402472 } from "./1768825402472-MigrationName";
226
+ import { MigrationName1768938069147 } from "./1768938069147-MigrationName";
227
+ import { MigrationName1769125561322 } from "./1769125561322-MigrationName";
226
228
  import { MigrationName1769169355244 } from "./1769169355244-MigrationName";
229
+ import { MigrationName1769170578688 } from "./1769170578688-MigrationName";
230
+ import { MigrationName1769172358833 } from "./1769172358833-MigrationName";
231
+ import { MigrationName1769176450526 } from "./1769176450526-MigrationName";
232
+ import { MigrationName1769190495840 } from "./1769190495840-MigrationName";
233
+ import { MigrationName1769199303656 } from "./1769199303656-MigrationName";
234
+ import { MigrationName1769202898645 } from "./1769202898645-MigrationName";
235
+ import { MigrationName1769428619414 } from "./1769428619414-MigrationName";
236
+ import { MigrationName1769428821686 } from "./1769428821686-MigrationName";
237
+ import { MigrationName1769469813786 } from "./1769469813786-MigrationName";
238
+ import { RenameNotificationRuleTypes1769517677937 } from "./1769517677937-RenameNotificationRuleTypes";
227
239
 
228
240
  export default [
229
241
  InitialMigration,
@@ -452,4 +464,16 @@ export default [
452
464
  MigrationName1768583966447,
453
465
  MigrationName1768825402472,
454
466
  MigrationName1769169355244,
467
+ MigrationName1768938069147,
468
+ MigrationName1769125561322,
469
+ MigrationName1769170578688,
470
+ MigrationName1769172358833,
471
+ MigrationName1769176450526,
472
+ MigrationName1769190495840,
473
+ MigrationName1769199303656,
474
+ MigrationName1769202898645,
475
+ MigrationName1769428619414,
476
+ MigrationName1769428821686,
477
+ MigrationName1769469813786,
478
+ RenameNotificationRuleTypes1769517677937,
455
479
  ];
@@ -0,0 +1,94 @@
1
+ import { Blue500 } from "../../Types/BrandColors";
2
+ import Color from "../../Types/Color";
3
+ import OneUptimeDate from "../../Types/Date";
4
+ import BadDataException from "../../Types/Exception/BadDataException";
5
+ import ObjectID from "../../Types/ObjectID";
6
+ import { IsBillingEnabled } from "../EnvironmentConfig";
7
+ import logger from "../Utils/Logger";
8
+ import DatabaseService from "./DatabaseService";
9
+ import Model, {
10
+ AlertEpisodeFeedEventType,
11
+ } from "../../Models/DatabaseModels/AlertEpisodeFeed";
12
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
13
+
14
+ export class Service extends DatabaseService<Model> {
15
+ public constructor() {
16
+ super(Model);
17
+
18
+ if (IsBillingEnabled) {
19
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365); // 3 years
20
+ }
21
+ }
22
+
23
+ @CaptureSpan()
24
+ public async createAlertEpisodeFeedItem(data: {
25
+ alertEpisodeId: ObjectID;
26
+ feedInfoInMarkdown: string;
27
+ alertEpisodeFeedEventType: AlertEpisodeFeedEventType;
28
+ projectId: ObjectID;
29
+ moreInformationInMarkdown?: string | undefined;
30
+ displayColor?: Color | undefined;
31
+ userId?: ObjectID | undefined;
32
+ postedAt?: Date | undefined;
33
+ }): Promise<void> {
34
+ try {
35
+ if (!data.alertEpisodeId) {
36
+ throw new BadDataException("Alert Episode ID is required");
37
+ }
38
+
39
+ if (!data.feedInfoInMarkdown) {
40
+ throw new BadDataException("Log in markdown is required");
41
+ }
42
+
43
+ if (!data.alertEpisodeFeedEventType) {
44
+ throw new BadDataException("Alert episode log event is required");
45
+ }
46
+
47
+ if (!data.projectId) {
48
+ throw new BadDataException("Project ID is required");
49
+ }
50
+
51
+ const alertEpisodeFeed: Model = new Model();
52
+
53
+ if (!data.displayColor) {
54
+ data.displayColor = Blue500;
55
+ }
56
+
57
+ if (data.userId) {
58
+ alertEpisodeFeed.userId = data.userId;
59
+ }
60
+
61
+ alertEpisodeFeed.displayColor = data.displayColor;
62
+
63
+ alertEpisodeFeed.alertEpisodeId = data.alertEpisodeId;
64
+ alertEpisodeFeed.feedInfoInMarkdown = data.feedInfoInMarkdown;
65
+ alertEpisodeFeed.alertEpisodeFeedEventType =
66
+ data.alertEpisodeFeedEventType;
67
+ alertEpisodeFeed.projectId = data.projectId;
68
+
69
+ if (!data.postedAt) {
70
+ alertEpisodeFeed.postedAt = OneUptimeDate.getCurrentDate();
71
+ } else {
72
+ alertEpisodeFeed.postedAt = data.postedAt;
73
+ }
74
+
75
+ if (data.moreInformationInMarkdown) {
76
+ alertEpisodeFeed.moreInformationInMarkdown =
77
+ data.moreInformationInMarkdown;
78
+ }
79
+
80
+ await this.create({
81
+ data: alertEpisodeFeed,
82
+ props: {
83
+ isRoot: true,
84
+ },
85
+ });
86
+ } catch (error) {
87
+ logger.error("AlertEpisodeFeedService.createAlertEpisodeFeedItem");
88
+ logger.error(error);
89
+ // we dont want to throw the error here, as this is a non-critical operation
90
+ }
91
+ }
92
+ }
93
+
94
+ export default new Service();
@@ -0,0 +1,71 @@
1
+ import ObjectID from "../../Types/ObjectID";
2
+ import DatabaseService from "./DatabaseService";
3
+ import Model from "../../Models/DatabaseModels/AlertEpisodeInternalNote";
4
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
5
+ import File from "../../Models/DatabaseModels/File";
6
+
7
+ export class Service extends DatabaseService<Model> {
8
+ public constructor() {
9
+ super(Model);
10
+ }
11
+
12
+ @CaptureSpan()
13
+ public async addNote(data: {
14
+ userId: ObjectID;
15
+ alertEpisodeId: ObjectID;
16
+ projectId: ObjectID;
17
+ note: string;
18
+ attachmentFileIds?: Array<ObjectID>;
19
+ postedFromSlackMessageId?: string;
20
+ }): Promise<Model> {
21
+ const internalNote: Model = new Model();
22
+ internalNote.createdByUserId = data.userId;
23
+ internalNote.alertEpisodeId = data.alertEpisodeId;
24
+ internalNote.projectId = data.projectId;
25
+ internalNote.note = data.note;
26
+
27
+ if (data.postedFromSlackMessageId) {
28
+ internalNote.postedFromSlackMessageId = data.postedFromSlackMessageId;
29
+ }
30
+
31
+ if (data.attachmentFileIds && data.attachmentFileIds.length > 0) {
32
+ internalNote.attachments = data.attachmentFileIds.map(
33
+ (fileId: ObjectID) => {
34
+ const file: File = new File();
35
+ file.id = fileId;
36
+ return file;
37
+ },
38
+ );
39
+ }
40
+
41
+ return this.create({
42
+ data: internalNote,
43
+ props: {
44
+ isRoot: true,
45
+ },
46
+ });
47
+ }
48
+
49
+ @CaptureSpan()
50
+ public async hasNoteFromSlackMessage(data: {
51
+ alertEpisodeId: ObjectID;
52
+ postedFromSlackMessageId: string;
53
+ }): Promise<boolean> {
54
+ const existingNote: Model | null = await this.findOneBy({
55
+ query: {
56
+ alertEpisodeId: data.alertEpisodeId,
57
+ postedFromSlackMessageId: data.postedFromSlackMessageId,
58
+ },
59
+ select: {
60
+ _id: true,
61
+ },
62
+ props: {
63
+ isRoot: true,
64
+ },
65
+ });
66
+
67
+ return existingNote !== null;
68
+ }
69
+ }
70
+
71
+ export default new Service();
@@ -0,0 +1,267 @@
1
+ import CreateBy from "../Types/Database/CreateBy";
2
+ import DeleteBy from "../Types/Database/DeleteBy";
3
+ import { OnCreate, OnDelete } from "../Types/Database/Hooks";
4
+ import DatabaseService from "./DatabaseService";
5
+ import BadDataException from "../../Types/Exception/BadDataException";
6
+ import ObjectID from "../../Types/ObjectID";
7
+ import Model from "../../Models/DatabaseModels/AlertEpisodeMember";
8
+ import Alert from "../../Models/DatabaseModels/Alert";
9
+ import { IsBillingEnabled } from "../EnvironmentConfig";
10
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
11
+ import logger from "../Utils/Logger";
12
+ import AlertEpisodeFeedService from "./AlertEpisodeFeedService";
13
+ import { AlertEpisodeFeedEventType } from "../../Models/DatabaseModels/AlertEpisodeFeed";
14
+ import { Yellow500, Green500 } from "../../Types/BrandColors";
15
+ import OneUptimeDate from "../../Types/Date";
16
+ import AlertService from "./AlertService";
17
+ import AlertEpisodeService from "./AlertEpisodeService";
18
+
19
+ export class Service extends DatabaseService<Model> {
20
+ public constructor() {
21
+ super(Model);
22
+ if (IsBillingEnabled) {
23
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365); // 3 years
24
+ }
25
+ }
26
+
27
+ @CaptureSpan()
28
+ protected override async onBeforeCreate(
29
+ createBy: CreateBy<Model>,
30
+ ): Promise<OnCreate<Model>> {
31
+ if (!createBy.data.alertEpisodeId) {
32
+ throw new BadDataException("alertEpisodeId is required");
33
+ }
34
+
35
+ if (!createBy.data.alertId) {
36
+ throw new BadDataException("alertId is required");
37
+ }
38
+
39
+ // Check if this alert is already in the episode
40
+ const existingMember: Model | null = await this.findOneBy({
41
+ query: {
42
+ alertEpisodeId: createBy.data.alertEpisodeId,
43
+ alertId: createBy.data.alertId,
44
+ },
45
+ props: {
46
+ isRoot: true,
47
+ },
48
+ select: {
49
+ _id: true,
50
+ },
51
+ });
52
+
53
+ if (existingMember) {
54
+ throw new BadDataException("Alert is already a member of this episode");
55
+ }
56
+
57
+ // Set addedAt if not provided
58
+ if (!createBy.data.addedAt) {
59
+ createBy.data.addedAt = OneUptimeDate.getCurrentDate();
60
+ }
61
+
62
+ return { createBy, carryForward: null };
63
+ }
64
+
65
+ @CaptureSpan()
66
+ protected override async onCreateSuccess(
67
+ _onCreate: OnCreate<Model>,
68
+ createdItem: Model,
69
+ ): Promise<Model> {
70
+ if (!createdItem.alertEpisodeId) {
71
+ throw new BadDataException("alertEpisodeId is required");
72
+ }
73
+
74
+ if (!createdItem.alertId) {
75
+ throw new BadDataException("alertId is required");
76
+ }
77
+
78
+ if (!createdItem.projectId) {
79
+ throw new BadDataException("projectId is required");
80
+ }
81
+
82
+ // Update alert's episode reference
83
+ await AlertService.updateOneById({
84
+ id: createdItem.alertId,
85
+ data: {
86
+ alertEpisodeId: createdItem.alertEpisodeId,
87
+ },
88
+ props: {
89
+ isRoot: true,
90
+ },
91
+ });
92
+
93
+ // Update episode's alertCount and lastAlertAddedAt
94
+ Promise.resolve()
95
+ .then(async () => {
96
+ try {
97
+ await AlertEpisodeService.updateAlertCount(
98
+ createdItem.alertEpisodeId!,
99
+ );
100
+ await AlertEpisodeService.updateLastAlertAddedAt(
101
+ createdItem.alertEpisodeId!,
102
+ );
103
+ } catch (error) {
104
+ logger.error(
105
+ `Error updating episode counts in AlertEpisodeMemberService.onCreateSuccess: ${error}`,
106
+ );
107
+ }
108
+ })
109
+ .catch((error: Error) => {
110
+ logger.error(
111
+ `Critical error in AlertEpisodeMemberService.onCreateSuccess: ${error}`,
112
+ );
113
+ });
114
+
115
+ // Get alert details for feed
116
+ const alert: Alert | null = await AlertService.findOneById({
117
+ id: createdItem.alertId,
118
+ select: {
119
+ alertNumber: true,
120
+ title: true,
121
+ },
122
+ props: {
123
+ isRoot: true,
124
+ },
125
+ });
126
+
127
+ // Create feed item
128
+ await AlertEpisodeFeedService.createAlertEpisodeFeedItem({
129
+ alertEpisodeId: createdItem.alertEpisodeId,
130
+ projectId: createdItem.projectId,
131
+ alertEpisodeFeedEventType: AlertEpisodeFeedEventType.AlertAdded,
132
+ displayColor: Yellow500,
133
+ feedInfoInMarkdown: `**Alert #${alert?.alertNumber || "N/A"}** added to episode: ${alert?.title || "No title"}`,
134
+ userId: createdItem.addedByUserId || undefined,
135
+ });
136
+
137
+ return createdItem;
138
+ }
139
+
140
+ @CaptureSpan()
141
+ protected override async onBeforeDelete(
142
+ deleteBy: DeleteBy<Model>,
143
+ ): Promise<OnDelete<Model>> {
144
+ // Get the member records before deletion
145
+ const membersToDelete: Model[] = await this.findBy({
146
+ query: deleteBy.query,
147
+ props: {
148
+ isRoot: true,
149
+ },
150
+ select: {
151
+ alertEpisodeId: true,
152
+ alertId: true,
153
+ projectId: true,
154
+ },
155
+ limit: 100,
156
+ skip: 0,
157
+ });
158
+
159
+ return {
160
+ deleteBy,
161
+ carryForward: membersToDelete,
162
+ };
163
+ }
164
+
165
+ @CaptureSpan()
166
+ protected override async onDeleteSuccess(
167
+ onDelete: OnDelete<Model>,
168
+ _itemIdsBeforeDelete: ObjectID[],
169
+ ): Promise<OnDelete<Model>> {
170
+ const membersDeleted: Model[] = onDelete.carryForward as Model[];
171
+
172
+ if (membersDeleted && membersDeleted.length > 0) {
173
+ for (const member of membersDeleted) {
174
+ if (member.alertId) {
175
+ // Clear the episode reference from the alert
176
+ await AlertService.updateOneById({
177
+ id: member.alertId,
178
+ data: {
179
+ alertEpisodeId: undefined as any,
180
+ },
181
+ props: {
182
+ isRoot: true,
183
+ },
184
+ });
185
+
186
+ // Get alert details for feed
187
+ const alert: Alert | null = await AlertService.findOneById({
188
+ id: member.alertId,
189
+ select: {
190
+ alertNumber: true,
191
+ title: true,
192
+ },
193
+ props: {
194
+ isRoot: true,
195
+ },
196
+ });
197
+
198
+ // Create feed item for removal
199
+ if (member.alertEpisodeId && member.projectId) {
200
+ await AlertEpisodeFeedService.createAlertEpisodeFeedItem({
201
+ alertEpisodeId: member.alertEpisodeId,
202
+ projectId: member.projectId,
203
+ alertEpisodeFeedEventType: AlertEpisodeFeedEventType.AlertRemoved,
204
+ displayColor: Green500,
205
+ feedInfoInMarkdown: `**Alert #${alert?.alertNumber || "N/A"}** removed from episode: ${alert?.title || "No title"}`,
206
+ });
207
+ }
208
+ }
209
+
210
+ if (member.alertEpisodeId) {
211
+ // Update episode's alertCount
212
+ await AlertEpisodeService.updateAlertCount(member.alertEpisodeId);
213
+ }
214
+ }
215
+ }
216
+
217
+ return onDelete;
218
+ }
219
+
220
+ @CaptureSpan()
221
+ public async getAlertsInEpisode(episodeId: ObjectID): Promise<ObjectID[]> {
222
+ const members: Model[] = await this.findBy({
223
+ query: {
224
+ alertEpisodeId: episodeId,
225
+ },
226
+ props: {
227
+ isRoot: true,
228
+ },
229
+ select: {
230
+ alertId: true,
231
+ },
232
+ limit: 1000,
233
+ skip: 0,
234
+ });
235
+
236
+ return members
237
+ .filter((m: Model) => {
238
+ return m.alertId;
239
+ })
240
+ .map((m: Model) => {
241
+ return m.alertId!;
242
+ });
243
+ }
244
+
245
+ @CaptureSpan()
246
+ public async isAlertInEpisode(
247
+ alertId: ObjectID,
248
+ episodeId: ObjectID,
249
+ ): Promise<boolean> {
250
+ const member: Model | null = await this.findOneBy({
251
+ query: {
252
+ alertId: alertId,
253
+ alertEpisodeId: episodeId,
254
+ },
255
+ props: {
256
+ isRoot: true,
257
+ },
258
+ select: {
259
+ _id: true,
260
+ },
261
+ });
262
+
263
+ return member !== null;
264
+ }
265
+ }
266
+
267
+ export default new Service();
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/AlertEpisodeOwnerTeam";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/AlertEpisodeOwnerUser";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();