@oneuptime/common 12.0.29 → 12.0.30

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 (189) hide show
  1. package/Models/DatabaseModels/Index.ts +11 -0
  2. package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
  3. package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
  4. package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
  5. package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
  6. package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
  7. package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
  8. package/Server/API/OnCallCalendarAPI.ts +2194 -0
  9. package/Server/EnvironmentConfig.ts +138 -0
  10. package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  13. package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
  14. package/Server/Services/Index.ts +12 -0
  15. package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
  16. package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
  17. package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
  18. package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
  19. package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
  20. package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
  21. package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
  22. package/Server/Services/TeamMemberService.ts +489 -1
  23. package/Server/Services/TeamService.ts +50 -0
  24. package/Server/Services/UserNotificationSettingService.ts +44 -1
  25. package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
  26. package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
  27. package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
  28. package/Server/Utils/OnCall/CalendarFeedToken.ts +241 -0
  29. package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
  30. package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
  31. package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
  32. package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
  33. package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
  34. package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
  35. package/Server/Utils/Response.ts +134 -0
  36. package/Server/Utils/StartServer.ts +10 -0
  37. package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
  38. package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
  39. package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
  40. package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
  41. package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
  42. package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
  43. package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
  44. package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
  45. package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
  46. package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
  47. package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
  48. package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
  49. package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
  50. package/Tests/Server/API/Helpers.ts +8 -0
  51. package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
  52. package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
  53. package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
  54. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +369 -0
  55. package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
  56. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
  57. package/Tests/Server/Services/OnCallCalendarFeedServices.test.ts +1103 -0
  58. package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
  59. package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
  60. package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
  61. package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
  62. package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
  63. package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
  64. package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +254 -0
  65. package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
  66. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
  67. package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
  68. package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
  69. package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
  70. package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
  71. package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
  72. package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
  73. package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
  74. package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
  75. package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
  76. package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -0
  77. package/Tests/Types/Calendar/ICalendar.test.ts +488 -0
  78. package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
  79. package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
  80. package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
  81. package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
  82. package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
  83. package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
  84. package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
  85. package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -0
  86. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
  87. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
  88. package/Types/Calendar/ICalendar.ts +442 -0
  89. package/Types/Email/EmailTemplateType.ts +2 -0
  90. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  91. package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
  92. package/Types/OnCallDutyPolicy/Layer.ts +190 -35
  93. package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
  94. package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
  95. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
  96. package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
  97. package/build/dist/Models/DatabaseModels/Index.js +11 -0
  98. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  99. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
  100. package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
  101. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
  102. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
  103. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
  104. package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
  105. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
  106. package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
  107. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
  108. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
  109. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
  110. package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
  111. package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
  112. package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
  113. package/build/dist/Server/EnvironmentConfig.js +102 -0
  114. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  115. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
  116. package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
  117. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
  118. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
  119. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  120. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  121. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
  122. package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
  123. package/build/dist/Server/Services/Index.js +12 -0
  124. package/build/dist/Server/Services/Index.js.map +1 -1
  125. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
  126. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
  127. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
  128. package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
  129. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
  130. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
  131. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
  132. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
  133. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +955 -9
  134. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  135. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
  136. package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
  137. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js +157 -0
  138. package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
  139. package/build/dist/Server/Services/TeamMemberService.js +396 -1
  140. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  141. package/build/dist/Server/Services/TeamService.js +43 -0
  142. package/build/dist/Server/Services/TeamService.js.map +1 -1
  143. package/build/dist/Server/Services/UserNotificationSettingService.js +26 -1
  144. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  145. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
  146. package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
  147. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
  148. package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
  149. package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
  150. package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
  151. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js +161 -0
  152. package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
  153. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
  154. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
  155. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
  156. package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
  157. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
  158. package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
  159. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
  160. package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
  161. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
  162. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
  163. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
  164. package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
  165. package/build/dist/Server/Utils/Response.js +97 -0
  166. package/build/dist/Server/Utils/Response.js.map +1 -1
  167. package/build/dist/Server/Utils/StartServer.js +9 -1
  168. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  169. package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
  170. package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
  171. package/build/dist/Types/Calendar/ICalendar.js +290 -0
  172. package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
  173. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  174. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  175. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  176. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  177. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
  178. package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
  179. package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
  180. package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
  181. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
  182. package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
  183. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
  184. package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
  185. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
  186. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
  187. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
  188. package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
  189. package/package.json +1 -1
