@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
@@ -1829,4 +1829,104 @@ export default class ScheduledMaintenance extends BaseModel {
1829
1829
  nullable: true,
1830
1830
  })
1831
1831
  public isVisibleOnStatusPage?: boolean = undefined;
1832
+
1833
+ @ColumnAccessControl({
1834
+ create: [
1835
+ Permission.ProjectOwner,
1836
+ Permission.ProjectAdmin,
1837
+ Permission.ProjectMember,
1838
+ Permission.ScheduledMaintenanceAdmin,
1839
+ Permission.ScheduledMaintenanceMember,
1840
+ Permission.CreateProjectScheduledMaintenance,
1841
+ ],
1842
+ read: [
1843
+ Permission.ProjectOwner,
1844
+ Permission.ProjectAdmin,
1845
+ Permission.ProjectMember,
1846
+ Permission.Viewer,
1847
+ Permission.ScheduledMaintenanceAdmin,
1848
+ Permission.ScheduledMaintenanceMember,
1849
+ Permission.ScheduledMaintenanceViewer,
1850
+ Permission.ReadProjectScheduledMaintenance,
1851
+ ],
1852
+ update: [
1853
+ Permission.ProjectOwner,
1854
+ Permission.ProjectAdmin,
1855
+ Permission.ProjectMember,
1856
+ Permission.ScheduledMaintenanceAdmin,
1857
+ Permission.ScheduledMaintenanceMember,
1858
+ Permission.EditProjectScheduledMaintenance,
1859
+ ],
1860
+ })
1861
+ @TableColumn({
1862
+ isDefaultValueColumn: true,
1863
+ type: TableColumnType.Boolean,
1864
+ title: "Send Reminders?",
1865
+ description:
1866
+ "Should reminder notifications be sent to owners while this scheduled maintenance event is still not complete? Reminders are sent based on the reminder rules configured for this project.",
1867
+ defaultValue: true,
1868
+ })
1869
+ @Column({
1870
+ type: ColumnType.Boolean,
1871
+ default: true,
1872
+ nullable: true,
1873
+ })
1874
+ public enableReminders?: boolean = undefined;
1875
+
1876
+ @ColumnAccessControl({
1877
+ create: [],
1878
+ read: [
1879
+ Permission.ProjectOwner,
1880
+ Permission.ProjectAdmin,
1881
+ Permission.ProjectMember,
1882
+ Permission.Viewer,
1883
+ Permission.ScheduledMaintenanceAdmin,
1884
+ Permission.ScheduledMaintenanceMember,
1885
+ Permission.ScheduledMaintenanceViewer,
1886
+ Permission.ReadProjectScheduledMaintenance,
1887
+ ],
1888
+ update: [],
1889
+ })
1890
+ @Index()
1891
+ @TableColumn({
1892
+ type: TableColumnType.Date,
1893
+ required: false,
1894
+ isDefaultValueColumn: false,
1895
+ title: "Next Reminder Notification At",
1896
+ description:
1897
+ "When will the next reminder notification be sent to owners of this scheduled maintenance event? This is set automatically based on the reminder rules configured for this project.",
1898
+ })
1899
+ @Column({
1900
+ type: ColumnType.Date,
1901
+ nullable: true,
1902
+ })
1903
+ public nextReminderNotificationAt?: Date = undefined;
1904
+
1905
+ @ColumnAccessControl({
1906
+ create: [],
1907
+ read: [
1908
+ Permission.ProjectOwner,
1909
+ Permission.ProjectAdmin,
1910
+ Permission.ProjectMember,
1911
+ Permission.Viewer,
1912
+ Permission.ScheduledMaintenanceAdmin,
1913
+ Permission.ScheduledMaintenanceMember,
1914
+ Permission.ScheduledMaintenanceViewer,
1915
+ Permission.ReadProjectScheduledMaintenance,
1916
+ ],
1917
+ update: [],
1918
+ })
1919
+ @TableColumn({
1920
+ type: TableColumnType.Number,
1921
+ required: false,
1922
+ isDefaultValueColumn: false,
1923
+ title: "Reminder Notifications Sent Count",
1924
+ description:
1925
+ "How many reminder notifications have been sent to owners of this scheduled maintenance event so far.",
1926
+ })
1927
+ @Column({
1928
+ type: ColumnType.Number,
1929
+ nullable: true,
1930
+ })
1931
+ public reminderNotificationSentCount?: number = undefined;
1832
1932
  }
