@oneuptime/common 9.5.2 → 9.5.4

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 (218) hide show
  1. package/Models/DatabaseModels/Alert.ts +28 -0
  2. package/Models/DatabaseModels/AlertEpisode.ts +27 -0
  3. package/Models/DatabaseModels/AlertEpisodeStateTimeline.ts +1 -0
  4. package/Models/DatabaseModels/AlertStateTimeline.ts +1 -0
  5. package/Models/DatabaseModels/Incident.ts +28 -0
  6. package/Models/DatabaseModels/IncidentEpisode.ts +182 -0
  7. package/Models/DatabaseModels/IncidentEpisodeFeed.ts +2 -0
  8. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +611 -0
  9. package/Models/DatabaseModels/IncidentEpisodeStateTimeline.ts +84 -0
  10. package/Models/DatabaseModels/IncidentGroupingRule.ts +36 -0
  11. package/Models/DatabaseModels/IncidentStateTimeline.ts +1 -0
  12. package/Models/DatabaseModels/Index.ts +2 -0
  13. package/Models/DatabaseModels/MonitorStatusTimeline.ts +1 -0
  14. package/Models/DatabaseModels/Project.ts +252 -1
  15. package/Models/DatabaseModels/ProjectCallSMSConfig.ts +1 -0
  16. package/Models/DatabaseModels/ScheduledMaintenance.ts +28 -0
  17. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -0
  18. package/Models/DatabaseModels/StatusPage.ts +120 -0
  19. package/Server/API/IncidentEpisodePublicNoteAPI.ts +98 -0
  20. package/Server/API/StatusPageAPI.ts +1092 -45
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1770232207959-MigrationName.ts +181 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1770237245069-MigrationName.ts +35 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1770237245070-MigrationName.ts +57 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1770407024682-MigrationName.ts +83 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  26. package/Server/Services/AlertEpisodeMemberService.ts +6 -3
  27. package/Server/Services/AlertEpisodeService.ts +45 -97
  28. package/Server/Services/AlertEpisodeStateTimelineService.ts +4 -2
  29. package/Server/Services/AlertInternalNoteService.ts +5 -2
  30. package/Server/Services/AlertOwnerTeamService.ts +10 -4
  31. package/Server/Services/AlertOwnerUserService.ts +10 -4
  32. package/Server/Services/AlertService.ts +24 -38
  33. package/Server/Services/AlertStateTimelineService.ts +6 -3
  34. package/Server/Services/DatabaseService.ts +12 -0
  35. package/Server/Services/IncidentEpisodeMemberService.ts +8 -4
  36. package/Server/Services/IncidentEpisodePublicNoteService.ts +257 -0
  37. package/Server/Services/IncidentEpisodeService.ts +67 -93
  38. package/Server/Services/IncidentEpisodeStateTimelineService.ts +4 -2
  39. package/Server/Services/IncidentInternalNoteService.ts +10 -5
  40. package/Server/Services/IncidentMemberService.ts +20 -10
  41. package/Server/Services/IncidentOwnerTeamService.ts +20 -10
  42. package/Server/Services/IncidentOwnerUserService.ts +20 -10
  43. package/Server/Services/IncidentPublicNoteService.ts +10 -5
  44. package/Server/Services/IncidentService.ts +34 -110
  45. package/Server/Services/IncidentStateTimelineService.ts +11 -6
  46. package/Server/Services/Index.ts +2 -0
  47. package/Server/Services/OnCallDutyPolicyExecutionLogService.ts +61 -39
  48. package/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.ts +31 -19
  49. package/Server/Services/ProjectService.ts +227 -0
  50. package/Server/Services/ScheduledMaintenanceInternalNoteService.ts +9 -6
  51. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +9 -6
  52. package/Server/Services/ScheduledMaintenanceService.ts +27 -39
  53. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +8 -6
  54. package/Server/Services/UserNotificationRuleService.ts +32 -21
  55. package/Server/Utils/AI/IncidentEpisodeAIContextBuilder.ts +4 -2
  56. package/Server/Utils/Browser.ts +28 -20
  57. package/Server/Utils/Monitor/MonitorAlert.ts +5 -0
  58. package/Server/Utils/Monitor/MonitorIncident.ts +13 -0
  59. package/Server/Utils/PushNotificationUtil.ts +69 -26
  60. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +8 -4
  61. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +20 -8
  62. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +42 -22
  63. package/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.ts +23 -17
  64. package/Server/Utils/Workspace/WorkspaceMessages/Alert.ts +1 -0
  65. package/Server/Utils/Workspace/WorkspaceMessages/Incident.ts +1 -0
  66. package/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.ts +1 -0
  67. package/Types/Email/EmailTemplateType.ts +4 -0
  68. package/Types/Icon/IconProp.ts +172 -0
  69. package/Types/Monitor/CriteriaIncident.ts +2 -0
  70. package/Types/Monitor/MonitorEvaluationSummary.ts +2 -0
  71. package/Types/Permission.ts +40 -0
  72. package/Types/StatusPage/StatusPageSubscriberNotificationEventType.ts +5 -0
  73. package/UI/Components/Icon/Icon.tsx +1333 -1
  74. package/Utils/Analytics.ts +11 -0
  75. package/build/dist/Models/DatabaseModels/Alert.js +30 -0
  76. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  77. package/build/dist/Models/DatabaseModels/AlertEpisode.js +29 -0
  78. package/build/dist/Models/DatabaseModels/AlertEpisode.js.map +1 -1
  79. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js +1 -0
  80. package/build/dist/Models/DatabaseModels/AlertEpisodeStateTimeline.js.map +1 -1
  81. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js +1 -0
  82. package/build/dist/Models/DatabaseModels/AlertStateTimeline.js.map +1 -1
  83. package/build/dist/Models/DatabaseModels/Incident.js +30 -0
  84. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  85. package/build/dist/Models/DatabaseModels/IncidentEpisode.js +189 -0
  86. package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
  87. package/build/dist/Models/DatabaseModels/IncidentEpisodeFeed.js +2 -0
  88. package/build/dist/Models/DatabaseModels/IncidentEpisodeFeed.js.map +1 -1
  89. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +626 -0
  90. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -0
  91. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js +86 -0
  92. package/build/dist/Models/DatabaseModels/IncidentEpisodeStateTimeline.js.map +1 -1
  93. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +37 -0
  94. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -1
  95. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js +1 -0
  96. package/build/dist/Models/DatabaseModels/IncidentStateTimeline.js.map +1 -1
  97. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  98. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  99. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js +1 -0
  100. package/build/dist/Models/DatabaseModels/MonitorStatusTimeline.js.map +1 -1
  101. package/build/dist/Models/DatabaseModels/Project.js +267 -1
  102. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  103. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js +1 -0
  104. package/build/dist/Models/DatabaseModels/ProjectCallSMSConfig.js.map +1 -1
  105. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +29 -0
  106. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  107. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -0
  108. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  109. package/build/dist/Models/DatabaseModels/StatusPage.js +126 -0
  110. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  111. package/build/dist/Server/API/IncidentEpisodePublicNoteAPI.js +68 -0
  112. package/build/dist/Server/API/IncidentEpisodePublicNoteAPI.js.map +1 -0
  113. package/build/dist/Server/API/StatusPageAPI.js +874 -47
  114. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  115. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770232207959-MigrationName.js +68 -0
  116. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770232207959-MigrationName.js.map +1 -0
  117. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245069-MigrationName.js +18 -0
  118. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245069-MigrationName.js.map +1 -0
  119. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245070-MigrationName.js +27 -0
  120. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770237245070-MigrationName.js.map +1 -0
  121. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770407024682-MigrationName.js +34 -0
  122. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1770407024682-MigrationName.js.map +1 -0
  123. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  124. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  125. package/build/dist/Server/Services/AlertEpisodeMemberService.js +6 -3
  126. package/build/dist/Server/Services/AlertEpisodeMemberService.js.map +1 -1
  127. package/build/dist/Server/Services/AlertEpisodeService.js +33 -90
  128. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  129. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js +3 -2
  130. package/build/dist/Server/Services/AlertEpisodeStateTimelineService.js.map +1 -1
  131. package/build/dist/Server/Services/AlertInternalNoteService.js +2 -2
  132. package/build/dist/Server/Services/AlertInternalNoteService.js.map +1 -1
  133. package/build/dist/Server/Services/AlertOwnerTeamService.js +4 -4
  134. package/build/dist/Server/Services/AlertOwnerTeamService.js.map +1 -1
  135. package/build/dist/Server/Services/AlertOwnerUserService.js +4 -4
  136. package/build/dist/Server/Services/AlertOwnerUserService.js.map +1 -1
  137. package/build/dist/Server/Services/AlertService.js +16 -34
  138. package/build/dist/Server/Services/AlertService.js.map +1 -1
  139. package/build/dist/Server/Services/AlertStateTimelineService.js +3 -3
  140. package/build/dist/Server/Services/AlertStateTimelineService.js.map +1 -1
  141. package/build/dist/Server/Services/DatabaseService.js +9 -0
  142. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  143. package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
  144. package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
  145. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +224 -0
  146. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -0
  147. package/build/dist/Server/Services/IncidentEpisodeService.js +47 -82
  148. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  149. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +3 -2
  150. package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
  151. package/build/dist/Server/Services/IncidentInternalNoteService.js +4 -2
  152. package/build/dist/Server/Services/IncidentInternalNoteService.js.map +1 -1
  153. package/build/dist/Server/Services/IncidentMemberService.js +8 -4
  154. package/build/dist/Server/Services/IncidentMemberService.js.map +1 -1
  155. package/build/dist/Server/Services/IncidentOwnerTeamService.js +8 -4
  156. package/build/dist/Server/Services/IncidentOwnerTeamService.js.map +1 -1
  157. package/build/dist/Server/Services/IncidentOwnerUserService.js +8 -4
  158. package/build/dist/Server/Services/IncidentOwnerUserService.js.map +1 -1
  159. package/build/dist/Server/Services/IncidentPublicNoteService.js +4 -2
  160. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  161. package/build/dist/Server/Services/IncidentService.js +24 -94
  162. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  163. package/build/dist/Server/Services/IncidentStateTimelineService.js +5 -3
  164. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  165. package/build/dist/Server/Services/Index.js +2 -0
  166. package/build/dist/Server/Services/Index.js.map +1 -1
  167. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js +20 -16
  168. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogService.js.map +1 -1
  169. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js +10 -8
  170. package/build/dist/Server/Services/OnCallDutyPolicyExecutionLogTimelineService.js.map +1 -1
  171. package/build/dist/Server/Services/ProjectService.js +207 -0
  172. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  173. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js +4 -3
  174. package/build/dist/Server/Services/ScheduledMaintenanceInternalNoteService.js.map +1 -1
  175. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +4 -3
  176. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  177. package/build/dist/Server/Services/ScheduledMaintenanceService.js +16 -37
  178. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  179. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +3 -3
  180. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  181. package/build/dist/Server/Services/UserNotificationRuleService.js +33 -25
  182. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  183. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js +4 -2
  184. package/build/dist/Server/Utils/AI/IncidentEpisodeAIContextBuilder.js.map +1 -1
  185. package/build/dist/Server/Utils/Browser.js +19 -12
  186. package/build/dist/Server/Utils/Browser.js.map +1 -1
  187. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +4 -0
  188. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  189. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +9 -0
  190. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  191. package/build/dist/Server/Utils/PushNotificationUtil.js +36 -28
  192. package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
  193. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +8 -4
  194. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  195. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +8 -8
  196. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
  197. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +18 -10
  198. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
  199. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js +8 -8
  200. package/build/dist/Server/Utils/Workspace/Slack/Actions/ScheduledMaintenance.js.map +1 -1
  201. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Alert.js.map +1 -1
  202. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/Incident.js.map +1 -1
  203. package/build/dist/Server/Utils/Workspace/WorkspaceMessages/ScheduledMaintenance.js.map +1 -1
  204. package/build/dist/Types/Email/EmailTemplateType.js +3 -0
  205. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  206. package/build/dist/Types/Icon/IconProp.js +172 -0
  207. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  208. package/build/dist/Types/Monitor/CriteriaIncident.js +1 -0
  209. package/build/dist/Types/Monitor/CriteriaIncident.js.map +1 -1
  210. package/build/dist/Types/Permission.js +34 -0
  211. package/build/dist/Types/Permission.js.map +1 -1
  212. package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js +4 -0
  213. package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js.map +1 -1
  214. package/build/dist/UI/Components/Icon/Icon.js +502 -1
  215. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  216. package/build/dist/Utils/Analytics.js +5 -0
  217. package/build/dist/Utils/Analytics.js.map +1 -1
  218. package/package.json +1 -1
