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