@oneuptime/common 7.0.2990 → 7.0.3010

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 (197) hide show
  1. package/Models/AnalyticsModels/ExceptionInstance.ts +488 -0
  2. package/Models/AnalyticsModels/Index.ts +2 -0
  3. package/Models/AnalyticsModels/Span.ts +2 -2
  4. package/Models/DatabaseModels/Index.ts +4 -0
  5. package/Models/DatabaseModels/TelemetryException.ts +978 -0
  6. package/Server/API/StatusAPI.ts +63 -51
  7. package/Server/EnvironmentConfig.ts +3 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/1724610006927-MigrationName.ts +93 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/1724613666632-MigrationName.ts +60 -0
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1724659071843-MigrationName.ts +17 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  12. package/Server/Infrastructure/Queue.ts +36 -1
  13. package/Server/Infrastructure/QueueWorker.ts +2 -2
  14. package/Server/Services/DatabaseService.ts +4 -5
  15. package/Server/Services/ExceptionInstanceService.ts +11 -0
  16. package/Server/Services/Index.ts +5 -0
  17. package/Server/Services/StatusPageDomainService.ts +118 -59
  18. package/Server/Services/TelemetryExceptionService.ts +10 -0
  19. package/Server/Types/Database/Permissions/Index.ts +1 -1
  20. package/Server/Types/Database/UpdateByID.ts +1 -1
  21. package/Server/Utils/Greenlock/Greenlock.ts +331 -204
  22. package/Server/Utils/Logger.ts +8 -2
  23. package/Server/Utils/Telemetry.ts +109 -25
  24. package/Types/Code/CodeType.ts +1 -0
  25. package/Types/Database/PartialEntity.ts +14 -1
  26. package/Types/Date.ts +9 -1
  27. package/Types/Icon/IconProp.ts +2 -0
  28. package/Types/Permission.ts +39 -0
  29. package/UI/Components/ActionCard/ActionCard.tsx +66 -0
  30. package/UI/Components/Alerts/Alert.tsx +69 -60
  31. package/UI/Components/Card/Card.tsx +1 -0
  32. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +4 -17
  33. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +1005 -0
  34. package/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.ts +3 -0
  35. package/UI/Components/Charts/ChartLibrary/Utils/ChartColors.ts +117 -0
  36. package/UI/Components/Charts/ChartLibrary/Utils/Cx.ts +8 -0
  37. package/UI/Components/Charts/ChartLibrary/Utils/GetYAxisDomain.ts +15 -0
  38. package/UI/Components/Charts/ChartLibrary/Utils/HasOnlyOneValueForKey.ts +19 -0
  39. package/UI/Components/Charts/ChartLibrary/Utils/UseWindowOnResize.ts +17 -0
  40. package/UI/Components/Charts/Line/LineChart.tsx +58 -225
  41. package/UI/Components/Charts/Types/ChartCurve.ts +7 -0
  42. package/UI/Components/Charts/Types/DataPoint.ts +7 -0
  43. package/UI/Components/Charts/Types/SeriesPoint.ts +7 -0
  44. package/UI/Components/Charts/Types/SeriesPoints.ts +6 -0
  45. package/UI/Components/Charts/Types/XAxis/XAxis.ts +21 -0
  46. package/UI/Components/Charts/Types/XAxis/XAxisMaxMin.ts +3 -0
  47. package/UI/Components/Charts/Types/XAxis/XAxisPrecision.ts +26 -0
  48. package/UI/Components/Charts/Types/XAxis/XAxisType.ts +6 -0
  49. package/UI/Components/Charts/Types/XValue.ts +3 -0
  50. package/UI/Components/Charts/Types/YAxis/YAxis.ts +22 -0
  51. package/UI/Components/Charts/Types/YAxis/YAxisMaxMin.ts +3 -0
  52. package/UI/Components/Charts/Types/YAxis/YAxisType.ts +5 -0
  53. package/UI/Components/Charts/Types/YValue.ts +3 -0
  54. package/UI/Components/Charts/Utils/DataPoint.ts +188 -0
  55. package/UI/Components/Charts/Utils/XAxis.ts +267 -0
  56. package/UI/Components/Detail/Detail.tsx +6 -1
  57. package/UI/Components/GanttChart/Row/Row.tsx +4 -2
  58. package/UI/Components/GanttChart/Row/RowLabel.tsx +7 -3
  59. package/UI/Components/Icon/Icon.tsx +16 -0
  60. package/UI/Components/LogsViewer/LogsViewer.tsx +1 -1
  61. package/UI/Components/Types/FieldType.ts +1 -0
  62. package/UI/Config.ts +2 -0
  63. package/UI/Utils/Telemetry.ts +7 -2
  64. package/Utils/Crypto.ts +11 -0
  65. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js +445 -0
  66. package/build/dist/Models/AnalyticsModels/ExceptionInstance.js.map +1 -0
  67. package/build/dist/Models/AnalyticsModels/Index.js +2 -0
  68. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  69. package/build/dist/Models/AnalyticsModels/Span.js +2 -2
  70. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  71. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  72. package/build/dist/Models/DatabaseModels/TelemetryException.js +1010 -0
  73. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -0
  74. package/build/dist/Server/API/StatusAPI.js +52 -44
  75. package/build/dist/Server/API/StatusAPI.js.map +1 -1
  76. package/build/dist/Server/EnvironmentConfig.js +1 -0
  77. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  78. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1724610006927-MigrationName.js +38 -0
  79. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1724610006927-MigrationName.js.map +1 -0
  80. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1724613666632-MigrationName.js +26 -0
  81. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1724613666632-MigrationName.js.map +1 -0
  82. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1724659071843-MigrationName.js +12 -0
  83. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1724659071843-MigrationName.js.map +1 -0
  84. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  85. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  86. package/build/dist/Server/Infrastructure/Queue.js +20 -1
  87. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  88. package/build/dist/Server/Infrastructure/QueueWorker.js +2 -2
  89. package/build/dist/Server/Infrastructure/QueueWorker.js.map +1 -1
  90. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  91. package/build/dist/Server/Services/ExceptionInstanceService.js +9 -0
  92. package/build/dist/Server/Services/ExceptionInstanceService.js.map +1 -0
  93. package/build/dist/Server/Services/Index.js +4 -0
  94. package/build/dist/Server/Services/Index.js.map +1 -1
  95. package/build/dist/Server/Services/StatusPageDomainService.js +101 -53
  96. package/build/dist/Server/Services/StatusPageDomainService.js.map +1 -1
  97. package/build/dist/Server/Services/TelemetryExceptionService.js +9 -0
  98. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -0
  99. package/build/dist/Server/Types/Database/Permissions/Index.js.map +1 -1
  100. package/build/dist/Server/Utils/Greenlock/Greenlock.js +234 -157
  101. package/build/dist/Server/Utils/Greenlock/Greenlock.js.map +1 -1
  102. package/build/dist/Server/Utils/Logger.js +5 -1
  103. package/build/dist/Server/Utils/Logger.js.map +1 -1
  104. package/build/dist/Server/Utils/Telemetry.js +63 -22
  105. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  106. package/build/dist/Types/Code/CodeType.js +1 -0
  107. package/build/dist/Types/Code/CodeType.js.map +1 -1
  108. package/build/dist/Types/Database/PartialEntity.js +3 -0
  109. package/build/dist/Types/Database/PartialEntity.js.map +1 -1
  110. package/build/dist/Types/Date.js +7 -1
  111. package/build/dist/Types/Date.js.map +1 -1
  112. package/build/dist/Types/Icon/IconProp.js +2 -0
  113. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  114. package/build/dist/Types/Permission.js +33 -0
  115. package/build/dist/Types/Permission.js.map +1 -1
  116. package/build/dist/UI/Components/ActionCard/ActionCard.js +27 -0
  117. package/build/dist/UI/Components/ActionCard/ActionCard.js.map +1 -0
  118. package/build/dist/UI/Components/Alerts/Alert.js +36 -45
  119. package/build/dist/UI/Components/Alerts/Alert.js.map +1 -1
  120. package/build/dist/UI/Components/Card/Card.js +1 -1
  121. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  122. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +4 -9
  123. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  124. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +388 -0
  125. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -0
  126. package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js +2 -0
  127. package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js.map +1 -0
  128. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/ChartColors.js +88 -0
  129. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/ChartColors.js.map +1 -0
  130. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/Cx.js +7 -0
  131. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/Cx.js.map +1 -0
  132. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/GetYAxisDomain.js +7 -0
  133. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/GetYAxisDomain.js.map +1 -0
  134. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/HasOnlyOneValueForKey.js +14 -0
  135. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/HasOnlyOneValueForKey.js.map +1 -0
  136. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseWindowOnResize.js +14 -0
  137. package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseWindowOnResize.js.map +1 -0
  138. package/build/dist/UI/Components/Charts/Line/LineChart.js +30 -136
  139. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  140. package/build/dist/UI/Components/Charts/Types/ChartCurve.js +8 -0
  141. package/build/dist/UI/Components/Charts/Types/ChartCurve.js.map +1 -0
  142. package/build/dist/UI/Components/Charts/Types/DataPoint.js +2 -0
  143. package/build/dist/UI/Components/Charts/Types/DataPoint.js.map +1 -0
  144. package/build/dist/UI/Components/Charts/Types/SeriesPoint.js +2 -0
  145. package/build/dist/UI/Components/Charts/Types/SeriesPoint.js.map +1 -0
  146. package/build/dist/UI/Components/Charts/Types/SeriesPoints.js +2 -0
  147. package/build/dist/UI/Components/Charts/Types/SeriesPoints.js.map +1 -0
  148. package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js +8 -0
  149. package/build/dist/UI/Components/Charts/Types/XAxis/XAxis.js.map +1 -0
  150. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisMaxMin.js +2 -0
  151. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisMaxMin.js.map +1 -0
  152. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js +27 -0
  153. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisPrecision.js.map +1 -0
  154. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisType.js +7 -0
  155. package/build/dist/UI/Components/Charts/Types/XAxis/XAxisType.js.map +1 -0
  156. package/build/dist/UI/Components/Charts/Types/XValue.js +2 -0
  157. package/build/dist/UI/Components/Charts/Types/XValue.js.map +1 -0
  158. package/build/dist/UI/Components/Charts/Types/YAxis/YAxis.js +8 -0
  159. package/build/dist/UI/Components/Charts/Types/YAxis/YAxis.js.map +1 -0
  160. package/build/dist/UI/Components/Charts/Types/YAxis/YAxisMaxMin.js +2 -0
  161. package/build/dist/UI/Components/Charts/Types/YAxis/YAxisMaxMin.js.map +1 -0
  162. package/build/dist/UI/Components/Charts/Types/YAxis/YAxisType.js +6 -0
  163. package/build/dist/UI/Components/Charts/Types/YAxis/YAxisType.js.map +1 -0
  164. package/build/dist/UI/Components/Charts/Types/YValue.js +2 -0
  165. package/build/dist/UI/Components/Charts/Types/YValue.js.map +1 -0
  166. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +109 -0
  167. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -0
  168. package/build/dist/UI/Components/Charts/Utils/XAxis.js +241 -0
  169. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -0
  170. package/build/dist/UI/Components/Detail/Detail.js +5 -1
  171. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  172. package/build/dist/UI/Components/GanttChart/Row/Row.js +2 -2
  173. package/build/dist/UI/Components/GanttChart/Row/Row.js.map +1 -1
  174. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js +3 -3
  175. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js.map +1 -1
  176. package/build/dist/UI/Components/Icon/Icon.js +6 -0
  177. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  178. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +1 -1
  179. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  180. package/build/dist/UI/Components/Types/FieldType.js +1 -0
  181. package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
  182. package/build/dist/UI/Config.js +1 -0
  183. package/build/dist/UI/Config.js.map +1 -1
  184. package/build/dist/UI/Utils/Telemetry.js +6 -3
  185. package/build/dist/UI/Utils/Telemetry.js.map +1 -1
  186. package/build/dist/Utils/Crypto.js +10 -0
  187. package/build/dist/Utils/Crypto.js.map +1 -0
  188. package/package.json +15 -13
  189. package/UI/Components/Charts/Bar/Bar.tsx +0 -0
  190. package/UI/Components/Charts/Base/BaseChart.tsx +0 -0
  191. package/UI/Components/Charts/Tooltip/Tooltip.tsx +0 -84
  192. package/build/dist/UI/Components/Charts/Bar/Bar.js +0 -2
  193. package/build/dist/UI/Components/Charts/Bar/Bar.js.map +0 -1
  194. package/build/dist/UI/Components/Charts/Base/BaseChart.js +0 -2
  195. package/build/dist/UI/Components/Charts/Base/BaseChart.js.map +0 -1
  196. package/build/dist/UI/Components/Charts/Tooltip/Tooltip.js +0 -34
  197. package/build/dist/UI/Components/Charts/Tooltip/Tooltip.js.map +0 -1