@@ -0,0 +1,611 @@
1
+ import IncidentEpisode from "./IncidentEpisode";
2
+ import Project from "./Project";
3
+ import User from "./User";
4
+ import File from "./File";
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 CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn";
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 StatusPageSubscriberNotificationStatus from "../../Types/StatusPage/StatusPageSubscriberNotificationStatus";
22
+ import {
23
+ Column,
24
+ Entity,
25
+ Index,
26
+ JoinColumn,
27
+ JoinTable,
28
+ ManyToMany,
29
+ ManyToOne,
30
+ } from "typeorm";
31
+
32
+ @EnableDocumentation()
33
+ @CanAccessIfCanReadOn("incidentEpisode")
34
+ @TenantColumn("projectId")
35
+ @TableAccessControl({
36
+ create: [
37
+ Permission.ProjectOwner,
38
+ Permission.ProjectAdmin,
39
+ Permission.ProjectMember,
40
+ Permission.CreateIncidentEpisodePublicNote,
41
+ ],
42
+ read: [
43
+ Permission.ProjectOwner,
44
+ Permission.ProjectAdmin,
45
+ Permission.ProjectMember,
46
+ Permission.ReadIncidentEpisodePublicNote,
47
+ Permission.ReadAllProjectResources,
48
+ ],
49
+ delete: [
50
+ Permission.ProjectOwner,
51
+ Permission.ProjectAdmin,
52
+ Permission.ProjectMember,
53
+ Permission.DeleteIncidentEpisodePublicNote,
54
+ ],
55
+ update: [
56
+ Permission.ProjectOwner,
57
+ Permission.ProjectAdmin,
58
+ Permission.ProjectMember,
59
+ Permission.EditIncidentEpisodePublicNote,
60
+ ],
61
+ })
62
+ @EnableWorkflow({
63
+ create: true,
64
+ delete: true,
65
+ update: true,
66
+ read: true,
67
+ })
68
+ @CrudApiEndpoint(new Route("/incident-episode-public-note"))
69
+ @Entity({
70
+ name: "IncidentEpisodePublicNote",
71
+ })
72
+ @TableMetadata({
73
+ tableName: "IncidentEpisodePublicNote",
74
+ singularName: "Incident Episode Public Note",
75
+ pluralName: "Incident Episode Public Notes",
76
+ icon: IconProp.Team,
77
+ tableDescription: "Manage public notes for your incident episode",
78
+ })
79
+ export default class IncidentEpisodePublicNote extends BaseModel {
80
+ @ColumnAccessControl({
81
+ create: [
82
+ Permission.ProjectOwner,
83
+ Permission.ProjectAdmin,
84
+ Permission.ProjectMember,
85
+ Permission.CreateIncidentEpisodePublicNote,
86
+ ],
87
+ read: [
88
+ Permission.ProjectOwner,
89
+ Permission.ProjectAdmin,
90
+ Permission.ProjectMember,
91
+ Permission.ReadIncidentEpisodePublicNote,
92
+ Permission.ReadAllProjectResources,
93
+ ],
94
+ update: [],
95
+ })
96
+ @TableColumn({
97
+ manyToOneRelationColumn: "projectId",
98
+ type: TableColumnType.Entity,
99
+ modelType: Project,
100
+ title: "Project",
101
+ description: "Relation to Project Resource in which this object belongs",
102
+ })
103
+ @ManyToOne(
104
+ () => {
105
+ return Project;
106
+ },
107
+ {
108
+ eager: false,
109
+ nullable: true,
110
+ onDelete: "CASCADE",
111
+ orphanedRowAction: "nullify",
112
+ },
113
+ )
114
+ @JoinColumn({ name: "projectId" })
115
+ public project?: Project = undefined;
116
+
117
+ @ColumnAccessControl({
118
+ create: [
119
+ Permission.ProjectOwner,
120
+ Permission.ProjectAdmin,
121
+ Permission.ProjectMember,
122
+ Permission.CreateIncidentEpisodePublicNote,
123
+ ],
124
+ read: [
125
+ Permission.ProjectOwner,
126
+ Permission.ProjectAdmin,
127
+ Permission.ProjectMember,
128
+ Permission.ReadIncidentEpisodePublicNote,
129
+ Permission.ReadAllProjectResources,
130
+ ],
131
+ update: [],
132
+ })
133
+ @Index()
134
+ @TableColumn({
135
+ type: TableColumnType.ObjectID,
136
+ required: true,
137
+ canReadOnRelationQuery: true,
138
+ title: "Project ID",
139
+ description: "ID of your OneUptime Project in which this object belongs",
140
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
141
+ })
142
+ @Column({
143
+ type: ColumnType.ObjectID,
144
+ nullable: false,
145
+ transformer: ObjectID.getDatabaseTransformer(),
146
+ })
147
+ public projectId?: ObjectID = undefined;
148
+
149
+ @ColumnAccessControl({
150
+ create: [
151
+ Permission.ProjectOwner,
152
+ Permission.ProjectAdmin,
153
+ Permission.ProjectMember,
154
+ Permission.CreateIncidentEpisodePublicNote,
155
+ ],
156
+ read: [
157
+ Permission.ProjectOwner,
158
+ Permission.ProjectAdmin,
159
+ Permission.ProjectMember,
160
+ Permission.ReadIncidentEpisodePublicNote,
161
+ Permission.ReadAllProjectResources,
162
+ ],
163
+ update: [],
164
+ })
165
+ @TableColumn({
166
+ manyToOneRelationColumn: "incidentEpisodeId",
167
+ type: TableColumnType.Entity,
168
+ modelType: IncidentEpisode,
169
+ title: "Incident Episode",
170
+ description: "Relation to Incident Episode in which this resource belongs",
171
+ })
172
+ @ManyToOne(
173
+ () => {
174
+ return IncidentEpisode;
175
+ },
176
+ {
177
+ eager: false,
178
+ nullable: true,
179
+ onDelete: "CASCADE",
180
+ orphanedRowAction: "nullify",
181
+ },
182
+ )
183
+ @JoinColumn({ name: "incidentEpisodeId" })
184
+ public incidentEpisode?: IncidentEpisode = undefined;
185
+
186
+ @ColumnAccessControl({
187
+ create: [
188
+ Permission.ProjectOwner,
189
+ Permission.ProjectAdmin,
190
+ Permission.ProjectMember,
191
+ Permission.CreateIncidentEpisodePublicNote,
192
+ ],
193
+ read: [
194
+ Permission.ProjectOwner,
195
+ Permission.ProjectAdmin,
196
+ Permission.ProjectMember,
197
+ Permission.ReadIncidentEpisodePublicNote,
198
+ Permission.ReadAllProjectResources,
199
+ ],
200
+ update: [],
201
+ })
202
+ @Index()
203
+ @TableColumn({
204
+ type: TableColumnType.ObjectID,
205
+ required: true,
206
+ title: "Incident Episode ID",
207
+ description:
208
+ "Relation to Incident Episode ID in which this resource belongs",
209
+ example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
210
+ })
211
+ @Column({
212
+ type: ColumnType.ObjectID,
213
+ nullable: false,
214
+ transformer: ObjectID.getDatabaseTransformer(),
215
+ })
216
+ public incidentEpisodeId?: ObjectID = undefined;
217
+
218
+ @ColumnAccessControl({
219
+ create: [
220
+ Permission.ProjectOwner,
221
+ Permission.ProjectAdmin,
222
+ Permission.ProjectMember,
223
+ Permission.CreateIncidentEpisodePublicNote,
224
+ ],
225
+ read: [
226
+ Permission.ProjectOwner,
227
+ Permission.ProjectAdmin,
228
+ Permission.ProjectMember,
229
+ Permission.ReadIncidentEpisodePublicNote,
230
+ Permission.ReadAllProjectResources,
231
+ ],
232
+ update: [],
233
+ })
234
+ @TableColumn({
235
+ manyToOneRelationColumn: "createdByUserId",
236
+ type: TableColumnType.Entity,
237
+ modelType: User,
238
+ title: "Created by User",
239
+ description:
240
+ "Relation to User who created this object (if this object was created by a User)",
241
+ })
242
+ @ManyToOne(
243
+ () => {
244
+ return User;
245
+ },
246
+ {
247
+ eager: false,
248
+ nullable: true,
249
+ onDelete: "SET NULL",
250
+ orphanedRowAction: "nullify",
251
+ },
252
+ )
253
+ @JoinColumn({ name: "createdByUserId" })
254
+ public createdByUser?: User = undefined;
255
+
256
+ @ColumnAccessControl({
257
+ create: [
258
+ Permission.ProjectOwner,
259
+ Permission.ProjectAdmin,
260
+ Permission.ProjectMember,
261
+ Permission.CreateIncidentEpisodePublicNote,
262
+ ],
263
+ read: [
264
+ Permission.ProjectOwner,
265
+ Permission.ProjectAdmin,
266
+ Permission.ProjectMember,
267
+ Permission.ReadIncidentEpisodePublicNote,
268
+ Permission.ReadAllProjectResources,
269
+ ],
270
+ update: [],
271
+ })
272
+ @TableColumn({
273
+ type: TableColumnType.ObjectID,
274
+ title: "Created by User ID",
275
+ description:
276
+ "User ID who created this object (if this object was created by a User)",
277
+ example: "7c8d9e0f-a1b2-3c4d-9e5f-8a9b0c1d2e3f",
278
+ })
279
+ @Column({
280
+ type: ColumnType.ObjectID,
281
+ nullable: true,
282
+ transformer: ObjectID.getDatabaseTransformer(),
283
+ })
284
+ public createdByUserId?: ObjectID = undefined;
285
+
286
+ @ColumnAccessControl({
287
+ create: [],
288
+ read: [],
289
+ update: [],
290
+ })
291
+ @TableColumn({
292
+ manyToOneRelationColumn: "deletedByUserId",
293
+ type: TableColumnType.Entity,
294
+ title: "Deleted by User",
295
+ modelType: User,
296
+ description:
297
+ "Relation to User who deleted this object (if this object was deleted by a User)",
298
+ })
299
+ @ManyToOne(
300
+ () => {
301
+ return User;
302
+ },
303
+ {
304
+ cascade: false,
305
+ eager: false,
306
+ nullable: true,
307
+ onDelete: "SET NULL",
308
+ orphanedRowAction: "nullify",
309
+ },
310
+ )
311
+ @JoinColumn({ name: "deletedByUserId" })
312
+ public deletedByUser?: User = undefined;
313
+
314
+ @ColumnAccessControl({
315
+ create: [],
316
+ read: [],
317
+ update: [],
318
+ })
319
+ @TableColumn({
320
+ type: TableColumnType.ObjectID,
321
+ title: "Deleted by User ID",
322
+ description:
323
+ "User ID who deleted this object (if this object was deleted by a User)",
324
+ example: "9d0e1f2a-b3c4-5d6e-af7b-8c9d0e1f2a3b",
325
+ })
326
+ @Column({
327
+ type: ColumnType.ObjectID,
328
+ nullable: true,
329
+ transformer: ObjectID.getDatabaseTransformer(),
330
+ })
331
+ public deletedByUserId?: ObjectID = undefined;
332
+
333
+ @ColumnAccessControl({
334
+ create: [
335
+ Permission.ProjectOwner,
336
+ Permission.ProjectAdmin,
337
+ Permission.ProjectMember,
338
+ Permission.CreateIncidentEpisodePublicNote,
339
+ ],
340
+ read: [
341
+ Permission.ProjectOwner,
342
+ Permission.ProjectAdmin,
343
+ Permission.ProjectMember,
344
+ Permission.ReadIncidentEpisodePublicNote,
345
+ Permission.ReadAllProjectResources,
346
+ ],
347
+ update: [
348
+ Permission.ProjectOwner,
349
+ Permission.ProjectAdmin,
350
+ Permission.ProjectMember,
351
+ Permission.EditIncidentEpisodePublicNote,
352
+ ],
353
+ })
354
+ @TableColumn({
355
+ type: TableColumnType.Markdown,
356
+ title: "Note",
357
+ description: "Notes in markdown",
358
+ example:
359
+ "## Update - Episode Resolved\n\nWe have identified and resolved the issue. All services are now operating normally.",
360
+ })
361
+ @Column({
362
+ type: ColumnType.Markdown,
363
+ nullable: false,
364
+ unique: false,
365
+ })
366
+ public note?: string = undefined;
367
+
368
+ @ColumnAccessControl({
369
+ create: [
370
+ Permission.ProjectOwner,
371
+ Permission.ProjectAdmin,
372
+ Permission.ProjectMember,
373
+ Permission.CreateIncidentEpisodePublicNote,
374
+ ],
375
+ read: [
376
+ Permission.ProjectOwner,
377
+ Permission.ProjectAdmin,
378
+ Permission.ProjectMember,
379
+ Permission.ReadIncidentEpisodePublicNote,
380
+ Permission.ReadAllProjectResources,
381
+ ],
382
+ update: [
383
+ Permission.ProjectOwner,
384
+ Permission.ProjectAdmin,
385
+ Permission.ProjectMember,
386
+ Permission.EditIncidentEpisodePublicNote,
387
+ ],
388
+ })
389
+ @TableColumn({
390
+ type: TableColumnType.EntityArray,
391
+ modelType: File,
392
+ title: "Attachments",
393
+ description: "Files attached to this note",
394
+ required: false,
395
+ })
396
+ @ManyToMany(
397
+ () => {
398
+ return File;
399
+ },
400
+ {
401
+ eager: false,
402
+ },
403
+ )
404
+ @JoinTable({
405
+ name: "IncidentEpisodePublicNoteFile",
406
+ joinColumn: {
407
+ name: "incidentEpisodePublicNoteId",
408
+ referencedColumnName: "_id",
409
+ },
410
+ inverseJoinColumn: {
411
+ name: "fileId",
412
+ referencedColumnName: "_id",
413
+ },
414
+ })
415
+ public attachments?: Array<File> = undefined;
416
+
417
+ @ColumnAccessControl({
418
+ create: [
419
+ Permission.ProjectOwner,
420
+ Permission.ProjectAdmin,
421
+ Permission.ProjectMember,
422
+ Permission.CreateIncidentEpisodePublicNote,
423
+ ],
424
+ read: [
425
+ Permission.ProjectOwner,
426
+ Permission.ProjectAdmin,
427
+ Permission.ProjectMember,
428
+ Permission.ReadIncidentEpisodePublicNote,
429
+ Permission.ReadAllProjectResources,
430
+ ],
431
+ update: [
432
+ Permission.ProjectOwner,
433
+ Permission.ProjectAdmin,
434
+ Permission.ProjectMember,
435
+ Permission.EditIncidentEpisodePublicNote,
436
+ ],
437
+ })
438
+ @TableColumn({
439
+ isDefaultValueColumn: true,
440
+ computed: true,
441
+ hideColumnInDocumentation: true,
442
+ type: TableColumnType.ShortText,
443
+ title: "Subscriber Notification Status",
444
+ description: "Status of notification sent to subscribers about this note",
445
+ defaultValue: StatusPageSubscriberNotificationStatus.Pending,
446
+ })
447
+ @Column({
448
+ type: ColumnType.ShortText,
449
+ default: StatusPageSubscriberNotificationStatus.Pending,
450
+ })
451
+ public subscriberNotificationStatusOnNoteCreated?: StatusPageSubscriberNotificationStatus =
452
+ undefined;
453
+
454
+ @ColumnAccessControl({
455
+ create: [
456
+ Permission.ProjectOwner,
457
+ Permission.ProjectAdmin,
458
+ Permission.ProjectMember,
459
+ Permission.CreateIncidentEpisodePublicNote,
460
+ ],
461
+ read: [
462
+ Permission.ProjectOwner,
463
+ Permission.ProjectAdmin,
464
+ Permission.ProjectMember,
465
+ Permission.ReadIncidentEpisodePublicNote,
466
+ Permission.ReadAllProjectResources,
467
+ ],
468
+ update: [
469
+ Permission.ProjectOwner,
470
+ Permission.ProjectAdmin,
471
+ Permission.ProjectMember,
472
+ Permission.EditIncidentEpisodePublicNote,
473
+ ],
474
+ })
475
+ @TableColumn({
476
+ type: TableColumnType.VeryLongText,
477
+ title: "Notification Status Message",
478
+ description:
479
+ "Status message for subscriber notifications - includes success messages, failure reasons, or skip reasons",
480
+ required: false,
481
+ example: "Successfully notified 1,234 subscribers via email and SMS",
482
+ })
483
+ @Column({
484
+ type: ColumnType.VeryLongText,
485
+ nullable: true,
486
+ })
487
+ public subscriberNotificationStatusMessage?: string = undefined;
488
+
489
+ @ColumnAccessControl({
490
+ create: [
491
+ Permission.ProjectOwner,
492
+ Permission.ProjectAdmin,
493
+ Permission.ProjectMember,
494
+ Permission.CreateIncidentEpisodePublicNote,
495
+ ],
496
+ read: [
497
+ Permission.ProjectOwner,
498
+ Permission.ProjectAdmin,
499
+ Permission.ProjectMember,
500
+ Permission.ReadIncidentEpisodePublicNote,
501
+ Permission.ReadAllProjectResources,
502
+ ],
503
+ update: [],
504
+ })
505
+ @TableColumn({
506
+ isDefaultValueColumn: true,
507
+ type: TableColumnType.Boolean,
508
+ title: "Should subscribers be notified?",
509
+ description: "Should subscribers be notified about this note?",
510
+ defaultValue: true,
511
+ })
512
+ @Column({
513
+ type: ColumnType.Boolean,
514
+ default: true,
515
+ })
516
+ public shouldStatusPageSubscribersBeNotifiedOnNoteCreated?: boolean =
517
+ undefined;
518
+
519
+ @ColumnAccessControl({
520
+ create: [],
521
+ read: [
522
+ Permission.ProjectOwner,
523
+ Permission.ProjectAdmin,
524
+ Permission.ProjectMember,
525
+ Permission.ReadIncidentEpisodePublicNote,
526
+ Permission.ReadAllProjectResources,
527
+ ],
528
+ update: [],
529
+ })
530
+ @Index()
531
+ @TableColumn({
532
+ type: TableColumnType.Boolean,
533
+ computed: true,
534
+ hideColumnInDocumentation: true,
535
+ required: true,
536
+ isDefaultValueColumn: true,
537
+ title: "Are Owners Notified",
538
+ description: "Are owners notified of this resource ownership?",
539
+ defaultValue: false,
540
+ })
541
+ @Column({
542
+ type: ColumnType.Boolean,
543
+ nullable: false,
544
+ default: false,
545
+ })
546
+ public isOwnerNotified?: boolean = undefined;
547
+
548
+ @ColumnAccessControl({
549
+ create: [
550
+ Permission.ProjectOwner,
551
+ Permission.ProjectAdmin,
552
+ Permission.ProjectMember,
553
+ Permission.CreateIncidentEpisodePublicNote,
554
+ ],
555
+ read: [
556
+ Permission.ProjectOwner,
557
+ Permission.ProjectAdmin,
558
+ Permission.ProjectMember,
559
+ Permission.ReadIncidentEpisodePublicNote,
560
+ Permission.ReadAllProjectResources,
561
+ ],
562
+ update: [
563
+ Permission.ProjectOwner,
564
+ Permission.ProjectAdmin,
565
+ Permission.ProjectMember,
566
+ Permission.EditIncidentEpisodePublicNote,
567
+ ],
568
+ })
569
+ @TableColumn({
570
+ title: "Note Posted At",
571
+ description: "Date and time when the note was posted",
572
+ type: TableColumnType.Date,
573
+ })
574
+ @Column({
575
+ type: ColumnType.Date,
576
+ nullable: true,
577
+ unique: false,
578
+ })
579
+ public postedAt?: Date = undefined;
580
+
581
+ @ColumnAccessControl({
582
+ create: [
583
+ Permission.ProjectOwner,
584
+ Permission.ProjectAdmin,
585
+ Permission.ProjectMember,
586
+ Permission.CreateIncidentEpisodePublicNote,
587
+ ],
588
+ read: [
589
+ Permission.ProjectOwner,
590
+ Permission.ProjectAdmin,
591
+ Permission.ProjectMember,
592
+ Permission.ReadIncidentEpisodePublicNote,
593
+ Permission.ReadAllProjectResources,
594
+ ],
595
+ update: [],
596
+ })
597
+ @Index()
598
+ @TableColumn({
599
+ type: TableColumnType.LongText,
600
+ title: "Posted from Slack Message ID",
601
+ description:
602
+ "Unique identifier for the Slack message this note was created from (channel_id:message_ts). Used to prevent duplicate notes when multiple users react to the same message.",
603
+ required: false,
604
+ example: "C1234567890:1234567890.123456",
605
+ })
606
+ @Column({
607
+ type: ColumnType.LongText,
608
+ nullable: true,
609
+ })
610
+ public postedFromSlackMessageId?: string = undefined;
611
+ }
@@ -19,6 +19,7 @@ import IconProp from "../../Types/Icon/IconProp";
19
19
  import { JSONObject } from "../../Types/JSON";
