@oneuptime/common 9.4.12 → 9.4.13

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 (256) hide show
  1. package/Models/DatabaseModels/Incident.ts +77 -0
  2. package/Models/DatabaseModels/IncidentEpisode.ts +1223 -0
  3. package/Models/DatabaseModels/IncidentEpisodeFeed.ts +533 -0
  4. package/Models/DatabaseModels/IncidentEpisodeInternalNote.ts +456 -0
  5. package/Models/DatabaseModels/IncidentEpisodeMember.ts +587 -0
  6. package/Models/DatabaseModels/IncidentEpisodeOwnerTeam.ts +421 -0
  7. package/Models/DatabaseModels/IncidentEpisodeOwnerUser.ts +419 -0
  8. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +524 -0
  9. package/Models/DatabaseModels/IncidentGroupingRule.ts +1430 -0
  10. package/Models/DatabaseModels/Index.ts +18 -0
  11. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +70 -0
  12. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.ts +59 -0
  13. package/Models/DatabaseModels/UserOnCallLog.ts +48 -0
  14. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +49 -0
  15. package/Models/DatabaseModels/WorkspaceNotificationLog.ts +57 -0
  16. package/Server/API/IncidentEpisodeAPI.ts +150 -0
  17. package/Server/API/SlackAPI.ts +23 -0
  18. package/Server/API/UserOnCallLogTimelineAPI.ts +24 -4
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/1769626069479-MigrationName.ts +729 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1769629928240-MigrationName.ts +261 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1769676117342-RenameEvaluateOverTimeInCriteriaFilter.ts +28 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  23. package/Server/Services/BillingService.ts +1 -3
  24. package/Server/Services/CallService.ts +1 -0
  25. package/Server/Services/IncidentEpisodeFeedService.ts +94 -0
  26. package/Server/Services/IncidentEpisodeInternalNoteService.ts +71 -0
  27. package/Server/Services/IncidentEpisodeMemberService.ts +321 -0
  28. package/Server/Services/IncidentEpisodeOwnerTeamService.ts +10 -0
  29. package/Server/Services/IncidentEpisodeOwnerUserService.ts +10 -0
  30. package/Server/Services/IncidentEpisodeService.ts +1045 -0
  31. package/Server/Services/IncidentEpisodeStateTimelineService.ts +566 -0
  32. package/Server/Services/IncidentGroupingEngineService.ts +1047 -0
  33. package/Server/Services/IncidentGroupingRuleService.ts +14 -0
  34. package/Server/Services/IncidentService.ts +11 -0
  35. package/Server/Services/Index.ts +18 -0
  36. package/Server/Services/MailService.ts +1 -0
  37. package/Server/Services/MonitorService.ts +9 -0
  38. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +18 -0
  39. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +64 -2
  40. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +26 -1
  41. package/Server/Services/OnCallDutyPolicyService.ts +15 -0
  42. package/Server/Services/SmsService.ts +1 -0
  43. package/Server/Services/UserNotificationRuleService.ts +48 -2
  44. package/Server/Services/UserNotificationSettingService.ts +23 -0
  45. package/Server/Services/UserOnCallLogService.ts +41 -4
  46. package/Server/Services/WhatsAppService.ts +1 -0
  47. package/Server/Services/WorkspaceNotificationLogService.ts +16 -0
  48. package/Server/Services/WorkspaceNotificationRuleService.ts +116 -0
  49. package/Server/Utils/AI/IncidentEpisodeAIContextBuilder.ts +490 -0
  50. package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +1 -1
  51. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +1 -1
  52. package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +1 -1
  53. package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +1 -1
  54. package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +2 -2
  55. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +182 -0
  56. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +13 -0
  57. package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +1 -1
  58. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +37 -0
  59. package/Server/Utils/PushNotificationUtil.ts +31 -0
  60. package/Server/Utils/WhatsAppTemplateUtil.ts +14 -0
  61. package/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.ts +18 -0
  62. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +702 -0
  63. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +20 -0
  64. package/Server/Utils/Workspace/Slack/Actions/ActionTypes.ts +11 -0
  65. package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +918 -0
  66. package/Server/Utils/Workspace/Slack/Messages/IncidentEpisode.ts +120 -0
  67. package/Server/Utils/Workspace/WorkspaceMessages/IncidentEpisode.ts +74 -0
  68. package/Types/Email/EmailTemplateType.ts +6 -0
  69. package/Types/Monitor/CriteriaFilter.ts +24 -4
  70. package/Types/Monitor/MonitorCriteriaInstance.ts +67 -0
  71. package/Types/Monitor/MonitorStep.ts +37 -0
  72. package/Types/Monitor/MonitorStepSnmpMonitor.ts +102 -0
  73. package/Types/Monitor/MonitorType.ts +15 -2
  74. package/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.ts +8 -0
  75. package/Types/Monitor/SnmpMonitor/SnmpDataType.ts +21 -0
  76. package/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.ts +16 -0
  77. package/Types/Monitor/SnmpMonitor/SnmpOid.ts +60 -0
  78. package/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.ts +7 -0
  79. package/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.ts +7 -0
  80. package/Types/Monitor/SnmpMonitor/SnmpV3Auth.ts +12 -0
  81. package/Types/Monitor/SnmpMonitor/SnmpVersion.ts +7 -0
  82. package/Types/NotificationSetting/NotificationSettingEventType.ts +7 -0
  83. package/Types/Permission.ts +311 -0
  84. package/Types/Probe/ProbeMonitorResponse.ts +2 -0
  85. package/Types/UserNotification/UserNotificationEventType.ts +1 -0
  86. package/Types/WhatsApp/WhatsAppTemplates.ts +24 -0
  87. package/Types/Workspace/NotificationRules/EventType.ts +1 -0
  88. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +38 -1
  89. package/Utils/Monitor/MonitorMetricType.ts +2 -1
  90. package/build/dist/Models/DatabaseModels/Incident.js +78 -0
  91. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  92. package/build/dist/Models/DatabaseModels/IncidentEpisode.js +1250 -0
  93. package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -0
  94. package/build/dist/Models/DatabaseModels/IncidentEpisodeFeed.js +555 -0
  95. package/build/dist/Models/DatabaseModels/IncidentEpisodeFeed.js.map +1 -0
  96. package/build/dist/Models/DatabaseModels/IncidentEpisodeInternalNote.js +467 -0
  97. package/build/dist/Models/DatabaseModels/IncidentEpisodeInternalNote.js.map +1 -0
  98. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js +607 -0
  99. package/build/dist/Models/DatabaseModels/IncidentEpisodeMember.js.map +1 -0
  100. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js +437 -0
  101. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerTeam.js.map +1 -0
  102. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js +436 -0
  103. package/build/dist/Models/DatabaseModels/IncidentEpisodeOwnerUser.js.map +1 -0
  104. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +546 -0
  105. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -0
  106. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +1437 -0
  107. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -0
  108. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  109. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  110. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +69 -0
  111. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  112. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js +58 -0
  113. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLogTimeline.js.map +1 -1
  114. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +47 -0
  115. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  116. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +48 -0
  117. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  118. package/build/dist/Models/DatabaseModels/WorkspaceNotificationLog.js +58 -0
  119. package/build/dist/Models/DatabaseModels/WorkspaceNotificationLog.js.map +1 -1
  120. package/build/dist/Server/API/IncidentEpisodeAPI.js +97 -0
  121. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -0
  122. package/build/dist/Server/API/SlackAPI.js +18 -0
  123. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  124. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +30 -10
  125. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
  126. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769626069479-MigrationName.js +256 -0
  127. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769626069479-MigrationName.js.map +1 -0
  128. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769629928240-MigrationName.js +96 -0
  129. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769629928240-MigrationName.js.map +1 -0
  130. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769676117342-RenameEvaluateOverTimeInCriteriaFilter.js +25 -0
  131. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1769676117342-RenameEvaluateOverTimeInCriteriaFilter.js.map +1 -0
  132. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  134. package/build/dist/Server/Services/BillingService.js +1 -2
  135. package/build/dist/Server/Services/BillingService.js.map +1 -1
  136. package/build/dist/Server/Services/CallService.js.map +1 -1
  137. package/build/dist/Server/Services/IncidentEpisodeFeedService.js +83 -0
  138. package/build/dist/Server/Services/IncidentEpisodeFeedService.js.map +1 -0
  139. package/build/dist/Server/Services/IncidentEpisodeInternalNoteService.js +70 -0
  140. package/build/dist/Server/Services/IncidentEpisodeInternalNoteService.js.map +1 -0
  141. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +298 -0
  142. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -0
  143. package/build/dist/Server/Services/IncidentEpisodeOwnerTeamService.js +9 -0
  144. package/build/dist/Server/Services/IncidentEpisodeOwnerTeamService.js.map +1 -0
  145. package/build/dist/Server/Services/IncidentEpisodeOwnerUserService.js +9 -0
  146. package/build/dist/Server/Services/IncidentEpisodeOwnerUserService.js.map +1 -0
  147. package/build/dist/Server/Services/IncidentEpisodeService.js +933 -0
  148. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -0
  149. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +498 -0
  150. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -0
  151. package/build/dist/Server/Services/IncidentGroupingEngineService.js +799 -0
  152. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -0
  153. package/build/dist/Server/Services/IncidentGroupingRuleService.js +13 -0
  154. package/build/dist/Server/Services/IncidentGroupingRuleService.js.map +1 -0
  155. package/build/dist/Server/Services/IncidentService.js +10 -0
  156. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  157. package/build/dist/Server/Services/Index.js +16 -0
  158. package/build/dist/Server/Services/Index.js.map +1 -1
  159. package/build/dist/Server/Services/MailService.js.map +1 -1
  160. package/build/dist/Server/Services/MonitorService.js +9 -1
  161. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  162. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +10 -0
  163. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  164. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +48 -2
  165. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  166. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +20 -1
  167. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  168. package/build/dist/Server/Services/OnCallDutyPolicyService.js +8 -0
  169. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  170. package/build/dist/Server/Services/SmsService.js.map +1 -1
  171. package/build/dist/Server/Services/UserNotificationRuleService.js +39 -2
  172. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  173. package/build/dist/Server/Services/UserNotificationSettingService.js +9 -0
  174. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  175. package/build/dist/Server/Services/UserOnCallLogService.js +35 -3
  176. package/build/dist/Server/Services/UserOnCallLogService.js.map +1 -1
  177. package/build/dist/Server/Services/WhatsAppService.js.map +1 -1
  178. package/build/dist/Server/Services/WorkspaceNotificationLogService.js +12 -0
  179. package/build/dist/Server/Services/WorkspaceNotificationLogService.js.map +1 -1
  180. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +95 -1
  181. package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
  182. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js +402 -0
  183. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js.map +1 -0
  184. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +1 -1
  185. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +1 -1
  186. package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +1 -1
  187. package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +1 -1
  188. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +2 -2
  189. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +135 -0
  190. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -0
  191. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +10 -0
  192. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  193. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +1 -1
  194. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +26 -0
  195. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  196. package/build/dist/Server/Utils/PushNotificationUtil.js +20 -0
  197. package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
  198. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +8 -0
  199. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  200. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js +17 -0
  201. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ActionTypes.js.map +1 -1
  202. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +547 -0
  203. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -0
  204. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +15 -0
  205. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  206. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js +10 -0
  207. package/build/dist/Server/Utils/Workspace/Slack/Actions/ActionTypes.js.map +1 -1
  208. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +651 -0
  209. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -0
  210. package/build/dist/Server/Utils/Workspace/Slack/Messages/IncidentEpisode.js +100 -0
  211. package/build/dist/Server/Utils/Workspace/Slack/Messages/IncidentEpisode.js.map +1 -0
  212. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/IncidentEpisode.js +70 -0
  213. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/IncidentEpisode.js.map +1 -0
  214. package/build/dist/Types/Email/EmailTemplateType.js +5 -0
  215. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  216. package/build/dist/Types/Monitor/CriteriaFilter.js +16 -3
  217. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  218. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +62 -0
  219. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  220. package/build/dist/Types/Monitor/MonitorStep.js +26 -0
  221. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  222. package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js +77 -0
  223. package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js.map +1 -0
  224. package/build/dist/Types/Monitor/MonitorType.js +13 -2
  225. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  226. package/build/dist/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.js +9 -0
  227. package/build/dist/Types/Monitor/SnmpMonitor/SnmpAuthProtocol.js.map +1 -0
  228. package/build/dist/Types/Monitor/SnmpMonitor/SnmpDataType.js +22 -0
  229. package/build/dist/Types/Monitor/SnmpMonitor/SnmpDataType.js.map +1 -0
  230. package/build/dist/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.js +2 -0
  231. package/build/dist/Types/Monitor/SnmpMonitor/SnmpMonitorResponse.js.map +1 -0
  232. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOid.js +55 -0
  233. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOid.js.map +1 -0
  234. package/build/dist/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.js +8 -0
  235. package/build/dist/Types/Monitor/SnmpMonitor/SnmpPrivProtocol.js.map +1 -0
  236. package/build/dist/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.js +8 -0
  237. package/build/dist/Types/Monitor/SnmpMonitor/SnmpSecurityLevel.js.map +1 -0
  238. package/build/dist/Types/Monitor/SnmpMonitor/SnmpV3Auth.js +2 -0
  239. package/build/dist/Types/Monitor/SnmpMonitor/SnmpV3Auth.js.map +1 -0
  240. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVersion.js +8 -0
  241. package/build/dist/Types/Monitor/SnmpMonitor/SnmpVersion.js.map +1 -0
  242. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +5 -0
  243. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  244. package/build/dist/Types/Permission.js +264 -0
  245. package/build/dist/Types/Permission.js.map +1 -1
  246. package/build/dist/Types/UserNotification/UserNotificationEventType.js +1 -0
  247. package/build/dist/Types/UserNotification/UserNotificationEventType.js.map +1 -1
  248. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +15 -0
  249. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
  250. package/build/dist/Types/Workspace/NotificationRules/EventType.js +1 -0
  251. package/build/dist/Types/Workspace/NotificationRules/EventType.js.map +1 -1
  252. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +33 -1
  253. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  254. package/build/dist/Utils/Monitor/MonitorMetricType.js +2 -1
  255. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  256. package/package.json +1 -1