@@ -0,0 +1,585 @@
1
+ import Label from "./Label";
2
+ import Project from "./Project";
3
+ import User from "./User";
4
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
5
+ import Route from "../../Types/API/Route";
6
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
7
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
8
+ import ColumnLength from "../../Types/Database/ColumnLength";
9
+ import ColumnType from "../../Types/Database/ColumnType";
10
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
11
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
12
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
13
+ import TableColumn from "../../Types/Database/TableColumn";
14
+ import TableColumnType from "../../Types/Database/TableColumnType";
15
+ import TableMetadata from "../../Types/Database/TableMetadata";
16
+ import TenantColumn from "../../Types/Database/TenantColumn";
17
+ import IconProp from "../../Types/Icon/IconProp";
18
+ import ObjectID from "../../Types/ObjectID";
19
+ import Permission from "../../Types/Permission";
20
+ import ScheduledMaintenanceReminderStopState from "../../Types/Reminder/ScheduledMaintenanceReminderStopState";
21
+ import {
22
+ Column,
23
+ Entity,
24
+ Index,
25
+ JoinColumn,
26
+ JoinTable,
27
+ ManyToMany,
28
+ ManyToOne,
29
+ } from "typeorm";
30
+
31
+ @EnableDocumentation()
32
+ @TenantColumn("projectId")
33
+ @TableAccessControl({
34
+ create: [
35
+ Permission.ProjectOwner,
36
+ Permission.ProjectAdmin,
37
+ Permission.CreateScheduledMaintenanceReminderRule,
38
+ ],
39
+ read: [
40
+ Permission.ProjectOwner,
41
+ Permission.ProjectAdmin,
42
+ Permission.ProjectMember,
43
+ Permission.Viewer,
44
+ Permission.ScheduledMaintenanceAdmin,
45
+ Permission.ScheduledMaintenanceMember,
46
+ Permission.ScheduledMaintenanceViewer,
47
+ Permission.ReadScheduledMaintenanceReminderRule,
48
+ ],
49
+ delete: [
50
+ Permission.ProjectOwner,
51
+ Permission.ProjectAdmin,
52
+ Permission.DeleteScheduledMaintenanceReminderRule,
53
+ ],
54
+ update: [
55
+ Permission.ProjectOwner,
56
+ Permission.ProjectAdmin,
57
+ Permission.EditScheduledMaintenanceReminderRule,
58
+ ],
59
+ })
60
+ @CrudApiEndpoint(new Route("/scheduled-maintenance-reminder-rule"))
61
+ @Entity({
62
+ name: "ScheduledMaintenanceReminderRule",
63
+ })
64
+ @EnableWorkflow({
65
+ create: true,
66
+ delete: true,
67
+ update: true,
68
+ read: true,
69
+ })
70
+ @TableMetadata({
71
+ tableName: "ScheduledMaintenanceReminderRule",
72
+ singularName: "Scheduled Maintenance Reminder Rule",
73
+ pluralName: "Scheduled Maintenance Reminder Rules",
74
+ icon: IconProp.Bell,
75
+ tableDescription:
76
+ "Configure reminder rules to periodically notify scheduled maintenance event owners while an event is still not complete",
77
+ })
78
+ export default class ScheduledMaintenanceReminderRule extends BaseModel {
79
+ @ColumnAccessControl({
80
+ create: [
81
+ Permission.ProjectOwner,
82
+ Permission.ProjectAdmin,
83
+ Permission.CreateScheduledMaintenanceReminderRule,
84
+ ],
85
+ read: [
86
+ Permission.ProjectOwner,
87
+ Permission.ProjectAdmin,
88
+ Permission.ProjectMember,
89
+ Permission.Viewer,
90
+ Permission.ScheduledMaintenanceAdmin,
91
+ Permission.ScheduledMaintenanceMember,
92
+ Permission.ScheduledMaintenanceViewer,
93
+ Permission.ReadScheduledMaintenanceReminderRule,
94
+ ],
95
+ update: [],
96
+ })
97
+ @TableColumn({
98
+ manyToOneRelationColumn: "projectId",
99
+ type: TableColumnType.Entity,
100
+ modelType: Project,
101
+ title: "Project",
102
+ description: "Relation to Project Resource in which this object belongs",
103
+ })
104
+ @ManyToOne(
105
+ () => {
106
+ return Project;
107
+ },
108
+ {
109
+ eager: false,
110
+ nullable: true,
111
+ onDelete: "CASCADE",
112
+ orphanedRowAction: "nullify",
113
+ },
114
+ )
115
+ @JoinColumn({ name: "projectId" })
116
+ public project?: Project = undefined;
117
+
118
+ @ColumnAccessControl({
119
+ create: [
120
+ Permission.ProjectOwner,
121
+ Permission.ProjectAdmin,
122
+ Permission.CreateScheduledMaintenanceReminderRule,
123
+ ],
124
+ read: [
125
+ Permission.ProjectOwner,
126
+ Permission.ProjectAdmin,
127
+ Permission.ProjectMember,
128
+ Permission.Viewer,
129
+ Permission.ScheduledMaintenanceAdmin,
130
+ Permission.ScheduledMaintenanceMember,
131
+ Permission.ScheduledMaintenanceViewer,
132
+ Permission.ReadScheduledMaintenanceReminderRule,
133
+ ],
134
+ update: [],
135
+ })
136
+ @Index()
137
+ @TableColumn({
138
+ type: TableColumnType.ObjectID,
139
+ required: true,
140
+ canReadOnRelationQuery: true,
141
+ title: "Project ID",
142
+ description: "ID of your OneUptime Project in which this object belongs",
143
+ })
144
+ @Column({
145
+ type: ColumnType.ObjectID,
146
+ nullable: false,
147
+ transformer: ObjectID.getDatabaseTransformer(),
148
+ })
149
+ public projectId?: ObjectID = undefined;
150
+
151
+ @ColumnAccessControl({
152
+ create: [
153
+ Permission.ProjectOwner,
154
+ Permission.ProjectAdmin,
155
+ Permission.CreateScheduledMaintenanceReminderRule,
156
+ ],
157
+ read: [
158
+ Permission.ProjectOwner,
159
+ Permission.ProjectAdmin,
160
+ Permission.ProjectMember,
161
+ Permission.Viewer,
162
+ Permission.ScheduledMaintenanceAdmin,
163
+ Permission.ScheduledMaintenanceMember,
164
+ Permission.ScheduledMaintenanceViewer,
165
+ Permission.ReadScheduledMaintenanceReminderRule,
166
+ ],
167
+ update: [
168
+ Permission.ProjectOwner,
169
+ Permission.ProjectAdmin,
170
+ Permission.EditScheduledMaintenanceReminderRule,
171
+ ],
172
+ })
173
+ @Index()
174
+ @TableColumn({
175
+ required: true,
176
+ type: TableColumnType.ShortText,
177
+ canReadOnRelationQuery: true,
178
+ title: "Name",
179
+ description: "Name of this reminder rule",
180
+ })
181
+ @Column({
182
+ nullable: false,
183
+ type: ColumnType.ShortText,
184
+ length: ColumnLength.ShortText,
185
+ })
186
+ public name?: string = undefined;
187
+
188
+ @ColumnAccessControl({
189
+ create: [
190
+ Permission.ProjectOwner,
191
+ Permission.ProjectAdmin,
192
+ Permission.CreateScheduledMaintenanceReminderRule,
193
+ ],
194
+ read: [
195
+ Permission.ProjectOwner,
196
+ Permission.ProjectAdmin,
197
+ Permission.ProjectMember,
198
+ Permission.Viewer,
199
+ Permission.ScheduledMaintenanceAdmin,
200
+ Permission.ScheduledMaintenanceMember,
201
+ Permission.ScheduledMaintenanceViewer,
202
+ Permission.ReadScheduledMaintenanceReminderRule,
203
+ ],
204
+ update: [
205
+ Permission.ProjectOwner,
206
+ Permission.ProjectAdmin,
207
+ Permission.EditScheduledMaintenanceReminderRule,
208
+ ],
209
+ })
210
+ @TableColumn({
211
+ required: false,
212
+ type: TableColumnType.LongText,
213
+ title: "Description",
214
+ description: "Description of this reminder rule",
215
+ canReadOnRelationQuery: true,
216
+ })
217
+ @Column({
218
+ nullable: true,
219
+ type: ColumnType.LongText,
220
+ length: ColumnLength.LongText,
221
+ })
222
+ public description?: string = undefined;
223
+
224
+ @ColumnAccessControl({
225
+ create: [
226
+ Permission.ProjectOwner,
227
+ Permission.ProjectAdmin,
228
+ Permission.CreateScheduledMaintenanceReminderRule,
229
+ ],
230
+ read: [
231
+ Permission.ProjectOwner,
232
+ Permission.ProjectAdmin,
233
+ Permission.ProjectMember,
234
+ Permission.Viewer,
235
+ Permission.ScheduledMaintenanceAdmin,
236
+ Permission.ScheduledMaintenanceMember,
237
+ Permission.ScheduledMaintenanceViewer,
238
+ Permission.ReadScheduledMaintenanceReminderRule,
239
+ ],
240
+ update: [
241
+ Permission.ProjectOwner,
242
+ Permission.ProjectAdmin,
243
+ Permission.EditScheduledMaintenanceReminderRule,
244
+ ],
245
+ })
246
+ @Index()
247
+ @TableColumn({
248
+ required: true,
249
+ type: TableColumnType.Number,
250
+ title: "Order",
251
+ description:
252
+ "Order/priority of this rule. Rules are evaluated in order (lowest first). First matching rule wins.",
253
+ defaultValue: 1,
254
+ isDefaultValueColumn: true,
255
+ })
256
+ @Column({
257
+ type: ColumnType.Number,
258
+ nullable: false,
259
+ default: 1,
260
+ })
261
+ public order?: number = undefined;
262
+
263
+ @ColumnAccessControl({
264
+ create: [
265
+ Permission.ProjectOwner,
266
+ Permission.ProjectAdmin,
267
+ Permission.CreateScheduledMaintenanceReminderRule,
268
+ ],
269
+ read: [
270
+ Permission.ProjectOwner,
271
+ Permission.ProjectAdmin,
272
+ Permission.ProjectMember,
273
+ Permission.Viewer,
274
+ Permission.ScheduledMaintenanceAdmin,
275
+ Permission.ScheduledMaintenanceMember,
276
+ Permission.ScheduledMaintenanceViewer,
277
+ Permission.ReadScheduledMaintenanceReminderRule,
278
+ ],
279
+ update: [
280
+ Permission.ProjectOwner,
281
+ Permission.ProjectAdmin,
282
+ Permission.EditScheduledMaintenanceReminderRule,
283
+ ],
284
+ })
285
+ @Index()
286
+ @TableColumn({
287
+ required: true,
288
+ type: TableColumnType.Boolean,
289
+ title: "Is Enabled",
290
+ description: "Whether this reminder rule is enabled",
291
+ defaultValue: true,
292
+ isDefaultValueColumn: true,
293
+ })
294
+ @Column({
295
+ type: ColumnType.Boolean,
296
+ nullable: false,
297
+ default: true,
298
+ })
299
+ public isEnabled?: boolean = undefined;
300
+
301
+ @ColumnAccessControl({
302
+ create: [
303
+ Permission.ProjectOwner,
304
+ Permission.ProjectAdmin,
305
+ Permission.CreateScheduledMaintenanceReminderRule,
306
+ ],
307
+ read: [
308
+ Permission.ProjectOwner,
309
+ Permission.ProjectAdmin,
310
+ Permission.ProjectMember,
311
+ Permission.Viewer,
312
+ Permission.ScheduledMaintenanceAdmin,
313
+ Permission.ScheduledMaintenanceMember,
314
+ Permission.ScheduledMaintenanceViewer,
315
+ Permission.ReadScheduledMaintenanceReminderRule,
316
+ ],
317
+ update: [
318
+ Permission.ProjectOwner,
319
+ Permission.ProjectAdmin,
320
+ Permission.EditScheduledMaintenanceReminderRule,
321
+ ],
322
+ })
323
+ @TableColumn({
324
+ required: true,
325
+ type: TableColumnType.Number,
326
+ title: "Reminder Interval (Minutes)",
327
+ description:
328
+ "How often (in minutes) to remind scheduled maintenance event owners while the event is still not complete. For example, set to 30 to remind owners every 30 minutes.",
329
+ canReadOnRelationQuery: true,
330
+ })
331
+ @Column({
332
+ type: ColumnType.Number,
333
+ nullable: false,
334
+ })
335
+ public reminderIntervalInMinutes?: number = undefined;
336
+
337
+ @ColumnAccessControl({
338
+ create: [
339
+ Permission.ProjectOwner,
340
+ Permission.ProjectAdmin,
341
+ Permission.CreateScheduledMaintenanceReminderRule,
342
+ ],
343
+ read: [
344
+ Permission.ProjectOwner,
345
+ Permission.ProjectAdmin,
346
+ Permission.ProjectMember,
347
+ Permission.Viewer,
348
+ Permission.ScheduledMaintenanceAdmin,
349
+ Permission.ScheduledMaintenanceMember,
350
+ Permission.ScheduledMaintenanceViewer,
351
+ Permission.ReadScheduledMaintenanceReminderRule,
352
+ ],
353
+ update: [
354
+ Permission.ProjectOwner,
355
+ Permission.ProjectAdmin,
356
+ Permission.EditScheduledMaintenanceReminderRule,
357
+ ],
358
+ })
359
+ @TableColumn({
360
+ required: true,
361
+ type: TableColumnType.ShortText,
362
+ title: "Stop Reminders When",
363
+ description:
364
+ "Stop sending reminders once the scheduled maintenance event reaches this state. Select Ongoing to stop reminders when the event starts, or Completed to keep reminding until the event is completed.",
365
+ defaultValue: ScheduledMaintenanceReminderStopState.Completed,
366
+ isDefaultValueColumn: true,
367
+ canReadOnRelationQuery: true,
368
+ })
369
+ @Column({
370
+ type: ColumnType.ShortText,
371
+ nullable: false,
372
+ default: ScheduledMaintenanceReminderStopState.Completed,
373
+ })
374
+ public stopRemindersOnState?: ScheduledMaintenanceReminderStopState =
375
+ undefined;
376
+
377
+ @ColumnAccessControl({
378
+ create: [
379
+ Permission.ProjectOwner,
380
+ Permission.ProjectAdmin,
381
+ Permission.CreateScheduledMaintenanceReminderRule,
382
+ ],
383
+ read: [
384
+ Permission.ProjectOwner,
385
+ Permission.ProjectAdmin,
386
+ Permission.ProjectMember,
387
+ Permission.Viewer,
388
+ Permission.ScheduledMaintenanceAdmin,
389
+ Permission.ScheduledMaintenanceMember,
390
+ Permission.ScheduledMaintenanceViewer,
391
+ Permission.ReadScheduledMaintenanceReminderRule,
392
+ ],
393
+ update: [
394
+ Permission.ProjectOwner,
395
+ Permission.ProjectAdmin,
396
+ Permission.EditScheduledMaintenanceReminderRule,
397
+ ],
398
+ })
399
+ @TableColumn({
400
+ required: true,
401
+ type: TableColumnType.Boolean,
402
+ title: "Remind While Event is Scheduled",
403
+ description:
404
+ "Send reminders while the event is still scheduled (before it starts). When disabled, reminders only begin once the event has started.",
405
+ defaultValue: false,
406
+ isDefaultValueColumn: true,
407
+ canReadOnRelationQuery: true,
408
+ })
409
+ @Column({
410
+ type: ColumnType.Boolean,
411
+ nullable: false,
412
+ default: false,
413
+ })
414
+ public remindWhileScheduled?: boolean = undefined;
415
+
416
+ // Match Criteria - Labels
417
+
418
+ @ColumnAccessControl({
419
+ create: [
420
+ Permission.ProjectOwner,
421
+ Permission.ProjectAdmin,
422
+ Permission.CreateScheduledMaintenanceReminderRule,
423
+ ],
424
+ read: [
425
+ Permission.ProjectOwner,
426
+ Permission.ProjectAdmin,
427
+ Permission.ProjectMember,
428
+ Permission.Viewer,
429
+ Permission.ScheduledMaintenanceAdmin,
430
+ Permission.ScheduledMaintenanceMember,
431
+ Permission.ScheduledMaintenanceViewer,
432
+ Permission.ReadScheduledMaintenanceReminderRule,
433
+ ],
434
+ update: [
435
+ Permission.ProjectOwner,
436
+ Permission.ProjectAdmin,
437
+ Permission.EditScheduledMaintenanceReminderRule,
438
+ ],
439
+ })
440
+ @TableColumn({
441
+ required: false,
442
+ type: TableColumnType.EntityArray,
443
+ modelType: Label,
444
+ title: "Labels",
445
+ description:
446
+ "Only apply this reminder rule to scheduled maintenance events with these labels. Leave empty to match all events.",
447
+ })
448
+ @ManyToMany(
449
+ () => {
450
+ return Label;
451
+ },
452
+ { eager: false },
453
+ )
454
+ @JoinTable({
455
+ name: "ScheduledMaintenanceReminderRuleLabel",
456
+ inverseJoinColumn: {
457
+ name: "labelId",
458
+ referencedColumnName: "_id",
459
+ },
460
+ joinColumn: {
461
+ name: "scheduledMaintenanceReminderRuleId",
462
+ referencedColumnName: "_id",
463
+ },
464
+ })
465
+ public labels?: Array<Label> = undefined;
466
+
467
+ // Created By / Deleted By User Relations
468
+
469
+ @ColumnAccessControl({
470
+ create: [
471
+ Permission.ProjectOwner,
472
+ Permission.ProjectAdmin,
473
+ Permission.CreateScheduledMaintenanceReminderRule,
474
+ ],
475
+ read: [
476
+ Permission.ProjectOwner,
477
+ Permission.ProjectAdmin,
478
+ Permission.ProjectMember,
479
+ Permission.Viewer,
480
+ Permission.ScheduledMaintenanceAdmin,
481
+ Permission.ScheduledMaintenanceMember,
482
+ Permission.ScheduledMaintenanceViewer,
483
+ Permission.ReadScheduledMaintenanceReminderRule,
484
+ ],
485
+ update: [],
486
+ })
487
+ @TableColumn({
488
+ manyToOneRelationColumn: "createdByUserId",
489
+ type: TableColumnType.Entity,
490
+ modelType: User,
491
+ title: "Created by User",
492
+ description:
493
+ "Relation to User who created this object (if this object was created by a User)",
494
+ })
495
+ @ManyToOne(
496
+ () => {
497
+ return User;
498
+ },
499
+ {
500
+ eager: false,
501
+ nullable: true,
502
+ onDelete: "SET NULL",
503
+ orphanedRowAction: "nullify",
504
+ },
505
+ )
506
+ @JoinColumn({ name: "createdByUserId" })
507
+ public createdByUser?: User = undefined;
508
+
509
+ @ColumnAccessControl({
510
+ create: [
511
+ Permission.ProjectOwner,
512
+ Permission.ProjectAdmin,
513
+ Permission.CreateScheduledMaintenanceReminderRule,
514
+ ],
515
+ read: [
516
+ Permission.ProjectOwner,
517
+ Permission.ProjectAdmin,
518
+ Permission.ProjectMember,
519
+ Permission.Viewer,
520
+ Permission.ScheduledMaintenanceAdmin,
521
+ Permission.ScheduledMaintenanceMember,
522
+ Permission.ScheduledMaintenanceViewer,
523
+ Permission.ReadScheduledMaintenanceReminderRule,
524
+ ],
525
+ update: [],
526
+ })
527
+ @TableColumn({
528
+ type: TableColumnType.ObjectID,
529
+ title: "Created by User ID",
530
+ description:
531
+ "User ID who created this object (if this object was created by a User)",
532
+ })
533
+ @Column({
534
+ type: ColumnType.ObjectID,
535
+ nullable: true,
536
+ transformer: ObjectID.getDatabaseTransformer(),
537
+ })
538
+ public createdByUserId?: ObjectID = undefined;
539
+
540
+ @ColumnAccessControl({
541
+ create: [],
542
+ read: [],
543
+ update: [],
544
+ })
545
+ @TableColumn({
546
+ manyToOneRelationColumn: "deletedByUserId",
547
+ type: TableColumnType.Entity,
548
+ title: "Deleted by User",
549
+ modelType: User,
550
+ description:
551
+ "Relation to User who deleted this object (if this object was deleted by a User)",
552
+ })
553
+ @ManyToOne(
554
+ () => {
555
+ return User;
556
+ },
557
+ {
558
+ cascade: false,
559
+ eager: false,
560
+ nullable: true,
561
+ onDelete: "SET NULL",
562
+ orphanedRowAction: "nullify",
563
+ },
564
+ )
565
+ @JoinColumn({ name: "deletedByUserId" })
566
+ public deletedByUser?: User = undefined;
567
+
568
+ @ColumnAccessControl({
569
+ create: [],
570
+ read: [],
571
+ update: [],
572
+ })
573
+ @TableColumn({
574
+ type: TableColumnType.ObjectID,
575
+ title: "Deleted by User ID",
576
+ description:
577
+ "User ID who deleted this object (if this object was deleted by a User)",
578
+ })
579
+ @Column({
580
+ type: ColumnType.ObjectID,
581
+ nullable: true,
582
+ transformer: ObjectID.getDatabaseTransformer(),
583
+ })
584
+ public deletedByUserId?: ObjectID = undefined;
585
+ }
@@ -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.Free,
32
33
  })
33
34
  @EnableDocumentation()
35
+ @EnableMCP()
34
36
  @TenantColumn("projectId")
35
37
  @TableAccessControl({
36
38
  create: [