@oneuptime/common 13.0.7 → 14.0.0
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/AnalyticsModels/AuditLog.ts +23 -15
- package/Models/DatabaseModels/GlobalConfig.ts +24 -0
- package/Models/DatabaseModels/Monitor.ts +3 -2
- package/Models/DatabaseModels/MonitorTemplate.ts +2 -1
- package/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.ts +1 -1
- package/Models/DatabaseModels/ProjectOnCallCalendarFeed.ts +1 -1
- package/Models/DatabaseModels/UserOnCallCalendarFeed.ts +1 -1
- package/Scripts/generate-service-worker.js +65 -4
- package/Server/API/AIBillingAPI.ts +1 -0
- package/Server/API/AIInsightAPI.ts +1 -4
- package/Server/API/AIInvestigationAPI.ts +1 -4
- package/Server/API/AIReadinessAPI.ts +4 -5
- package/Server/API/AlertAPI.ts +1 -0
- package/Server/API/AutoRemediationAPI.ts +1 -4
- package/Server/API/BaseAPI.ts +34 -0
- package/Server/API/BaseAnalyticsAPI.ts +80 -9
- package/Server/API/BillingAPI.ts +2 -0
- package/Server/API/BillingInvoiceAPI.ts +1 -0
- package/Server/API/BillingPaymentMethodAPI.ts +2 -0
- package/Server/API/CodeFixRunAPI.ts +1 -3
- package/Server/API/CommonAPI.ts +68 -4
- package/Server/API/DashboardAPI.ts +12 -12
- package/Server/API/GlobalConfigAPI.ts +243 -460
- package/Server/API/IncidentAPI.ts +2 -0
- package/Server/API/IncidentEpisodeAPI.ts +1 -0
- package/Server/API/NotificationAPI.ts +1 -0
- package/Server/API/OnCallCalendarAPI.ts +4 -5
- package/Server/API/OnCallDutyPolicyAPI.ts +7 -0
- package/Server/API/OnCallReadinessAPI.ts +4 -1
- package/Server/API/OnCallScheduleTimelineAPI.ts +731 -0
- package/Server/API/ProjectAPI.ts +1 -0
- package/Server/API/ProjectOIDC.ts +25 -16
- package/Server/API/ProjectSSO.ts +24 -16
- package/Server/API/ScheduledMaintenanceAPI.ts +1 -0
- package/Server/API/StatusPageAPI.ts +261 -74
- package/Server/API/TeamMemberAPI.ts +13 -1
- package/Server/API/UserCallAPI.ts +2 -0
- package/Server/API/UserEmailAPI.ts +2 -0
- package/Server/API/UserIncomingCallNumberAPI.ts +2 -0
- package/Server/API/UserMicrosoftTeamsAPI.ts +1 -0
- package/Server/API/UserSlackAPI.ts +1 -0
- package/Server/API/UserSmsAPI.ts +2 -0
- package/Server/API/UserTotpAuthAPI.ts +1 -0
- package/Server/API/UserWebAuthnAPI.ts +2 -0
- package/Server/API/UserWebhookAPI.ts +1 -0
- package/Server/API/UserWhatsAppAPI.ts +2 -0
- package/Server/Enterprise/EnterpriseEdition.ts +649 -0
- package/Server/Enterprise/EnterpriseFeature.ts +48 -0
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +192 -0
- package/Server/Enterprise/EnterpriseServerModule.ts +233 -0
- package/Server/EnvironmentConfig.ts +147 -2
- package/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.ts +25 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/MasterAdminAuthorization.ts +13 -2
- package/Server/Middleware/UserAuthorization.ts +117 -21
- package/Server/Services/ApiKeyPermissionService.ts +101 -4
- package/Server/Services/AuditLogService.ts +84 -1079
- package/Server/Services/DatabaseService.ts +245 -0
- package/Server/Services/DetectionRuleService.ts +5 -4
- package/Server/Services/EnterpriseLicenseService.ts +38 -0
- package/Server/Services/GlobalConfigService.ts +80 -1
- package/Server/Services/MonitorProbeService.ts +116 -20
- package/Server/Services/MonitorService.ts +56 -4
- package/Server/Services/MonitorStatusTimelineService.ts +284 -0
- package/Server/Services/MonitorTemplateService.ts +26 -0
- package/Server/Services/OnCallDutyPolicyChildService.ts +261 -0
- package/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.ts +2 -2
- package/Server/Services/OnCallDutyPolicyEscalationRuleUserService.ts +2 -2
- package/Server/Services/PayAsYouGoBillingService.ts +23 -28
- package/Server/Services/ProjectService.ts +302 -0
- package/Server/Services/RumSessionPinService.ts +293 -22
- package/Server/Services/StatusPagePrivateUserService.ts +7 -3
- package/Server/Services/StatusPageService.ts +78 -1
- package/Server/Services/TeamMemberService.ts +11 -0
- package/Server/Services/TeamPermissionService.ts +120 -26
- package/Server/Services/TeamService.ts +10 -0
- package/Server/Services/ThreatIntelFeedService.ts +6 -3
- package/Server/Services/UserService.ts +10 -17
- package/Server/Types/Database/Permissions/BasePermission.ts +9 -7
- package/Server/Types/Database/Permissions/CreatePermission.ts +15 -0
- package/Server/Types/Database/Permissions/EditionPermission.ts +208 -18
- package/Server/Types/Database/Permissions/Index.ts +75 -11
- package/Server/Types/Database/Permissions/TablePermission.ts +34 -31
- package/Server/Types/Database/Permissions/UpdatePermission.ts +29 -0
- package/Server/Types/Markdown.ts +41 -0
- package/Server/Utils/AI/AIChatPrivacyFilter.ts +8 -0
- package/Server/Utils/AI/AIRunPrivacyFilter.ts +8 -0
- package/Server/Utils/CommunityEditionSsoReport.ts +361 -0
- package/Server/Utils/EditionEnforcement.ts +233 -0
- package/Server/Utils/FrontendEnvironment.ts +41 -2
- package/Server/Utils/InstanceHealth/RedisHealth.ts +12 -277
- package/Server/Utils/MasterAdminPageAccess.ts +61 -0
- package/Server/Utils/Monitor/AffectedResourceList.ts +190 -0
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +10 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +3 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +543 -333
- package/Server/Utils/Monitor/MonitorIncident.ts +3 -1
- package/Server/Utils/Monitor/MonitoringIntervalValidator.ts +116 -0
- package/Server/Utils/OnCall/OnCallCalendarFeedRenderer.ts +1 -1
- package/Server/Utils/Realtime.ts +163 -45
- package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +11 -28
- package/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.ts +170 -0
- package/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.ts +1 -1
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +6 -2
- package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +10 -9
- package/Server/Utils/Workspace/Slack/Slack.ts +423 -10
- package/Tests/App/Accounts/LoginPasskey.test.tsx +18 -0
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +616 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +217 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +357 -0
- package/Tests/App/AdminDashboard/EnterpriseLicensesShell.test.tsx +214 -0
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +271 -0
- package/Tests/App/AdminDashboard/HealthShells.test.tsx +659 -0
- package/Tests/App/Dashboard/AffectedResourcesPicker.test.tsx +1059 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerEditForm.test.tsx +376 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerHiddenTypes.test.tsx +757 -0
- package/Tests/App/Dashboard/AffectedResourcesSummaryStep.test.tsx +307 -0
- package/Tests/App/Dashboard/ArgumentsFormGroupByUnlistedAttributes.test.tsx +131 -0
- package/Tests/App/Dashboard/AuditLogsAndComplianceShells.test.tsx +572 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +1 -1
- package/Tests/App/Dashboard/DashboardMonitorLabelVariable.test.tsx +9 -1
- package/Tests/App/Dashboard/DashboardVariableAllContract.test.tsx +24 -0
- package/Tests/App/Dashboard/DashboardVariableSelector.test.tsx +162 -8
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +547 -0
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +667 -0
- package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +105 -6
- package/Tests/App/Dashboard/EntityFilterDropdownUnlistedSelection.test.tsx +434 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +276 -1
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +319 -0
- package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +9 -1
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +185 -0
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +58 -42
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +42 -5
- package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +34 -23
- package/Tests/App/Dashboard/ScheduleTimeline.test.tsx +1580 -0
- package/Tests/App/Dashboard/ScheduleTimelineAPI.test.ts +280 -0
- package/Tests/App/Dashboard/ScheduleTimelineModel.test.ts +673 -0
- package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +133 -70
- package/Tests/App/Dashboard/SecurityEventDetailPanel.test.tsx +399 -0
- package/Tests/App/Dashboard/SecurityEventListRow.test.tsx +214 -0
- package/Tests/App/Dashboard/SecurityEventsDetectionRulesPage.test.tsx +86 -3
- package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +1 -58
- package/Tests/App/Dashboard/SecurityEventsGuideContent.test.ts +1313 -0
- package/Tests/App/Dashboard/SecurityEventsHowItWorksCard.test.tsx +536 -0
- package/Tests/App/Dashboard/SecurityEventsNavTabs.test.tsx +248 -0
- package/Tests/App/Dashboard/SecurityEventsNoResults.test.tsx +222 -0
- package/Tests/App/Dashboard/SecurityEventsThreatIntelPage.test.tsx +199 -0
- package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +1203 -0
- package/Tests/App/Dashboard/SloOverviewHero.test.tsx +171 -36
- package/Tests/App/Dashboard/SloViewSideMenu.test.tsx +215 -0
- package/Tests/App/Dashboard/SloViewSideMenuCounts.test.tsx +40 -3
- package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +11 -91
- package/Tests/App/PublicDashboard/DashboardVariableSelector.test.tsx +12 -4
- package/Tests/App/PublicDashboard/PublicDashboardWidgetListAuth.test.tsx +623 -0
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +319 -0
- package/Tests/Helpers/RefreshAwareApiScan.ts +757 -0
- package/Tests/Helpers/TenantScopedRequestScan.ts +515 -0
- package/Tests/Models/OnCallCalendarFeedModels.test.ts +23 -1
- package/Tests/Scripts/GenerateServiceWorker.test.ts +931 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +138 -5
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +187 -0
- package/Tests/Server/API/AIInvestigationAvailabilityAuthorization.test.ts +51 -3
- package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +55 -2
- package/Tests/Server/API/BaseAPICreateItemDoesNotMutateModel.test.ts +130 -0
- package/Tests/Server/API/BaseAnalyticsAPIAggregateCache.test.ts +729 -0
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +93 -7
- package/Tests/Server/API/BillingPaymentMethodAPI.test.ts +36 -3
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +1003 -24
- package/Tests/Server/API/DashboardPublicRateLimit.test.ts +6 -3
- package/Tests/Server/API/ExpiredSessionAIRoutes.test.ts +708 -0
- package/Tests/Server/API/ExpiredSessionCustomRoutes.test.ts +928 -0
- package/Tests/Server/API/ExpiredSessionMonitorTemplate.test.ts +319 -0
- package/Tests/Server/API/ExpiredSessionOnCallDutyPolicy.test.ts +336 -0
- package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +820 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +766 -381
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +115 -12
- package/Tests/Server/API/OnCallCalendarAPI.test.ts +375 -8
- package/Tests/Server/API/OnCallReadinessAPI.test.ts +196 -912
- package/Tests/Server/API/OnCallScheduleTimelineAPI.test.ts +1513 -0
- package/Tests/Server/API/OnCallSetupReminderAPI.test.ts +119 -7
- package/Tests/Server/API/ProjectScopedCustomRouteAuth.test.ts +111 -4
- package/Tests/Server/API/PublicRouteInvalidAccessToken.test.ts +615 -0
- package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +89 -2
- package/Tests/Server/API/SessionReplayAPI.test.ts +121 -0
- package/Tests/Server/API/SsoProviderListingsEdition.test.ts +432 -0
- package/Tests/Server/API/StatusPageMasterPasswordRateLimit.test.ts +4 -2
- package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +441 -0
- package/Tests/Server/API/StatusPageTestEmailReportAuth.test.ts +664 -0
- package/Tests/Server/API/TeamMemberLeaveScimLockEdition.test.ts +252 -0
- package/Tests/Server/API/TeamMemberRemoveUserFromProjectAPI.test.ts +7 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +6 -0
- package/Tests/Server/API/UserNotificationSettingAPI.test.ts +65 -4
- package/Tests/Server/API/UserProjectsAPI.test.ts +63 -3
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +48 -2
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +11 -2
- package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +46 -3
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +18 -2
- package/Tests/Server/API/ZZVerifyChatsAuth.test.ts +24 -7
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +824 -0
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +643 -0
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +294 -0
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +93 -0
- package/Tests/Server/Enterprise/EnterpriseOnlyModulesLiveInEe.test.ts +582 -0
- package/Tests/Server/Enterprise/EnterpriseServerModule.test.ts +247 -0
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +502 -0
- package/Tests/Server/Enterprise/TestBillingFlag.ts +70 -0
- package/Tests/Server/EnvironmentConfigEnterpriseEdition.test.ts +314 -0
- package/Tests/Server/Infrastructure/ContainerBootConfiguration.test.ts +289 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +5 -1
- package/Tests/Server/Middleware/ExpiredSessionUserMiddleware.test.ts +563 -0
- package/Tests/Server/Middleware/MasterAdminAuthorization.test.ts +299 -19
- package/Tests/Server/Middleware/PublicRouteUserMiddleware.test.ts +453 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +37 -2
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +516 -0
- package/Tests/Server/Services/AIChatPrivacyPin.test.ts +24 -0
- package/Tests/Server/Services/ApiKeyPermissionSecurity.test.ts +2 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +3 -3
- package/Tests/Server/Services/AuditLogService.test.ts +460 -990
- package/Tests/Server/Services/CreateAndReadResponsesKeepIds.test.ts +263 -0
- package/Tests/Server/Services/DatabaseServiceCreateSuppliedId.test.ts +147 -0
- package/Tests/Server/Services/DatabaseServiceLoginBeforeHooks.test.ts +1078 -0
- package/Tests/Server/Services/DatabaseServiceTenantRelationGuard.test.ts +259 -0
- package/Tests/Server/Services/DatabaseServiceWriteOperatorValues.test.ts +147 -0
- package/Tests/Server/Services/EnterpriseLicenseServiceKeyGeneration.test.ts +151 -0
- package/Tests/Server/Services/GlobalConfigServiceLicenseColumns.test.ts +357 -0
- package/Tests/Server/Services/MonitorDestinationInfoIPv6.test.ts +101 -0
- package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +115 -1
- package/Tests/Server/Services/MonitorProbeServiceIntervalScheduling.test.ts +333 -0
- package/Tests/Server/Services/MonitorStatusTimelineDailyAggregates.test.ts +303 -0
- package/Tests/Server/Services/OnCallChildCreateAuthorizationPostgres.test.ts +711 -0
- package/Tests/Server/Services/OnCallDutyPolicyChildService.test.ts +733 -0
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +190 -140
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +4 -9
- package/Tests/Server/Services/PermissionBlockDeletion.test.ts +780 -0
- package/Tests/Server/Services/PermissionBlockDeletionPostgres.test.ts +628 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +701 -0
- package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +31 -35
- package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +77 -1
- package/Tests/Server/Services/RumSessionPinCreatePermission.test.ts +715 -0
- package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +431 -0
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +419 -0
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +769 -0
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +94 -0
- package/Tests/Server/Services/TeamMemberMultiTenantReadPostgres.test.ts +394 -0
- package/Tests/Server/Services/TeamPrivilegeEscalation.test.ts +6 -0
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +131 -0
- package/Tests/Server/Services/UserAuthenticationService.test.ts +35 -0
- package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +13 -2
- package/Tests/Server/Services/UserServiceSeatLimit.test.ts +94 -56
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +1823 -0
- package/Tests/Server/Types/Database/Permissions/ModelPermissionAnonymousRefusal.test.ts +518 -0
- package/Tests/Server/Types/Database/Permissions/MultiTenantPermissions.test.ts +350 -0
- package/Tests/Server/Types/Database/Permissions/OnCallCalendarFeedPermissions.test.ts +282 -25
- package/Tests/Server/Types/Database/Permissions/TableLevelBlockPermission.test.ts +459 -0
- package/Tests/Server/Types/Markdown.test.ts +181 -0
- package/Tests/Server/Utils/AI/AIRunPrivacyFilter.test.ts +101 -9
- package/Tests/Server/Utils/AI/ChatAgentHelpers.test.ts +88 -4
- package/Tests/Server/Utils/AI/Toolbox/ExceptionTools.test.ts +459 -0
- package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +794 -0
- package/Tests/Server/Utils/AI/Toolbox/RecentChangesTools.test.ts +574 -0
- package/Tests/Server/Utils/AI/Toolbox/SecurityEventTools.test.ts +596 -0
- package/Tests/Server/Utils/CaptchaRequestAndLogging.test.ts +395 -0
- package/Tests/Server/Utils/CommunityEditionSsoReport.test.ts +565 -0
- package/Tests/Server/Utils/EditionEnforcement.test.ts +303 -0
- package/Tests/Server/Utils/FrontendEnvironment.test.ts +367 -0
- package/Tests/Server/Utils/InstanceHealth/RedisHealth.test.ts +38 -418
- package/Tests/Server/Utils/MasterAdminPageAccess.test.ts +251 -0
- package/Tests/Server/Utils/Monitor/AffectedResourceList.test.ts +518 -0
- package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +24 -4
- package/Tests/Server/Utils/Monitor/MonitorActionTimestamps.test.ts +616 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +934 -96
- package/Tests/Server/Utils/Monitor/MonitoringIntervalValidator.test.ts +188 -0
- package/Tests/Server/Utils/Realtime.test.ts +502 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorSeverity.test.ts +216 -0
- package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +142 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.test.ts +140 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepairClickhouseIntegration.test.ts +542 -0
- package/Tests/Server/Utils/Telemetry/ChangeEventRow.test.ts +743 -0
- package/Tests/Server/Utils/Telemetry/RuntimeMetrics.test.ts +465 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Alert.test.ts +202 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/Incident.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/Messages/ScheduledMaintenance.test.ts +231 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/Alert.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/AlertEpisode.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/Incident.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/IncidentEpisode.test.ts +194 -0
- package/Tests/Server/Utils/Workspace/Slack/Messages/ScheduledMaintenance.test.ts +247 -0
- package/Tests/Server/Utils/Workspace/Slack/SlackMarkdownSectionSplit.test.ts +1209 -0
- package/Tests/Types/AI/AIInsightEvidence.test.ts +206 -0
- package/Tests/Types/API/HostnameFromAuthority.test.ts +20 -10
- package/Tests/Types/API/HostnameIPv6.test.ts +149 -0
- package/Tests/Types/BaseDatabase/DatabaseCommonInteractionPropsUtilAnonymous.test.ts +144 -0
- package/Tests/Types/Call/CallProvider.test.ts +528 -0
- package/Tests/Types/Database/CanonicalModelInstance.test.ts +190 -0
- package/Tests/Types/Kubernetes/KubernetesCostIngest.test.ts +236 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleTimeline.test.ts +736 -0
- package/Tests/Types/OnCallDutyPolicy/ScheduleTimelineLayout.test.ts +996 -0
- package/Tests/Types/SecurityEvent/SigmaRule.test.ts +142 -0
- package/Tests/Types/Workflow/Components/JSON.test.ts +182 -0
- package/Tests/UI/Components/BasicFormDropdownNormalization.test.tsx +116 -1
- package/Tests/UI/Components/Dropdown/DropdownAsyncOptions.test.tsx +81 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +104 -0
- package/Tests/UI/Components/EditionLabelLicenseManagerWiring.test.tsx +254 -0
- package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +165 -171
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +1586 -0
- package/Tests/UI/Components/EditionLabelLicenseWritesGuard.test.tsx +157 -0
- package/Tests/UI/Components/EventAttachmentList.test.tsx +174 -0
- package/Tests/UI/Components/Forms/BasicFormBurnRateTemplateDefaults.test.tsx +395 -0
- package/Tests/UI/Components/Forms/BasicFormCollapsibleSections.test.tsx +286 -0
- package/Tests/UI/Components/Forms/FormSummary.test.tsx +128 -0
- package/Tests/UI/Components/Graphs/DayUptimeGraph.test.tsx +49 -2
- package/Tests/UI/Components/MarkdownConverters.test.ts +684 -0
- package/Tests/UI/Components/ModelListEmptyState.test.tsx +289 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableQueryChange.test.tsx +365 -0
- package/Tests/UI/Components/OpenAuthenticatedUrl.test.ts +358 -0
- package/Tests/UI/Components/SessionAwareImage.test.tsx +496 -0
- package/Tests/UI/Components/TelemetryHistogramZeroBuckets.test.tsx +190 -0
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerEmptyContent.test.tsx +131 -0
- package/Tests/UI/Components/TooltipInteractive.test.tsx +97 -0
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +1127 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +1 -1
- package/Tests/UI/Monitor/EvaluationLogListTimestamps.test.tsx +367 -0
- package/Tests/UI/Utils/API/BaseAPIRefreshSession.test.ts +1087 -0
- package/Tests/UI/Utils/API/DashboardHost.ts +12 -0
- package/Tests/UI/Utils/API/FakeAxiosServer.ts +183 -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/Cookie.test.ts +440 -0
- package/Tests/UI/Utils/ModelAPIRequestClient.test.ts +278 -0
- package/Tests/UI/Utils/Navigation.test.ts +33 -0
- package/Tests/UI/Utils/PricingPlan.test.ts +295 -0
- package/Tests/UI/Utils/Realtime.test.ts +759 -0
- package/Tests/UI/Utils/Telemetry/Telemetry.test.ts +500 -0
- package/Tests/Utils/APIInstanceDispatch.test.ts +311 -0
- package/Tests/Utils/HostAddressUtil.test.ts +138 -0
- package/Tests/Utils/Monitor/MonitorDestinationUtil.test.ts +313 -0
- package/Tests/Utils/Monitor/MonitoringIntervalUtil.test.ts +304 -0
- package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizerSeverity.test.ts +565 -0
- package/Tests/Utils/StatusPage/UptimeDailyAggregateUtil.test.ts +248 -0
- package/Types/API/Hostname.ts +63 -16
- package/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.ts +40 -0
- package/Types/Database/AccessControl/ColumnAccessControl.ts +19 -7
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +19 -7
- package/Types/Database/AccessControl/OwnerOnlyColumn.ts +15 -6
- package/Types/Database/CanonicalModelInstance.ts +102 -0
- package/Types/Database/TableColumn.ts +20 -6
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +29 -0
- package/Types/IP/IPv6.ts +6 -1
- package/Types/Monitor/MonitorEvaluationSummary.ts +3 -0
- package/Types/Monitor/MonitorStep.ts +6 -1
- package/Types/Monitor/ProxmoxAlertTemplates.ts +1 -1
- package/Types/OnCallDutyPolicy/ScheduleTimeline.ts +507 -0
- package/Types/OnCallDutyPolicy/ScheduleTimelineLayout.ts +589 -0
- package/Types/Realtime/EventName.ts +11 -0
- package/Types/SecurityEvent/DetectionFindingConstants.ts +14 -0
- package/Types/SecurityEvent/OcsfSeverity.ts +31 -26
- package/Types/SecurityEvent/SigmaRule.ts +51 -0
- package/Types/SecurityEvent/ThreatIntelConstants.ts +18 -0
- package/Types/StatusPage/UptimeDailyAggregate.ts +110 -0
- package/UI/Components/AttachmentList/EventAttachmentList.tsx +30 -2
- package/UI/Components/Dashboard/DashboardVariableControl.tsx +12 -2
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/EditionLabel/EditionLabel.tsx +808 -1195
- package/UI/Components/EditionLabel/LicenseManager.ts +119 -0
- package/UI/Components/EventItem/EventItem.tsx +12 -1
- package/UI/Components/Forms/BasicForm.tsx +151 -126
- package/UI/Components/Forms/CollapsibleFormSection.tsx +63 -0
- package/UI/Components/Forms/Fields/FormField.tsx +10 -4
- package/UI/Components/Forms/FormSummary.tsx +7 -0
- package/UI/Components/Forms/Types/Field.ts +10 -0
- package/UI/Components/Graphs/DayUptimeGraph.tsx +123 -15
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +2 -1
- package/UI/Components/Markdown.tsx/SessionAwareImage.tsx +122 -0
- package/UI/Components/ModelList/ModelList.tsx +11 -1
- package/UI/Components/ModelTable/BaseModelTable.tsx +34 -5
- package/UI/Components/ModelTable/TableView.tsx +1 -1
- package/UI/Components/MonitorGraphs/Uptime.tsx +69 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +28 -12
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +8 -1
- package/UI/Components/Tooltip/Tooltip.tsx +8 -1
- package/UI/Utils/API/API.ts +173 -12
- package/UI/Utils/API/RequestOptions.ts +11 -0
- package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +31 -7
- package/UI/Utils/ModelAPI/ModelAPI.ts +30 -9
- package/UI/Utils/Navigation.ts +9 -0
- package/UI/Utils/OpenAuthenticatedUrl.ts +154 -0
- package/UI/Utils/Realtime.ts +176 -30
- package/UI/esbuild-enterprise.js +263 -0
- package/Utils/API.ts +14 -5
- package/Utils/EnterpriseLicense/EnterpriseLicenseUsage.ts +7 -2
- package/Utils/HostAddressUtil.ts +94 -0
- package/Utils/Monitor/MonitorDestinationUtil.ts +157 -0
- package/Utils/Monitor/MonitoringIntervalUtil.ts +436 -0
- package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +157 -7
- package/Utils/SecurityEvent/Sigma/SigmaRuleParser.ts +9 -17
- package/Utils/Slo/SloBurnRateTemplate.ts +2 -2
- package/Utils/StatusPage/UptimeDailyAggregateUtil.ts +192 -0
- package/build/dist/Models/AnalyticsModels/AuditLog.js +23 -15
- package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +25 -0
- package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Monitor.js +2 -2
- package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js +2 -1
- package/build/dist/Models/DatabaseModels/MonitorTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicyScheduleCalendarFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOnCallCalendarFeed.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js +1 -1
- package/build/dist/Models/DatabaseModels/UserOnCallCalendarFeed.js.map +1 -1
- package/build/dist/Server/API/AIBillingAPI.js +1 -1
- package/build/dist/Server/API/AIBillingAPI.js.map +1 -1
- package/build/dist/Server/API/AIInsightAPI.js +1 -4
- package/build/dist/Server/API/AIInsightAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +1 -4
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AIReadinessAPI.js +1 -3
- package/build/dist/Server/API/AIReadinessAPI.js.map +1 -1
- package/build/dist/Server/API/AlertAPI.js +1 -1
- package/build/dist/Server/API/AlertAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +1 -4
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +33 -0
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAnalyticsAPI.js +55 -10
- package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +2 -2
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/BillingInvoiceAPI.js +1 -1
- package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
- package/build/dist/Server/API/BillingPaymentMethodAPI.js +2 -2
- package/build/dist/Server/API/BillingPaymentMethodAPI.js.map +1 -1
- package/build/dist/Server/API/CodeFixRunAPI.js +1 -3
- package/build/dist/Server/API/CodeFixRunAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +50 -5
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +12 -12
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GlobalConfigAPI.js +158 -342
- package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +2 -2
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js +1 -1
- package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
- package/build/dist/Server/API/NotificationAPI.js +1 -1
- package/build/dist/Server/API/NotificationAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallCalendarAPI.js +1 -4
- package/build/dist/Server/API/OnCallCalendarAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallDutyPolicyAPI.js +6 -0
- package/build/dist/Server/API/OnCallDutyPolicyAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js +4 -1
- package/build/dist/Server/API/OnCallReadinessAPI.js.map +1 -1
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js +494 -0
- package/build/dist/Server/API/OnCallScheduleTimelineAPI.js.map +1 -0
- package/build/dist/Server/API/ProjectAPI.js +1 -1
- package/build/dist/Server/API/ProjectAPI.js.map +1 -1
- package/build/dist/Server/API/ProjectOIDC.js +24 -16
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +24 -16
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js +1 -1
- package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +218 -76
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TeamMemberAPI.js +11 -4
- package/build/dist/Server/API/TeamMemberAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +2 -2
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +2 -2
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +2 -2
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserMicrosoftTeamsAPI.js +1 -1
- package/build/dist/Server/API/UserMicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/UserSlackAPI.js +1 -1
- package/build/dist/Server/API/UserSlackAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +2 -2
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js +1 -1
- package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js +2 -2
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/UserWebhookAPI.js +1 -1
- package/build/dist/Server/API/UserWebhookAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +2 -2
- package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +466 -0
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +39 -0
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +70 -0
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js.map +1 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js +84 -0
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -0
- package/build/dist/Server/EnvironmentConfig.js +84 -2
- package/build/dist/Server/EnvironmentConfig.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.js +18 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793900000000-AddEnterpriseEditionFirstSeenAt.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/MasterAdminAuthorization.js +11 -2
- package/build/dist/Server/Middleware/MasterAdminAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +94 -15
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +80 -4
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/AuditLogService.js +71 -740
- package/build/dist/Server/Services/AuditLogService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +171 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DetectionRuleService.js +4 -4
- package/build/dist/Server/Services/DetectionRuleService.js.map +1 -1
- package/build/dist/Server/Services/EnterpriseLicenseService.js +34 -0
- package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalConfigService.js +63 -0
- package/build/dist/Server/Services/GlobalConfigService.js.map +1 -1
- package/build/dist/Server/Services/MonitorProbeService.js +90 -17
- package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
- package/build/dist/Server/Services/MonitorService.js +45 -4
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorStatusTimelineService.js +242 -0
- package/build/dist/Server/Services/MonitorStatusTimelineService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +16 -0
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyChildService.js +170 -0
- package/build/dist/Server/Services/OnCallDutyPolicyChildService.js.map +1 -0
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleScheduleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleTeamService.js.map +1 -1
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js +2 -2
- package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleUserService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +20 -27
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +231 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/RumSessionPinService.js +198 -16
- package/build/dist/Server/Services/RumSessionPinService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +7 -3
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +71 -0
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +10 -0
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TeamPermissionService.js +89 -27
- package/build/dist/Server/Services/TeamPermissionService.js.map +1 -1
- package/build/dist/Server/Services/TeamService.js +9 -0
- package/build/dist/Server/Services/TeamService.js.map +1 -1
- package/build/dist/Server/Services/ThreatIntelFeedService.js +5 -4
- package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -1
- package/build/dist/Server/Services/UserService.js +10 -16
- package/build/dist/Server/Services/UserService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js +9 -6
- package/build/dist/Server/Types/Database/Permissions/BasePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +10 -0
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +154 -14
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/Index.js +60 -6
- package/build/dist/Server/Types/Database/Permissions/Index.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +24 -16
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +17 -0
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +31 -0
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js +7 -0
- package/build/dist/Server/Utils/AI/AIChatPrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.js +7 -0
- package/build/dist/Server/Utils/AI/AIRunPrivacyFilter.js.map +1 -1
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +223 -0
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +1 -0
- package/build/dist/Server/Utils/EditionEnforcement.js +187 -0
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -0
- package/build/dist/Server/Utils/FrontendEnvironment.js +31 -2
- package/build/dist/Server/Utils/FrontendEnvironment.js.map +1 -1
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js +6 -193
- package/build/dist/Server/Utils/InstanceHealth/RedisHealth.js.map +1 -1
- package/build/dist/Server/Utils/MasterAdminPageAccess.js +39 -0
- package/build/dist/Server/Utils/MasterAdminPageAccess.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js +96 -0
- package/build/dist/Server/Utils/Monitor/AffectedResourceList.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +8 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +3 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +449 -261
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +3 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js +88 -0
- package/build/dist/Server/Utils/Monitor/MonitoringIntervalValidator.js.map +1 -0
- package/build/dist/Server/Utils/Realtime.js +126 -37
- package/build/dist/Server/Utils/Realtime.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +7 -25
- package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js +127 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOpsSeverityRepair.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Sigma/SigmaClickhouseCompiler.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +3 -2
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +4 -8
- package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +331 -11
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +59 -11
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js +31 -1
- package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +19 -7
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js +13 -6
- package/build/dist/Types/Database/AccessControl/OwnerOnlyColumn.js.map +1 -1
- package/build/dist/Types/Database/CanonicalModelInstance.js +88 -0
- package/build/dist/Types/Database/CanonicalModelInstance.js.map +1 -0
- package/build/dist/Types/Database/TableColumn.js +19 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +28 -0
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js.map +1 -0
- package/build/dist/Types/IP/IPv6.js +6 -1
- package/build/dist/Types/IP/IPv6.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +5 -0
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +1 -1
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimeline.js +321 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimeline.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js +372 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleTimelineLayout.js.map +1 -0
- package/build/dist/Types/Realtime/EventName.js +10 -0
- package/build/dist/Types/Realtime/EventName.js.map +1 -1
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js +11 -0
- package/build/dist/Types/SecurityEvent/DetectionFindingConstants.js.map +1 -1
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js +30 -25
- package/build/dist/Types/SecurityEvent/OcsfSeverity.js.map +1 -1
- package/build/dist/Types/SecurityEvent/SigmaRule.js +47 -0
- package/build/dist/Types/SecurityEvent/SigmaRule.js.map +1 -1
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +14 -0
- package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -1
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js +32 -0
- package/build/dist/Types/StatusPage/UptimeDailyAggregate.js.map +1 -0
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js +9 -4
- package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js.map +1 -1
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +10 -2
- package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +425 -585
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js +2 -0
- package/build/dist/UI/Components/EditionLabel/LicenseManager.js.map +1 -0
- package/build/dist/UI/Components/EventItem/EventItem.js +2 -2
- package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +70 -64
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js +27 -0
- package/build/dist/UI/Components/Forms/CollapsibleFormSection.js.map +1 -0
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -7
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/FormSummary.js +7 -0
- package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +90 -17
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +2 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js +84 -0
- package/build/dist/UI/Components/Markdown.tsx/SessionAwareImage.js.map +1 -0
- package/build/dist/UI/Components/ModelList/ModelList.js +4 -1
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +14 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/TableView.js +1 -1
- package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +42 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +2 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +8 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +2 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/API/API.js +143 -19
- package/build/dist/UI/Utils/API/API.js.map +1 -1
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +21 -7
- package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +26 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +8 -0
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/OpenAuthenticatedUrl.js +92 -0
- package/build/dist/UI/Utils/OpenAuthenticatedUrl.js.map +1 -0
- package/build/dist/UI/Utils/Realtime.js +120 -15
- package/build/dist/UI/Utils/Realtime.js.map +1 -1
- package/build/dist/Utils/API.js +13 -5
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js +6 -2
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseUsage.js.map +1 -1
- package/build/dist/Utils/HostAddressUtil.js +80 -0
- package/build/dist/Utils/HostAddressUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js +127 -0
- package/build/dist/Utils/Monitor/MonitorDestinationUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js +374 -0
- package/build/dist/Utils/Monitor/MonitoringIntervalUtil.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +123 -6
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js +4 -18
- package/build/dist/Utils/SecurityEvent/Sigma/SigmaRuleParser.js.map +1 -1
- package/build/dist/Utils/Slo/SloBurnRateTemplate.js +2 -2
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js +148 -0
- package/build/dist/Utils/StatusPage/UptimeDailyAggregateUtil.js.map +1 -0
- package/jest.config.json +3 -1
- package/package.json +1 -1
- package/test-setup.sh +103 -34
- package/tsconfig.json +13 -0
- package/Server/API/EnterpriseLicenseAPI.ts +0 -925
- package/Server/API/TeamComplianceAPI.ts +0 -158
- package/Server/Middleware/SCIMAuthorization.ts +0 -141
- package/Server/Services/TeamComplianceService.ts +0 -733
- package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +0 -186
- package/Server/Utils/InstanceHealth/PostgresHealth.ts +0 -286
- package/Tests/App/AdminDashboard/EnterpriseLicenseInstanceActivity.test.tsx +0 -451
- package/Tests/App/Dashboard/AuditLogsTable.test.tsx +0 -598
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +0 -247
- package/Tests/App/Dashboard/SecurityEventsTableColumns.test.tsx +0 -382
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +0 -1851
- package/Tests/Server/Middleware/SCIMAuthorization.test.ts +0 -525
- package/Tests/Server/Services/TeamComplianceServiceBehaviour.test.ts +0 -1845
- package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +0 -495
- package/Tests/Server/Utils/InstanceHealth/PostgresHealth.test.ts +0 -337
- package/Tests/Utils/EnterpriseLicenseSeats.test.ts +0 -576
- package/Tests/Utils/EnterpriseLicenseSync.test.ts +0 -568
- package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +0 -287
- package/Utils/EnterpriseLicense/EnterpriseLicenseSync.ts +0 -244
- package/build/dist/Server/API/EnterpriseLicenseAPI.js +0 -646
- package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +0 -1
- package/build/dist/Server/API/TeamComplianceAPI.js +0 -111
- package/build/dist/Server/API/TeamComplianceAPI.js.map +0 -1
- package/build/dist/Server/Middleware/SCIMAuthorization.js +0 -124
- package/build/dist/Server/Middleware/SCIMAuthorization.js.map +0 -1
- package/build/dist/Server/Services/TeamComplianceService.js +0 -537
- package/build/dist/Server/Services/TeamComplianceService.js.map +0 -1
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +0 -145
- package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +0 -1
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js +0 -194
- package/build/dist/Server/Utils/InstanceHealth/PostgresHealth.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +0 -168
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +0 -1
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js +0 -174
- package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSync.js.map +0 -1
|
@@ -39,10 +39,52 @@ export interface UptimeBarDaySummary {
|
|
|
39
39
|
incidents: Array<UptimeBarTooltipIncident>;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/*
|
|
43
|
+
* One day's reading, measured server-side.
|
|
44
|
+
*
|
|
45
|
+
* The bars used to be derived purely from the timeline rows the browser
|
|
46
|
+
* happened to receive, and those rows arrive under a cap that silently drops
|
|
47
|
+
* history (see MonitorStatusTimelineService.getDailyUptimeAggregate). A day
|
|
48
|
+
* whose rows were dropped is indistinguishable, client-side, from a day that
|
|
49
|
+
* was genuinely quiet - so the graph painted both as the status page's
|
|
50
|
+
* `defaultBarColor`, which is GREEN on the overwhelming majority of pages.
|
|
51
|
+
* The page then asserted uptime for periods it had no data for.
|
|
52
|
+
*
|
|
53
|
+
* A reading carries how much of the day was actually COVERED by data, which
|
|
54
|
+
* is the thing the browser cannot infer for itself.
|
|
55
|
+
*/
|
|
56
|
+
export interface DayReading {
|
|
57
|
+
dayStart: Date;
|
|
58
|
+
daySeconds: number;
|
|
59
|
+
/* Zero means nothing was ever recorded for this day. */
|
|
60
|
+
coveredSeconds: number;
|
|
61
|
+
statusDurations: Array<StatusDuration>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* A day nobody measured is not a colour the operator gets to choose.
|
|
66
|
+
*
|
|
67
|
+
* `defaultBarColor` is branding for an ordinary good day; letting it also
|
|
68
|
+
* stand for "we have no idea" is exactly the conflation that made a page with
|
|
69
|
+
* a green default claim uptime it never recorded, and a page with a grey
|
|
70
|
+
* default look unmonitored while it was passing every check. This is a fixed
|
|
71
|
+
* neutral, drawn with a hatch so it is still distinguishable in greyscale and
|
|
72
|
+
* to a colour-blind reader.
|
|
73
|
+
*/
|
|
74
|
+
export const NO_DATA_BAR_COLOR: Color = new Color("#9CA3AF");
|
|
75
|
+
|
|
42
76
|
export interface ComponentProps {
|
|
43
77
|
startDate: Date;
|
|
44
78
|
endDate: Date;
|
|
45
79
|
events: Array<Event>;
|
|
80
|
+
/*
|
|
81
|
+
* Server-measured coverage per day. When a day has a reading, it decides
|
|
82
|
+
* whether that day has data and what its durations are; the `events` array
|
|
83
|
+
* is then only used for incident overlays. When absent - the dashboard
|
|
84
|
+
* monitor page, which does not fetch the aggregate - the old event-derived
|
|
85
|
+
* behaviour applies unchanged.
|
|
86
|
+
*/
|
|
87
|
+
dayReadings?: Array<DayReading> | undefined;
|
|
46
88
|
height?: number | undefined;
|
|
47
89
|
barColorRules?: Array<BarChartRule> | undefined;
|
|
48
90
|
downtimeEventStatusIds?: Array<ObjectID> | undefined;
|
|
@@ -173,6 +215,20 @@ const DayUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
173
215
|
const startOfTheDay: Date = OneUptimeDate.getStartOfDay(todaysDay);
|
|
174
216
|
const endOfTheDay: Date = OneUptimeDate.getEndOfDay(todaysDay);
|
|
175
217
|
|
|
218
|
+
/*
|
|
219
|
+
* The server's reading for this day, when the caller supplied one. It is
|
|
220
|
+
* matched by instant rather than by index: the window's first bucket is
|
|
221
|
+
* clipped to the window start, so bucket i is not necessarily day i.
|
|
222
|
+
*/
|
|
223
|
+
const todaysReading: DayReading | undefined = (
|
|
224
|
+
props.dayReadings || []
|
|
225
|
+
).find((reading: DayReading) => {
|
|
226
|
+
return (
|
|
227
|
+
reading.dayStart.getTime() >= startOfTheDay.getTime() &&
|
|
228
|
+
reading.dayStart.getTime() <= endOfTheDay.getTime()
|
|
229
|
+
);
|
|
230
|
+
});
|
|
231
|
+
|
|
176
232
|
const todaysEvents: Array<Event> = props.events.filter((event: Event) => {
|
|
177
233
|
let doesEventBelongsToToday: boolean = false;
|
|
178
234
|
|
|
@@ -274,32 +330,75 @@ const DayUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
274
330
|
}
|
|
275
331
|
}
|
|
276
332
|
|
|
333
|
+
/*
|
|
334
|
+
* Does this day have data at all?
|
|
335
|
+
*
|
|
336
|
+
* With a server reading, coverage is the answer and it is authoritative -
|
|
337
|
+
* the browser cannot tell a quiet day from a day whose rows were dropped
|
|
338
|
+
* by the fetch cap. Without one, fall back to the old test.
|
|
339
|
+
*/
|
|
340
|
+
const hasDataForTheDay: boolean = todaysReading
|
|
341
|
+
? todaysReading.coveredSeconds > 0
|
|
342
|
+
: todaysEvents.length > 0;
|
|
343
|
+
|
|
277
344
|
// now check bar rules and finalize the color of the bar
|
|
278
345
|
|
|
279
|
-
|
|
280
|
-
|
|
346
|
+
/*
|
|
347
|
+
* The denominator is what was MEASURED, not the length of the day. A day
|
|
348
|
+
* only half covered - the day a monitor was created - reports the
|
|
349
|
+
* percentage of the half we watched rather than being marked down for the
|
|
350
|
+
* hours nobody was looking.
|
|
351
|
+
*
|
|
352
|
+
* The old expression ended in `: 100`, which said "no readings at all
|
|
353
|
+
* means a perfect day". That is the single line that let a status page
|
|
354
|
+
* assert uptime for a period it had no data for, so it is gone rather
|
|
355
|
+
* than adjusted: with no data there is no percentage.
|
|
356
|
+
*/
|
|
357
|
+
const uptimePercentForTheDay: number = !hasDataForTheDay
|
|
358
|
+
? 0
|
|
359
|
+
: totalUptimeInSeconds + totalDowntimeInSeconds > 0
|
|
281
360
|
? (totalUptimeInSeconds /
|
|
282
361
|
(totalDowntimeInSeconds + totalUptimeInSeconds)) *
|
|
283
362
|
100
|
|
284
363
|
: 100;
|
|
285
364
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
365
|
+
/*
|
|
366
|
+
* Rules are skipped entirely on a day with no data. Otherwise a page
|
|
367
|
+
* configuring ">= 99% is green" would have that rule matched by a day
|
|
368
|
+
* nobody measured, which is the very claim this change removes. No-data
|
|
369
|
+
* outranks operator rules on purpose.
|
|
370
|
+
*/
|
|
371
|
+
if (hasDataForTheDay) {
|
|
372
|
+
for (const rules of props.barColorRules || []) {
|
|
373
|
+
if (uptimePercentForTheDay >= rules.uptimePercentGreaterThanOrEqualTo) {
|
|
374
|
+
color = rules.barColor;
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
290
377
|
}
|
|
291
378
|
}
|
|
292
379
|
|
|
293
|
-
if (todaysEvents.length
|
|
380
|
+
if (todaysEvents.length >= 1) {
|
|
294
381
|
hasEvents = true;
|
|
295
382
|
}
|
|
296
383
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
384
|
+
/*
|
|
385
|
+
* THE FIX.
|
|
386
|
+
*
|
|
387
|
+
* This used to read: no events today, so paint `defaultBarColor`. That
|
|
388
|
+
* single line is how a status page claimed uptime for days it had no data
|
|
389
|
+
* for - `defaultBarColor` is green on the overwhelming majority of pages,
|
|
390
|
+
* and "no events" was true both for a quiet day and for a day whose rows
|
|
391
|
+
* the fetch cap had thrown away.
|
|
392
|
+
*
|
|
393
|
+
* Now the two are separated. A day with data but no events of its own is
|
|
394
|
+
* an ordinary good day and still gets the operator's colour. A day with
|
|
395
|
+
* no data gets the fixed no-data treatment and says so.
|
|
396
|
+
*/
|
|
397
|
+
hasEvents = hasDataForTheDay;
|
|
300
398
|
|
|
301
|
-
if (
|
|
302
|
-
|
|
399
|
+
if (!hasDataForTheDay) {
|
|
400
|
+
color = NO_DATA_BAR_COLOR;
|
|
401
|
+
} else if (todaysEvents.length === 0) {
|
|
303
402
|
color = props.defaultBarColor || Green;
|
|
304
403
|
}
|
|
305
404
|
|
|
@@ -315,9 +414,18 @@ const DayUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
315
414
|
className = "w-20 h-" + props.height;
|
|
316
415
|
}
|
|
317
416
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
417
|
+
/*
|
|
418
|
+
* Build status durations for the tooltip and the day dialog.
|
|
419
|
+
*
|
|
420
|
+
* A server reading wins: its durations are measured over the whole day
|
|
421
|
+
* server-side, while `secondsOfEvent` can only describe the rows this
|
|
422
|
+
* browser happened to receive.
|
|
423
|
+
*/
|
|
424
|
+
const statusDurations: Array<StatusDuration> = todaysReading
|
|
425
|
+
? todaysReading.statusDurations
|
|
426
|
+
: [];
|
|
427
|
+
|
|
428
|
+
for (const key in todaysReading ? {} : secondsOfEvent) {
|
|
321
429
|
statusDurations.push({
|
|
322
430
|
label: eventLabels[key] || "Unknown",
|
|
323
431
|
seconds: secondsOfEvent[key] || 0,
|
|
Binary file
|
|
@@ -79,6 +79,7 @@ SyntaxHighlighter.registerLanguage("php", php);
|
|
|
79
79
|
SyntaxHighlighter.registerLanguage("graphql", graphql);
|
|
80
80
|
SyntaxHighlighter.registerLanguage("http", http);
|
|
81
81
|
import DOMPurify from "dompurify";
|
|
82
|
+
import SessionAwareImage from "./SessionAwareImage";
|
|
82
83
|
import OneUptimeDate from "../../../Types/Date";
|
|
83
84
|
import { Theme, useTheme } from "../../Utils/Theme";
|
|
84
85
|
import {
|
|
@@ -598,7 +599,7 @@ const MarkdownViewer: FunctionComponent<ComponentProps> = (
|
|
|
598
599
|
) : null;
|
|
599
600
|
}
|
|
600
601
|
return (
|
|
601
|
-
<
|
|
602
|
+
<SessionAwareImage
|
|
602
603
|
className="max-w-full h-auto rounded-md border border-gray-200 my-3"
|
|
603
604
|
loading="lazy"
|
|
604
605
|
alt={alt}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import UserUtil from "../../Utils/User";
|
|
2
|
+
import React, {
|
|
3
|
+
FunctionComponent,
|
|
4
|
+
ReactElement,
|
|
5
|
+
SyntheticEvent,
|
|
6
|
+
useCallback,
|
|
7
|
+
useEffect,
|
|
8
|
+
useRef,
|
|
9
|
+
useState,
|
|
10
|
+
} from "react";
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* Private inline images (pasted into notes, postmortems, runbooks) are served
|
|
14
|
+
* from this route, and only to a request that carries a session.
|
|
15
|
+
*/
|
|
16
|
+
export const PRIVATE_IMAGE_ROUTE_SEGMENT: string = "/image/access-token/";
|
|
17
|
+
|
|
18
|
+
export const isPrivateImageUrl: (src: unknown) => boolean = (
|
|
19
|
+
src: unknown,
|
|
20
|
+
): boolean => {
|
|
21
|
+
return typeof src === "string" && src.includes(PRIVATE_IMAGE_ROUTE_SEGMENT);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const withCacheBuster: (src: string, value: string) => string = (
|
|
25
|
+
src: string,
|
|
26
|
+
value: string,
|
|
27
|
+
): string => {
|
|
28
|
+
return `${src}${src.includes("?") ? "&" : "?"}sessionRetry=${encodeURIComponent(value)}`;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type RefreshSessionFunction = () => Promise<boolean>;
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Which session an image may refresh is the app's decision, not this
|
|
35
|
+
* component's: the same markdown renders on status pages and public
|
|
36
|
+
* dashboards, where a failed dashboard refresh would log the reader out and
|
|
37
|
+
* send them to the dashboard's login page - and on a status page served from
|
|
38
|
+
* the OneUptime host that shares the dashboard's storage, "signed in" in local
|
|
39
|
+
* storage does not tell the two apart. So nothing is refreshed unless the app
|
|
40
|
+
* has registered its refresh here (the Dashboard and Admin Dashboard do, at
|
|
41
|
+
* startup) or the caller passes one.
|
|
42
|
+
*/
|
|
43
|
+
let appRefreshSession: RefreshSessionFunction | null = null;
|
|
44
|
+
|
|
45
|
+
export const enablePrivateImageSessionRefresh: (
|
|
46
|
+
refreshSession: RefreshSessionFunction | null,
|
|
47
|
+
) => void = (refreshSession: RefreshSessionFunction | null): void => {
|
|
48
|
+
appRefreshSession = refreshSession;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export interface ComponentProps
|
|
52
|
+
extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
53
|
+
refreshSession?: RefreshSessionFunction | undefined;
|
|
54
|
+
isSignedIn?: (() => boolean) | undefined;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* An <img> cannot refresh an expired session the way a request through the API
|
|
59
|
+
* class does: once the access-token cookie lapses, a private image comes back
|
|
60
|
+
* 404 and stays broken until something else happens to refresh the session.
|
|
61
|
+
* So on the first failure of a private image, refresh once and load it again -
|
|
62
|
+
* where the app has opted in (see enablePrivateImageSessionRefresh) and the
|
|
63
|
+
* user is signed in.
|
|
64
|
+
*/
|
|
65
|
+
const SessionAwareImage: FunctionComponent<ComponentProps> = ({
|
|
66
|
+
refreshSession,
|
|
67
|
+
isSignedIn,
|
|
68
|
+
onError,
|
|
69
|
+
src,
|
|
70
|
+
...imageProps
|
|
71
|
+
}: ComponentProps): ReactElement => {
|
|
72
|
+
const [currentSrc, setCurrentSrc] = useState<string | undefined>(src);
|
|
73
|
+
const hasRetriedRef: React.MutableRefObject<boolean> = useRef(false);
|
|
74
|
+
|
|
75
|
+
// A new source is a new image, with its own one retry.
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
setCurrentSrc(src);
|
|
78
|
+
hasRetriedRef.current = false;
|
|
79
|
+
}, [src]);
|
|
80
|
+
|
|
81
|
+
const handleError: (event: SyntheticEvent<HTMLImageElement>) => void =
|
|
82
|
+
useCallback(
|
|
83
|
+
(event: SyntheticEvent<HTMLImageElement>): void => {
|
|
84
|
+
const signedIn: boolean = isSignedIn
|
|
85
|
+
? isSignedIn()
|
|
86
|
+
: UserUtil.isLoggedIn();
|
|
87
|
+
|
|
88
|
+
const refresh: RefreshSessionFunction | null =
|
|
89
|
+
refreshSession || appRefreshSession;
|
|
90
|
+
|
|
91
|
+
if (
|
|
92
|
+
!refresh ||
|
|
93
|
+
hasRetriedRef.current ||
|
|
94
|
+
!isPrivateImageUrl(src) ||
|
|
95
|
+
!signedIn
|
|
96
|
+
) {
|
|
97
|
+
onError?.(event);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
hasRetriedRef.current = true;
|
|
102
|
+
|
|
103
|
+
void refresh()
|
|
104
|
+
.then((refreshed: boolean) => {
|
|
105
|
+
if (refreshed && typeof src === "string") {
|
|
106
|
+
setCurrentSrc(withCacheBuster(src, Date.now().toString()));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
onError?.(event);
|
|
111
|
+
})
|
|
112
|
+
.catch(() => {
|
|
113
|
+
onError?.(event);
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
[src, onError, refreshSession, isSignedIn],
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
return <img {...imageProps} src={currentSrc} onError={handleError} />;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export default SessionAwareImage;
|
|
@@ -37,6 +37,13 @@ export interface ComponentProps<TBaseModel extends BaseModel> {
|
|
|
37
37
|
fetchRequestOptions?: RequestOptions | undefined;
|
|
38
38
|
customElement?: ((item: TBaseModel) => ReactElement) | undefined;
|
|
39
39
|
noItemsMessage: string;
|
|
40
|
+
/*
|
|
41
|
+
* Render nothing, rather than noItemsMessage (or its "No items found."
|
|
42
|
+
* fallback), when the list loads empty. For a caller that explains an empty
|
|
43
|
+
* list itself, e.g. from onListLoaded. A search that matches nothing still
|
|
44
|
+
* says so.
|
|
45
|
+
*/
|
|
46
|
+
hideEmptyState?: boolean | undefined;
|
|
40
47
|
headerField?: string | ((item: TBaseModel) => ReactElement) | undefined;
|
|
41
48
|
onSelectChange?: ((list: Array<TBaseModel>) => void) | undefined;
|
|
42
49
|
refreshToggle?: string | undefined;
|
|
@@ -260,7 +267,10 @@ const ModelList: <TBaseModel extends BaseModel>(
|
|
|
260
267
|
{error ? <ErrorMessage message={error} /> : <></>}
|
|
261
268
|
{isLoading ? <ComponentLoader /> : <></>}
|
|
262
269
|
|
|
263
|
-
{!isLoading &&
|
|
270
|
+
{!isLoading &&
|
|
271
|
+
!error &&
|
|
272
|
+
searchedList.length === 0 &&
|
|
273
|
+
(Boolean(searchText) || !props.hideEmptyState) ? (
|
|
264
274
|
<ErrorMessage
|
|
265
275
|
message={
|
|
266
276
|
searchText
|
|
@@ -323,6 +323,18 @@ export interface BaseTableProps<
|
|
|
323
323
|
|
|
324
324
|
onFilterApplied?: ((isFilterApplied: boolean) => void) | undefined;
|
|
325
325
|
|
|
326
|
+
/**
|
|
327
|
+
* Called with the query the rows are fetched with - the caller's `query`,
|
|
328
|
+
* the column filters and the search box, merged exactly as the list request
|
|
329
|
+
* merges them - on mount and whenever that set of matching rows changes.
|
|
330
|
+
*
|
|
331
|
+
* For a surface that summarizes the same rows the table lists (a volume
|
|
332
|
+
* chart above it, say): reading the filters any other way would let the
|
|
333
|
+
* summary and the list quietly disagree about what "these events" means.
|
|
334
|
+
* Sort and page are not part of it; they re-order the same matching set.
|
|
335
|
+
*/
|
|
336
|
+
onQueryChange?: ((query: Query<TBaseModel>) => void) | undefined;
|
|
337
|
+
|
|
326
338
|
formSummary?: FormSummaryConfig | undefined;
|
|
327
339
|
|
|
328
340
|
onAdvancedFiltersToggle?:
|
|
@@ -2029,6 +2041,27 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
2029
2041
|
clearBulkSelectionState();
|
|
2030
2042
|
}, [effectiveQueryKey]);
|
|
2031
2043
|
|
|
2044
|
+
type BuildEffectiveQueryFunction = () => Query<TBaseModel>;
|
|
2045
|
+
|
|
2046
|
+
// The one merge the list request and `onQueryChange` both read.
|
|
2047
|
+
const buildEffectiveQuery: BuildEffectiveQueryFunction =
|
|
2048
|
+
(): Query<TBaseModel> => {
|
|
2049
|
+
return {
|
|
2050
|
+
...props.query,
|
|
2051
|
+
...query,
|
|
2052
|
+
...buildSearchQueryFragment(),
|
|
2053
|
+
};
|
|
2054
|
+
};
|
|
2055
|
+
|
|
2056
|
+
/*
|
|
2057
|
+
* Keyed on effectiveQueryKey rather than on the query object, which is a
|
|
2058
|
+
* fresh literal every render: a caller that stores what it is handed here
|
|
2059
|
+
* re-renders, and must not be handed the same query again for it.
|
|
2060
|
+
*/
|
|
2061
|
+
useEffect(() => {
|
|
2062
|
+
props.onQueryChange?.(buildEffectiveQuery());
|
|
2063
|
+
}, [effectiveQueryKey]);
|
|
2064
|
+
|
|
2032
2065
|
const fetchItems: PromiseVoidFunction = async (): Promise<void> => {
|
|
2033
2066
|
setError("");
|
|
2034
2067
|
setIsLoading(true);
|
|
@@ -2047,11 +2080,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
|
|
|
2047
2080
|
modelType: props.modelType as
|
|
2048
2081
|
| DatabaseBaseModelType
|
|
2049
2082
|
| AnalyticsBaseModelType,
|
|
2050
|
-
query:
|
|
2051
|
-
...props.query,
|
|
2052
|
-
...query,
|
|
2053
|
-
...buildSearchQueryFragment(),
|
|
2054
|
-
},
|
|
2083
|
+
query: buildEffectiveQuery(),
|
|
2055
2084
|
groupBy: {
|
|
2056
2085
|
...props.groupBy,
|
|
2057
2086
|
},
|
|
@@ -6,7 +6,7 @@ import MoreMenuItem from "../MoreMenu/MoreMenuItem";
|
|
|
6
6
|
import ModelAPI from "../../Utils/ModelAPI/ModelAPI";
|
|
7
7
|
import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
|
|
8
8
|
import SortOrder from "../../../Types/BaseDatabase/SortOrder";
|
|
9
|
-
import API from "
|
|
9
|
+
import API from "../../Utils/API/API";
|
|
10
10
|
import MoreMenuSection from "../MoreMenu/MoreMenuSection";
|
|
11
11
|
import { ButtonStyleType } from "../Button/Button";
|
|
12
12
|
import IconProp from "../../../Types/Icon/IconProp";
|
|
@@ -2,9 +2,16 @@ import ComponentLoader from "../ComponentLoader/ComponentLoader";
|
|
|
2
2
|
import ErrorMessage from "../ErrorMessage/ErrorMessage";
|
|
3
3
|
import DayUptimeGraph, {
|
|
4
4
|
BarChartRule,
|
|
5
|
+
DayReading,
|
|
5
6
|
Event,
|
|
6
7
|
UptimeBarDaySummary,
|
|
7
8
|
} from "../Graphs/DayUptimeGraph";
|
|
9
|
+
import { StatusDuration } from "../Graphs/UptimeDaySummary";
|
|
10
|
+
import Dictionary from "../../../Types/Dictionary";
|
|
11
|
+
import {
|
|
12
|
+
UptimeDayBucket,
|
|
13
|
+
UptimeStatusDuration,
|
|
14
|
+
} from "../../../Types/StatusPage/UptimeDailyAggregate";
|
|
8
15
|
import UptimeUtil from "./UptimeUtil";
|
|
9
16
|
import Color from "../../../Types/Color";
|
|
10
17
|
import CommonMonitorEvent from "../../../Utils/Uptime/MonitorEvent";
|
|
@@ -27,6 +34,17 @@ export interface ComponentProps {
|
|
|
27
34
|
height?: number | undefined;
|
|
28
35
|
barColorRules?: Array<StatusPageHistoryChartBarColorRule> | undefined;
|
|
29
36
|
downtimeMonitorStatuses: Array<MonitorStatus> | undefined;
|
|
37
|
+
/*
|
|
38
|
+
* Server-measured per-day coverage for THIS monitor.
|
|
39
|
+
*
|
|
40
|
+
* The `items` array above arrives under a fetch cap that silently drops
|
|
41
|
+
* history, so it cannot answer "did we have data for this day". These
|
|
42
|
+
* buckets can. When absent the graph keeps its old event-derived
|
|
43
|
+
* behaviour, which is what the dashboard monitor page still uses.
|
|
44
|
+
*/
|
|
45
|
+
uptimeBuckets?: Array<UptimeDayBucket> | undefined;
|
|
46
|
+
/* Statuses by id, so a bucket's durations can be given a name and colour. */
|
|
47
|
+
monitorStatuses?: Array<MonitorStatus> | undefined;
|
|
30
48
|
defaultBarColor: Color;
|
|
31
49
|
incidents?: Array<UptimeBarTooltipIncident> | undefined;
|
|
32
50
|
onBarClick?: (
|
|
@@ -62,6 +80,56 @@ const MonitorUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
62
80
|
);
|
|
63
81
|
}, [props.barColorRules]);
|
|
64
82
|
|
|
83
|
+
/*
|
|
84
|
+
* Turn the server's buckets into the graph's per-day readings, resolving
|
|
85
|
+
* each status id to the name and colour the page already knows.
|
|
86
|
+
*/
|
|
87
|
+
const dayReadings: Array<DayReading> | undefined = useMemo(() => {
|
|
88
|
+
if (!props.uptimeBuckets) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const statusById: Dictionary<MonitorStatus> = {};
|
|
93
|
+
|
|
94
|
+
for (const status of props.monitorStatuses || []) {
|
|
95
|
+
if (status.id) {
|
|
96
|
+
statusById[status.id.toString()] = status;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const downtimeIds: Array<string> = (
|
|
101
|
+
props.downtimeMonitorStatuses || []
|
|
102
|
+
).map((status: MonitorStatus) => {
|
|
103
|
+
return status.id?.toString() || "";
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
return props.uptimeBuckets.map((bucket: UptimeDayBucket): DayReading => {
|
|
107
|
+
return {
|
|
108
|
+
dayStart: bucket.bucketStart,
|
|
109
|
+
daySeconds: bucket.daySeconds,
|
|
110
|
+
coveredSeconds: bucket.coveredSeconds,
|
|
111
|
+
statusDurations: bucket.statusDurations.map(
|
|
112
|
+
(duration: UptimeStatusDuration): StatusDuration => {
|
|
113
|
+
const statusId: string = duration.monitorStatusId.toString();
|
|
114
|
+
const status: MonitorStatus | undefined = statusById[statusId];
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
label: status?.name || "Unknown",
|
|
118
|
+
seconds: duration.seconds,
|
|
119
|
+
color: status?.color || props.defaultBarColor,
|
|
120
|
+
isDowntime: downtimeIds.includes(statusId),
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
),
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
}, [
|
|
127
|
+
props.uptimeBuckets,
|
|
128
|
+
props.monitorStatuses,
|
|
129
|
+
props.downtimeMonitorStatuses,
|
|
130
|
+
props.defaultBarColor,
|
|
131
|
+
]);
|
|
132
|
+
|
|
65
133
|
if (props.isLoading) {
|
|
66
134
|
return <ComponentLoader />;
|
|
67
135
|
}
|
|
@@ -80,6 +148,7 @@ const MonitorUptimeGraph: FunctionComponent<ComponentProps> = (
|
|
|
80
148
|
startDate={props.startDate}
|
|
81
149
|
endDate={props.endDate}
|
|
82
150
|
events={events}
|
|
151
|
+
dayReadings={dayReadings}
|
|
83
152
|
defaultBarColor={props.defaultBarColor}
|
|
84
153
|
height={props.height}
|
|
85
154
|
barColorRules={barColorRules}
|
|
@@ -33,6 +33,18 @@ export interface TelemetryViewerProps<T> {
|
|
|
33
33
|
error?: string | undefined;
|
|
34
34
|
onRefresh?: (() => void) | undefined;
|
|
35
35
|
emptyMessage?: string | undefined;
|
|
36
|
+
/*
|
|
37
|
+
* Replaces the default "No results / try adjusting filters" block when the
|
|
38
|
+
* list comes back empty.
|
|
39
|
+
*
|
|
40
|
+
* For most signals the default is right: an empty list means the filters
|
|
41
|
+
* are too narrow. For a signal that a project may not be SENDING at all,
|
|
42
|
+
* it is usually wrong — the reader needs the setup guide, not an
|
|
43
|
+
* invitation to widen a time range over data that does not exist. Takes
|
|
44
|
+
* precedence over `emptyMessage`; nothing is rendered around it, so the
|
|
45
|
+
* caller owns the whole empty area.
|
|
46
|
+
*/
|
|
47
|
+
emptyContent?: ReactNode;
|
|
36
48
|
|
|
37
49
|
// -- Layout --
|
|
38
50
|
/** Render one item row in the main list. */
|
|
@@ -296,18 +308,22 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
|
|
|
296
308
|
<ComponentLoader />
|
|
297
309
|
</div>
|
|
298
310
|
) : props.items.length === 0 ? (
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
+
props.emptyContent !== undefined ? (
|
|
312
|
+
<>{props.emptyContent}</>
|
|
313
|
+
) : (
|
|
314
|
+
<div className="flex h-48 flex-col items-center justify-center gap-2 px-6 text-center">
|
|
315
|
+
<Icon
|
|
316
|
+
icon={IconProp.Search}
|
|
317
|
+
className="h-8 w-8 text-gray-300"
|
|
318
|
+
/>
|
|
319
|
+
<p className="text-sm font-medium text-gray-500">
|
|
320
|
+
{props.emptyMessage || "No results"}
|
|
321
|
+
</p>
|
|
322
|
+
<p className="text-xs text-gray-400">
|
|
323
|
+
Try adjusting filters or time range.
|
|
324
|
+
</p>
|
|
325
|
+
</div>
|
|
326
|
+
)
|
|
311
327
|
) : (
|
|
312
328
|
<ul className="divide-y divide-gray-100">
|
|
313
329
|
{props.items.map((item: T, index: number) => {
|
|
@@ -118,8 +118,15 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
|
|
|
118
118
|
const activeSeries: Array<HistogramSeriesOption> = useMemo(() => {
|
|
119
119
|
const present: Set<string> = new Set<string>();
|
|
120
120
|
|
|
121
|
+
/*
|
|
122
|
+
* A zero-count bucket holds a slot on the time axis (so a quiet stretch
|
|
123
|
+
* reads as a gap rather than being squeezed out); it is not a sighting
|
|
124
|
+
* of its series, which draws nothing and must not be legended.
|
|
125
|
+
*/
|
|
121
126
|
for (const bucket of props.buckets) {
|
|
122
|
-
|
|
127
|
+
if (bucket.count > 0) {
|
|
128
|
+
present.add(bucket.series);
|
|
129
|
+
}
|
|
123
130
|
}
|
|
124
131
|
|
|
125
132
|
return props.series.filter((option: HistogramSeriesOption): boolean => {
|
|
@@ -15,6 +15,13 @@ export interface ComponentProps {
|
|
|
15
15
|
richContent?: ReactElement | undefined;
|
|
16
16
|
// Large collections can wait to create a tooltip until first opened.
|
|
17
17
|
lazy?: boolean | undefined;
|
|
18
|
+
/*
|
|
19
|
+
* Rich tooltips are interactive by default, and Tippy mounts an interactive
|
|
20
|
+
* tooltip inside the trigger's parent - where an overflow-clipped ancestor
|
|
21
|
+
* (a scrolling grid, say) cuts it off. Pass false for rich content that has
|
|
22
|
+
* nothing to click: it then mounts on <body> and hides on mouse-out.
|
|
23
|
+
*/
|
|
24
|
+
interactive?: boolean | undefined;
|
|
18
25
|
}
|
|
19
26
|
|
|
20
27
|
interface PopupProps extends ComponentProps {
|
|
@@ -61,7 +68,7 @@ const TooltipPopup: FunctionComponent<PopupProps> = (
|
|
|
61
68
|
{...(props.reference
|
|
62
69
|
? { reference: props.reference, showOnCreate: true }
|
|
63
70
|
: { children: props.children })}
|
|
64
|
-
interactive={isRich}
|
|
71
|
+
interactive={props.interactive ?? isRich}
|
|
65
72
|
trigger="mouseenter focus"
|
|
66
73
|
hideOnClick={false}
|
|
67
74
|
maxWidth={isRich ? 380 : 350}
|