@@ -0,0 +1,321 @@
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/IncidentEpisodeMember";
8
+ import Incident from "../../Models/DatabaseModels/Incident";
9
+ import IncidentEpisode from "../../Models/DatabaseModels/IncidentEpisode";
10
+ import { IsBillingEnabled } from "../EnvironmentConfig";
11
+ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
12
+ import logger from "../Utils/Logger";
13
+ import IncidentEpisodeFeedService from "./IncidentEpisodeFeedService";
14
+ import IncidentFeedService from "./IncidentFeedService";
15
+ import { IncidentEpisodeFeedEventType } from "../../Models/DatabaseModels/IncidentEpisodeFeed";
16
+ import { IncidentFeedEventType } from "../../Models/DatabaseModels/IncidentFeed";
17
+ import { Yellow500, Green500 } from "../../Types/BrandColors";
18
+ import OneUptimeDate from "../../Types/Date";
19
+ import IncidentService from "./IncidentService";
20
+ import IncidentEpisodeService from "./IncidentEpisodeService";
21
+
22
+ export class Service extends DatabaseService<Model> {
23
+ public constructor() {
24
+ super(Model);
25
+ if (IsBillingEnabled) {
26
+ this.hardDeleteItemsOlderThanInDays("createdAt", 3 * 365); // 3 years
27
+ }
28
+ }
29
+
30
+ @CaptureSpan()
31
+ protected override async onBeforeCreate(
32
+ createBy: CreateBy<Model>,
33
+ ): Promise<OnCreate<Model>> {
34
+ if (!createBy.data.incidentEpisodeId) {
35
+ throw new BadDataException("incidentEpisodeId is required");
36
+ }
37
+
38
+ if (!createBy.data.incidentId) {
39
+ throw new BadDataException("incidentId is required");
40
+ }
41
+
42
+ // Check if this incident is already in the episode
43
+ const existingMember: Model | null = await this.findOneBy({
44
+ query: {
45
+ incidentEpisodeId: createBy.data.incidentEpisodeId,
46
+ incidentId: createBy.data.incidentId,
47
+ },
48
+ props: {
49
+ isRoot: true,
50
+ },
51
+ select: {
52
+ _id: true,
53
+ },
54
+ });
55
+
56
+ if (existingMember) {
57
+ throw new BadDataException(
58
+ "Incident is already a member of this episode",
59
+ );
60
+ }
61
+
62
+ // Set addedAt if not provided
63
+ if (!createBy.data.addedAt) {
64
+ createBy.data.addedAt = OneUptimeDate.getCurrentDate();
65
+ }
66
+
67
+ return { createBy, carryForward: null };
68
+ }
69
+
70
+ @CaptureSpan()
71
+ protected override async onCreateSuccess(
72
+ _onCreate: OnCreate<Model>,
73
+ createdItem: Model,
74
+ ): Promise<Model> {
75
+ if (!createdItem.incidentEpisodeId) {
76
+ throw new BadDataException("incidentEpisodeId is required");
77
+ }
78
+
79
+ if (!createdItem.incidentId) {
80
+ throw new BadDataException("incidentId is required");
81
+ }
82
+
83
+ if (!createdItem.projectId) {
84
+ throw new BadDataException("projectId is required");
85
+ }
86
+
87
+ // Update incident's episode reference
88
+ await IncidentService.updateOneById({
89
+ id: createdItem.incidentId,
90
+ data: {
91
+ incidentEpisodeId: createdItem.incidentEpisodeId,
92
+ },
93
+ props: {
94
+ isRoot: true,
95
+ },
96
+ });
97
+
98
+ // Update episode's incidentCount and lastIncidentAddedAt
99
+ Promise.resolve()
100
+ .then(async () => {
101
+ try {
102
+ await IncidentEpisodeService.updateIncidentCount(
103
+ createdItem.incidentEpisodeId!,
104
+ );
105
+ await IncidentEpisodeService.updateLastIncidentAddedAt(
106
+ createdItem.incidentEpisodeId!,
107
+ );
108
+ } catch (error) {
109
+ logger.error(
110
+ `Error updating episode counts in IncidentEpisodeMemberService.onCreateSuccess: ${error}`,
111
+ );
112
+ }
113
+ })
114
+ .catch((error: Error) => {
115
+ logger.error(
116
+ `Critical error in IncidentEpisodeMemberService.onCreateSuccess: ${error}`,
117
+ );
118
+ });
119
+
120
+ // Get incident details for feed
121
+ const incident: Incident | null = await IncidentService.findOneById({
122
+ id: createdItem.incidentId,
123
+ select: {
124
+ incidentNumber: true,
125
+ title: true,
126
+ },
127
+ props: {
128
+ isRoot: true,
129
+ },
130
+ });
131
+
132
+ // Get episode details for feed
133
+ const episode: IncidentEpisode | null =
134
+ await IncidentEpisodeService.findOneById({
135
+ id: createdItem.incidentEpisodeId,
136
+ select: {
137
+ episodeNumber: true,
138
+ title: true,
139
+ },
140
+ props: {
141
+ isRoot: true,
142
+ },
143
+ });
144
+
145
+ // Create feed item on episode
146
+ await IncidentEpisodeFeedService.createIncidentEpisodeFeedItem({
147
+ incidentEpisodeId: createdItem.incidentEpisodeId,
148
+ projectId: createdItem.projectId,
149
+ incidentEpisodeFeedEventType: IncidentEpisodeFeedEventType.IncidentAdded,
150
+ displayColor: Yellow500,
151
+ feedInfoInMarkdown: `**Incident #${incident?.incidentNumber || "N/A"}** added to episode: ${incident?.title || "No title"}`,
152
+ userId: createdItem.addedByUserId || undefined,
153
+ });
154
+
155
+ // Create feed item on incident
156
+ await IncidentFeedService.createIncidentFeedItem({
157
+ incidentId: createdItem.incidentId,
158
+ projectId: createdItem.projectId,
159
+ incidentFeedEventType: IncidentFeedEventType.IncidentUpdated,
160
+ displayColor: Yellow500,
161
+ feedInfoInMarkdown: `Added to **Episode #${episode?.episodeNumber || "N/A"}**: ${episode?.title || "No title"}`,
162
+ userId: createdItem.addedByUserId || undefined,
163
+ });
164
+
165
+ return createdItem;
166
+ }
167
+
168
+ @CaptureSpan()
169
+ protected override async onBeforeDelete(
170
+ deleteBy: DeleteBy<Model>,
171
+ ): Promise<OnDelete<Model>> {
172
+ // Get the member records before deletion
173
+ const membersToDelete: Model[] = await this.findBy({
174
+ query: deleteBy.query,
175
+ props: {
176
+ isRoot: true,
177
+ },
178
+ select: {
179
+ incidentEpisodeId: true,
180
+ incidentId: true,
181
+ projectId: true,
182
+ },
183
+ limit: 100,
184
+ skip: 0,
185
+ });
186
+
187
+ return {
188
+ deleteBy,
189
+ carryForward: membersToDelete,
190
+ };
191
+ }
192
+
193
+ @CaptureSpan()
194
+ protected override async onDeleteSuccess(
195
+ onDelete: OnDelete<Model>,
196
+ _itemIdsBeforeDelete: ObjectID[],
197
+ ): Promise<OnDelete<Model>> {
198
+ const membersDeleted: Model[] = onDelete.carryForward as Model[];
199
+
200
+ if (membersDeleted && membersDeleted.length > 0) {
201
+ for (const member of membersDeleted) {
202
+ if (member.incidentId) {
203
+ // Clear the episode reference from the incident
204
+ await IncidentService.updateOneById({
205
+ id: member.incidentId,
206
+ data: {
207
+ incidentEpisodeId: undefined as any,
208
+ },
209
+ props: {
210
+ isRoot: true,
211
+ },
212
+ });
213
+
214
+ // Get incident details for feed
215
+ const incident: Incident | null = await IncidentService.findOneById({
216
+ id: member.incidentId,
217
+ select: {
218
+ incidentNumber: true,
219
+ title: true,
220
+ },
221
+ props: {
222
+ isRoot: true,
223
+ },
224
+ });
225
+
226
+ // Create feed item for removal
227
+ if (member.incidentEpisodeId && member.projectId) {
228
+ // Get episode details for feed
229
+ const episode: IncidentEpisode | null =
230
+ await IncidentEpisodeService.findOneById({
231
+ id: member.incidentEpisodeId,
232
+ select: {
233
+ episodeNumber: true,
234
+ title: true,
235
+ },
236
+ props: {
237
+ isRoot: true,
238
+ },
239
+ });
240
+
241
+ // Create feed item on episode
242
+ await IncidentEpisodeFeedService.createIncidentEpisodeFeedItem({
243
+ incidentEpisodeId: member.incidentEpisodeId,
244
+ projectId: member.projectId,
245
+ incidentEpisodeFeedEventType:
246
+ IncidentEpisodeFeedEventType.IncidentRemoved,
247
+ displayColor: Green500,
248
+ feedInfoInMarkdown: `**Incident #${incident?.incidentNumber || "N/A"}** removed from episode: ${incident?.title || "No title"}`,
249
+ });
250
+
251
+ // Create feed item on incident
252
+ await IncidentFeedService.createIncidentFeedItem({
253
+ incidentId: member.incidentId,
254
+ projectId: member.projectId,
255
+ incidentFeedEventType: IncidentFeedEventType.IncidentUpdated,
256
+ displayColor: Green500,
257
+ feedInfoInMarkdown: `Removed from **Episode #${episode?.episodeNumber || "N/A"}**: ${episode?.title || "No title"}`,
258
+ });
259
+ }
260
+ }
261
+
262
+ if (member.incidentEpisodeId) {
263
+ // Update episode's incidentCount
264
+ await IncidentEpisodeService.updateIncidentCount(
265
+ member.incidentEpisodeId,
266
+ );
267
+ }
268
+ }
269
+ }
270
+
271
+ return onDelete;
272
+ }
273
+
274
+ @CaptureSpan()
275
+ public async getIncidentsInEpisode(episodeId: ObjectID): Promise<ObjectID[]> {
276
+ const members: Model[] = await this.findBy({
277
+ query: {
278
+ incidentEpisodeId: episodeId,
279
+ },
280
+ props: {
281
+ isRoot: true,
282
+ },
283
+ select: {
284
+ incidentId: true,
285
+ },
286
+ limit: 1000,
287
+ skip: 0,
288
+ });
289
+
290
+ return members
291
+ .filter((m: Model) => {
292
+ return m.incidentId;
293
+ })
294
+ .map((m: Model) => {
295
+ return m.incidentId!;
296
+ });
297
+ }
298
+
299
+ @CaptureSpan()
300
+ public async isIncidentInEpisode(
301
+ incidentId: ObjectID,
302
+ episodeId: ObjectID,
303
+ ): Promise<boolean> {
304
+ const member: Model | null = await this.findOneBy({
305
+ query: {
306
+ incidentId: incidentId,
307
+ incidentEpisodeId: episodeId,
308
+ },
309
+ props: {
310
+ isRoot: true,
311
+ },
312
+ select: {
313
+ _id: true,
314
+ },
315
+ });
316
+
317
+ return member !== null;
318
+ }
319
+ }
320
+
321
+ export default new Service();
@@ -0,0 +1,10 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/IncidentEpisodeOwnerTeam";
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/IncidentEpisodeOwnerUser";
3
+
4
+ export class Service extends DatabaseService<Model> {
5
+ public constructor() {
6
+ super(Model);
7
+ }
8
+ }
9
+
10
+ export default new Service();