@oneuptime/common 11.3.20 → 11.3.22

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 (212) hide show
  1. package/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.ts +2 -0
  2. package/Models/AnalyticsModels/ExceptionInstance.ts +1 -0
  3. package/Models/AnalyticsModels/Log.ts +1 -0
  4. package/Models/AnalyticsModels/Metric.ts +1 -0
  5. package/Models/AnalyticsModels/MonitorLog.ts +1 -0
  6. package/Models/AnalyticsModels/Span.ts +1 -0
  7. package/Models/DatabaseModels/Alert.ts +100 -0
  8. package/Models/DatabaseModels/AlertInternalNote.ts +2 -0
  9. package/Models/DatabaseModels/AlertReminderRule.ts +597 -0
  10. package/Models/DatabaseModels/AlertSeverity.ts +2 -0
  11. package/Models/DatabaseModels/AlertState.ts +2 -0
  12. package/Models/DatabaseModels/AlertStateTimeline.ts +2 -0
  13. package/Models/DatabaseModels/EnterpriseLicenseInstance.ts +173 -0
  14. package/Models/DatabaseModels/GlobalConfig.ts +19 -0
  15. package/Models/DatabaseModels/Incident.ts +100 -0
  16. package/Models/DatabaseModels/IncidentInternalNote.ts +2 -0
  17. package/Models/DatabaseModels/IncidentPublicNote.ts +2 -0
  18. package/Models/DatabaseModels/IncidentReminderRule.ts +597 -0
  19. package/Models/DatabaseModels/IncidentSeverity.ts +2 -0
  20. package/Models/DatabaseModels/IncidentStateTimeline.ts +2 -0
  21. package/Models/DatabaseModels/Index.ts +8 -0
  22. package/Models/DatabaseModels/Label.ts +2 -0
  23. package/Models/DatabaseModels/MonitorStatusTimeline.ts +2 -0
  24. package/Models/DatabaseModels/ScheduledMaintenance.ts +100 -0
  25. package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +585 -0
  26. package/Models/DatabaseModels/ScheduledMaintenanceState.ts +2 -0
  27. package/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.ts +2 -0
  28. package/Models/DatabaseModels/StatusPageAnnouncement.ts +2 -0
  29. package/Server/API/DashboardAPI.ts +221 -0
  30. package/Server/API/EnterpriseLicenseAPI.ts +279 -12
  31. package/Server/API/GlobalConfigAPI.ts +81 -16
  32. package/Server/API/StatusPageAPI.ts +894 -791
  33. package/Server/EnvironmentConfig.ts +9 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1783226868418-AddEnterpriseLicenseInstance.ts +47 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.ts +211 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.ts +113 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.ts +20 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.ts +69 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  40. package/Server/Services/AlertReminderRuleService.ts +253 -0
  41. package/Server/Services/AlertService.ts +106 -0
  42. package/Server/Services/EnterpriseLicenseInstanceService.ts +10 -0
  43. package/Server/Services/IncidentReminderRuleService.ts +256 -0
  44. package/Server/Services/IncidentService.ts +143 -0
  45. package/Server/Services/Index.ts +8 -0
  46. package/Server/Services/IoTDeviceService.ts +99 -4
  47. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +236 -0
  48. package/Server/Services/ScheduledMaintenanceService.ts +127 -0
  49. package/Server/Services/StatusPageService.ts +104 -45
  50. package/Server/Services/TelemetryExceptionService.ts +123 -0
  51. package/Server/Services/UserNotificationSettingService.ts +24 -0
  52. package/Server/Utils/AnalyticsDatabase/Statement.ts +7 -3
  53. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +35 -0
  54. package/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.ts +6 -4
  55. package/Server/Utils/Monitor/MonitorCriteriaDataExtractor.ts +7 -6
  56. package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +6 -4
  57. package/Server/Utils/Telemetry/IoTSnapshotScan.ts +45 -7
  58. package/Server/Utils/WhatsAppTemplateUtil.ts +10 -0
  59. package/ServiceRoute.ts +4 -0
  60. package/Tests/Server/Services/IoTDeviceService.test.ts +280 -0
  61. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +49 -0
  62. package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +390 -0
  63. package/Tests/Server/Utils/Telemetry/IoTSnapshotScan.test.ts +202 -0
  64. package/Tests/Utils/EnterpriseLicenseUsage.test.ts +165 -0
  65. package/Types/Email/EmailTemplateType.ts +3 -0
  66. package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +18 -0
  67. package/Types/Monitor/MonitorStep.ts +32 -0
  68. package/Types/NotificationSetting/NotificationSettingEventType.ts +3 -0
  69. package/Types/Permission.ts +144 -0
  70. package/Types/Reminder/ReminderStopState.ts +6 -0
  71. package/Types/Reminder/ScheduledMaintenanceReminderStopState.ts +6 -0
  72. package/Types/WhatsApp/WhatsAppTemplates.ts +14 -0
  73. package/UI/Components/EditionLabel/EditionLabel.tsx +172 -0
  74. package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +125 -0
  75. package/build/dist/Models/AnalyticsModels/AnalyticsBaseModel/CommonModel.js.map +1 -1
  76. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +1 -0
  77. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -1
  78. package/build/dist/Models/AnalyticsModels/Log.js +1 -0
  79. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  80. package/build/dist/Models/AnalyticsModels/Metric.js +1 -0
  81. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  82. package/build/dist/Models/AnalyticsModels/MonitorLog.js +1 -0
  83. package/build/dist/Models/AnalyticsModels/MonitorLog.js.map +1 -1
  84. package/build/dist/Models/AnalyticsModels/Span.js +1 -0
  85. package/build/dist/Models/AnalyticsModels/Span.js.map +1 -1
  86. package/build/dist/Models/DatabaseModels/Alert.js +103 -0
  87. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  88. package/build/dist/Models/DatabaseModels/AlertInternalNote.js +2 -0
  89. package/build/dist/Models/DatabaseModels/AlertInternalNote.js.map +1 -1
  90. package/build/dist/Models/DatabaseModels/AlertReminderRule.js +605 -0
  91. package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -0
  92. package/build/dist/Models/DatabaseModels/AlertSeverity.js +2 -0
  93. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  94. package/build/dist/Models/DatabaseModels/AlertState.js +2 -0
  95. package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
  96. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +2 -0
  97. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
  98. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js +197 -0
  99. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js.map +1 -0
  100. package/build/dist/Models/DatabaseModels/GlobalConfig.js +18 -0
  101. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  102. package/build/dist/Models/DatabaseModels/Incident.js +103 -0
  103. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  104. package/build/dist/Models/DatabaseModels/IncidentInternalNote.js +2 -0
  105. package/build/dist/Models/DatabaseModels/IncidentInternalNote.js.map +1 -1
  106. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +2 -0
  107. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  108. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +605 -0
  109. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -0
  110. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +2 -0
  111. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  112. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +2 -0
  113. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  114. package/build/dist/Models/DatabaseModels/Index.js +8 -0
  115. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  116. package/build/dist/Models/DatabaseModels/Label.js +2 -0
  117. package/build/dist/Models/DatabaseModels/Label.js.map +1 -1
  118. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +2 -0
  119. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
  120. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +103 -0
  121. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  122. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +596 -0
  123. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -0
  124. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js +2 -0
  125. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js.map +1 -1
  126. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js +2 -0
  127. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceStateTimeline.js.map +1 -1
  128. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +2 -0
  129. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  130. package/build/dist/Server/API/DashboardAPI.js +166 -16
  131. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  132. package/build/dist/Server/API/EnterpriseLicenseAPI.js +203 -13
  133. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  134. package/build/dist/Server/API/GlobalConfigAPI.js +62 -15
  135. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  136. package/build/dist/Server/API/StatusPageAPI.js +74 -31
  137. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  138. package/build/dist/Server/EnvironmentConfig.js +6 -0
  139. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  140. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783226868418-AddEnterpriseLicenseInstance.js +22 -0
  141. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783226868418-AddEnterpriseLicenseInstance.js.map +1 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.js +78 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783234451106-AddIncidentAlertReminderRules.js.map +1 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.js +44 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783320000000-AddScheduledMaintenanceReminderRules.js.map +1 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.js +12 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783330000000-AddRemindWhileScheduledToScheduledMaintenanceReminderRule.js.map +1 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.js +30 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783340000000-AddLabelsToIncidentAndAlertReminderRules.js.map +1 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  151. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  152. package/build/dist/Server/Services/AlertReminderRuleService.js +228 -0
  153. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -0
  154. package/build/dist/Server/Services/AlertService.js +87 -0
  155. package/build/dist/Server/Services/AlertService.js.map +1 -1
  156. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js +9 -0
  157. package/build/dist/Server/Services/EnterpriseLicenseInstanceService.js.map +1 -0
  158. package/build/dist/Server/Services/IncidentReminderRuleService.js +231 -0
  159. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -0
  160. package/build/dist/Server/Services/IncidentService.js +116 -0
  161. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  162. package/build/dist/Server/Services/Index.js +8 -0
  163. package/build/dist/Server/Services/Index.js.map +1 -1
  164. package/build/dist/Server/Services/IoTDeviceService.js +66 -4
  165. package/build/dist/Server/Services/IoTDeviceService.js.map +1 -1
  166. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +214 -0
  167. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -0
  168. package/build/dist/Server/Services/ScheduledMaintenanceService.js +102 -0
  169. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  170. package/build/dist/Server/Services/StatusPageService.js +91 -43
  171. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  172. package/build/dist/Server/Services/TelemetryExceptionService.js +101 -0
  173. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  174. package/build/dist/Server/Services/UserNotificationSettingService.js +6 -0
  175. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  176. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js +4 -2
  177. package/build/dist/Server/Utils/AnalyticsDatabase/Statement.js.map +1 -1
  178. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +29 -0
  179. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  180. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js +4 -5
  181. package/build/dist/Server/Utils/Monitor/Criteria/MetricMonitorCriteria.js.map +1 -1
  182. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js +6 -5
  183. package/build/dist/Server/Utils/Monitor/MonitorCriteriaDataExtractor.js.map +1 -1
  184. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -9
  185. package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
  186. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js +33 -2
  187. package/build/dist/Server/Utils/Telemetry/IoTSnapshotScan.js.map +1 -1
  188. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +6 -0
  189. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  190. package/build/dist/ServiceRoute.js +1 -0
  191. package/build/dist/ServiceRoute.js.map +1 -1
  192. package/build/dist/Types/Email/EmailTemplateType.js +3 -0
  193. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  194. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.js +2 -0
  195. package/build/dist/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.js.map +1 -0
  196. package/build/dist/Types/Monitor/MonitorStep.js +25 -0
  197. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  198. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  199. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  200. package/build/dist/Types/Permission.js +126 -0
  201. package/build/dist/Types/Permission.js.map +1 -1
  202. package/build/dist/Types/Reminder/ReminderStopState.js +7 -0
  203. package/build/dist/Types/Reminder/ReminderStopState.js.map +1 -0
  204. package/build/dist/Types/Reminder/ScheduledMaintenanceReminderStopState.js +7 -0
  205. package/build/dist/Types/Reminder/ScheduledMaintenanceReminderStopState.js.map +1 -0
  206. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +9 -0
  207. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
  208. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +92 -0
  209. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  210. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +83 -0
  211. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -0
  212. package/package.json +1 -1
