@oneuptime/common 10.3.0 → 10.4.1

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 (115) hide show
  1. package/Models/DatabaseModels/IncomingCallPolicyLabelRule.ts +522 -0
  2. package/Models/DatabaseModels/IncomingCallPolicyOwnerRule.ts +606 -0
  3. package/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.ts +508 -0
  4. package/Models/DatabaseModels/IncomingCallPolicyOwnerUser.ts +507 -0
  5. package/Models/DatabaseModels/Index.ts +24 -0
  6. package/Models/DatabaseModels/OnCallDutyPolicyLabelRule.ts +522 -0
  7. package/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.ts +606 -0
  8. package/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.ts +522 -0
  9. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.ts +606 -0
  10. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.ts +508 -0
  11. package/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.ts +507 -0
  12. package/Server/API/TelemetryAPI.ts +69 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.ts +153 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.ts +823 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  16. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +197 -0
  17. package/Server/Services/IncomingCallPolicyLabelRuleService.ts +10 -0
  18. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +220 -0
  19. package/Server/Services/IncomingCallPolicyOwnerRuleService.ts +10 -0
  20. package/Server/Services/IncomingCallPolicyOwnerTeamService.ts +9 -0
  21. package/Server/Services/IncomingCallPolicyOwnerUserService.ts +9 -0
  22. package/Server/Services/IncomingCallPolicyService.ts +35 -0
  23. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +191 -0
  24. package/Server/Services/OnCallDutyPolicyLabelRuleService.ts +10 -0
  25. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +214 -0
  26. package/Server/Services/OnCallDutyPolicyOwnerRuleService.ts +10 -0
  27. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +200 -0
  28. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.ts +10 -0
  29. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +223 -0
  30. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.ts +10 -0
  31. package/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.ts +9 -0
  32. package/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.ts +9 -0
  33. package/Server/Services/OnCallDutyPolicyScheduleService.ts +32 -1
  34. package/Server/Services/OnCallDutyPolicyService.ts +21 -0
  35. package/Server/Services/ProfileAggregationService.ts +119 -0
  36. package/Server/Types/Database/Permissions/QueryPermission.ts +36 -0
  37. package/Types/Monitor/MonitorStep.ts +66 -0
  38. package/Types/Permission.ts +475 -0
  39. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js +532 -0
  40. package/build/dist/Models/DatabaseModels/IncomingCallPolicyLabelRule.js.map +1 -0
  41. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js +615 -0
  42. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerRule.js.map +1 -0
  43. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js +524 -0
  44. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerTeam.js.map +1 -0
  45. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js +523 -0
  46. package/build/dist/Models/DatabaseModels/IncomingCallPolicyOwnerUser.js.map +1 -0
  47. package/build/dist/Models/DatabaseModels/Index.js +22 -0
  48. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  49. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js +532 -0
  50. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyLabelRule.js.map +1 -0
  51. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js +615 -0
  52. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyOwnerRule.js.map +1 -0
  53. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js +532 -0
  54. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleLabelRule.js.map +1 -0
  55. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js +615 -0
  56. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerRule.js.map +1 -0
  57. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js +524 -0
  58. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerTeam.js.map +1 -0
  59. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js +523 -0
  60. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleOwnerUser.js.map +1 -0
  61. package/build/dist/Server/API/TelemetryAPI.js +34 -0
  62. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  63. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.js +58 -0
  64. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778929624633-AddOnCallDutyPolicyScheduleOwners.js.map +1 -0
  65. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.js +292 -0
  66. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778931537020-AddOnCallIncomingCallOwnersAndRules.js.map +1 -0
  67. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  68. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  69. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +158 -0
  70. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -0
  71. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleService.js +9 -0
  72. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleService.js.map +1 -0
  73. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +181 -0
  74. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -0
  75. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleService.js +9 -0
  76. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleService.js.map +1 -0
  77. package/build/dist/Server/Services/IncomingCallPolicyOwnerTeamService.js +9 -0
  78. package/build/dist/Server/Services/IncomingCallPolicyOwnerTeamService.js.map +1 -0
  79. package/build/dist/Server/Services/IncomingCallPolicyOwnerUserService.js +9 -0
  80. package/build/dist/Server/Services/IncomingCallPolicyOwnerUserService.js.map +1 -0
  81. package/build/dist/Server/Services/IncomingCallPolicyService.js +38 -0
  82. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
  83. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +157 -0
  84. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -0
  85. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleService.js +9 -0
  86. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleService.js.map +1 -0
  87. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +180 -0
  88. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -0
  89. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleService.js +9 -0
  90. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleService.js.map +1 -0
  91. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +158 -0
  92. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -0
  93. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.js +9 -0
  94. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleService.js.map +1 -0
  95. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +181 -0
  96. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -0
  97. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.js +9 -0
  98. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleService.js.map +1 -0
  99. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.js +9 -0
  100. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerTeamService.js.map +1 -0
  101. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.js +9 -0
  102. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerUserService.js.map +1 -0
  103. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +21 -0
  104. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  105. package/build/dist/Server/Services/OnCallDutyPolicyService.js +17 -3
  106. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  107. package/build/dist/Server/Services/ProfileAggregationService.js +80 -0
  108. package/build/dist/Server/Services/ProfileAggregationService.js.map +1 -1
  109. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js +25 -0
  110. package/build/dist/Server/Types/Database/Permissions/QueryPermission.js.map +1 -1
  111. package/build/dist/Types/Monitor/MonitorStep.js +42 -0
  112. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  113. package/build/dist/Types/Permission.js +415 -0
  114. package/build/dist/Types/Permission.js.map +1 -1
  115. package/package.json +1 -1