20
20
  import ObjectID from "../../Types/ObjectID";
21
21
  import Permission from "../../Types/Permission";
22
+ import StatusPageSubscriberNotificationStatus from "../../Types/StatusPage/StatusPageSubscriberNotificationStatus";
22
23
  import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
23
24
 
24
25
  @EnableDocumentation()
@@ -440,6 +441,7 @@ export default class IncidentEpisodeStateTimeline extends BaseModel {
440
441
  isDefaultValueColumn: false,
441
442
  required: false,
442
443
  type: TableColumnType.JSON,
444
+ computed: true,
443
445
  })
444
446
  @Column({
445
447
  type: ColumnType.JSON,
@@ -535,4 +537,86 @@ export default class IncidentEpisodeStateTimeline extends BaseModel {
535
537
  unique: false,
536
538
  })
537
539
  public startsAt?: Date = undefined;
540
+
541
+ @ColumnAccessControl({
542
+ create: [
543
+ Permission.ProjectOwner,
544
+ Permission.ProjectAdmin,
545
+ Permission.ProjectMember,
546
+ Permission.CreateIncidentEpisodeStateTimeline,
547
+ ],
548
+ read: [
549
+ Permission.ProjectOwner,
550
+ Permission.ProjectAdmin,
551
+ Permission.ProjectMember,
552
+ Permission.ReadIncidentEpisodeStateTimeline,
553
+ Permission.ReadAllProjectResources,
554
+ ],
555
+ update: [],
556
+ })
557
+ @TableColumn({
558
+ isDefaultValueColumn: true,
559
+ type: TableColumnType.Boolean,
560
+ title: "Should subscribers be notified?",
561
+ description:
562
+ "Should status page subscribers be notified about this state change?",
563
+ defaultValue: true,
564
+ })
565
+ @Column({
566
+ type: ColumnType.Boolean,
567
+ default: true,
568
+ })
569
+ public shouldStatusPageSubscribersBeNotified?: boolean = undefined;
570
+
571
+ @ColumnAccessControl({
572
+ create: [],
573
+ read: [
574
+ Permission.ProjectOwner,
575
+ Permission.ProjectAdmin,
576
+ Permission.ProjectMember,
577
+ Permission.ReadIncidentEpisodeStateTimeline,
578
+ Permission.ReadAllProjectResources,
579
+ ],
580
+ update: [],
581
+ })
582
+ @TableColumn({
583
+ isDefaultValueColumn: true,
584
+ computed: true,
585
+ hideColumnInDocumentation: true,
586
+ type: TableColumnType.ShortText,
587
+ title: "Subscriber Notification Status",
588
+ description:
589
+ "Status of notification sent to subscribers about this state change",
590
+ defaultValue: StatusPageSubscriberNotificationStatus.Pending,
591
+ })
592
+ @Column({
593
+ type: ColumnType.ShortText,
594
+ default: StatusPageSubscriberNotificationStatus.Pending,
595
+ })
596
+ public subscriberNotificationStatus?: StatusPageSubscriberNotificationStatus =
597
+ undefined;
598
+
599
+ @ColumnAccessControl({
600
+ create: [],
601
+ read: [
602
+ Permission.ProjectOwner,
603
+ Permission.ProjectAdmin,
604
+ Permission.ProjectMember,
605
+ Permission.ReadIncidentEpisodeStateTimeline,
606
+ Permission.ReadAllProjectResources,
607
+ ],
608
+ update: [],
609
+ })
610
+ @TableColumn({
611
+ type: TableColumnType.VeryLongText,
612
+ title: "Subscriber Notification Status Message",
613
+ description:
614
+ "Status message for subscriber notifications - includes success messages, failure reasons, or skip reasons",
615
+ required: false,
616
+ })
617
+ @Column({
618
+ type: ColumnType.VeryLongText,
619
+ nullable: true,
620
+ })
621
+ public subscriberNotificationStatusMessage?: string = undefined;
538
622
  }