@@ -0,0 +1,597 @@
1
+ import IncidentSeverity from "./IncidentSeverity";
2
+ import Label from "./Label";
3
+ import Project from "./Project";
4
+ import User from "./User";
5
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
6
+ import Route from "../../Types/API/Route";
7
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
8
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
9
+ import ColumnLength from "../../Types/Database/ColumnLength";
10
+ import ColumnType from "../../Types/Database/ColumnType";
11
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
12
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
13
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
14
+ import TableColumn from "../../Types/Database/TableColumn";
15
+ import TableColumnType from "../../Types/Database/TableColumnType";
16
+ import TableMetadata from "../../Types/Database/TableMetadata";
17
+ import TenantColumn from "../../Types/Database/TenantColumn";
18
+ import IconProp from "../../Types/Icon/IconProp";
19
+ import ObjectID from "../../Types/ObjectID";
20
+ import Permission from "../../Types/Permission";
21
+ import ReminderStopState from "../../Types/Reminder/ReminderStopState";
22
+ import {
23
+ Column,
24
+ Entity,
25
+ Index,
26
+ JoinColumn,
27
+ JoinTable,
28
+ ManyToMany,
29
+ ManyToOne,
30
+ } from "typeorm";
31
+
32
+ @EnableDocumentation()
33
+ @TenantColumn("projectId")
34
+ @TableAccessControl({
35
+ create: [
36
+ Permission.ProjectOwner,
37
+ Permission.ProjectAdmin,
38
+ Permission.CreateIncidentReminderRule,
39
+ ],
40
+ read: [
41
+ Permission.ProjectOwner,
42
+ Permission.ProjectAdmin,
43
+ Permission.ProjectMember,
44
+ Permission.Viewer,
45
+ Permission.IncidentAdmin,
46
+ Permission.IncidentMember,
47
+ Permission.IncidentViewer,
48
+ Permission.ReadIncidentReminderRule,
49
+ ],
50
+ delete: [
51
+ Permission.ProjectOwner,
52
+ Permission.ProjectAdmin,
53
+ Permission.DeleteIncidentReminderRule,
54
+ ],
55
+ update: [
56
+ Permission.ProjectOwner,
57
+ Permission.ProjectAdmin,
58
+ Permission.EditIncidentReminderRule,
59
+ ],
60
+ })
61
+ @CrudApiEndpoint(new Route("/incident-reminder-rule"))
62
+ @Entity({
63
+ name: "IncidentReminderRule",
64
+ })
65
+ @EnableWorkflow({
66
+ create: true,
67
+ delete: true,
68
+ update: true,
69
+ read: true,
70
+ })
71
+ @TableMetadata({
72
+ tableName: "IncidentReminderRule",
73
+ singularName: "Incident Reminder Rule",
74
+ pluralName: "Incident Reminder Rules",
75
+ icon: IconProp.Bell,
76
+ tableDescription:
77
+ "Configure reminder rules to periodically notify incident owners while an incident is still open",
78
+ })
79
+ export default class IncidentReminderRule extends BaseModel {
80
+ @ColumnAccessControl({
81
+ create: [
82
+ Permission.ProjectOwner,
83
+ Permission.ProjectAdmin,
84
+ Permission.CreateIncidentReminderRule,
85
+ ],
86
+ read: [
87
+ Permission.ProjectOwner,
88
+ Permission.ProjectAdmin,
89
+ Permission.ProjectMember,
90
+ Permission.Viewer,
91
+ Permission.IncidentAdmin,
92
+ Permission.IncidentMember,
93
+ Permission.IncidentViewer,
94
+ Permission.ReadIncidentReminderRule,
95
+ ],
96
+ update: [],
97
+ })
98
+ @TableColumn({
99
+ manyToOneRelationColumn: "projectId",
100
+ type: TableColumnType.Entity,
101
+ modelType: Project,
102
+ title: "Project",
103
+ description: "Relation to Project Resource in which this object belongs",
104
+ })
105
+ @ManyToOne(
106
+ () => {
107
+ return Project;
108
+ },
109
+ {
110
+ eager: false,
111
+ nullable: true,
112
+ onDelete: "CASCADE",
113
+ orphanedRowAction: "nullify",
114
+ },
115
+ )
116
+ @JoinColumn({ name: "projectId" })
117
+ public project?: Project = undefined;
118
+
119
+ @ColumnAccessControl({
120
+ create: [
121
+ Permission.ProjectOwner,
122
+ Permission.ProjectAdmin,
123
+ Permission.CreateIncidentReminderRule,
124
+ ],
125
+ read: [
126
+ Permission.ProjectOwner,
127
+ Permission.ProjectAdmin,
128
+ Permission.ProjectMember,
129
+ Permission.Viewer,
130
+ Permission.IncidentAdmin,
131
+ Permission.IncidentMember,
132
+ Permission.IncidentViewer,
133
+ Permission.ReadIncidentReminderRule,
134
+ ],
135
+ update: [],
136
+ })
137
+ @Index()
138
+ @TableColumn({
139
+ type: TableColumnType.ObjectID,
140
+ required: true,
141
+ canReadOnRelationQuery: true,
142
+ title: "Project ID",
143
+ description: "ID of your OneUptime Project in which this object belongs",
144
+ })
145
+ @Column({
146
+ type: ColumnType.ObjectID,
147
+ nullable: false,
148
+ transformer: ObjectID.getDatabaseTransformer(),
149
+ })
150
+ public projectId?: ObjectID = undefined;
151
+
152
+ @ColumnAccessControl({
153
+ create: [
154
+ Permission.ProjectOwner,
155
+ Permission.ProjectAdmin,
156
+ Permission.CreateIncidentReminderRule,
157
+ ],
158
+ read: [
159
+ Permission.ProjectOwner,
160
+ Permission.ProjectAdmin,
161
+ Permission.ProjectMember,
162
+ Permission.Viewer,
163
+ Permission.IncidentAdmin,
164
+ Permission.IncidentMember,
165
+ Permission.IncidentViewer,
166
+ Permission.ReadIncidentReminderRule,
167
+ ],
168
+ update: [
169
+ Permission.ProjectOwner,
170
+ Permission.ProjectAdmin,
171
+ Permission.EditIncidentReminderRule,
172
+ ],
173
+ })
174
+ @Index()
175
+ @TableColumn({
176
+ required: true,
177
+ type: TableColumnType.ShortText,
178
+ canReadOnRelationQuery: true,
179
+ title: "Name",
180
+ description: "Name of this reminder rule",
181
+ })
182
+ @Column({
183
+ nullable: false,
184
+ type: ColumnType.ShortText,
185
+ length: ColumnLength.ShortText,
186
+ })
187
+ public name?: string = undefined;
188
+
189
+ @ColumnAccessControl({
190
+ create: [
191
+ Permission.ProjectOwner,
192
+ Permission.ProjectAdmin,
193
+ Permission.CreateIncidentReminderRule,
194
+ ],
195
+ read: [
196
+ Permission.ProjectOwner,
197
+ Permission.ProjectAdmin,
198
+ Permission.ProjectMember,
199
+ Permission.Viewer,
200
+ Permission.IncidentAdmin,
201
+ Permission.IncidentMember,
202
+ Permission.IncidentViewer,
203
+ Permission.ReadIncidentReminderRule,
204
+ ],
205
+ update: [
206
+ Permission.ProjectOwner,
207
+ Permission.ProjectAdmin,
208
+ Permission.EditIncidentReminderRule,
209
+ ],
210
+ })
211
+ @TableColumn({
212
+ required: false,
213
+ type: TableColumnType.LongText,
214
+ title: "Description",
215
+ description: "Description of this reminder rule",
216
+ canReadOnRelationQuery: true,
217
+ })
218
+ @Column({
219
+ nullable: true,
220
+ type: ColumnType.LongText,
221
+ length: ColumnLength.LongText,
222
+ })
223
+ public description?: string = undefined;
224
+
225
+ @ColumnAccessControl({
226
+ create: [
227
+ Permission.ProjectOwner,
228
+ Permission.ProjectAdmin,
229
+ Permission.CreateIncidentReminderRule,
230
+ ],
231
+ read: [
232
+ Permission.ProjectOwner,
233
+ Permission.ProjectAdmin,
234
+ Permission.ProjectMember,
235
+ Permission.Viewer,
236
+ Permission.IncidentAdmin,
237
+ Permission.IncidentMember,
238
+ Permission.IncidentViewer,
239
+ Permission.ReadIncidentReminderRule,
240
+ ],
241
+ update: [
242
+ Permission.ProjectOwner,
243
+ Permission.ProjectAdmin,
244
+ Permission.EditIncidentReminderRule,
245
+ ],
246
+ })
247
+ @Index()
248
+ @TableColumn({
249
+ required: true,
250
+ type: TableColumnType.Number,
251
+ title: "Order",
252
+ description:
253
+ "Order/priority of this rule. Rules are evaluated in order (lowest first). First matching rule wins.",
254
+ defaultValue: 1,
255
+ isDefaultValueColumn: true,
256
+ })
257
+ @Column({
258
+ type: ColumnType.Number,
259
+ nullable: false,
260
+ default: 1,
261
+ })
262
+ public order?: number = undefined;
263
+
264
+ @ColumnAccessControl({
265
+ create: [
266
+ Permission.ProjectOwner,
267
+ Permission.ProjectAdmin,
268
+ Permission.CreateIncidentReminderRule,
269
+ ],
270
+ read: [
271
+ Permission.ProjectOwner,
272
+ Permission.ProjectAdmin,
273
+ Permission.ProjectMember,
274
+ Permission.Viewer,
275
+ Permission.IncidentAdmin,
276
+ Permission.IncidentMember,
277
+ Permission.IncidentViewer,
278
+ Permission.ReadIncidentReminderRule,
279
+ ],
280
+ update: [
281
+ Permission.ProjectOwner,
282
+ Permission.ProjectAdmin,
283
+ Permission.EditIncidentReminderRule,
284
+ ],
285
+ })
286
+ @Index()
287
+ @TableColumn({
288
+ required: true,
289
+ type: TableColumnType.Boolean,
290
+ title: "Is Enabled",
291
+ description: "Whether this reminder rule is enabled",
292
+ defaultValue: true,
293
+ isDefaultValueColumn: true,
294
+ })
295
+ @Column({
296
+ type: ColumnType.Boolean,
297
+ nullable: false,
298
+ default: true,
299
+ })
300
+ public isEnabled?: boolean = undefined;
301
+
302
+ @ColumnAccessControl({
303
+ create: [
304
+ Permission.ProjectOwner,
305
+ Permission.ProjectAdmin,
306
+ Permission.CreateIncidentReminderRule,
307
+ ],
308
+ read: [
309
+ Permission.ProjectOwner,
310
+ Permission.ProjectAdmin,
311
+ Permission.ProjectMember,
312
+ Permission.Viewer,
313
+ Permission.IncidentAdmin,
314
+ Permission.IncidentMember,
315
+ Permission.IncidentViewer,
316
+ Permission.ReadIncidentReminderRule,
317
+ ],
318
+ update: [
319
+ Permission.ProjectOwner,
320
+ Permission.ProjectAdmin,
321
+ Permission.EditIncidentReminderRule,
322
+ ],
323
+ })
324
+ @TableColumn({
325
+ required: true,
326
+ type: TableColumnType.Number,
327
+ title: "Reminder Interval (Minutes)",
328
+ description:
329
+ "How often (in minutes) to remind incident owners while the incident is still open. For example, set to 30 to remind owners every 30 minutes.",
330
+ canReadOnRelationQuery: true,
331
+ })
332
+ @Column({
333
+ type: ColumnType.Number,
334
+ nullable: false,
335
+ })
336
+ public reminderIntervalInMinutes?: number = undefined;
337
+
338
+ @ColumnAccessControl({
339
+ create: [
340
+ Permission.ProjectOwner,
341
+ Permission.ProjectAdmin,
342
+ Permission.CreateIncidentReminderRule,
343
+ ],
344
+ read: [
345
+ Permission.ProjectOwner,
346
+ Permission.ProjectAdmin,
347
+ Permission.ProjectMember,
348
+ Permission.Viewer,
349
+ Permission.IncidentAdmin,
350
+ Permission.IncidentMember,
351
+ Permission.IncidentViewer,
352
+ Permission.ReadIncidentReminderRule,
353
+ ],
354
+ update: [
355
+ Permission.ProjectOwner,
356
+ Permission.ProjectAdmin,
357
+ Permission.EditIncidentReminderRule,
358
+ ],
359
+ })
360
+ @TableColumn({
361
+ required: true,
362
+ type: TableColumnType.ShortText,
363
+ title: "Stop Reminders When",
364
+ description:
365
+ "Stop sending reminders once the incident reaches this state. Select Acknowledged to stop reminders when the incident is acknowledged, or Resolved to keep reminding until the incident is resolved.",
366
+ defaultValue: ReminderStopState.Resolved,
367
+ isDefaultValueColumn: true,
368
+ canReadOnRelationQuery: true,
369
+ })
370
+ @Column({
371
+ type: ColumnType.ShortText,
372
+ nullable: false,
373
+ default: ReminderStopState.Resolved,
374
+ })
375
+ public stopRemindersOnState?: ReminderStopState = undefined;
376
+
377
+ // Match Criteria - Incident Severities
378
+
379
+ @ColumnAccessControl({
380
+ create: [
381
+ Permission.ProjectOwner,
382
+ Permission.ProjectAdmin,
383
+ Permission.CreateIncidentReminderRule,
384
+ ],
385
+ read: [
386
+ Permission.ProjectOwner,
387
+ Permission.ProjectAdmin,
388
+ Permission.ProjectMember,
389
+ Permission.Viewer,
390
+ Permission.IncidentAdmin,
391
+ Permission.IncidentMember,
392
+ Permission.IncidentViewer,
393
+ Permission.ReadIncidentReminderRule,
394
+ ],
395
+ update: [
396
+ Permission.ProjectOwner,
397
+ Permission.ProjectAdmin,
398
+ Permission.EditIncidentReminderRule,
399
+ ],
400
+ })
401
+ @TableColumn({
402
+ required: false,
403
+ type: TableColumnType.EntityArray,
404
+ modelType: IncidentSeverity,
405
+ title: "Incident Severities",
406
+ description:
407
+ "Only apply this reminder rule to incidents with these severities. Leave empty to match incidents of any severity.",
408
+ })
409
+ @ManyToMany(
410
+ () => {
411
+ return IncidentSeverity;
412
+ },
413
+ { eager: false },
414
+ )
415
+ @JoinTable({
416
+ name: "IncidentReminderRuleIncidentSeverity",
417
+ inverseJoinColumn: {
418
+ name: "incidentSeverityId",
419
+ referencedColumnName: "_id",
420
+ },
421
+ joinColumn: {
422
+ name: "incidentReminderRuleId",
423
+ referencedColumnName: "_id",
424
+ },
425
+ })
426
+ public incidentSeverities?: Array<IncidentSeverity> = undefined;
427
+
428
+ // Match Criteria - Labels
429
+
430
+ @ColumnAccessControl({
431
+ create: [
432
+ Permission.ProjectOwner,
433
+ Permission.ProjectAdmin,
434
+ Permission.CreateIncidentReminderRule,
435
+ ],
436
+ read: [
437
+ Permission.ProjectOwner,
438
+ Permission.ProjectAdmin,
439
+ Permission.ProjectMember,
440
+ Permission.Viewer,
441
+ Permission.IncidentAdmin,
442
+ Permission.IncidentMember,
443
+ Permission.IncidentViewer,
444
+ Permission.ReadIncidentReminderRule,
445
+ ],
446
+ update: [
447
+ Permission.ProjectOwner,
448
+ Permission.ProjectAdmin,
449
+ Permission.EditIncidentReminderRule,
450
+ ],
451
+ })
452
+ @TableColumn({
453
+ required: false,
454
+ type: TableColumnType.EntityArray,
455
+ modelType: Label,
456
+ title: "Labels",
457
+ description:
458
+ "Only apply this reminder rule to incidents with these labels. Leave empty to match incidents with any labels.",
459
+ })
460
+ @ManyToMany(
461
+ () => {
462
+ return Label;
463
+ },
464
+ { eager: false },
465
+ )
466
+ @JoinTable({
467
+ name: "IncidentReminderRuleLabel",
468
+ inverseJoinColumn: {
469
+ name: "labelId",
470
+ referencedColumnName: "_id",
471
+ },
472
+ joinColumn: {
473
+ name: "incidentReminderRuleId",
474
+ referencedColumnName: "_id",
475
+ },
476
+ })
477
+ public labels?: Array<Label> = undefined;
478
+
479
+ // Created By / Deleted By User Relations
480
+
481
+ @ColumnAccessControl({
482
+ create: [
483
+ Permission.ProjectOwner,
484
+ Permission.ProjectAdmin,
485
+ Permission.CreateIncidentReminderRule,
486
+ ],
487
+ read: [
488
+ Permission.ProjectOwner,
489
+ Permission.ProjectAdmin,
490
+ Permission.ProjectMember,
491
+ Permission.Viewer,
492
+ Permission.IncidentAdmin,
493
+ Permission.IncidentMember,
494
+ Permission.IncidentViewer,
495
+ Permission.ReadIncidentReminderRule,
496
+ ],
497
+ update: [],
498
+ })
499
+ @TableColumn({
500
+ manyToOneRelationColumn: "createdByUserId",
501
+ type: TableColumnType.Entity,
502
+ modelType: User,
503
+ title: "Created by User",
504
+ description:
505
+ "Relation to User who created this object (if this object was created by a User)",
506
+ })
507
+ @ManyToOne(
508
+ () => {
509
+ return User;
510
+ },
511
+ {
512
+ eager: false,
513
+ nullable: true,
514
+ onDelete: "SET NULL",
515
+ orphanedRowAction: "nullify",
516
+ },
517
+ )
518
+ @JoinColumn({ name: "createdByUserId" })
519
+ public createdByUser?: User = undefined;
520
+
521
+ @ColumnAccessControl({
522
+ create: [
523
+ Permission.ProjectOwner,
524
+ Permission.ProjectAdmin,
525
+ Permission.CreateIncidentReminderRule,
526
+ ],
527
+ read: [
528
+ Permission.ProjectOwner,
529
+ Permission.ProjectAdmin,
530
+ Permission.ProjectMember,
531
+ Permission.Viewer,
532
+ Permission.IncidentAdmin,
533
+ Permission.IncidentMember,
534
+ Permission.IncidentViewer,
535
+ Permission.ReadIncidentReminderRule,
536
+ ],
537
+ update: [],
538
+ })
539
+ @TableColumn({
540
+ type: TableColumnType.ObjectID,
541
+ title: "Created by User ID",
542
+ description:
543
+ "User ID who created this object (if this object was created by a User)",
544
+ })
545
+ @Column({
546
+ type: ColumnType.ObjectID,
547
+ nullable: true,
548
+ transformer: ObjectID.getDatabaseTransformer(),
549
+ })
550
+ public createdByUserId?: ObjectID = undefined;
551
+
552
+ @ColumnAccessControl({
553
+ create: [],
554
+ read: [],
555
+ update: [],
556
+ })
557
+ @TableColumn({
558
+ manyToOneRelationColumn: "deletedByUserId",
559
+ type: TableColumnType.Entity,
560
+ title: "Deleted by User",
561
+ modelType: User,
562
+ description:
563
+ "Relation to User who deleted this object (if this object was deleted by a User)",
564
+ })
565
+ @ManyToOne(
566
+ () => {
567
+ return User;
568
+ },
569
+ {
570
+ cascade: false,
571
+ eager: false,
572
+ nullable: true,
573
+ onDelete: "SET NULL",
574
+ orphanedRowAction: "nullify",
575
+ },
576
+ )
577
+ @JoinColumn({ name: "deletedByUserId" })
578
+ public deletedByUser?: User = undefined;
579
+
580
+ @ColumnAccessControl({
581
+ create: [],
582
+ read: [],
583
+ update: [],
584
+ })
585
+ @TableColumn({
586
+ type: TableColumnType.ObjectID,
587
+ title: "Deleted by User ID",
588
+ description:
589
+ "User ID who deleted this object (if this object was deleted by a User)",
590
+ })
591
+ @Column({
592
+ type: ColumnType.ObjectID,
593
+ nullable: true,
594
+ transformer: ObjectID.getDatabaseTransformer(),
595
+ })
596
+ public deletedByUserId?: ObjectID = undefined;
597
+ }
@@ -11,6 +11,7 @@ import ColumnLength from "../../Types/Database/ColumnLength";
11
11
  import ColumnType from "../../Types/Database/ColumnType";