@@ -0,0 +1,978 @@
1
+ import Project from "./Project";
2
+ import User from "./User";
3
+ import Team from "./Team";
4
+ import Route from "../../Types/API/Route";
5
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
6
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
7
+ import ColumnLength from "../../Types/Database/ColumnLength";
8
+ import ColumnType from "../../Types/Database/ColumnType";
9
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
10
+ import EnableDocumentation from "../../Types/Database/EnableDocumentation";
11
+ import EnableWorkflow from "../../Types/Database/EnableWorkflow";
12
+ import TableColumn from "../../Types/Database/TableColumn";
13
+ import TableColumnType from "../../Types/Database/TableColumnType";
14
+ import TableMetadata from "../../Types/Database/TableMetadata";
15
+ import TenantColumn from "../../Types/Database/TenantColumn";
16
+ import IconProp from "../../Types/Icon/IconProp";
17
+ import ObjectID from "../../Types/ObjectID";
18
+ import Permission from "../../Types/Permission";
19
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
20
+ import DatabaseBaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
21
+ import TelemetryService from "./TelemetryService";
22
+
23
+ @EnableDocumentation()
24
+ @TenantColumn("projectId")
25
+ @TableAccessControl({
26
+ create: [
27
+ Permission.ProjectOwner,
28
+ Permission.ProjectAdmin,
29
+ Permission.CreateTelemetryException,
30
+ ],
31
+ read: [
32
+ Permission.ProjectOwner,
33
+ Permission.ProjectAdmin,
34
+ Permission.ProjectMember,
35
+ Permission.ReadTelemetryException,
36
+ ],
37
+ delete: [
38
+ Permission.ProjectOwner,
39
+ Permission.ProjectAdmin,
40
+ Permission.DeleteTelemetryException,
41
+ ],
42
+ update: [
43
+ Permission.ProjectOwner,
44
+ Permission.ProjectAdmin,
45
+ Permission.EditTelemetryException,
46
+ ],
47
+ })
48
+ @EnableWorkflow({
49
+ create: true,
50
+ delete: true,
51
+ update: true,
52
+ read: true,
53
+ })
54
+ @CrudApiEndpoint(new Route("/telemetry-exception-status"))
55
+ @TableMetadata({
56
+ tableName: "TelemetryException",
57
+ singularName: "Exception",
58
+ pluralName: "Exceptions",
59
+ icon: IconProp.Error,
60
+ tableDescription:
61
+ "List of all Telemetry Exceptions created for the telemetry service for this OneUptime project and it's status.",
62
+ })
63
+ @Entity({
64
+ name: "TelemetryException",
65
+ })
66
+ export default class TelemetryException extends DatabaseBaseModel {
67
+ @ColumnAccessControl({
68
+ create: [
69
+ Permission.ProjectOwner,
70
+ Permission.ProjectAdmin,
71
+ Permission.CreateTelemetryException,
72
+ ],
73
+ read: [
74
+ Permission.ProjectOwner,
75
+ Permission.ProjectAdmin,
76
+ Permission.ProjectMember,
77
+ Permission.ReadTelemetryException,
78
+ ],
79
+ update: [],
80
+ })
81
+ @TableColumn({
82
+ manyToOneRelationColumn: "projectId",
83
+ type: TableColumnType.Entity,
84
+ modelType: Project,
85
+ title: "Project",
86
+ description: "Relation to Project Resource in which this object belongs",
87
+ })
88
+ @ManyToOne(
89
+ () => {
90
+ return Project;
91
+ },
92
+ {
93
+ eager: false,
94
+ nullable: true,
95
+ onDelete: "CASCADE",
96
+ orphanedRowAction: "nullify",
97
+ },
98
+ )
99
+ @JoinColumn({ name: "projectId" })
100
+ public project?: Project = undefined;
101
+
102
+ @ColumnAccessControl({
103
+ create: [
104
+ Permission.ProjectOwner,
105
+ Permission.ProjectAdmin,
106
+ Permission.CreateTelemetryException,
107
+ ],
108
+ read: [
109
+ Permission.ProjectOwner,
110
+ Permission.ProjectAdmin,
111
+ Permission.ProjectMember,
112
+ Permission.ReadTelemetryException,
113
+ ],
114
+ update: [],
115
+ })
116
+ @Index()
117
+ @TableColumn({
118
+ type: TableColumnType.ObjectID,
119
+ required: true,
120
+ canReadOnRelationQuery: true,
121
+ title: "Project ID",
122
+ description: "ID of your OneUptime Project in which this object belongs",
123
+ })
124
+ @Column({
125
+ type: ColumnType.ObjectID,
126
+ nullable: false,
127
+ transformer: ObjectID.getDatabaseTransformer(),
128
+ })
129
+ public projectId?: ObjectID = undefined;
130
+
131
+ @ColumnAccessControl({
132
+ create: [
133
+ Permission.ProjectOwner,
134
+ Permission.ProjectAdmin,
135
+ Permission.CreateTelemetryException,
136
+ ],
137
+ read: [
138
+ Permission.ProjectOwner,
139
+ Permission.ProjectAdmin,
140
+ Permission.ProjectMember,
141
+ Permission.ReadTelemetryException,
142
+ ],
143
+ update: [
144
+ Permission.ProjectOwner,
145
+ Permission.ProjectAdmin,
146
+ Permission.EditTelemetryException,
147
+ ],
148
+ })
149
+ @TableColumn({
150
+ manyToOneRelationColumn: "telemetryServiceId",
151
+ type: TableColumnType.Entity,
152
+ modelType: TelemetryService,
153
+ title: "Telemetry Service",
154
+ description:
155
+ "Relation to Telemetry Service Resource in which this object belongs",
156
+ })
157
+ @ManyToOne(
158
+ () => {
159
+ return TelemetryService;
160
+ },
161
+ {
162
+ eager: false,
163
+ nullable: true,
164
+ onDelete: "CASCADE",
165
+ orphanedRowAction: "nullify",
166
+ },
167
+ )
168
+ @JoinColumn({ name: "telemetryServiceId" })
169
+ public telemetryService?: TelemetryService = undefined;
170
+
171
+ @ColumnAccessControl({
172
+ create: [
173
+ Permission.ProjectOwner,
174
+ Permission.ProjectAdmin,
175
+ Permission.CreateTelemetryException,
176
+ ],
177
+ read: [
178
+ Permission.ProjectOwner,
179
+ Permission.ProjectAdmin,
180
+ Permission.ProjectMember,
181
+ Permission.ReadTelemetryException,
182
+ ],
183
+ update: [
184
+ Permission.ProjectOwner,
185
+ Permission.ProjectAdmin,
186
+ Permission.EditTelemetryException,
187
+ ],
188
+ })
189
+ @Index()
190
+ @TableColumn({
191
+ type: TableColumnType.ObjectID,
192
+ required: true,
193
+ title: "Telemetry Service ID",
194
+ description:
195
+ "ID of your Telemetry Service resource where this object belongs",
196
+ })
197
+ @Column({
198
+ type: ColumnType.ObjectID,
199
+ nullable: false,
200
+ transformer: ObjectID.getDatabaseTransformer(),
201
+ })
202
+ public telemetryServiceId?: ObjectID = undefined;
203
+
204
+ @ColumnAccessControl({
205
+ create: [
206
+ Permission.ProjectOwner,
207
+ Permission.ProjectAdmin,
208
+ Permission.CreateTelemetryException,
209
+ ],
210
+ read: [
211
+ Permission.ProjectOwner,
212
+ Permission.ProjectAdmin,
213
+ Permission.ProjectMember,
214
+ Permission.ReadTelemetryException,
215
+ ],
216
+ update: [
217
+ Permission.ProjectOwner,
218
+ Permission.ProjectAdmin,
219
+ Permission.EditTelemetryException,
220
+ ],
221
+ })
222
+ @TableColumn({
223
+ required: false,
224
+ type: TableColumnType.LongText,
225
+ canReadOnRelationQuery: false,
226
+ title: "Exception Message",
227
+ description: "Exception message that was thrown by the telemetry service",
228
+ })
229
+ @Column({
230
+ nullable: true,
231
+ type: ColumnType.LongText,
232
+ })
233
+ public message?: string = undefined;
234
+
235
+ @ColumnAccessControl({
236
+ create: [
237
+ Permission.ProjectOwner,
238
+ Permission.ProjectAdmin,
239
+ Permission.CreateTelemetryException,
240
+ ],
241
+ read: [
242
+ Permission.ProjectOwner,
243
+ Permission.ProjectAdmin,
244
+ Permission.ProjectMember,
245
+ Permission.ReadTelemetryException,
246
+ ],
247
+ update: [
248
+ Permission.ProjectOwner,
249
+ Permission.ProjectAdmin,
250
+ Permission.EditTelemetryException,
251
+ ],
252
+ })
253
+ @TableColumn({
254
+ required: false,
255
+ type: TableColumnType.LongText,
256
+ canReadOnRelationQuery: false,
257
+ title: "Stack Trace",
258
+ description:
259
+ "Stack trace of the exception that was thrown by the telemetry service",
260
+ })
261
+ @Column({
262
+ nullable: true,
263
+ type: ColumnType.LongText,
264
+ })
265
+ public stackTrace?: string = undefined;
266
+
267
+ @ColumnAccessControl({
268
+ create: [
269
+ Permission.ProjectOwner,
270
+ Permission.ProjectAdmin,
271
+ Permission.CreateTelemetryException,
272
+ ],
273
+ read: [
274
+ Permission.ProjectOwner,
275
+ Permission.ProjectAdmin,
276
+ Permission.ProjectMember,
277
+ Permission.ReadTelemetryException,
278
+ ],
279
+ update: [
280
+ Permission.ProjectOwner,
281
+ Permission.ProjectAdmin,
282
+ Permission.EditTelemetryException,
283
+ ],
284
+ })
285
+ @TableColumn({
286
+ required: false,
287
+ type: TableColumnType.LongText,
288
+ canReadOnRelationQuery: false,
289
+ title: "Exception Type",
290
+ description:
291
+ "Type of the exception that was thrown by the telemetry service",
292
+ })
293
+ @Column({
294
+ nullable: true,
295
+ type: ColumnType.LongText,
296
+ })
297
+ public exceptionType?: string = undefined;
298
+
299
+ @Index()
300
+ @ColumnAccessControl({
301
+ create: [
302
+ Permission.ProjectOwner,
303
+ Permission.ProjectAdmin,
304
+ Permission.CreateTelemetryException,
305
+ ],
306
+ read: [
307
+ Permission.ProjectOwner,
308
+ Permission.ProjectAdmin,
309
+ Permission.ProjectMember,
310
+ Permission.ReadTelemetryException,
311
+ ],
312
+ update: [
313
+ Permission.ProjectOwner,
314
+ Permission.ProjectAdmin,
315
+ Permission.EditTelemetryException,
316
+ ],
317
+ })
318
+ @TableColumn({
319
+ required: false,
320
+ type: TableColumnType.ShortText,
321
+ canReadOnRelationQuery: false,
322
+ title: "Finger Print",
323
+ description:
324
+ "Finger print of the exception that was thrown by the telemetry service",
325
+ })
326
+ @Column({
327
+ nullable: true,
328
+ type: ColumnType.ShortText,
329
+ length: ColumnLength.ShortText,
330
+ })
331
+ public fingerprint?: string = undefined;
332
+
333
+ @ColumnAccessControl({
334
+ create: [
335
+ Permission.ProjectOwner,
336
+ Permission.ProjectAdmin,
337
+ Permission.CreateTelemetryException,
338
+ ],
339
+ read: [
340
+ Permission.ProjectOwner,
341
+ Permission.ProjectAdmin,
342
+ Permission.ProjectMember,
343
+ Permission.ReadTelemetryException,
344
+ ],
345
+ update: [],
346
+ })
347
+ @TableColumn({
348
+ manyToOneRelationColumn: "createdByUserId",
349
+ type: TableColumnType.Entity,
350
+ modelType: User,
351
+ title: "Created by User",
352
+ description:
353
+ "Relation to User who created this object (if this object was created by a User)",
354
+ })
355
+ @ManyToOne(
356
+ () => {
357
+ return User;
358
+ },
359
+ {
360
+ eager: false,
361
+ nullable: true,
362
+ onDelete: "CASCADE",
363
+ orphanedRowAction: "nullify",
364
+ },
365
+ )
366
+ @JoinColumn({ name: "createdByUserId" })
367
+ public createdByUser?: User = undefined;
368
+
369
+ @ColumnAccessControl({
370
+ create: [
371
+ Permission.ProjectOwner,
372
+ Permission.ProjectAdmin,
373
+ Permission.CreateTelemetryException,
374
+ ],
375
+ read: [
376
+ Permission.ProjectOwner,
377
+ Permission.ProjectAdmin,
378
+ Permission.ProjectMember,
379
+ Permission.ReadTelemetryException,
380
+ ],
381
+ update: [],
382
+ })
383
+ @TableColumn({
384
+ type: TableColumnType.ObjectID,
385
+ title: "Created by User ID",
386
+ description:
387
+ "User ID who created this object (if this object was created by a User)",
388
+ })
389
+ @Column({
390
+ type: ColumnType.ObjectID,
391
+ nullable: true,
392
+ transformer: ObjectID.getDatabaseTransformer(),
393
+ })
394
+ public createdByUserId?: ObjectID = undefined;
395
+
396
+ @ColumnAccessControl({
397
+ create: [
398
+ Permission.ProjectOwner,
399
+ Permission.ProjectAdmin,
400
+ Permission.CreateTelemetryException,
401
+ ],
402
+ read: [
403
+ Permission.ProjectOwner,
404
+ Permission.ProjectAdmin,
405
+ Permission.ProjectMember,
406
+ Permission.ReadTelemetryException,
407
+ ],
408
+ update: [
409
+ Permission.ProjectOwner,
410
+ Permission.ProjectAdmin,
411
+ Permission.EditTelemetryException,
412
+ ],
413
+ })
414
+ @TableColumn({
415
+ manyToOneRelationColumn: "deletedByUserId",
416
+ type: TableColumnType.Entity,
417
+ title: "Deleted by User",
418
+ description:
419
+ "Relation to User who deleted this object (if this object was deleted by a User)",
420
+ })
421
+ @ManyToOne(
422
+ () => {
423
+ return User;
424
+ },
425
+ {
426
+ cascade: false,
427
+ eager: false,
428
+ nullable: true,
429
+ onDelete: "CASCADE",
430
+ orphanedRowAction: "nullify",
431
+ },
432
+ )
433
+ @JoinColumn({ name: "deletedByUserId" })
434
+ public deletedByUser?: User = undefined;
435
+
436
+ @ColumnAccessControl({
437
+ create: [
438
+ Permission.ProjectOwner,
439
+ Permission.ProjectAdmin,
440
+ Permission.CreateTelemetryException,
441
+ ],
442
+ read: [
443
+ Permission.ProjectOwner,
444
+ Permission.ProjectAdmin,
445
+ Permission.ProjectMember,
446
+ Permission.ReadTelemetryException,
447
+ ],
448
+ update: [
449
+ Permission.ProjectOwner,
450
+ Permission.ProjectAdmin,
451
+ Permission.EditTelemetryException,
452
+ ],
453
+ })
454
+ @TableColumn({
455
+ type: TableColumnType.ObjectID,
456
+ title: "Deleted by User ID",
457
+ description:
458
+ "User ID who deleted this object (if this object was deleted by a User)",
459
+ })
460
+ @Column({
461
+ type: ColumnType.ObjectID,
462
+ nullable: true,
463
+ transformer: ObjectID.getDatabaseTransformer(),
464
+ })
465
+ public deletedByUserId?: ObjectID = undefined;
466
+
467
+ @ColumnAccessControl({
468
+ create: [
469
+ Permission.ProjectOwner,
470
+ Permission.ProjectAdmin,
471
+ Permission.CreateTelemetryException,
472
+ ],
473
+ read: [
474
+ Permission.ProjectOwner,
475
+ Permission.ProjectAdmin,
476
+ Permission.ProjectMember,
477
+ Permission.ReadTelemetryException,
478
+ ],
479
+ update: [
480
+ Permission.ProjectOwner,
481
+ Permission.ProjectAdmin,
482
+ Permission.EditTelemetryException,
483
+ ],
484
+ })
485
+ @TableColumn({
486
+ required: false,
487
+ type: TableColumnType.Date,
488
+ title: "Accepted Invitation At",
489
+ description: "When did this team member accept invitation",
490
+ })
491
+ @Column({
492
+ type: ColumnType.Date,
493
+ nullable: true,
494
+ unique: false,
495
+ })
496
+ public markedAsResolvedAt?: Date = undefined;
497
+
498
+ @ColumnAccessControl({
499
+ create: [
500
+ Permission.ProjectOwner,
501
+ Permission.ProjectAdmin,
502
+ Permission.CreateTelemetryException,
503
+ ],
504
+ read: [
505
+ Permission.ProjectOwner,
506
+ Permission.ProjectAdmin,
507
+ Permission.ProjectMember,
508
+ Permission.ReadTelemetryException,
509
+ ],
510
+ update: [
511
+ Permission.ProjectOwner,
512
+ Permission.ProjectAdmin,
513
+ Permission.EditTelemetryException,
514
+ ],
515
+ })
516
+ @TableColumn({
517
+ required: false,
518
+ type: TableColumnType.Date,
519
+ title: "Accepted Invitation At",
520
+ description: "When did this team member accept invitation",
521
+ })
522
+ @Column({
523
+ type: ColumnType.Date,
524
+ nullable: true,
525
+ unique: false,
526
+ })
527
+ public markedAsArchivedAt?: Date = undefined;
528
+
529
+ @ColumnAccessControl({
530
+ create: [
531
+ Permission.ProjectOwner,
532
+ Permission.ProjectAdmin,
533
+ Permission.CreateTelemetryException,
534
+ ],
535
+ read: [
536
+ Permission.ProjectOwner,
537
+ Permission.ProjectAdmin,
538
+ Permission.ProjectMember,
539
+ Permission.ReadTelemetryException,
540
+ ],
541
+ update: [
542
+ Permission.ProjectOwner,
543
+ Permission.ProjectAdmin,
544
+ Permission.EditTelemetryException,
545
+ ],
546
+ })
547
+ @TableColumn({
548
+ required: false,
549
+ type: TableColumnType.Date,
550
+ title: "Accepted Invitation At",
551
+ description: "When did this team member accept invitation",
552
+ })
553
+ @Column({
554
+ type: ColumnType.Date,
555
+ nullable: true,
556
+ unique: false,
557
+ })
558
+ public firstSeenAt?: Date = undefined;
559
+
560
+ @ColumnAccessControl({
561
+ create: [
562
+ Permission.ProjectOwner,
563
+ Permission.ProjectAdmin,
564
+ Permission.CreateTelemetryException,
565
+ ],
566
+ read: [
567
+ Permission.ProjectOwner,
568
+ Permission.ProjectAdmin,
569
+ Permission.ProjectMember,
570
+ Permission.ReadTelemetryException,
571
+ ],
572
+ update: [
573
+ Permission.ProjectOwner,
574
+ Permission.ProjectAdmin,
575
+ Permission.EditTelemetryException,
576
+ ],
577
+ })
578
+ @TableColumn({
579
+ required: false,
580
+ type: TableColumnType.Date,
581
+ title: "Accepted Invitation At",
582
+ description: "When did this team member accept invitation",
583
+ })
584
+ @Column({
585
+ type: ColumnType.Date,
586
+ nullable: true,
587
+ unique: false,
588
+ })
589
+ public lastSeenAt?: Date = undefined;
590
+
591
+ // assign to.
592
+ @ColumnAccessControl({
593
+ create: [
594
+ Permission.ProjectOwner,
595
+ Permission.ProjectAdmin,
596
+ Permission.CreateTelemetryException,
597
+ ],
598
+ read: [
599
+ Permission.ProjectOwner,
600
+ Permission.ProjectAdmin,
601
+ Permission.ProjectMember,
602
+ Permission.ReadTelemetryException,
603
+ ],
604
+ update: [
605
+ Permission.ProjectOwner,
606
+ Permission.ProjectAdmin,
607
+ Permission.EditTelemetryException,
608
+ ],
609
+ })
610
+ @TableColumn({
611
+ manyToOneRelationColumn: "assignToUserId",
612
+ type: TableColumnType.Entity,
613
+ modelType: User,
614
+ title: "Assign to User",
615
+ description: "Relation to User who this exception is assigned to.",
616
+ })
617
+ @ManyToOne(
618
+ () => {
619
+ return User;
620
+ },
621
+ {
622
+ cascade: false,
623
+ eager: false,
624
+ nullable: true,
625
+ onDelete: "CASCADE",
626
+ orphanedRowAction: "nullify",
627
+ },
628
+ )
629
+ @JoinColumn({ name: "assignToUserId" })
630
+ public assignToUser?: User = undefined;
631
+
632
+ @ColumnAccessControl({
633
+ create: [
634
+ Permission.ProjectOwner,
635
+ Permission.ProjectAdmin,
636
+ Permission.CreateTelemetryException,
637
+ ],
638
+ read: [
639
+ Permission.ProjectOwner,
640
+ Permission.ProjectAdmin,
641
+ Permission.ProjectMember,
642
+ Permission.ReadTelemetryException,
643
+ ],
644
+ update: [
645
+ Permission.ProjectOwner,
646
+ Permission.ProjectAdmin,
647
+ Permission.EditTelemetryException,
648
+ ],
649
+ })
650
+ @TableColumn({
651
+ type: TableColumnType.ObjectID,
652
+ title: "Assign to User ID",
653
+ description: "User ID who this exception is assigned to.",
654
+ })
655
+ @Column({
656
+ type: ColumnType.ObjectID,
657
+ nullable: true,
658
+ transformer: ObjectID.getDatabaseTransformer(),
659
+ })
660
+ public assignToUserId?: ObjectID = undefined;
661
+
662
+ // assign to team.
663
+
664
+ // assign to.
665
+ @ColumnAccessControl({
666
+ create: [
667
+ Permission.ProjectOwner,
668
+ Permission.ProjectAdmin,
669
+ Permission.CreateTelemetryException,
670
+ ],
671
+ read: [
672
+ Permission.ProjectOwner,
673
+ Permission.ProjectAdmin,
674
+ Permission.ProjectMember,
675
+ Permission.ReadTelemetryException,
676
+ ],
677
+ update: [
678
+ Permission.ProjectOwner,
679
+ Permission.ProjectAdmin,
680
+ Permission.EditTelemetryException,
681
+ ],
682
+ })
683
+ @TableColumn({
684
+ manyToOneRelationColumn: "assignToTeamId",
685
+ type: TableColumnType.Entity,
686
+ modelType: Team,
687
+ title: "Assign to Team",
688
+ description: "Relation to Team who this exception is assigned to.",
689
+ })
690
+ @ManyToOne(
691
+ () => {
692
+ return Team;
693
+ },
694
+ {
695
+ cascade: false,
696
+ eager: false,
697
+ nullable: true,
698
+ onDelete: "CASCADE",
699
+ orphanedRowAction: "nullify",
700
+ },
701
+ )
702
+ @JoinColumn({ name: "assignToTeamId" })
703
+ public assignToTeam?: Team = undefined;
704
+
705
+ @ColumnAccessControl({
706
+ create: [
707
+ Permission.ProjectOwner,
708
+ Permission.ProjectAdmin,
709
+ Permission.CreateTelemetryException,
710
+ ],
711
+ read: [
712
+ Permission.ProjectOwner,
713
+ Permission.ProjectAdmin,
714
+ Permission.ProjectMember,
715
+ Permission.ReadTelemetryException,
716
+ ],
717
+ update: [
718
+ Permission.ProjectOwner,
719
+ Permission.ProjectAdmin,
720
+ Permission.EditTelemetryException,
721
+ ],
722
+ })
723
+ @TableColumn({
724
+ type: TableColumnType.ObjectID,
725
+ title: "Assign to Team ID",
726
+ description: "Team ID who this exception is assigned to.",
727
+ })
728
+ @Column({
729
+ type: ColumnType.ObjectID,
730
+ nullable: true,
731
+ transformer: ObjectID.getDatabaseTransformer(),
732
+ })
733
+ public assignToTeamId?: ObjectID = undefined;
734
+
735
+ // mark as resolved by.
736
+
737
+ @ColumnAccessControl({
738
+ create: [
739
+ Permission.ProjectOwner,
740
+ Permission.ProjectAdmin,
741
+ Permission.CreateTelemetryException,
742
+ ],
743
+ read: [
744
+ Permission.ProjectOwner,
745
+ Permission.ProjectAdmin,
746
+ Permission.ProjectMember,
747
+ Permission.ReadTelemetryException,
748
+ ],
749
+ update: [
750
+ Permission.ProjectOwner,
751
+ Permission.ProjectAdmin,
752
+ Permission.EditTelemetryException,
753
+ ],
754
+ })
755
+ @TableColumn({
756
+ manyToOneRelationColumn: "markedAsResolvedByUserId",
757
+ type: TableColumnType.Entity,
758
+ modelType: User,
759
+ title: "Marked as Resolved By User",
760
+ description:
761
+ "Mark as resolved by User who marked this exception as resolved.",
762
+ })
763
+ @ManyToOne(
764
+ () => {
765
+ return User;
766
+ },
767
+ {
768
+ cascade: false,
769
+ eager: false,
770
+ nullable: true,
771
+ onDelete: "CASCADE",
772
+ orphanedRowAction: "nullify",
773
+ },
774
+ )
775
+ @JoinColumn({ name: "markedAsResolvedByUserId" })
776
+ public markedAsResolvedByUser?: User = undefined;
777
+
778
+ @ColumnAccessControl({
779
+ create: [
780
+ Permission.ProjectOwner,
781
+ Permission.ProjectAdmin,
782
+ Permission.CreateTelemetryException,
783
+ ],
784
+ read: [
785
+ Permission.ProjectOwner,
786
+ Permission.ProjectAdmin,
787
+ Permission.ProjectMember,
788
+ Permission.ReadTelemetryException,
789
+ ],
790
+ update: [
791
+ Permission.ProjectOwner,
792
+ Permission.ProjectAdmin,
793
+ Permission.EditTelemetryException,
794
+ ],
795
+ })
796
+ @TableColumn({
797
+ type: TableColumnType.ObjectID,
798
+ title: "Marked as Resolved By User ID",
799
+ description: "User ID who marked this exception as resolved.",
800
+ })
801
+ @Column({
802
+ type: ColumnType.ObjectID,
803
+ nullable: true,
804
+ transformer: ObjectID.getDatabaseTransformer(),
805
+ })
806
+ public markedAsResolvedByUserId?: ObjectID = undefined;
807
+
808
+ // Mark as archived by.
809
+
810
+ @ColumnAccessControl({
811
+ create: [
812
+ Permission.ProjectOwner,
813
+ Permission.ProjectAdmin,
814
+ Permission.CreateTelemetryException,
815
+ ],
816
+ read: [
817
+ Permission.ProjectOwner,
818
+ Permission.ProjectAdmin,
819
+ Permission.ProjectMember,
820
+ Permission.ReadTelemetryException,
821
+ ],
822
+ update: [
823
+ Permission.ProjectOwner,
824
+ Permission.ProjectAdmin,
825
+ Permission.EditTelemetryException,
826
+ ],
827
+ })
828
+ @TableColumn({
829
+ manyToOneRelationColumn: "markedAsArchivedByUserId",
830
+ type: TableColumnType.Entity,
831
+ modelType: User,
832
+ title: "Mark as Archived By User",
833
+ description: "Mark as archived by User",
834
+ })
835
+ @ManyToOne(
836
+ () => {
837
+ return User;
838
+ },
839
+ {
840
+ cascade: false,
841
+ eager: false,
842
+ nullable: true,
843
+ onDelete: "CASCADE",
844
+ orphanedRowAction: "nullify",
845
+ },
846
+ )
847
+ @JoinColumn({ name: "markedAsArchivedByUserId" })
848
+ public markedAsArchivedByUser?: User = undefined;
849
+
850
+ @ColumnAccessControl({
851
+ create: [
852
+ Permission.ProjectOwner,
853
+ Permission.ProjectAdmin,
854
+ Permission.CreateTelemetryException,
855
+ ],
856
+ read: [
857
+ Permission.ProjectOwner,
858
+ Permission.ProjectAdmin,
859
+ Permission.ProjectMember,
860
+ Permission.ReadTelemetryException,
861
+ ],
862
+ update: [
863
+ Permission.ProjectOwner,
864
+ Permission.ProjectAdmin,
865
+ Permission.EditTelemetryException,
866
+ ],
867
+ })
868
+ @TableColumn({
869
+ type: TableColumnType.ObjectID,
870
+ title: "Mark as Archived By User ID",
871
+ description: "User ID who marked this exception as archived.",
872
+ })
873
+ @Column({
874
+ type: ColumnType.ObjectID,
875
+ nullable: true,
876
+ transformer: ObjectID.getDatabaseTransformer(),
877
+ })
878
+ public markedAsArchivedByUserId?: ObjectID = undefined;
879
+
880
+ @ColumnAccessControl({
881
+ create: [
882
+ Permission.ProjectOwner,
883
+ Permission.ProjectAdmin,
884
+ Permission.CreateTelemetryException,
885
+ ],
886
+ read: [
887
+ Permission.ProjectOwner,
888
+ Permission.ProjectAdmin,
889
+ Permission.ProjectMember,
890
+ Permission.ReadTelemetryException,
891
+ ],
892
+ update: [
893
+ Permission.ProjectOwner,
894
+ Permission.ProjectAdmin,
895
+ Permission.EditTelemetryException,
896
+ ],
897
+ })
898
+ @TableColumn({
899
+ title: "Is Resolved",
900
+ description: "Is this exception resolved?",
901
+ isDefaultValueColumn: true,
902
+ required: true,
903
+ type: TableColumnType.Boolean,
904
+ })
905
+ @Column({
906
+ type: ColumnType.Boolean,
907
+ nullable: false,
908
+ unique: false,
909
+ default: false,
910
+ })
911
+ public isResolved?: boolean = undefined;
912
+
913
+ @ColumnAccessControl({
914
+ create: [
915
+ Permission.ProjectOwner,
916
+ Permission.ProjectAdmin,
917
+ Permission.CreateTelemetryException,
918
+ ],
919
+ read: [
920
+ Permission.ProjectOwner,
921
+ Permission.ProjectAdmin,
922
+ Permission.ProjectMember,
923
+ Permission.ReadTelemetryException,
924
+ ],
925
+ update: [
926
+ Permission.ProjectOwner,
927
+ Permission.ProjectAdmin,
928
+ Permission.EditTelemetryException,
929
+ ],
930
+ })
931
+ @TableColumn({
932
+ title: "Is Archived",
933
+ description: "Is this exception archived?",
934
+ isDefaultValueColumn: true,
935
+ required: true,
936
+ type: TableColumnType.Boolean,
937
+ })
938
+ @Column({
939
+ type: ColumnType.Boolean,
940
+ nullable: false,
941
+ unique: false,
942
+ default: false,
943
+ })
944
+ public isArchived?: boolean = undefined;
945
+
946
+ @ColumnAccessControl({
947
+ create: [
948
+ Permission.ProjectOwner,
949
+ Permission.ProjectAdmin,
950
+ Permission.CreateTelemetryException,
951
+ ],
952
+ read: [
953
+ Permission.ProjectOwner,
954
+ Permission.ProjectAdmin,
955
+ Permission.ProjectMember,
956
+ Permission.ReadTelemetryException,
957
+ ],
958
+ update: [
959
+ Permission.ProjectOwner,
960
+ Permission.ProjectAdmin,
961
+ Permission.EditTelemetryException,
962
+ ],
963
+ })
964
+ @TableColumn({
965
+ title: "Occurances",
966
+ description: "Number of times this exception has occured",
967
+ isDefaultValueColumn: true,
968
+ required: true,
969
+ type: TableColumnType.Number,
970
+ })
971
+ @Column({
972
+ type: ColumnType.Number,
973
+ nullable: false,
974
+ unique: false,
975
+ default: 1,
976
+ })
977
+ public occuranceCount?: number = undefined;
978
+ }