@@ -0,0 +1,247 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import Project from "./Project";
11
+ import User from "./User";
12
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
13
+ import Route from "../../Types/API/Route";
14
+ import AllowAccessIfSubscriptionIsUnpaid from "../../Types/Database/AccessControl/AllowAccessIfSubscriptionIsUnpaid";
15
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
16
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
17
+ import ColumnType from "../../Types/Database/ColumnType";
18
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
19
+ import CurrentUserCanAccessRecordBy from "../../Types/Database/CurrentUserCanAccessRecordBy";
20
+ import TableColumn from "../../Types/Database/TableColumn";
21
+ import TableColumnType from "../../Types/Database/TableColumnType";
22
+ import TableMetadata from "../../Types/Database/TableMetadata";
23
+ import TenantColumn from "../../Types/Database/TenantColumn";
24
+ import IconProp from "../../Types/Icon/IconProp";
25
+ import ObjectID from "../../Types/ObjectID";
26
+ import Permission from "../../Types/Permission";
27
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
28
+ /*
29
+ * Bounds on the lead time, shared with the dashboard's custom-lead input.
30
+ * Below 15 minutes the reminder races the shift's own hand-off notification;
31
+ * above two weeks the roster is not settled enough to be worth interrupting
32
+ * for.
33
+ */
34
+ export const MIN_MINUTES_BEFORE_SHIFT = 15;
35
+ export const MAX_MINUTES_BEFORE_SHIFT = 14 * 24 * 60;
36
+ /*
37
+ * "Remind me N minutes before my on-call shift starts."
38
+ *
39
+ * One row per lead time a user has configured in a project - the settings
40
+ * page's chips (1 week / 1 day / 1 hour / 15 min / custom) are rows here.
41
+ * UNIQUE (projectId, userId, minutesBeforeShift) makes a double-click on a
42
+ * chip a no-op rather than a duplicate reminder. The reminder worker reads
43
+ * these, materializes the user's upcoming shifts, and sends through the
44
+ * user's notification settings for SEND_BEFORE_USER_ON_CALL_SHIFT_STARTS.
45
+ *
46
+ * Shaped like UserNotificationSetting: tenant scoped, owned by the user
47
+ * (@CurrentUserCanAccessRecordBy), every operation open to the owner and to
48
+ * nobody else. The service bounds minutesBeforeShift to 15 min ... 2 weeks.
49
+ */
50
+ let UserOnCallShiftReminder = class UserOnCallShiftReminder extends BaseModel {
51
+ constructor() {
52
+ super(...arguments);
53
+ this.project = undefined;
54
+ this.projectId = undefined;
55
+ this.user = undefined;
56
+ this.userId = undefined;
57
+ /*
58
+ * Lead time in minutes. 15 ... 20160 (two weeks), enforced by the service:
59
+ * below 15 the reminder races the shift's own hand-off notification, above
60
+ * two weeks the roster is not settled enough to be worth interrupting for.
61
+ */
62
+ this.minutesBeforeShift = undefined;
63
+ this.deletedByUser = undefined;
64
+ this.deletedByUserId = undefined;
65
+ }
66
+ };
67
+ __decorate([
68
+ ColumnAccessControl({
69
+ create: [Permission.CurrentUser],
70
+ read: [Permission.CurrentUser],
71
+ update: [],
72
+ }),
73
+ TableColumn({
74
+ manyToOneRelationColumn: "projectId",
75
+ type: TableColumnType.Entity,
76
+ modelType: Project,
77
+ title: "Project",
78
+ description: "Relation to Project Resource in which this object belongs",
79
+ }),
80
+ ManyToOne(() => {
81
+ return Project;
82
+ }, {
83
+ eager: false,
84
+ nullable: true,
85
+ onDelete: "CASCADE",
86
+ orphanedRowAction: "nullify",
87
+ }),
88
+ JoinColumn({ name: "projectId" }),
89
+ __metadata("design:type", Project)
90
+ ], UserOnCallShiftReminder.prototype, "project", void 0);
91
+ __decorate([
92
+ ColumnAccessControl({
93
+ create: [Permission.CurrentUser],
94
+ read: [Permission.CurrentUser],
95
+ update: [],
96
+ }),
97
+ Index(),
98
+ TableColumn({
99
+ type: TableColumnType.ObjectID,
100
+ required: true,
101
+ canReadOnRelationQuery: true,
102
+ title: "Project ID",
103
+ description: "ID of your OneUptime Project in which this object belongs",
104
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
105
+ }),
106
+ Column({
107
+ type: ColumnType.ObjectID,
108
+ nullable: false,
109
+ transformer: ObjectID.getDatabaseTransformer(),
110
+ }),
111
+ __metadata("design:type", ObjectID)
112
+ ], UserOnCallShiftReminder.prototype, "projectId", void 0);
113
+ __decorate([
114
+ ColumnAccessControl({
115
+ create: [Permission.CurrentUser],
116
+ read: [Permission.CurrentUser],
117
+ update: [],
118
+ }),
119
+ TableColumn({
120
+ manyToOneRelationColumn: "userId",
121
+ type: TableColumnType.Entity,
122
+ modelType: User,
123
+ title: "User",
124
+ description: "Relation to the User who wants to be reminded",
125
+ }),
126
+ ManyToOne(() => {
127
+ return User;
128
+ }, {
129
+ eager: false,
130
+ nullable: true,
131
+ onDelete: "CASCADE",
132
+ orphanedRowAction: "nullify",
133
+ }),
134
+ JoinColumn({ name: "userId" }),
135
+ __metadata("design:type", User)
136
+ ], UserOnCallShiftReminder.prototype, "user", void 0);
137
+ __decorate([
138
+ ColumnAccessControl({
139
+ create: [Permission.CurrentUser],
140
+ read: [Permission.CurrentUser],
141
+ update: [],
142
+ }),
143
+ Index(),
144
+ TableColumn({
145
+ type: TableColumnType.ObjectID,
146
+ required: true,
147
+ canReadOnRelationQuery: true,
148
+ title: "User ID",
149
+ description: "ID of the User who wants to be reminded",
150
+ example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
151
+ }),
152
+ Column({
153
+ type: ColumnType.ObjectID,
154
+ nullable: false,
155
+ transformer: ObjectID.getDatabaseTransformer(),
156
+ }),
157
+ __metadata("design:type", ObjectID)
158
+ ], UserOnCallShiftReminder.prototype, "userId", void 0);
159
+ __decorate([
160
+ ColumnAccessControl({
161
+ create: [Permission.CurrentUser],
162
+ read: [Permission.CurrentUser],
163
+ update: [Permission.CurrentUser],
164
+ }),
165
+ TableColumn({
166
+ required: true,
167
+ type: TableColumnType.Number,
168
+ canReadOnRelationQuery: true,
169
+ title: "Minutes Before Shift",
170
+ description: "How many minutes before the shift starts to send the reminder (15 to 20160).",
171
+ example: 60,
172
+ }),
173
+ Column({
174
+ type: ColumnType.Number,
175
+ nullable: false,
176
+ }),
177
+ __metadata("design:type", Number)
178
+ ], UserOnCallShiftReminder.prototype, "minutesBeforeShift", void 0);
179
+ __decorate([
180
+ ColumnAccessControl({
181
+ create: [],
182
+ read: [],
183
+ update: [],
184
+ }),
185
+ TableColumn({
186
+ manyToOneRelationColumn: "deletedByUserId",
187
+ type: TableColumnType.Entity,
188
+ title: "Deleted by User",
189
+ modelType: User,
190
+ description: "Relation to User who deleted this object (if this object was deleted by a User)",
191
+ }),
192
+ ManyToOne(() => {
193
+ return User;
194
+ }, {
195
+ cascade: false,
196
+ eager: false,
197
+ nullable: true,
198
+ onDelete: "SET NULL",
199
+ orphanedRowAction: "nullify",
200
+ }),
201
+ JoinColumn({ name: "deletedByUserId" }),
202
+ __metadata("design:type", User)
203
+ ], UserOnCallShiftReminder.prototype, "deletedByUser", void 0);
204
+ __decorate([
205
+ ColumnAccessControl({
206
+ create: [],
207
+ read: [],
208
+ update: [],
209
+ }),
210
+ TableColumn({
211
+ type: TableColumnType.ObjectID,
212
+ title: "Deleted by User ID",
213
+ description: "User ID who deleted this object (if this object was deleted by a User)",
214
+ example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
215
+ }),
216
+ Column({
217
+ type: ColumnType.ObjectID,
218
+ nullable: true,
219
+ transformer: ObjectID.getDatabaseTransformer(),
220
+ }),
221
+ __metadata("design:type", ObjectID)
222
+ ], UserOnCallShiftReminder.prototype, "deletedByUserId", void 0);
223
+ UserOnCallShiftReminder = __decorate([
224
+ TenantColumn("projectId"),
225
+ AllowAccessIfSubscriptionIsUnpaid(),
226
+ TableAccessControl({
227
+ create: [Permission.CurrentUser],
228
+ read: [Permission.CurrentUser],
229
+ delete: [Permission.CurrentUser],
230
+ update: [Permission.CurrentUser],
231
+ }),
232
+ CrudApiEndpoint(new Route("/user-on-call-shift-reminder")),
233
+ Entity({
234
+ name: "UserOnCallShiftReminder",
235
+ }),
236
+ TableMetadata({
237
+ tableName: "UserOnCallShiftReminder",
238
+ singularName: "On-Call Shift Reminder",
239
+ pluralName: "On-Call Shift Reminders",
240
+ icon: IconProp.Bell,
241
+ tableDescription: "How long before an on-call shift starts a user wants to be reminded.",
242
+ }),
243
+ CurrentUserCanAccessRecordBy("userId"),
244
+ Index(["projectId", "userId", "minutesBeforeShift"], { unique: true })
245
+ ], UserOnCallShiftReminder);
246
+ export default UserOnCallShiftReminder;
247
+ //# sourceMappingURL=UserOnCallShiftReminder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserOnCallShiftReminder.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/UserOnCallShiftReminder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,355 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import OnCallDutyPolicySchedule from "./OnCallDutyPolicySchedule";
11
+ import Project from "./Project";
12
+ import User from "./User";
13
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
14
+ import Route from "../../Types/API/Route";
15
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
16
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
17
+ import ColumnLength from "../../Types/Database/ColumnLength";
18
+ import ColumnType from "../../Types/Database/ColumnType";
19
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
20
+ import TableColumn from "../../Types/Database/TableColumn";
21
+ import TableColumnType from "../../Types/Database/TableColumnType";
22
+ import TableMetadata from "../../Types/Database/TableMetadata";
23
+ import TenantColumn from "../../Types/Database/TenantColumn";
24
+ import IconProp from "../../Types/Icon/IconProp";
25
+ import ObjectID from "../../Types/ObjectID";
26
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
27
+ /*
28
+ * What a shift reminder log row records.
29
+ *
30
+ * reminder - the ordinary "your shift starts in N minutes" message.
31
+ * catch-up - a late reminder for a shift the user only just acquired
32
+ * (an override created inside one of their lead windows).
33
+ * reassigned - "your shift at 18:00 is now covered by B", sent when a
34
+ * shift the user was already reminded about moves away.
35
+ */
36
+ export var UserOnCallShiftReminderLogKind;
37
+ (function (UserOnCallShiftReminderLogKind) {
38
+ UserOnCallShiftReminderLogKind["Reminder"] = "reminder";
39
+ UserOnCallShiftReminderLogKind["CatchUp"] = "catch-up";
40
+ UserOnCallShiftReminderLogKind["Reassigned"] = "reassigned";
41
+ })(UserOnCallShiftReminderLogKind || (UserOnCallShiftReminderLogKind = {}));
42
+ /*
43
+ * The idempotency ledger of the shift-reminder worker.
44
+ *
45
+ * A reminder is CLAIMED by inserting a row (sentAt NULL), SENT, then STAMPED
46
+ * (sentAt set). The UNIQUE index over (userId, schedule, shiftStartsAt,
47
+ * minutesBeforeShift, kind) is the whole point: two worker replicas, a
48
+ * re-run after a crash, or a watermark that re-covers the same window all
49
+ * collapse into one send, because only one insert can win. shiftStartsAt is
50
+ * minute-truncated and seam-normalised by the worker so a start that moves
51
+ * by a second does not mint a new key.
52
+ *
53
+ * Postgres rather than Redis because compose Redis is non-persistent
54
+ * (`--save "" --appendonly no`), and a cache flush must never re-page anyone.
55
+ *
56
+ * ROOT ONLY. Every table access list is empty: nothing about this ledger is a
57
+ * user-facing resource, and a user who could delete their own claim rows
58
+ * could re-trigger reminders. The CRUD route exists only so the model is
59
+ * addressable like every other tenant model; every operation on it is denied.
60
+ */
61
+ let UserOnCallShiftReminderLog = class UserOnCallShiftReminderLog extends BaseModel {
62
+ constructor() {
63
+ super(...arguments);
64
+ this.project = undefined;
65
+ this.projectId = undefined;
66
+ this.user = undefined;
67
+ this.userId = undefined;
68
+ this.onCallDutyPolicySchedule = undefined;
69
+ this.onCallDutyPolicyScheduleId = undefined;
70
+ /*
71
+ * The shift's start instant, minute-truncated and seam-normalised. Part of
72
+ * the idempotency key, so a shift whose computed start drifts by a second
73
+ * between two runs does not earn a second reminder.
74
+ */
75
+ this.shiftStartsAt = undefined;
76
+ /*
77
+ * The configured lead this reminder was sent for; 0 for change notices
78
+ * (catch-up / reassigned), which are not tied to a lead.
79
+ */
80
+ this.minutesBeforeShift = undefined;
81
+ this.kind = undefined;
82
+ /*
83
+ * When the row was claimed. A claim older than ten minutes with sentAt still
84
+ * NULL is a send that died mid-flight and may be re-claimed.
85
+ */
86
+ this.claimedAt = undefined;
87
+ this.sentAt = undefined;
88
+ }
89
+ };
90
+ __decorate([
91
+ ColumnAccessControl({
92
+ create: [],
93
+ read: [],
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
+ return Project;
105
+ }, {
106
+ eager: false,
107
+ nullable: true,
108
+ onDelete: "CASCADE",
109
+ orphanedRowAction: "nullify",
110
+ }),
111
+ JoinColumn({ name: "projectId" }),
112
+ __metadata("design:type", Project)
113
+ ], UserOnCallShiftReminderLog.prototype, "project", void 0);
114
+ __decorate([
115
+ ColumnAccessControl({
116
+ create: [],
117
+ read: [],
118
+ update: [],
119
+ }),
120
+ Index(),
121
+ TableColumn({
122
+ type: TableColumnType.ObjectID,
123
+ required: true,
124
+ canReadOnRelationQuery: true,
125
+ title: "Project ID",
126
+ description: "ID of your OneUptime Project in which this object belongs",
127
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
128
+ }),
129
+ Column({
130
+ type: ColumnType.ObjectID,
131
+ nullable: false,
132
+ transformer: ObjectID.getDatabaseTransformer(),
133
+ }),
134
+ __metadata("design:type", ObjectID)
135
+ ], UserOnCallShiftReminderLog.prototype, "projectId", void 0);
136
+ __decorate([
137
+ ColumnAccessControl({
138
+ create: [],
139
+ read: [],
140
+ update: [],
141
+ }),
142
+ TableColumn({
143
+ manyToOneRelationColumn: "userId",
144
+ type: TableColumnType.Entity,
145
+ modelType: User,
146
+ title: "User",
147
+ description: "Relation to the User this reminder was for",
148
+ }),
149
+ ManyToOne(() => {
150
+ return User;
151
+ }, {
152
+ eager: false,
153
+ nullable: true,
154
+ onDelete: "CASCADE",
155
+ orphanedRowAction: "nullify",
156
+ }),
157
+ JoinColumn({ name: "userId" }),
158
+ __metadata("design:type", User)
159
+ ], UserOnCallShiftReminderLog.prototype, "user", void 0);
160
+ __decorate([
161
+ ColumnAccessControl({
162
+ create: [],
163
+ read: [],
164
+ update: [],
165
+ }),
166
+ Index(),
167
+ TableColumn({
168
+ type: TableColumnType.ObjectID,
169
+ required: true,
170
+ canReadOnRelationQuery: true,
171
+ title: "User ID",
172
+ description: "ID of the User this reminder was for",
173
+ example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
174
+ }),
175
+ Column({
176
+ type: ColumnType.ObjectID,
177
+ nullable: false,
178
+ transformer: ObjectID.getDatabaseTransformer(),
179
+ }),
180
+ __metadata("design:type", ObjectID)
181
+ ], UserOnCallShiftReminderLog.prototype, "userId", void 0);
182
+ __decorate([
183
+ ColumnAccessControl({
184
+ create: [],
185
+ read: [],
186
+ update: [],
187
+ }),
188
+ TableColumn({
189
+ manyToOneRelationColumn: "onCallDutyPolicyScheduleId",
190
+ type: TableColumnType.Entity,
191
+ modelType: OnCallDutyPolicySchedule,
192
+ title: "On-Call Policy Schedule",
193
+ description: "Relation to the schedule the reminded shift is on.",
194
+ }),
195
+ ManyToOne(() => {
196
+ return OnCallDutyPolicySchedule;
197
+ }, {
198
+ eager: false,
199
+ nullable: true,
200
+ onDelete: "CASCADE",
201
+ orphanedRowAction: "nullify",
202
+ }),
203
+ JoinColumn({ name: "onCallDutyPolicyScheduleId" }),
204
+ __metadata("design:type", OnCallDutyPolicySchedule)
205
+ ], UserOnCallShiftReminderLog.prototype, "onCallDutyPolicySchedule", void 0);
206
+ __decorate([
207
+ ColumnAccessControl({
208
+ create: [],
209
+ read: [],
210
+ update: [],
211
+ }),
212
+ Index(),
213
+ TableColumn({
214
+ type: TableColumnType.ObjectID,
215
+ required: true,
216
+ canReadOnRelationQuery: true,
217
+ title: "On-Call Policy Schedule ID",
218
+ description: "ID of the schedule the reminded shift is on.",
219
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
220
+ }),
221
+ Column({
222
+ type: ColumnType.ObjectID,
223
+ nullable: false,
224
+ transformer: ObjectID.getDatabaseTransformer(),
225
+ }),
226
+ __metadata("design:type", ObjectID)
227
+ ], UserOnCallShiftReminderLog.prototype, "onCallDutyPolicyScheduleId", void 0);
228
+ __decorate([
229
+ ColumnAccessControl({
230
+ create: [],
231
+ read: [],
232
+ update: [],
233
+ }),
234
+ TableColumn({
235
+ required: true,
236
+ type: TableColumnType.Date,
237
+ title: "Shift Starts At",
238
+ description: "When the reminded shift starts (minute precision)",
239
+ example: "2024-01-15T18:00:00.000Z",
240
+ }),
241
+ Column({
242
+ type: ColumnType.Date,
243
+ nullable: false,
244
+ }),
245
+ __metadata("design:type", Date)
246
+ ], UserOnCallShiftReminderLog.prototype, "shiftStartsAt", void 0);
247
+ __decorate([
248
+ ColumnAccessControl({
249
+ create: [],
250
+ read: [],
251
+ update: [],
252
+ }),
253
+ TableColumn({
254
+ required: true,
255
+ isDefaultValueColumn: true,
256
+ defaultValue: 0,
257
+ type: TableColumnType.Number,
258
+ title: "Minutes Before Shift",
259
+ description: "The lead time this reminder was sent for; 0 for change notices",
260
+ example: 60,
261
+ }),
262
+ Column({
263
+ type: ColumnType.Number,
264
+ nullable: false,
265
+ default: 0,
266
+ }),
267
+ __metadata("design:type", Number)
268
+ ], UserOnCallShiftReminderLog.prototype, "minutesBeforeShift", void 0);
269
+ __decorate([
270
+ ColumnAccessControl({
271
+ create: [],
272
+ read: [],
273
+ update: [],
274
+ }),
275
+ TableColumn({
276
+ required: true,
277
+ type: TableColumnType.ShortText,
278
+ title: "Kind",
279
+ description: "reminder, catch-up or reassigned",
280
+ example: "reminder",
281
+ }),
282
+ Column({
283
+ type: ColumnType.ShortText,
284
+ length: ColumnLength.ShortText,
285
+ nullable: false,
286
+ }),
287
+ __metadata("design:type", String)
288
+ ], UserOnCallShiftReminderLog.prototype, "kind", void 0);
289
+ __decorate([
290
+ ColumnAccessControl({
291
+ create: [],
292
+ read: [],
293
+ update: [],
294
+ }),
295
+ TableColumn({
296
+ required: true,
297
+ type: TableColumnType.Date,
298
+ title: "Claimed At",
299
+ description: "When a worker claimed this reminder for sending",
300
+ example: "2024-01-15T17:00:00.000Z",
301
+ }),
302
+ Index(),
303
+ Column({
304
+ type: ColumnType.Date,
305
+ nullable: false,
306
+ }),
307
+ __metadata("design:type", Date)
308
+ ], UserOnCallShiftReminderLog.prototype, "claimedAt", void 0);
309
+ __decorate([
310
+ ColumnAccessControl({
311
+ create: [],
312
+ read: [],
313
+ update: [],
314
+ }),
315
+ TableColumn({
316
+ type: TableColumnType.Date,
317
+ title: "Sent At",
318
+ description: "When the reminder was actually sent; NULL while claimed",
319
+ example: "2024-01-15T17:00:02.000Z",
320
+ }),
321
+ Column({
322
+ type: ColumnType.Date,
323
+ nullable: true,
324
+ }),
325
+ __metadata("design:type", Date)
326
+ ], UserOnCallShiftReminderLog.prototype, "sentAt", void 0);
327
+ UserOnCallShiftReminderLog = __decorate([
328
+ TenantColumn("projectId"),
329
+ TableAccessControl({
330
+ create: [],
331
+ read: [],
332
+ delete: [],
333
+ update: [],
334
+ }),
335
+ CrudApiEndpoint(new Route("/user-on-call-shift-reminder-log")),
336
+ Entity({
337
+ name: "UserOnCallShiftReminderLog",
338
+ }),
339
+ TableMetadata({
340
+ tableName: "UserOnCallShiftReminderLog",
341
+ singularName: "On-Call Shift Reminder Log",
342
+ pluralName: "On-Call Shift Reminder Logs",
343
+ icon: IconProp.Bell,
344
+ tableDescription: "Ledger of shift reminders claimed and sent, so each reminder is sent exactly once.",
345
+ }),
346
+ Index([
347
+ "userId",
348
+ "onCallDutyPolicyScheduleId",
349
+ "shiftStartsAt",
350
+ "minutesBeforeShift",
351
+ "kind",
352
+ ], { unique: true })
353
+ ], UserOnCallShiftReminderLog);
354
+ export default UserOnCallShiftReminderLog;
355
+ //# sourceMappingURL=UserOnCallShiftReminderLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserOnCallShiftReminderLog.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/UserOnCallShiftReminderLog.ts"],"names":[],"mappings":"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"}