@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.
- package/Models/DatabaseModels/Index.ts +11 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +43 -0
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +662 -0
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +584 -0
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +546 -0
- package/Models/DatabaseModels/UserOnCallShiftReminder.ts +231 -0
- package/Models/DatabaseModels/UserOnCallShiftReminderLog.ts +331 -0
- package/Server/API/OnCallCalendarAPI.ts +2194 -0
- package/Server/EnvironmentConfig.ts +138 -0
- package/Server/Infrastructure/OnCallCalendarFeedCache.ts +1050 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.ts +253 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/OnCallCalendarFeedRateLimit.ts +487 -0
- package/Server/Services/Index.ts +12 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +32 -0
- package/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.ts +260 -0
- package/Server/Services/OnCallDutyPolicyScheduleLayerService.ts +70 -3
- package/Server/Services/OnCallDutyPolicyScheduleLayerUserService.ts +138 -3
- package/Server/Services/OnCallDutyPolicyScheduleService.ts +1465 -134
- package/Server/Services/OnCallDutyPolicyUserOverrideService.ts +167 -31
- package/Server/Services/ProjectOnCallCalendarFeedService.ts +192 -0
- package/Server/Services/TeamMemberService.ts +489 -1
- package/Server/Services/TeamService.ts +50 -0
- package/Server/Services/UserNotificationSettingService.ts +44 -1
- package/Server/Services/UserOnCallCalendarFeedService.ts +159 -0
- package/Server/Services/UserOnCallShiftReminderLogService.ts +151 -0
- package/Server/Services/UserOnCallShiftReminderService.ts +112 -0
- package/Server/Utils/OnCall/CalendarFeedToken.ts +241 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1488 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedUrls.ts +230 -0
- package/Server/Utils/OnCall/OnCallShiftChangeListeners.ts +227 -0
- package/Server/Utils/OnCall/OnCallShiftMaterializer.ts +1127 -0
- package/Server/Utils/OnCall/OnCallShiftReminderListener.ts +174 -0
- package/Server/Utils/OnCall/OnCallShiftReminderRunner.ts +2584 -0
- package/Server/Utils/Response.ts +134 -0
- package/Server/Utils/StartServer.ts +10 -0
- package/Server/Utils/Telemetry/AppMetrics.ts +51 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedLinks.test.tsx +229 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedPlanGate.test.tsx +489 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +149 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedUtil.test.ts +855 -0
- package/Tests/App/Dashboard/OnCallPersonalCalendarFeed.test.tsx +1209 -0
- package/Tests/App/Dashboard/OnCallSharedCalendarFeedCard.test.tsx +1019 -0
- package/Tests/App/Dashboard/OnCallShiftRemindersAndUpcomingShifts.test.tsx +655 -0
- package/Tests/App/Dashboard/UserSettingsSetupChecklistModel.test.ts +73 -0
- package/Tests/Models/OnCallCalendarFeedModels.test.ts +642 -0
- package/Tests/Models/OnCallDutyPolicyScheduleCalendarFeed.test.ts +288 -0
- package/Tests/Models/OnCallDutyPolicyScheduleShiftConfigVersion.test.ts +88 -0
- package/Tests/Models/UserOnCallShiftReminderModels.test.ts +368 -0
- package/Tests/Server/API/Helpers.ts +8 -0
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +4461 -0
- package/Tests/Server/EnvironmentConfigOnCallCalendarFeed.test.ts +357 -0
- package/Tests/Server/Infrastructure/OnCallCalendarFeedCache.test.ts +1589 -0
- package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +369 -0
- package/Tests/Server/Middleware/OnCallCalendarFeedRateLimit.test.ts +1365 -0
- package/Tests/Server/Services/FeedRetentionConsistency.test.ts +70 -0
- package/Tests/Server/Services/OnCallCalendarFeedServices.test.ts +1103 -0
- package/Tests/Server/Services/OnCallDutyPolicyScheduleResolver.test.ts +1037 -0
- package/Tests/Server/Services/OnCallShiftConfigPropagation.test.ts +1270 -0
- package/Tests/Server/Services/TeamDeleteMemberCleanup.test.ts +156 -0
- package/Tests/Server/Services/TeamMemberOnCallCleanup.test.ts +755 -0
- package/Tests/Server/Services/UserNotificationSettingShiftReminderDefaults.test.ts +267 -0
- package/Tests/Server/Services/UserOnCallShiftReminderServices.test.ts +583 -0
- package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +254 -0
- package/Tests/Server/Utils/OnCall/CalendarFeedToken.test.ts +467 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedRenderer.test.ts +2142 -0
- package/Tests/Server/Utils/OnCall/OnCallCalendarFeedUrls.test.ts +278 -0
- package/Tests/Server/Utils/OnCall/OnCallResolverTestHarness.ts +440 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftChangeListeners.test.ts +314 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftMaterializer.test.ts +1502 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderListener.test.ts +491 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderRunner.test.ts +3088 -0
- package/Tests/Server/Utils/OnCall/OnCallShiftReminderTestHarness.ts +910 -0
- package/Tests/Server/Utils/ResponseSendCalendarResponse.test.ts +561 -0
- package/Tests/Server/Utils/StartServerEncryptionSecretWarning.test.ts +64 -0
- package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +29 -0
- package/Tests/Types/Calendar/ICalendar.test.ts +488 -0
- package/Tests/Types/NotificationSetting/NotificationSettingEventType.test.ts +53 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedTestFixtures.ts +310 -0
- package/Tests/Types/OnCallDutyPolicy/CalendarFeedWindow.test.ts +205 -0
- package/Tests/Types/OnCallDutyPolicy/LayerUtilLayerMetaAndIterationCap.test.ts +458 -0
- package/Tests/Types/OnCallDutyPolicy/MaterializedShift.test.ts +197 -0
- package/Tests/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.test.ts +1986 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtilGroupKey.test.ts +678 -0
- package/Tests/Types/OnCallDutyPolicy/ShiftSeamUtil.test.ts +417 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +10 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +2 -0
- package/Types/Calendar/ICalendar.ts +442 -0
- package/Types/Email/EmailTemplateType.ts +2 -0
- package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
- package/Types/OnCallDutyPolicy/CalendarFeedWindow.ts +140 -0
- package/Types/OnCallDutyPolicy/Layer.ts +190 -35
- package/Types/OnCallDutyPolicy/MaterializedShift.ts +274 -0
- package/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.ts +1415 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +159 -4
- package/Types/OnCallDutyPolicy/ShiftSeamUtil.ts +106 -0
- package/build/dist/Models/DatabaseModels/Index.js +11 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +44 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +699 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +620 -0
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +585 -0
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js +247 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminder.js.map +1 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js +355 -0
- package/build/dist/Models/DatabaseModels/UserOnCallShiftReminderLog.js.map +1 -0
- package/build/dist/Server/API/OnCallCalendarAPI.js +1371 -0
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +102 -0
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js +663 -0
- package/build/dist/Server/Infrastructure/OnCallCalendarFeedCache.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js +103 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790400000000-AddOnCallCalendarFeeds.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js +342 -0
- package/build/dist/Server/Middleware/OnCallCalendarFeedRateLimit.js.map +1 -0
- package/build/dist/Server/Services/Index.js +12 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +20 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js +219 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js +47 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js +112 -3
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleLayerUserService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +955 -9
- package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js +93 -6
- package/build/dist/Server/Services/OnCallDutyPolicyUserOverrideService.js.map +1 -1
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js +157 -0
- package/build/dist/Server/Services/ProjectOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/TeamMemberService.js +396 -1
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +43 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js +26 -1
- package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js +140 -0
- package/build/dist/Server/Services/UserOnCallCalendarFeedService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js +116 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderLogService.js.map +1 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js +92 -0
- package/build/dist/Server/Services/UserOnCallShiftReminderService.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js +161 -0
- package/build/dist/Server/Utils/OnCall/CalendarFeedToken.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js +983 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedRenderer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js +155 -0
- package/build/dist/Server/Utils/OnCall/OnCallCalendarFeedUrls.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js +145 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftChangeListeners.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js +752 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftMaterializer.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js +92 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderListener.js.map +1 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js +1786 -0
- package/build/dist/Server/Utils/OnCall/OnCallShiftReminderRunner.js.map +1 -0
- package/build/dist/Server/Utils/Response.js +97 -0
- package/build/dist/Server/Utils/Response.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +9 -1
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js +41 -0
- package/build/dist/Server/Utils/Telemetry/AppMetrics.js.map +1 -1
- package/build/dist/Types/Calendar/ICalendar.js +290 -0
- package/build/dist/Types/Calendar/ICalendar.js.map +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js +2 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
- package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js +97 -0
- package/build/dist/Types/OnCallDutyPolicy/CalendarFeedWindow.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/Layer.js +113 -19
- package/build/dist/Types/OnCallDutyPolicy/Layer.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js +134 -0
- package/build/dist/Types/OnCallDutyPolicy/MaterializedShift.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js +800 -0
- package/build/dist/Types/OnCallDutyPolicy/OnCallCalendarFeedUtil.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +97 -3
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js +77 -0
- package/build/dist/Types/OnCallDutyPolicy/ShiftSeamUtil.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,585 @@
|
|
|
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 { PlanType } from "../../Types/Billing/SubscriptionPlan";
|
|
15
|
+
import AllowAccessIfSubscriptionIsUnpaid from "../../Types/Database/AccessControl/AllowAccessIfSubscriptionIsUnpaid";
|
|
16
|
+
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
17
|
+
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
|
|
18
|
+
import TableBillingAccessControl from "../../Types/Database/AccessControl/TableBillingAccessControl";
|
|
19
|
+
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
20
|
+
import ColumnType from "../../Types/Database/ColumnType";
|
|
21
|
+
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
22
|
+
import CurrentUserCanAccessRecordBy from "../../Types/Database/CurrentUserCanAccessRecordBy";
|
|
23
|
+
import TableColumn from "../../Types/Database/TableColumn";
|
|
24
|
+
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
25
|
+
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
26
|
+
import TenantColumn from "../../Types/Database/TenantColumn";
|
|
27
|
+
import IconProp from "../../Types/Icon/IconProp";
|
|
28
|
+
import ObjectID from "../../Types/ObjectID";
|
|
29
|
+
import Permission from "../../Types/Permission";
|
|
30
|
+
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
31
|
+
/*
|
|
32
|
+
* A user's personal on-call calendar feed for ONE project: the capability
|
|
33
|
+
* token behind `GET /on-call-calendar/user/:token/shifts.ics`, plus the
|
|
34
|
+
* user's own settings for it.
|
|
35
|
+
*
|
|
36
|
+
* ONE ROW PER (PROJECT, USER)
|
|
37
|
+
*
|
|
38
|
+
* The token is per project rather than global (maintainer decision, 2026-08-31)
|
|
39
|
+
* so that leaving a project revokes that project's link naturally, and so the
|
|
40
|
+
* per-project user-settings page has exactly one feed to show. UNIQUE
|
|
41
|
+
* (projectId, userId) is what makes "mint or rotate" an upsert.
|
|
42
|
+
*
|
|
43
|
+
* NOTHING HERE IS CREATABLE THROUGH THE CRUD API
|
|
44
|
+
*
|
|
45
|
+
* The table create list is empty: feeds are minted by the calendar API as
|
|
46
|
+
* root, which is the only place the plaintext token is ever produced. The
|
|
47
|
+
* owner may read, update the settings columns, and delete their own row;
|
|
48
|
+
* every token-bearing column denies read to everybody, so a CRUD read carries
|
|
49
|
+
* settings, bookkeeping and the four-character hint - never the token.
|
|
50
|
+
*
|
|
51
|
+
* PLAN GATED LIKE THE SCHEDULES IT RENDERS
|
|
52
|
+
*
|
|
53
|
+
* @TableBillingAccessControl mirrors OnCallDutyPolicySchedule (Growth for
|
|
54
|
+
* every operation). The public render path enforces the plan again per
|
|
55
|
+
* project, so a below-plan project serves an empty calendar rather than a
|
|
56
|
+
* stale one.
|
|
57
|
+
*/
|
|
58
|
+
let UserOnCallCalendarFeed = class UserOnCallCalendarFeed extends BaseModel {
|
|
59
|
+
constructor() {
|
|
60
|
+
super(...arguments);
|
|
61
|
+
this.project = undefined;
|
|
62
|
+
this.projectId = undefined;
|
|
63
|
+
this.user = undefined;
|
|
64
|
+
this.userId = undefined;
|
|
65
|
+
/*
|
|
66
|
+
* Unkeyed SHA-256 hex of the token. The public route looks the feed up by
|
|
67
|
+
* this column and NOTHING else; the plaintext never touches an index. Read
|
|
68
|
+
* is denied to everyone including the owner - there is no product question
|
|
69
|
+
* a digest answers.
|
|
70
|
+
*
|
|
71
|
+
* `computed` marks it server-generated so the column-permission check skips
|
|
72
|
+
* it on create (the service mints it in onBeforeCreate); the table create
|
|
73
|
+
* list is empty anyway, so only root ever reaches that path.
|
|
74
|
+
*/
|
|
75
|
+
this.tokenHash = undefined;
|
|
76
|
+
/*
|
|
77
|
+
* Encrypted copy of the plaintext token, so the settings page can show the
|
|
78
|
+
* subscription URL again. Decrypted ONLY by the session route `/current`
|
|
79
|
+
* (inside try/catch, verified against tokenHash); the public route never
|
|
80
|
+
* selects it, so a rotated ENCRYPTION_SECRET degrades to "regenerate your
|
|
81
|
+
* link" rather than to a 500 on every calendar poll.
|
|
82
|
+
*/
|
|
83
|
+
this.token = undefined;
|
|
84
|
+
/*
|
|
85
|
+
* The hash the token had before the last rotation. For PREVIOUS_TOKEN_GRACE
|
|
86
|
+
* days a fetch by this hash gets an EMPTY calendar (200) rather than a 404,
|
|
87
|
+
* so every still-subscribed client clears its copy instead of showing
|
|
88
|
+
* "could not fetch". Indexed because the public route falls back to it.
|
|
89
|
+
*/
|
|
90
|
+
this.previousTokenHash = undefined;
|
|
91
|
+
this.previousTokenExpiresAt = undefined;
|
|
92
|
+
/*
|
|
93
|
+
* Last four characters of the token - "link ending in …k3Qx" - so the
|
|
94
|
+
* owner can tell which link a calendar app holds. Far too short to be
|
|
95
|
+
* anything else.
|
|
96
|
+
*/
|
|
97
|
+
this.tokenHint = undefined;
|
|
98
|
+
/*
|
|
99
|
+
* Disabled feeds serve an empty calendar (200), never a 404, so subscribed
|
|
100
|
+
* clients clear themselves instead of erroring.
|
|
101
|
+
*/
|
|
102
|
+
this.isEnabled = undefined;
|
|
103
|
+
/*
|
|
104
|
+
* Whether shifts the user covers through an override on somebody else's
|
|
105
|
+
* schedule (routeAlertsToUserId = me) appear in the feed.
|
|
106
|
+
*/
|
|
107
|
+
this.includeCoveringShifts = undefined;
|
|
108
|
+
/*
|
|
109
|
+
* Window bounds live in Common/Types/OnCallDutyPolicy/CalendarFeedWindow
|
|
110
|
+
* and are clamped by the service's onBeforeUpdate.
|
|
111
|
+
*/
|
|
112
|
+
this.pastDays = undefined;
|
|
113
|
+
this.futureDays = undefined;
|
|
114
|
+
this.rotatedAt = undefined;
|
|
115
|
+
/*
|
|
116
|
+
* Fetch bookkeeping. Root-written by the public route, throttled to one
|
|
117
|
+
* write per five minutes per row; HEAD requests are not counted. Approximate
|
|
118
|
+
* by design - the point is "has anything ever fetched this link?".
|
|
119
|
+
*/
|
|
120
|
+
this.lastFetchedAt = undefined;
|
|
121
|
+
this.lastFetchedClient = undefined;
|
|
122
|
+
this.fetchCount = undefined;
|
|
123
|
+
this.lastRenderTruncated = undefined;
|
|
124
|
+
this.deletedByUser = undefined;
|
|
125
|
+
this.deletedByUserId = undefined;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
__decorate([
|
|
129
|
+
ColumnAccessControl({
|
|
130
|
+
create: [],
|
|
131
|
+
read: [Permission.CurrentUser],
|
|
132
|
+
update: [],
|
|
133
|
+
}),
|
|
134
|
+
TableColumn({
|
|
135
|
+
manyToOneRelationColumn: "projectId",
|
|
136
|
+
type: TableColumnType.Entity,
|
|
137
|
+
modelType: Project,
|
|
138
|
+
title: "Project",
|
|
139
|
+
description: "Relation to Project Resource in which this object belongs",
|
|
140
|
+
}),
|
|
141
|
+
ManyToOne(() => {
|
|
142
|
+
return Project;
|
|
143
|
+
}, {
|
|
144
|
+
eager: false,
|
|
145
|
+
nullable: true,
|
|
146
|
+
onDelete: "CASCADE",
|
|
147
|
+
orphanedRowAction: "nullify",
|
|
148
|
+
}),
|
|
149
|
+
JoinColumn({ name: "projectId" }),
|
|
150
|
+
__metadata("design:type", Project)
|
|
151
|
+
], UserOnCallCalendarFeed.prototype, "project", void 0);
|
|
152
|
+
__decorate([
|
|
153
|
+
ColumnAccessControl({
|
|
154
|
+
create: [],
|
|
155
|
+
read: [Permission.CurrentUser],
|
|
156
|
+
update: [],
|
|
157
|
+
}),
|
|
158
|
+
Index(),
|
|
159
|
+
TableColumn({
|
|
160
|
+
type: TableColumnType.ObjectID,
|
|
161
|
+
required: true,
|
|
162
|
+
canReadOnRelationQuery: true,
|
|
163
|
+
title: "Project ID",
|
|
164
|
+
description: "ID of your OneUptime Project in which this object belongs",
|
|
165
|
+
example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
|
|
166
|
+
}),
|
|
167
|
+
Column({
|
|
168
|
+
type: ColumnType.ObjectID,
|
|
169
|
+
nullable: false,
|
|
170
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
171
|
+
}),
|
|
172
|
+
__metadata("design:type", ObjectID)
|
|
173
|
+
], UserOnCallCalendarFeed.prototype, "projectId", void 0);
|
|
174
|
+
__decorate([
|
|
175
|
+
ColumnAccessControl({
|
|
176
|
+
create: [],
|
|
177
|
+
read: [Permission.CurrentUser],
|
|
178
|
+
update: [],
|
|
179
|
+
}),
|
|
180
|
+
TableColumn({
|
|
181
|
+
manyToOneRelationColumn: "userId",
|
|
182
|
+
type: TableColumnType.Entity,
|
|
183
|
+
modelType: User,
|
|
184
|
+
title: "User",
|
|
185
|
+
description: "Relation to the User whose shifts this feed renders",
|
|
186
|
+
}),
|
|
187
|
+
ManyToOne(() => {
|
|
188
|
+
return User;
|
|
189
|
+
}, {
|
|
190
|
+
eager: false,
|
|
191
|
+
nullable: true,
|
|
192
|
+
onDelete: "CASCADE",
|
|
193
|
+
orphanedRowAction: "nullify",
|
|
194
|
+
}),
|
|
195
|
+
JoinColumn({ name: "userId" }),
|
|
196
|
+
__metadata("design:type", User)
|
|
197
|
+
], UserOnCallCalendarFeed.prototype, "user", void 0);
|
|
198
|
+
__decorate([
|
|
199
|
+
ColumnAccessControl({
|
|
200
|
+
create: [],
|
|
201
|
+
read: [Permission.CurrentUser],
|
|
202
|
+
update: [],
|
|
203
|
+
}),
|
|
204
|
+
Index(),
|
|
205
|
+
TableColumn({
|
|
206
|
+
type: TableColumnType.ObjectID,
|
|
207
|
+
required: true,
|
|
208
|
+
canReadOnRelationQuery: true,
|
|
209
|
+
title: "User ID",
|
|
210
|
+
description: "ID of the User whose shifts this feed renders",
|
|
211
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
212
|
+
}),
|
|
213
|
+
Column({
|
|
214
|
+
type: ColumnType.ObjectID,
|
|
215
|
+
nullable: false,
|
|
216
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
217
|
+
}),
|
|
218
|
+
__metadata("design:type", ObjectID)
|
|
219
|
+
], UserOnCallCalendarFeed.prototype, "userId", void 0);
|
|
220
|
+
__decorate([
|
|
221
|
+
ColumnAccessControl({
|
|
222
|
+
create: [],
|
|
223
|
+
read: [],
|
|
224
|
+
update: [],
|
|
225
|
+
}),
|
|
226
|
+
TableColumn({
|
|
227
|
+
type: TableColumnType.ShortText,
|
|
228
|
+
required: true,
|
|
229
|
+
computed: true,
|
|
230
|
+
canReadOnRelationQuery: false,
|
|
231
|
+
title: "Token Hash",
|
|
232
|
+
description: "SHA-256 digest of the feed token; the lookup key",
|
|
233
|
+
hideColumnInDocumentation: true,
|
|
234
|
+
}),
|
|
235
|
+
Column({
|
|
236
|
+
type: ColumnType.ShortText,
|
|
237
|
+
length: ColumnLength.ShortText,
|
|
238
|
+
nullable: false,
|
|
239
|
+
unique: true,
|
|
240
|
+
}),
|
|
241
|
+
__metadata("design:type", String)
|
|
242
|
+
], UserOnCallCalendarFeed.prototype, "tokenHash", void 0);
|
|
243
|
+
__decorate([
|
|
244
|
+
ColumnAccessControl({
|
|
245
|
+
create: [],
|
|
246
|
+
read: [],
|
|
247
|
+
update: [],
|
|
248
|
+
}),
|
|
249
|
+
TableColumn({
|
|
250
|
+
type: TableColumnType.VeryLongText,
|
|
251
|
+
computed: true,
|
|
252
|
+
encrypted: true,
|
|
253
|
+
canReadOnRelationQuery: false,
|
|
254
|
+
title: "Token",
|
|
255
|
+
description: "Encrypted feed token, re-displayed only to its owner",
|
|
256
|
+
hideColumnInDocumentation: true,
|
|
257
|
+
}),
|
|
258
|
+
Column({
|
|
259
|
+
type: ColumnType.VeryLongText,
|
|
260
|
+
nullable: true,
|
|
261
|
+
}),
|
|
262
|
+
__metadata("design:type", String)
|
|
263
|
+
], UserOnCallCalendarFeed.prototype, "token", void 0);
|
|
264
|
+
__decorate([
|
|
265
|
+
ColumnAccessControl({
|
|
266
|
+
create: [],
|
|
267
|
+
read: [],
|
|
268
|
+
update: [],
|
|
269
|
+
}),
|
|
270
|
+
Index(),
|
|
271
|
+
TableColumn({
|
|
272
|
+
type: TableColumnType.ShortText,
|
|
273
|
+
computed: true,
|
|
274
|
+
canReadOnRelationQuery: false,
|
|
275
|
+
title: "Previous Token Hash",
|
|
276
|
+
description: "Digest of the rotated-out token, honoured with an empty feed",
|
|
277
|
+
hideColumnInDocumentation: true,
|
|
278
|
+
}),
|
|
279
|
+
Column({
|
|
280
|
+
type: ColumnType.ShortText,
|
|
281
|
+
length: ColumnLength.ShortText,
|
|
282
|
+
nullable: true,
|
|
283
|
+
}),
|
|
284
|
+
__metadata("design:type", String)
|
|
285
|
+
], UserOnCallCalendarFeed.prototype, "previousTokenHash", void 0);
|
|
286
|
+
__decorate([
|
|
287
|
+
ColumnAccessControl({
|
|
288
|
+
create: [],
|
|
289
|
+
read: [],
|
|
290
|
+
update: [],
|
|
291
|
+
}),
|
|
292
|
+
TableColumn({
|
|
293
|
+
type: TableColumnType.Date,
|
|
294
|
+
computed: true,
|
|
295
|
+
canReadOnRelationQuery: false,
|
|
296
|
+
title: "Previous Token Expires At",
|
|
297
|
+
description: "When the rotated-out token stops being honoured",
|
|
298
|
+
hideColumnInDocumentation: true,
|
|
299
|
+
}),
|
|
300
|
+
Column({
|
|
301
|
+
type: ColumnType.Date,
|
|
302
|
+
nullable: true,
|
|
303
|
+
}),
|
|
304
|
+
__metadata("design:type", Date)
|
|
305
|
+
], UserOnCallCalendarFeed.prototype, "previousTokenExpiresAt", void 0);
|
|
306
|
+
__decorate([
|
|
307
|
+
ColumnAccessControl({
|
|
308
|
+
create: [],
|
|
309
|
+
read: [Permission.CurrentUser],
|
|
310
|
+
update: [],
|
|
311
|
+
}),
|
|
312
|
+
TableColumn({
|
|
313
|
+
type: TableColumnType.ShortText,
|
|
314
|
+
computed: true,
|
|
315
|
+
canReadOnRelationQuery: false,
|
|
316
|
+
title: "Token Hint",
|
|
317
|
+
description: "Last four characters of the feed token, for display",
|
|
318
|
+
example: "k3Qx",
|
|
319
|
+
}),
|
|
320
|
+
Column({
|
|
321
|
+
type: ColumnType.ShortText,
|
|
322
|
+
length: ColumnLength.ShortText,
|
|
323
|
+
nullable: true,
|
|
324
|
+
}),
|
|
325
|
+
__metadata("design:type", String)
|
|
326
|
+
], UserOnCallCalendarFeed.prototype, "tokenHint", void 0);
|
|
327
|
+
__decorate([
|
|
328
|
+
ColumnAccessControl({
|
|
329
|
+
create: [],
|
|
330
|
+
read: [Permission.CurrentUser],
|
|
331
|
+
update: [Permission.CurrentUser],
|
|
332
|
+
}),
|
|
333
|
+
TableColumn({
|
|
334
|
+
isDefaultValueColumn: true,
|
|
335
|
+
type: TableColumnType.Boolean,
|
|
336
|
+
defaultValue: true,
|
|
337
|
+
title: "Enabled",
|
|
338
|
+
description: "When off, the link keeps working but serves an empty calendar so subscribed apps clear their copy.",
|
|
339
|
+
example: true,
|
|
340
|
+
}),
|
|
341
|
+
Column({
|
|
342
|
+
type: ColumnType.Boolean,
|
|
343
|
+
default: true,
|
|
344
|
+
nullable: false,
|
|
345
|
+
}),
|
|
346
|
+
__metadata("design:type", Boolean)
|
|
347
|
+
], UserOnCallCalendarFeed.prototype, "isEnabled", void 0);
|
|
348
|
+
__decorate([
|
|
349
|
+
ColumnAccessControl({
|
|
350
|
+
create: [],
|
|
351
|
+
read: [Permission.CurrentUser],
|
|
352
|
+
update: [Permission.CurrentUser],
|
|
353
|
+
}),
|
|
354
|
+
TableColumn({
|
|
355
|
+
isDefaultValueColumn: true,
|
|
356
|
+
type: TableColumnType.Boolean,
|
|
357
|
+
defaultValue: true,
|
|
358
|
+
title: "Include Covering Shifts",
|
|
359
|
+
description: "Include shifts you cover for somebody else through an override.",
|
|
360
|
+
example: true,
|
|
361
|
+
}),
|
|
362
|
+
Column({
|
|
363
|
+
type: ColumnType.Boolean,
|
|
364
|
+
default: true,
|
|
365
|
+
nullable: false,
|
|
366
|
+
}),
|
|
367
|
+
__metadata("design:type", Boolean)
|
|
368
|
+
], UserOnCallCalendarFeed.prototype, "includeCoveringShifts", void 0);
|
|
369
|
+
__decorate([
|
|
370
|
+
ColumnAccessControl({
|
|
371
|
+
create: [],
|
|
372
|
+
read: [Permission.CurrentUser],
|
|
373
|
+
update: [Permission.CurrentUser],
|
|
374
|
+
}),
|
|
375
|
+
TableColumn({
|
|
376
|
+
isDefaultValueColumn: true,
|
|
377
|
+
type: TableColumnType.Number,
|
|
378
|
+
defaultValue: 2,
|
|
379
|
+
title: "Past Days",
|
|
380
|
+
description: "How many days of past shifts the feed includes. Past shifts reflect the current rotation, not who was actually paged.",
|
|
381
|
+
example: 2,
|
|
382
|
+
}),
|
|
383
|
+
Column({
|
|
384
|
+
type: ColumnType.Number,
|
|
385
|
+
default: 2,
|
|
386
|
+
nullable: false,
|
|
387
|
+
}),
|
|
388
|
+
__metadata("design:type", Number)
|
|
389
|
+
], UserOnCallCalendarFeed.prototype, "pastDays", void 0);
|
|
390
|
+
__decorate([
|
|
391
|
+
ColumnAccessControl({
|
|
392
|
+
create: [],
|
|
393
|
+
read: [Permission.CurrentUser],
|
|
394
|
+
update: [Permission.CurrentUser],
|
|
395
|
+
}),
|
|
396
|
+
TableColumn({
|
|
397
|
+
isDefaultValueColumn: true,
|
|
398
|
+
type: TableColumnType.Number,
|
|
399
|
+
defaultValue: 90,
|
|
400
|
+
title: "Future Days",
|
|
401
|
+
description: "How many days of upcoming shifts the feed includes.",
|
|
402
|
+
example: 90,
|
|
403
|
+
}),
|
|
404
|
+
Column({
|
|
405
|
+
type: ColumnType.Number,
|
|
406
|
+
default: 90,
|
|
407
|
+
nullable: false,
|
|
408
|
+
}),
|
|
409
|
+
__metadata("design:type", Number)
|
|
410
|
+
], UserOnCallCalendarFeed.prototype, "futureDays", void 0);
|
|
411
|
+
__decorate([
|
|
412
|
+
ColumnAccessControl({
|
|
413
|
+
create: [],
|
|
414
|
+
read: [Permission.CurrentUser],
|
|
415
|
+
update: [],
|
|
416
|
+
}),
|
|
417
|
+
TableColumn({
|
|
418
|
+
type: TableColumnType.Date,
|
|
419
|
+
computed: true,
|
|
420
|
+
title: "Rotated At",
|
|
421
|
+
description: "When the current token was minted",
|
|
422
|
+
}),
|
|
423
|
+
Column({
|
|
424
|
+
type: ColumnType.Date,
|
|
425
|
+
nullable: true,
|
|
426
|
+
}),
|
|
427
|
+
__metadata("design:type", Date)
|
|
428
|
+
], UserOnCallCalendarFeed.prototype, "rotatedAt", void 0);
|
|
429
|
+
__decorate([
|
|
430
|
+
ColumnAccessControl({
|
|
431
|
+
create: [],
|
|
432
|
+
read: [Permission.CurrentUser],
|
|
433
|
+
update: [],
|
|
434
|
+
}),
|
|
435
|
+
TableColumn({
|
|
436
|
+
type: TableColumnType.Date,
|
|
437
|
+
computed: true,
|
|
438
|
+
title: "Last Fetched At",
|
|
439
|
+
description: "When a calendar client last fetched this feed",
|
|
440
|
+
}),
|
|
441
|
+
Column({
|
|
442
|
+
type: ColumnType.Date,
|
|
443
|
+
nullable: true,
|
|
444
|
+
}),
|
|
445
|
+
__metadata("design:type", Date)
|
|
446
|
+
], UserOnCallCalendarFeed.prototype, "lastFetchedAt", void 0);
|
|
447
|
+
__decorate([
|
|
448
|
+
ColumnAccessControl({
|
|
449
|
+
create: [],
|
|
450
|
+
read: [Permission.CurrentUser],
|
|
451
|
+
update: [],
|
|
452
|
+
}),
|
|
453
|
+
TableColumn({
|
|
454
|
+
type: TableColumnType.ShortText,
|
|
455
|
+
computed: true,
|
|
456
|
+
title: "Last Fetched Client",
|
|
457
|
+
description: "Coarse family of the calendar client that last fetched this feed (for example Google Calendar)",
|
|
458
|
+
example: "Google Calendar",
|
|
459
|
+
}),
|
|
460
|
+
Column({
|
|
461
|
+
type: ColumnType.ShortText,
|
|
462
|
+
length: ColumnLength.ShortText,
|
|
463
|
+
nullable: true,
|
|
464
|
+
}),
|
|
465
|
+
__metadata("design:type", String)
|
|
466
|
+
], UserOnCallCalendarFeed.prototype, "lastFetchedClient", void 0);
|
|
467
|
+
__decorate([
|
|
468
|
+
ColumnAccessControl({
|
|
469
|
+
create: [],
|
|
470
|
+
read: [Permission.CurrentUser],
|
|
471
|
+
update: [],
|
|
472
|
+
}),
|
|
473
|
+
TableColumn({
|
|
474
|
+
isDefaultValueColumn: true,
|
|
475
|
+
type: TableColumnType.Number,
|
|
476
|
+
defaultValue: 0,
|
|
477
|
+
computed: true,
|
|
478
|
+
title: "Fetch Count",
|
|
479
|
+
description: "Approximate number of times this feed has been fetched",
|
|
480
|
+
example: 143,
|
|
481
|
+
}),
|
|
482
|
+
Column({
|
|
483
|
+
type: ColumnType.Number,
|
|
484
|
+
default: 0,
|
|
485
|
+
nullable: false,
|
|
486
|
+
}),
|
|
487
|
+
__metadata("design:type", Number)
|
|
488
|
+
], UserOnCallCalendarFeed.prototype, "fetchCount", void 0);
|
|
489
|
+
__decorate([
|
|
490
|
+
ColumnAccessControl({
|
|
491
|
+
create: [],
|
|
492
|
+
read: [Permission.CurrentUser],
|
|
493
|
+
update: [],
|
|
494
|
+
}),
|
|
495
|
+
TableColumn({
|
|
496
|
+
isDefaultValueColumn: true,
|
|
497
|
+
type: TableColumnType.Boolean,
|
|
498
|
+
defaultValue: false,
|
|
499
|
+
computed: true,
|
|
500
|
+
title: "Last Render Truncated",
|
|
501
|
+
description: "Whether the last render had to shrink the window or stop early to stay within limits",
|
|
502
|
+
example: false,
|
|
503
|
+
}),
|
|
504
|
+
Column({
|
|
505
|
+
type: ColumnType.Boolean,
|
|
506
|
+
default: false,
|
|
507
|
+
nullable: false,
|
|
508
|
+
}),
|
|
509
|
+
__metadata("design:type", Boolean)
|
|
510
|
+
], UserOnCallCalendarFeed.prototype, "lastRenderTruncated", void 0);
|
|
511
|
+
__decorate([
|
|
512
|
+
ColumnAccessControl({
|
|
513
|
+
create: [],
|
|
514
|
+
read: [],
|
|
515
|
+
update: [],
|
|
516
|
+
}),
|
|
517
|
+
TableColumn({
|
|
518
|
+
manyToOneRelationColumn: "deletedByUserId",
|
|
519
|
+
type: TableColumnType.Entity,
|
|
520
|
+
title: "Deleted by User",
|
|
521
|
+
modelType: User,
|
|
522
|
+
description: "Relation to User who deleted this object (if this object was deleted by a User)",
|
|
523
|
+
}),
|
|
524
|
+
ManyToOne(() => {
|
|
525
|
+
return User;
|
|
526
|
+
}, {
|
|
527
|
+
cascade: false,
|
|
528
|
+
eager: false,
|
|
529
|
+
nullable: true,
|
|
530
|
+
onDelete: "SET NULL",
|
|
531
|
+
orphanedRowAction: "nullify",
|
|
532
|
+
}),
|
|
533
|
+
JoinColumn({ name: "deletedByUserId" }),
|
|
534
|
+
__metadata("design:type", User)
|
|
535
|
+
], UserOnCallCalendarFeed.prototype, "deletedByUser", void 0);
|
|
536
|
+
__decorate([
|
|
537
|
+
ColumnAccessControl({
|
|
538
|
+
create: [],
|
|
539
|
+
read: [],
|
|
540
|
+
update: [],
|
|
541
|
+
}),
|
|
542
|
+
TableColumn({
|
|
543
|
+
type: TableColumnType.ObjectID,
|
|
544
|
+
title: "Deleted by User ID",
|
|
545
|
+
description: "User ID who deleted this object (if this object was deleted by a User)",
|
|
546
|
+
example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
|
|
547
|
+
}),
|
|
548
|
+
Column({
|
|
549
|
+
type: ColumnType.ObjectID,
|
|
550
|
+
nullable: true,
|
|
551
|
+
transformer: ObjectID.getDatabaseTransformer(),
|
|
552
|
+
}),
|
|
553
|
+
__metadata("design:type", ObjectID)
|
|
554
|
+
], UserOnCallCalendarFeed.prototype, "deletedByUserId", void 0);
|
|
555
|
+
UserOnCallCalendarFeed = __decorate([
|
|
556
|
+
TenantColumn("projectId"),
|
|
557
|
+
AllowAccessIfSubscriptionIsUnpaid(),
|
|
558
|
+
TableBillingAccessControl({
|
|
559
|
+
create: PlanType.Growth,
|
|
560
|
+
read: PlanType.Growth,
|
|
561
|
+
update: PlanType.Growth,
|
|
562
|
+
delete: PlanType.Growth,
|
|
563
|
+
}),
|
|
564
|
+
TableAccessControl({
|
|
565
|
+
create: [],
|
|
566
|
+
read: [Permission.CurrentUser],
|
|
567
|
+
delete: [Permission.CurrentUser],
|
|
568
|
+
update: [Permission.CurrentUser],
|
|
569
|
+
}),
|
|
570
|
+
CrudApiEndpoint(new Route("/user-on-call-calendar-feed")),
|
|
571
|
+
Entity({
|
|
572
|
+
name: "UserOnCallCalendarFeed",
|
|
573
|
+
}),
|
|
574
|
+
TableMetadata({
|
|
575
|
+
tableName: "UserOnCallCalendarFeed",
|
|
576
|
+
singularName: "On-Call Calendar Feed",
|
|
577
|
+
pluralName: "On-Call Calendar Feeds",
|
|
578
|
+
icon: IconProp.Calendar,
|
|
579
|
+
tableDescription: "A user's personal calendar-subscription link for their on-call shifts in a project, and its settings.",
|
|
580
|
+
}),
|
|
581
|
+
CurrentUserCanAccessRecordBy("userId"),
|
|
582
|
+
Index(["projectId", "userId"], { unique: true })
|
|
583
|
+
], UserOnCallCalendarFeed);
|
|
584
|
+
export default UserOnCallCalendarFeed;
|
|
585
|
+
//# sourceMappingURL=UserOnCallCalendarFeed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserOnCallCalendarFeed.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/UserOnCallCalendarFeed.ts"],"names":[],"mappings":"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"}
|