12
12
  import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
13
13
  import EnableDocumentation from "../../Types/Database/EnableDocumentation";
14
+ import EnableMCP from "../../Types/Database/EnableMCP";
14
15
  import EnableWorkflow from "../../Types/Database/EnableWorkflow";
15
16
  import ColorField from "../../Types/Database/ColorField";
16
17
  import SlugifyColumn from "../../Types/Database/SlugifyColumn";
@@ -31,6 +32,7 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
31
32
  delete: PlanType.Growth,
32
33
  })
33
34
  @EnableDocumentation()
35
+ @EnableMCP()
34
36
  @TenantColumn("projectId")
35
37
  @TableAccessControl({
36
38
  create: [
@@ -11,6 +11,7 @@ import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn";
11
11
  import ColumnType from "../../Types/Database/ColumnType";
12
12
  import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
13
13
  import EnableDocumentation from "../../Types/Database/EnableDocumentation";
14
+ import EnableMCP from "../../Types/Database/EnableMCP";
14
15
  import EnableWorkflow from "../../Types/Database/EnableWorkflow";
15
16
  import TableColumn from "../../Types/Database/TableColumn";
16
17
  import TableColumnType from "../../Types/Database/TableColumnType";
@@ -24,6 +25,7 @@ import StatusPageSubscriberNotificationStatus from "../../Types/StatusPage/Statu
24
25
  import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
25
26
 
26
27
  @EnableDocumentation()
28
+ @EnableMCP()
27
29
  @CanAccessIfCanReadOn("incident")
28
30
  @TenantColumn("projectId")
29
31
  @Index(["incidentId", "startsAt"]) // Composite index for efficient incident timeline queries
@@ -182,6 +182,7 @@ import GlobalSSOProject from "./GlobalSsoProject";
182
182
  import GlobalOIDCProject from "./GlobalOidcProject";
183
183
  import PromoCode from "./PromoCode";
184
184
  import EnterpriseLicense from "./EnterpriseLicense";
185
+ import EnterpriseLicenseInstance from "./EnterpriseLicenseInstance";
185
186
  import OpenSourceDeployment from "./OpenSourceDeployment";
186
187
  import Reseller from "./Reseller";
187
188
  import ResellerPlan from "./ResellerPlan";
@@ -336,6 +337,9 @@ import IncidentEpisodePrivacyRule from "./IncidentEpisodePrivacyRule";
336
337
  import IncidentEpisodeLabelRule from "./IncidentEpisodeLabelRule";
337
338
  import IncidentSlaRule from "./IncidentSlaRule";
338
339
  import IncidentSla from "./IncidentSla";
340
+ import IncidentReminderRule from "./IncidentReminderRule";
341
+ import AlertReminderRule from "./AlertReminderRule";
342
+ import ScheduledMaintenanceReminderRule from "./ScheduledMaintenanceReminderRule";
339
343
  import MonitorOwnerRule from "./MonitorOwnerRule";
340
344
  import MonitorLabelRule from "./MonitorLabelRule";
341
345
  import StatusPageOwnerRule from "./StatusPageOwnerRule";
@@ -511,6 +515,9 @@ const AllModelTypes: Array<{
511
515
  IncidentEpisodeLabelRule,
512
516
  IncidentSlaRule,
513
517
  IncidentSla,
518
+ IncidentReminderRule,
519
+ AlertReminderRule,
520
+ ScheduledMaintenanceReminderRule,
514
521
 
515
522
  MonitorOwnerRule,
516
523
  MonitorLabelRule,
@@ -651,6 +658,7 @@ const AllModelTypes: Array<{
651
658
 
652
659
  PromoCode,
653
660
  EnterpriseLicense,
661
+ EnterpriseLicenseInstance,
654
662
  OpenSourceDeployment,
655
663
 
656
664
  GlobalConfig,
@@ -11,6 +11,7 @@ import ColumnLength from "../../Types/Database/ColumnLength";
11
11
  import ColumnType from "../../Types/Database/ColumnType";
12
12
  import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
13
13
  import EnableDocumentation from "../../Types/Database/EnableDocumentation";
14
+ import EnableMCP from "../../Types/Database/EnableMCP";
14
15
  import EnableAuditLog from "../../Types/Database/EnableAuditLog";
15
16
  import EnableWorkflow from "../../Types/Database/EnableWorkflow";
16
17
  import ColorField from "../../Types/Database/ColorField";
@@ -32,6 +33,7 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
32
33
  delete: PlanType.Free,
33
34
  })
34
35
  @EnableDocumentation()
36
+ @EnableMCP()
35
37
  @TenantColumn("projectId")
36
38
  @TableAccessControl({
37
39
  create: [
@@ -11,6 +11,7 @@ import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn";
11
11
  import ColumnType from "../../Types/Database/ColumnType";
12
12
  import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
13
13
  import EnableDocumentation from "../../Types/Database/EnableDocumentation";
14
+ import EnableMCP from "../../Types/Database/EnableMCP";
14
15
  import EnableWorkflow from "../../Types/Database/EnableWorkflow";
15
16
  import SlugifyColumn from "../../Types/Database/SlugifyColumn";
16
17
  import TableColumn from "../../Types/Database/TableColumn";
@@ -24,6 +25,7 @@ import Permission from "../../Types/Permission";
24
25
  import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
25
26
 
26
27
  @EnableDocumentation()
28
+ @EnableMCP()
27
29
  @CanAccessIfCanReadOn("monitor")
28
30
  @TenantColumn("projectId")
29
31
  @Index(["monitorId", "projectId", "startsAt"]) // Composite index for efficient timeline queries