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