@@ -0,0 +1,522 @@
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 {
21
+ Column,
22
+ Entity,
23
+ Index,
24
+ JoinColumn,
25
+ JoinTable,
26
+ ManyToMany,
27
+ ManyToOne,
28
+ } from "typeorm";
29
+
30
+ @EnableDocumentation()
31
+ @TenantColumn("projectId")
32
+ @TableAccessControl({
33
+ create: [
34
+ Permission.ProjectOwner,
35
+ Permission.ProjectAdmin,
36
+ Permission.CreateIncomingCallPolicyLabelRule,
37
+ ],
38
+ read: [
39
+ Permission.ProjectOwner,
40
+ Permission.ProjectAdmin,
41
+ Permission.ProjectMember,
42
+ Permission.Viewer,
43
+ Permission.ReadIncomingCallPolicyLabelRule,
44
+ Permission.ReadAllProjectResources,
45
+ ],
46
+ delete: [
47
+ Permission.ProjectOwner,
48
+ Permission.ProjectAdmin,
49
+ Permission.DeleteIncomingCallPolicyLabelRule,
50
+ ],
51
+ update: [
52
+ Permission.ProjectOwner,
53
+ Permission.ProjectAdmin,
54
+ Permission.EditIncomingCallPolicyLabelRule,
55
+ ],
56
+ })
57
+ @CrudApiEndpoint(new Route("/incoming-call-policy-label-rule"))
58
+ @Entity({
59
+ name: "IncomingCallPolicyLabelRule",
60
+ })
61
+ @EnableWorkflow({
62
+ create: true,
63
+ delete: true,
64
+ update: true,
65
+ read: true,
66
+ })
67
+ @TableMetadata({
68
+ tableName: "IncomingCallPolicyLabelRule",
69
+ singularName: "Incoming Call Policy Label Rule",
70
+ pluralName: "Incoming Call Policy Label Rules",
71
+ icon: IconProp.Tag,
72
+ tableDescription:
73
+ "Configure rules for automatically attaching labels to incoming call policies when matching policies are created",
74
+ })
75
+ export default class IncomingCallPolicyLabelRule extends BaseModel {
76
+ @ColumnAccessControl({
77
+ create: [
78
+ Permission.ProjectOwner,
79
+ Permission.ProjectAdmin,
80
+ Permission.CreateIncomingCallPolicyLabelRule,
81
+ ],
82
+ read: [
83
+ Permission.ProjectOwner,
84
+ Permission.ProjectAdmin,
85
+ Permission.ProjectMember,
86
+ Permission.Viewer,
87
+ Permission.ReadIncomingCallPolicyLabelRule,
88
+ Permission.ReadAllProjectResources,
89
+ ],
90
+ update: [],
91
+ })
92
+ @TableColumn({
93
+ manyToOneRelationColumn: "projectId",
94
+ type: TableColumnType.Entity,
95
+ modelType: Project,
96
+ title: "Project",
97
+ description: "Relation to Project Resource in which this object belongs",
98
+ })
99
+ @ManyToOne(
100
+ () => {
101
+ return Project;
102
+ },
103
+ {
104
+ eager: false,
105
+ nullable: true,
106
+ onDelete: "CASCADE",
107
+ orphanedRowAction: "nullify",
108
+ },
109
+ )
110
+ @JoinColumn({ name: "projectId" })
111
+ public project?: Project = undefined;
112
+
113
+ @ColumnAccessControl({
114
+ create: [
115
+ Permission.ProjectOwner,
116
+ Permission.ProjectAdmin,
117
+ Permission.CreateIncomingCallPolicyLabelRule,
118
+ ],
119
+ read: [
120
+ Permission.ProjectOwner,
121
+ Permission.ProjectAdmin,
122
+ Permission.ProjectMember,
123
+ Permission.Viewer,
124
+ Permission.ReadIncomingCallPolicyLabelRule,
125
+ Permission.ReadAllProjectResources,
126
+ ],
127
+ update: [],
128
+ })
129
+ @Index()
130
+ @TableColumn({
131
+ type: TableColumnType.ObjectID,
132
+ required: true,
133
+ canReadOnRelationQuery: true,
134
+ title: "Project ID",
135
+ description: "ID of your OneUptime Project in which this object belongs",
136
+ })
137
+ @Column({
138
+ type: ColumnType.ObjectID,
139
+ nullable: false,
140
+ transformer: ObjectID.getDatabaseTransformer(),
141
+ })
142
+ public projectId?: ObjectID = undefined;
143
+
144
+ @ColumnAccessControl({
145
+ create: [
146
+ Permission.ProjectOwner,
147
+ Permission.ProjectAdmin,
148
+ Permission.CreateIncomingCallPolicyLabelRule,
149
+ ],
150
+ read: [
151
+ Permission.ProjectOwner,
152
+ Permission.ProjectAdmin,
153
+ Permission.ProjectMember,
154
+ Permission.Viewer,
155
+ Permission.ReadIncomingCallPolicyLabelRule,
156
+ Permission.ReadAllProjectResources,
157
+ ],
158
+ update: [
159
+ Permission.ProjectOwner,
160
+ Permission.ProjectAdmin,
161
+ Permission.EditIncomingCallPolicyLabelRule,
162
+ ],
163
+ })
164
+ @Index()
165
+ @TableColumn({
166
+ required: true,
167
+ type: TableColumnType.ShortText,
168
+ canReadOnRelationQuery: true,
169
+ title: "Name",
170
+ description: "Name of this incoming call policy label rule",
171
+ })
172
+ @Column({
173
+ nullable: false,
174
+ type: ColumnType.ShortText,
175
+ length: ColumnLength.ShortText,
176
+ })
177
+ public name?: string = undefined;
178
+
179
+ @ColumnAccessControl({
180
+ create: [
181
+ Permission.ProjectOwner,
182
+ Permission.ProjectAdmin,
183
+ Permission.CreateIncomingCallPolicyLabelRule,
184
+ ],
185
+ read: [
186
+ Permission.ProjectOwner,
187
+ Permission.ProjectAdmin,
188
+ Permission.ProjectMember,
189
+ Permission.Viewer,
190
+ Permission.ReadIncomingCallPolicyLabelRule,
191
+ Permission.ReadAllProjectResources,
192
+ ],
193
+ update: [
194
+ Permission.ProjectOwner,
195
+ Permission.ProjectAdmin,
196
+ Permission.EditIncomingCallPolicyLabelRule,
197
+ ],
198
+ })
199
+ @TableColumn({
200
+ required: false,
201
+ type: TableColumnType.LongText,
202
+ title: "Description",
203
+ description: "Description of this incoming call policy label rule",
204
+ })
205
+ @Column({
206
+ nullable: true,
207
+ type: ColumnType.LongText,
208
+ length: ColumnLength.LongText,
209
+ })
210
+ public description?: string = undefined;
211
+
212
+ @ColumnAccessControl({
213
+ create: [
214
+ Permission.ProjectOwner,
215
+ Permission.ProjectAdmin,
216
+ Permission.CreateIncomingCallPolicyLabelRule,
217
+ ],
218
+ read: [
219
+ Permission.ProjectOwner,
220
+ Permission.ProjectAdmin,
221
+ Permission.ProjectMember,
222
+ Permission.Viewer,
223
+ Permission.ReadIncomingCallPolicyLabelRule,
224
+ Permission.ReadAllProjectResources,
225
+ ],
226
+ update: [
227
+ Permission.ProjectOwner,
228
+ Permission.ProjectAdmin,
229
+ Permission.EditIncomingCallPolicyLabelRule,
230
+ ],
231
+ })
232
+ @Index()
233
+ @TableColumn({
234
+ required: true,
235
+ type: TableColumnType.Boolean,
236
+ title: "Is Enabled",
237
+ description: "Whether this rule is enabled",
238
+ defaultValue: true,
239
+ isDefaultValueColumn: true,
240
+ })
241
+ @Column({
242
+ type: ColumnType.Boolean,
243
+ nullable: false,
244
+ default: true,
245
+ })
246
+ public isEnabled?: boolean = undefined;
247
+
248
+ @ColumnAccessControl({
249
+ create: [
250
+ Permission.ProjectOwner,
251
+ Permission.ProjectAdmin,
252
+ Permission.CreateIncomingCallPolicyLabelRule,
253
+ ],
254
+ read: [
255
+ Permission.ProjectOwner,
256
+ Permission.ProjectAdmin,
257
+ Permission.ProjectMember,
258
+ Permission.Viewer,
259
+ Permission.ReadIncomingCallPolicyLabelRule,
260
+ Permission.ReadAllProjectResources,
261
+ ],
262
+ update: [
263
+ Permission.ProjectOwner,
264
+ Permission.ProjectAdmin,
265
+ Permission.EditIncomingCallPolicyLabelRule,
266
+ ],
267
+ })
268
+ @TableColumn({
269
+ required: false,
270
+ type: TableColumnType.EntityArray,
271
+ modelType: Label,
272
+ title: "Incoming Call Policy Labels",
273
+ description:
274
+ "Only trigger for incoming call policies that already have at least one of these labels. Leave empty to match regardless of labels.",
275
+ })
276
+ @ManyToMany(
277
+ () => {
278
+ return Label;
279
+ },
280
+ { eager: false },
281
+ )
282
+ @JoinTable({
283
+ name: "IncomingCallPolicyLabelRuleMatchLabel",
284
+ inverseJoinColumn: {
285
+ name: "labelId",
286
+ referencedColumnName: "_id",
287
+ },
288
+ joinColumn: {
289
+ name: "incomingCallPolicyLabelRuleId",
290
+ referencedColumnName: "_id",
291
+ },
292
+ })
293
+ public incomingCallPolicyLabels?: Array<Label> = undefined;
294
+
295
+ @ColumnAccessControl({
296
+ create: [
297
+ Permission.ProjectOwner,
298
+ Permission.ProjectAdmin,
299
+ Permission.CreateIncomingCallPolicyLabelRule,
300
+ ],
301
+ read: [
302
+ Permission.ProjectOwner,
303
+ Permission.ProjectAdmin,
304
+ Permission.ProjectMember,
305
+ Permission.Viewer,
306
+ Permission.ReadIncomingCallPolicyLabelRule,
307
+ Permission.ReadAllProjectResources,
308
+ ],
309
+ update: [
310
+ Permission.ProjectOwner,
311
+ Permission.ProjectAdmin,
312
+ Permission.EditIncomingCallPolicyLabelRule,
313
+ ],
314
+ })
315
+ @TableColumn({
316
+ required: false,
317
+ type: TableColumnType.LongText,
318
+ title: "Incoming Call Policy Name Pattern",
319
+ description:
320
+ "Regex (case-insensitive) matched against the incoming call policy name. Leave empty to match any name.",
321
+ })
322
+ @Column({
323
+ type: ColumnType.LongText,
324
+ nullable: true,
325
+ length: ColumnLength.LongText,
326
+ })
327
+ public incomingCallPolicyNamePattern?: string = undefined;
328
+
329
+ @ColumnAccessControl({
330
+ create: [
331
+ Permission.ProjectOwner,
332
+ Permission.ProjectAdmin,
333
+ Permission.CreateIncomingCallPolicyLabelRule,
334
+ ],
335
+ read: [
336
+ Permission.ProjectOwner,
337
+ Permission.ProjectAdmin,
338
+ Permission.ProjectMember,
339
+ Permission.Viewer,
340
+ Permission.ReadIncomingCallPolicyLabelRule,
341
+ Permission.ReadAllProjectResources,
342
+ ],
343
+ update: [
344
+ Permission.ProjectOwner,
345
+ Permission.ProjectAdmin,
346
+ Permission.EditIncomingCallPolicyLabelRule,
347
+ ],
348
+ })
349
+ @TableColumn({
350
+ required: false,
351
+ type: TableColumnType.LongText,
352
+ title: "Incoming Call Policy Description Pattern",
353
+ description:
354
+ "Regex (case-insensitive) matched against the incoming call policy description. Leave empty to match any description.",
355
+ })
356
+ @Column({
357
+ type: ColumnType.LongText,
358
+ nullable: true,
359
+ length: ColumnLength.LongText,
360
+ })
361
+ public incomingCallPolicyDescriptionPattern?: string = undefined;
362
+
363
+ @ColumnAccessControl({
364
+ create: [
365
+ Permission.ProjectOwner,
366
+ Permission.ProjectAdmin,
367
+ Permission.CreateIncomingCallPolicyLabelRule,
368
+ ],
369
+ read: [
370
+ Permission.ProjectOwner,
371
+ Permission.ProjectAdmin,
372
+ Permission.ProjectMember,
373
+ Permission.Viewer,
374
+ Permission.ReadIncomingCallPolicyLabelRule,
375
+ Permission.ReadAllProjectResources,
376
+ ],
377
+ update: [
378
+ Permission.ProjectOwner,
379
+ Permission.ProjectAdmin,
380
+ Permission.EditIncomingCallPolicyLabelRule,
381
+ ],
382
+ })
383
+ @TableColumn({
384
+ required: false,
385
+ type: TableColumnType.EntityArray,
386
+ modelType: Label,
387
+ title: "Labels to Add",
388
+ description:
389
+ "Labels to attach to the incoming call policy when this rule matches. Already-attached labels are not duplicated.",
390
+ })
391
+ @ManyToMany(
392
+ () => {
393
+ return Label;
394
+ },
395
+ { eager: false },
396
+ )
397
+ @JoinTable({
398
+ name: "IncomingCallPolicyLabelRuleLabelToAdd",
399
+ inverseJoinColumn: {
400
+ name: "labelId",
401
+ referencedColumnName: "_id",
402
+ },
403
+ joinColumn: {
404
+ name: "incomingCallPolicyLabelRuleId",
405
+ referencedColumnName: "_id",
406
+ },
407
+ })
408
+ public labelsToAdd?: Array<Label> = undefined;
409
+
410
+ @ColumnAccessControl({
411
+ create: [
412
+ Permission.ProjectOwner,
413
+ Permission.ProjectAdmin,
414
+ Permission.CreateIncomingCallPolicyLabelRule,
415
+ ],
416
+ read: [
417
+ Permission.ProjectOwner,
418
+ Permission.ProjectAdmin,
419
+ Permission.ProjectMember,
420
+ Permission.Viewer,
421
+ Permission.ReadIncomingCallPolicyLabelRule,
422
+ Permission.ReadAllProjectResources,
423
+ ],
424
+ update: [],
425
+ })
426
+ @TableColumn({
427
+ manyToOneRelationColumn: "createdByUserId",
428
+ type: TableColumnType.Entity,
429
+ modelType: User,
430
+ title: "Created by User",
431
+ description:
432
+ "Relation to User who created this object (if this object was created by a User)",
433
+ })
434
+ @ManyToOne(
435
+ () => {
436
+ return User;
437
+ },
438
+ {
439
+ eager: false,
440
+ nullable: true,
441
+ onDelete: "SET NULL",
442
+ orphanedRowAction: "nullify",
443
+ },
444
+ )
445
+ @JoinColumn({ name: "createdByUserId" })
446
+ public createdByUser?: User = undefined;
447
+
448
+ @ColumnAccessControl({
449
+ create: [
450
+ Permission.ProjectOwner,
451
+ Permission.ProjectAdmin,
452
+ Permission.CreateIncomingCallPolicyLabelRule,
453
+ ],
454
+ read: [
455
+ Permission.ProjectOwner,
456
+ Permission.ProjectAdmin,
457
+ Permission.ProjectMember,
458
+ Permission.Viewer,
459
+ Permission.ReadIncomingCallPolicyLabelRule,
460
+ Permission.ReadAllProjectResources,
461
+ ],
462
+ update: [],
463
+ })
464
+ @TableColumn({
465
+ type: TableColumnType.ObjectID,
466
+ title: "Created by User ID",
467
+ description:
468
+ "User ID who created this object (if this object was created by a User)",
469
+ })
470
+ @Column({
471
+ type: ColumnType.ObjectID,
472
+ nullable: true,
473
+ transformer: ObjectID.getDatabaseTransformer(),
474
+ })
475
+ public createdByUserId?: ObjectID = undefined;
476
+
477
+ @ColumnAccessControl({
478
+ create: [],
479
+ read: [],
480
+ update: [],
481
+ })
482
+ @TableColumn({
483
+ manyToOneRelationColumn: "deletedByUserId",
484
+ type: TableColumnType.Entity,
485
+ title: "Deleted by User",
486
+ modelType: User,
487
+ description:
488
+ "Relation to User who deleted this object (if this object was deleted by a User)",
489
+ })
490
+ @ManyToOne(
491
+ () => {
492
+ return User;
493
+ },
494
+ {
495
+ cascade: false,
496
+ eager: false,
497
+ nullable: true,
498
+ onDelete: "SET NULL",
499
+ orphanedRowAction: "nullify",
500
+ },
501
+ )
502
+ @JoinColumn({ name: "deletedByUserId" })
503
+ public deletedByUser?: User = undefined;
504
+
505
+ @ColumnAccessControl({
506
+ create: [],
507
+ read: [],
508
+ update: [],
509
+ })
510
+ @TableColumn({
511
+ type: TableColumnType.ObjectID,
512
+ title: "Deleted by User ID",
513
+ description:
514
+ "User ID who deleted this object (if this object was deleted by a User)",
515
+ })
516
+ @Column({
517
+ type: ColumnType.ObjectID,
518
+ nullable: true,
519
+ transformer: ObjectID.getDatabaseTransformer(),
520
+ })
521
+ public deletedByUserId?: ObjectID = undefined;
522
+ }