@oneuptime/common 14.0.7 → 14.0.9
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/Incident.ts +267 -1
- package/Models/DatabaseModels/IncidentCustomField.ts +202 -0
- package/Models/DatabaseModels/IncidentEpisode.ts +30 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +126 -1
- package/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/KubernetesAiAgent.ts +364 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +3 -3
- package/Models/DatabaseModels/Project.ts +55 -5
- package/Models/DatabaseModels/ProxmoxResource.ts +49 -1
- package/Models/DatabaseModels/RunnerJob.ts +75 -0
- package/Models/DatabaseModels/StatusPage.ts +55 -0
- package/Models/DatabaseModels/StatusPageSubscriber.ts +128 -0
- package/Models/DatabaseModels/TeamComplianceSetting.ts +143 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +17 -0
- package/Server/API/AIChatAPI.ts +6 -3
- package/Server/API/AIInvestigationAPI.ts +17 -10
- package/Server/API/AutoRemediationAPI.ts +207 -25
- package/Server/API/IncidentAPI.ts +162 -0
- package/Server/API/KubernetesClusterAiAccessAPI.ts +623 -21
- package/Server/API/MicrosoftTeamsAPI.ts +93 -14
- package/Server/API/ProxmoxResourceAPI.ts +244 -14
- package/Server/API/StatusPageAPI.ts +487 -171
- package/Server/API/StatusPageSubscriberAPI.ts +63 -15
- package/Server/Infrastructure/GlobalCache.ts +32 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.ts +49 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.ts +108 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.ts +51 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.ts +33 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.ts +168 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.ts +44 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.ts +99 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.ts +137 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.ts +42 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +20 -0
- package/Server/Infrastructure/Semaphore.ts +10 -0
- package/Server/Middleware/IdentityRateLimit.ts +108 -3
- package/Server/Middleware/SubscriberNotificationPreviewRateLimit.ts +237 -0
- package/Server/Middleware/SubscriberNotificationTestSendRateLimit.ts +304 -0
- package/Server/Middleware/TelemetryIngest.ts +41 -18
- package/Server/Services/AIService.ts +70 -1
- package/Server/Services/AlertService.ts +352 -11
- package/Server/Services/AlertSeverityService.ts +65 -15
- package/Server/Services/AutoRemediationRuleService.ts +1 -1
- package/Server/Services/DatabaseService.ts +93 -10
- package/Server/Services/IncidentCustomFieldService.ts +276 -1
- package/Server/Services/IncidentEpisodePublicNoteService.ts +28 -0
- package/Server/Services/IncidentEpisodeService.ts +15 -0
- package/Server/Services/IncidentEpisodeStateTimelineService.ts +27 -1
- package/Server/Services/IncidentPublicNoteService.ts +30 -1
- package/Server/Services/IncidentService.ts +1788 -142
- package/Server/Services/IncidentSeverityService.ts +66 -15
- package/Server/Services/IncidentStateTimelineService.ts +13 -0
- package/Server/Services/IncidentTemplateService.ts +109 -0
- package/Server/Services/KubernetesAiAgentJobService.ts +185 -0
- package/Server/Services/KubernetesAiAgentService.ts +1634 -0
- package/Server/Services/KubernetesClusterAiAccessService.ts +1118 -451
- package/Server/Services/KubernetesClusterService.ts +129 -21
- package/Server/Services/ProjectService.ts +32 -0
- package/Server/Services/ProxmoxResourceService.ts +322 -5
- package/Server/Services/RunnerJobService.ts +241 -104
- package/Server/Services/RunnerService.ts +1 -1
- package/Server/Services/ScheduledMaintenancePublicNoteService.ts +30 -1
- package/Server/Services/ScheduledMaintenanceService.ts +805 -19
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +414 -56
- package/Server/Services/SmsService.ts +10 -0
- package/Server/Services/StatusPageService.ts +65 -8
- package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +299 -37
- package/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.ts +129 -0
- package/Server/Services/StatusPageSubscriberService.ts +1161 -64
- package/Server/Services/TeamComplianceSettingService.ts +1125 -9
- package/Server/Types/Markdown.ts +153 -6
- package/Server/Types/Workflow/Components/Email.ts +61 -2
- package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +67 -9
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +39 -10
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +14 -3
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +37 -15
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +67 -24
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +48 -5
- package/Server/Utils/AI/SRE/IncidentPostmortemRunner.ts +40 -8
- package/Server/Utils/AI/SRE/InvestigationEligibility.ts +13 -2
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +1 -1
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +6 -1
- package/Server/Utils/CustomField/CustomFieldRename.ts +378 -0
- package/Server/Utils/DataSource/EgressGuard.ts +66 -21
- package/Server/Utils/Mail/PinnedSmtpSocket.ts +130 -0
- package/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.ts +10 -0
- package/Server/Utils/SSRFProtection.ts +76 -16
- package/Server/Utils/StatusPage/IncidentStatusPageScope.ts +948 -0
- package/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.ts +656 -0
- package/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.ts +805 -0
- package/Server/Utils/StatusPage/StatusPageExclusion.ts +18 -0
- package/Server/Utils/StatusPage/StatusPageReadAccess.ts +125 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.ts +151 -0
- package/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.ts +70 -0
- package/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.ts +421 -0
- package/Server/Utils/StatusPage/SubscriberNotificationClaim.ts +107 -0
- package/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.ts +1049 -0
- package/Server/Utils/StatusPage/SubscriberNotificationFanOut.ts +180 -0
- package/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.ts +839 -0
- package/Server/Utils/StatusPage/SubscriberNotificationResendAccess.ts +393 -0
- package/Server/Utils/StatusPage/SubscriberNotificationRunLimit.ts +246 -0
- package/Server/Utils/StatusPage/SubscriberNotificationTiming.ts +133 -0
- package/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.ts +215 -0
- package/Server/Utils/StatusPageResource.ts +51 -20
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +133 -7
- package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +58 -4
- package/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.ts +447 -0
- package/Server/Utils/Telemetry/ProxmoxNativePush.ts +903 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +87 -27
- package/Server/Utils/VM/VMAPI.ts +1 -0
- package/Server/Utils/VM/VMRunner.ts +10 -0
- package/Server/Utils/Workflow/OAuth2TokenClient.ts +10 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +684 -47
- package/Server/Views/Partials/SensitiveUrlToken.ejs +8 -5
- package/Tests/App/Accounts/RegisterVerifyEmail.test.tsx +748 -0
- package/Tests/App/Accounts/ResendVerificationEmail.test.tsx +1222 -0
- package/Tests/App/Accounts/VerificationEmailResendUtils.test.ts +797 -0
- package/Tests/App/Accounts/VerifyEmailPending.test.tsx +538 -0
- package/Tests/App/Accounts/VerifyEmailResend.test.tsx +779 -0
- package/Tests/App/AdminDashboard/RowActionPlacementOverrides.test.tsx +278 -0
- package/Tests/App/Dashboard/AIChatChartWidgetZoom.test.tsx +738 -0
- package/Tests/App/Dashboard/AIFeaturesSettingsPointers.test.tsx +147 -0
- package/Tests/App/Dashboard/AIInsightsKubernetesClusterPage.test.tsx +1523 -0
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +463 -3
- package/Tests/App/Dashboard/AffectedResourcesPickerDropdownPlacement.test.tsx +958 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerFocusLeave.test.tsx +595 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +20 -3
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +8 -3
- package/Tests/App/Dashboard/CephRateChartReload.test.tsx +1456 -0
- package/Tests/App/Dashboard/CephTimeRangeZoom.test.tsx +1229 -0
- package/Tests/App/Dashboard/ChartCardTimeRangeZoom.test.tsx +151 -0
- package/Tests/App/Dashboard/ChartCardZoomAffordances.test.tsx +257 -0
- package/Tests/App/Dashboard/ChartRefetchFrame.test.tsx +141 -0
- package/Tests/App/Dashboard/ChartZoomHarness.tsx +249 -0
- package/Tests/App/Dashboard/ChartZoomStandIn.tsx +131 -0
- package/Tests/App/Dashboard/CloudServerlessSlowLoads.test.tsx +628 -0
- package/Tests/App/Dashboard/CloudServerlessTimeRangeZoom.test.tsx +607 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +91 -19
- package/Tests/App/Dashboard/CompanionMetricsTabZoom.test.tsx +632 -0
- package/Tests/App/Dashboard/ContainerChartZoomStandIn.tsx +195 -0
- package/Tests/App/Dashboard/ContainerHostOverviewSlowLoads.test.tsx +542 -0
- package/Tests/App/Dashboard/ContainerHostOverviewTimeRangeZoom.test.tsx +848 -0
- package/Tests/App/Dashboard/ContainerMetricsTimeRangeZoom.test.tsx +561 -0
- package/Tests/App/Dashboard/CustomFieldsSettingsIncidentOptions.test.tsx +357 -0
- package/Tests/App/Dashboard/DashboardBoardWideZoomShell.test.tsx +1147 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +3 -2
- package/Tests/App/Dashboard/DashboardHistogramWidgetDragCursor.test.tsx +399 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoom.test.tsx +985 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoomHint.test.tsx +803 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +1 -0
- package/Tests/App/Dashboard/DashboardSettingsPreviewZoom.test.tsx +679 -0
- package/Tests/App/Dashboard/DashboardSloAndDataSourceChartZoom.test.tsx +881 -0
- package/Tests/App/Dashboard/DashboardTraceStatusWidgets.test.tsx +878 -0
- package/Tests/App/Dashboard/DatabaseMetricChartModalTimeRangeZoom.test.tsx +442 -0
- package/Tests/App/Dashboard/DatabaseOverviewTimeRangeZoom.test.tsx +831 -0
- package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +43 -0
- package/Tests/App/Dashboard/DockerSwarmInsightsTimeRangeZoom.test.tsx +524 -0
- package/Tests/App/Dashboard/DockerSwarmRateChartRefresh.test.tsx +259 -0
- package/Tests/App/Dashboard/EdgeDetailPanelHistory.test.tsx +763 -0
- package/Tests/App/Dashboard/EdgeDetailPanelTimeRangeZoom.test.tsx +547 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsCases.tsx +565 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKathmandu.test.tsx +73 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKolkata.test.tsx +74 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsNewYork.test.tsx +72 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsUtc.test.tsx +72 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardRefresh.test.tsx +310 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardTimeRangeZoom.test.tsx +536 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +3 -1
- package/Tests/App/Dashboard/EscalationRuleRowActions.test.tsx +660 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +778 -2
- package/Tests/App/Dashboard/EventNotesPages.test.tsx +119 -0
- package/Tests/App/Dashboard/EventNotesUtil.test.ts +116 -17
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +828 -17
- package/Tests/App/Dashboard/EventOverviewSnapshotExplorerZoom.test.tsx +1139 -0
- package/Tests/App/Dashboard/EventOverviewSnapshotZoomAcrossTabs.test.tsx +1057 -0
- package/Tests/App/Dashboard/EventOverviewTelemetrySnapshotZoom.test.tsx +757 -0
- package/Tests/App/Dashboard/ExceptionOccurrenceTrendZoom.test.tsx +675 -0
- package/Tests/App/Dashboard/ExceptionOccurrencesZoomSurvivesViewSwitch.test.tsx +405 -0
- package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +67 -3
- package/Tests/App/Dashboard/ExceptionTablesSpanStatus.test.tsx +515 -0
- package/Tests/App/Dashboard/ExplorerOwnZoomRegression.test.tsx +739 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisCases.tsx +461 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKathmandu.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKolkata.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisNewYork.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisUtc.test.tsx +24 -0
- package/Tests/App/Dashboard/FlowTopTalkersZoomRefetch.test.tsx +722 -0
- package/Tests/App/Dashboard/FlowViewportGuard.test.tsx +2526 -0
- package/Tests/App/Dashboard/HostPagesSlowLoads.test.tsx +872 -0
- package/Tests/App/Dashboard/HostPagesTimeRangeZoom.test.tsx +1208 -0
- package/Tests/App/Dashboard/IncidentChangeStateNotifyDefault.test.tsx +91 -1
- package/Tests/App/Dashboard/IncidentCreateDetailsStep.test.tsx +643 -0
- package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +8 -1
- package/Tests/App/Dashboard/IncidentCreateStatusPageScope.test.tsx +601 -0
- package/Tests/App/Dashboard/IncidentCustomFieldTemplateVariables.test.tsx +386 -0
- package/Tests/App/Dashboard/IncidentNoteTemplatePlaceholders.test.tsx +124 -0
- package/Tests/App/Dashboard/IncidentNoteTemplateVariablesLoader.test.ts +305 -0
- package/Tests/App/Dashboard/IncidentOverviewNotifyDefault.test.tsx +112 -0
- package/Tests/App/Dashboard/IncidentRootCauseTimeRangeZoom.test.tsx +358 -0
- package/Tests/App/Dashboard/IncidentSettingsRenotifyOnPublish.test.tsx +674 -0
- package/Tests/App/Dashboard/IncidentSettingsStatusPageScope.test.tsx +1051 -0
- package/Tests/App/Dashboard/IncidentTemplateCustomFields.test.tsx +384 -0
- package/Tests/App/Dashboard/IncidentTemplateStatusPageScopeCard.test.tsx +215 -0
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +100 -9
- package/Tests/App/Dashboard/InfrastructureMetricsTabTimeRangeZoom.test.tsx +485 -0
- package/Tests/App/Dashboard/InvestigationDrawerCompanionZoom.test.tsx +655 -0
- package/Tests/App/Dashboard/InvestigationDrawerZoom.test.tsx +830 -0
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +338 -2
- package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +454 -16
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +799 -819
- package/Tests/App/Dashboard/KubernetesClusterAiAgentOverviewCard.test.tsx +367 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAgentStatus.test.ts +1202 -0
- package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +106 -0
- package/Tests/App/Dashboard/KubernetesClusterAiNavigation.test.tsx +354 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +1884 -2054
- package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +478 -179
- package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +50 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +2 -1
- package/Tests/App/Dashboard/KubernetesClusterOverviewZoom.test.tsx +1217 -0
- package/Tests/App/Dashboard/KubernetesClusterPagesZoom.test.tsx +731 -0
- package/Tests/App/Dashboard/KubernetesCostsLoadRecovery.test.tsx +869 -0
- package/Tests/App/Dashboard/KubernetesCostsZoom.test.tsx +1214 -0
- package/Tests/App/Dashboard/KubernetesCostsZoomExactHours.test.tsx +692 -0
- package/Tests/App/Dashboard/KubernetesNetworkThroughputReload.test.tsx +902 -0
- package/Tests/App/Dashboard/KubernetesNetworkZoomBucketEdges.test.tsx +571 -0
- package/Tests/App/Dashboard/KubernetesOverviewZoomBucketEdges.test.tsx +697 -0
- package/Tests/App/Dashboard/KubernetesResourceMetricsTabZoom.test.tsx +633 -0
- package/Tests/App/Dashboard/LogsExplorerTimeRangeZoom.test.tsx +470 -0
- package/Tests/App/Dashboard/LogsInsightsTimeRangeZoom.test.tsx +948 -0
- package/Tests/App/Dashboard/LogsViewerPinnedWindowZoom.test.tsx +486 -0
- package/Tests/App/Dashboard/MetricChartsBucketInspectorDoubleClick.test.tsx +1001 -0
- package/Tests/App/Dashboard/MetricExplorerInvestigationAutoRefresh.test.tsx +514 -0
- package/Tests/App/Dashboard/MetricExplorerSavedViewZoomRoundTrip.test.tsx +581 -0
- package/Tests/App/Dashboard/MetricExplorerTimeRangeZoom.test.tsx +1162 -0
- package/Tests/App/Dashboard/MetricMonitorPreviewZoomLabel.test.ts +72 -0
- package/Tests/App/Dashboard/MetricRowSparklineTimeRangeZoom.test.tsx +204 -0
- package/Tests/App/Dashboard/MetricViewFirstResultLands.test.tsx +408 -0
- package/Tests/App/Dashboard/MetricViewOwnZoomResetPlacement.test.tsx +952 -0
- package/Tests/App/Dashboard/MetricViewTimeRange.test.ts +139 -0
- package/Tests/App/Dashboard/MetricViewTimeRangeZoom.test.tsx +556 -0
- package/Tests/App/Dashboard/MonitorMetricsChartWrappersZoom.test.tsx +552 -0
- package/Tests/App/Dashboard/MonitorMetricsTabsTimeRangeZoom.test.tsx +740 -0
- package/Tests/App/Dashboard/MonitorOverviewChartsTimeRangeZoom.test.tsx +735 -0
- package/Tests/App/Dashboard/MonitorStepPreviewsTimeRangeZoom.test.tsx +835 -0
- package/Tests/App/Dashboard/NetworkDeviceTimeRangeZoom.test.tsx +1115 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +186 -17
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +155 -46
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +87 -2
- package/Tests/App/Dashboard/ProjectAISettingsPages.test.tsx +884 -0
- package/Tests/App/Dashboard/ProxmoxNodeRemove.test.tsx +621 -0
- package/Tests/App/Dashboard/ProxmoxOverviewSlowLoads.test.tsx +584 -0
- package/Tests/App/Dashboard/ProxmoxPagesTimeRangeZoom.test.tsx +823 -0
- package/Tests/App/Dashboard/ProxmoxRateChartReload.test.tsx +1253 -0
- package/Tests/App/Dashboard/PublicDashboardBoardWideZoom.test.tsx +605 -0
- package/Tests/App/Dashboard/PublicNotePagesNotifyDefault.test.tsx +113 -1
- package/Tests/App/Dashboard/RealRowsLineChart.tsx +250 -0
- package/Tests/App/Dashboard/RechartsHostsPlotCursor.test.tsx +513 -0
- package/Tests/App/Dashboard/RowActionPlacementOverrides.test.tsx +865 -0
- package/Tests/App/Dashboard/RumOverviewTimeRangeZoom.test.tsx +877 -0
- package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +20 -4
- package/Tests/App/Dashboard/RunnerSupersededByAiAgentNote.test.tsx +296 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +146 -36
- package/Tests/App/Dashboard/ServiceDatabaseSlowLoads.test.tsx +1166 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +1243 -104
- package/Tests/App/Dashboard/ServiceOverviewTimeRangeZoom.test.tsx +792 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoom.test.tsx +771 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoomAffordances.test.tsx +380 -0
- package/Tests/App/Dashboard/SloEventMetricsBarChartZoom.test.tsx +369 -0
- package/Tests/App/Dashboard/SloHistoryChartsTimeRangeZoom.test.tsx +694 -0
- package/Tests/App/Dashboard/SloHistoryChartsZoomAffordances.test.tsx +497 -0
- package/Tests/App/Dashboard/SloMetricsTimeRangeZoom.test.tsx +541 -0
- package/Tests/App/Dashboard/SlowLoadHarness.ts +123 -0
- package/Tests/App/Dashboard/SnapshotExplorerPrimaryZoom.test.tsx +1194 -0
- package/Tests/App/Dashboard/SnapshotViewerPinnedWindow.test.tsx +620 -0
- package/Tests/App/Dashboard/SubscriberAudienceSummary.test.tsx +512 -0
- package/Tests/App/Dashboard/SubscriberNotificationPreviewModal.test.tsx +837 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusLabel.test.tsx +88 -0
- package/Tests/App/Dashboard/SubscriberNotificationStatusResend.test.tsx +473 -0
- package/Tests/App/Dashboard/SubscriberTemplateLivePreview.test.tsx +196 -0
- package/Tests/App/Dashboard/TeamAddedSubscribersUnsubscribedNotice.test.tsx +248 -0
- package/Tests/App/Dashboard/TelemetrySnapshotPanelTimeRangeZoom.test.tsx +765 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoom.test.tsx +516 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoomAcrossTabs.test.tsx +827 -0
- package/Tests/App/Dashboard/TimeRangeZoomPageHarness.tsx +463 -0
- package/Tests/App/Dashboard/TraceChartEditorStatusSplit.test.tsx +543 -0
- package/Tests/App/Dashboard/TraceStatusPresentation.test.tsx +967 -0
- package/Tests/App/Dashboard/TraceTimelineMinimapZoom.test.tsx +315 -0
- package/Tests/App/Dashboard/TracesAnalyticsStatusSplit.test.tsx +778 -0
- package/Tests/App/Dashboard/TracesAnalyticsViewZoom.test.tsx +349 -0
- package/Tests/App/Dashboard/TracesExplorerTimeRangeZoom.test.tsx +551 -0
- package/Tests/App/Dashboard/TracesStatusChartAndFacet.test.tsx +687 -0
- package/Tests/App/Dashboard/TracesViewerStaleResponses.test.tsx +458 -0
- package/Tests/App/Dashboard/UptimeStripsExcludedFromZoom.test.tsx +406 -0
- package/Tests/App/Dashboard/VMwareOverviewSlowLoads.test.tsx +535 -0
- package/Tests/App/Dashboard/VMwarePagesTimeRangeZoom.test.tsx +606 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineStaleHover.test.tsx +1292 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineZoom.test.tsx +765 -0
- package/Tests/App/SensitiveUrlTokenBootstrap.test.ts +64 -3
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +98 -0
- package/Tests/App/StatusPage/StatusPageUnsubscribePage.test.tsx +412 -0
- package/Tests/Models/DatabaseModels/KubernetesAiAgentModel.test.ts +295 -0
- package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +347 -0
- package/Tests/Models/IncidentCustomFieldApiSchemaContract.test.ts +217 -0
- package/Tests/Models/IncidentCustomFieldCreateSettingsColumns.test.ts +252 -0
- package/Tests/Models/StatusPageSubscriberUnsubscribeColumns.test.ts +218 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +58 -0
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +1 -1
- package/Tests/Server/API/AIInvestigationAPI.test.ts +123 -45
- package/Tests/Server/API/AutoRemediationApproveClusterRound.test.ts +1329 -0
- package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +25 -2
- package/Tests/Server/API/ExpiredSessionRouteGuards.test.ts +7 -0
- package/Tests/Server/API/IncidentSubscriberAudienceAPI.test.ts +1408 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPIAgent.test.ts +903 -0
- package/Tests/Server/API/MicrosoftTeamsChatsRefreshRoute.test.ts +667 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +294 -6
- package/Tests/Server/API/ProxmoxResourceAPIRemoveNode.test.ts +1932 -0
- package/Tests/Server/API/StatusPageIncidentScope.test.ts +1868 -0
- package/Tests/Server/API/StatusPageIncidentScopePostgres.test.ts +790 -0
- package/Tests/Server/API/StatusPageManageSubscriptionRecipient.test.ts +10 -1
- package/Tests/Server/API/StatusPageManageSubscriptionTemplateVariables.test.ts +206 -18
- package/Tests/Server/API/StatusPagePostmortemVisibility.test.ts +14 -2
- package/Tests/Server/API/StatusPageSubscriberCreateResponse.test.ts +217 -0
- package/Tests/Server/API/StatusPageSubscriberOwnership.test.ts +103 -2
- package/Tests/Server/API/StatusPageUnsubscribeAPI.test.ts +396 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +195 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentStatusPageScopeMigration.test.ts +395 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentTemplateStatusPageScopeFlagMigration.test.ts +150 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesAiAgentAndAiDefaultsMigration.test.ts +623 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +87 -10
- package/Tests/Server/Infrastructure/Postgres/AddSubscriberNotificationClaimedAtMigration.test.ts +156 -0
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleScopeMigration.test.ts +622 -0
- package/Tests/Server/Infrastructure/Postgres/SkipHiddenIncidentCreatedNotificationsMigration.test.ts +410 -0
- package/Tests/Server/Middleware/IdentityRateLimit.test.ts +551 -1
- package/Tests/Server/Middleware/SubscriberNotificationPreviewRateLimit.test.ts +238 -0
- package/Tests/Server/Middleware/SubscriberNotificationTestSendRateLimit.test.ts +245 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +61 -4
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +98 -2
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +105 -2
- package/Tests/Server/Services/AIServiceBalanceBlocker.test.ts +282 -0
- package/Tests/Server/Services/AddStatusPageSubscriberUnsubscribeTokenMigration.test.ts +152 -0
- package/Tests/Server/Services/AlertMonitorClearWritesNull.test.ts +409 -0
- package/Tests/Server/Services/AlertMonitorEditFeed.test.ts +474 -0
- package/Tests/Server/Services/AlertMonitorEditGuard.test.ts +610 -0
- package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +2 -0
- package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +2 -1
- package/Tests/Server/Services/CrossProjectRelationWriteGuard.test.ts +221 -36
- package/Tests/Server/Services/DatabaseServiceCompareAndSetColumns.test.ts +191 -0
- package/Tests/Server/Services/IncidentAffectedMonitorsEdit.test.ts +1360 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +3 -1
- package/Tests/Server/Services/IncidentCreatedRenotifyOnPublish.test.ts +681 -0
- package/Tests/Server/Services/IncidentCreatedResend.test.ts +775 -0
- package/Tests/Server/Services/IncidentCustomFieldRenamePostgres.test.ts +713 -0
- package/Tests/Server/Services/IncidentCustomFieldService.test.ts +751 -0
- package/Tests/Server/Services/IncidentCustomFieldValueValidation.test.ts +556 -0
- package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +488 -0
- package/Tests/Server/Services/IncidentStatusPageScope.test.ts +2971 -0
- package/Tests/Server/Services/IncidentStatusPageScopeFeed.test.ts +131 -0
- package/Tests/Server/Services/IncidentStatusPageScopePostgres.test.ts +625 -0
- package/Tests/Server/Services/IncidentTemplateCustomFieldsCopy.test.ts +311 -0
- package/Tests/Server/Services/IncidentTemplateStatusPageScope.test.ts +363 -0
- package/Tests/Server/Services/KubernetesAiAgentJobService.test.ts +329 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceHelpers.test.ts +618 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceLifecycle.test.ts +1444 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceRegister.test.ts +1666 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +140 -111
- package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +267 -105
- package/Tests/Server/Services/KubernetesClusterAiAccessLegacySuperseded.test.ts +440 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +567 -411
- package/Tests/Server/Services/KubernetesClusterAiAccessTarget.test.ts +1168 -0
- package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +410 -12
- package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +55 -0
- package/Tests/Server/Services/ProjectServiceNewProjectAiDefaults.test.ts +288 -0
- package/Tests/Server/Services/ProxmoxResourcePostgres.test.ts +5633 -0
- package/Tests/Server/Services/ProxmoxResourceService.test.ts +6458 -5
- package/Tests/Server/Services/PublicNoteEditFeedEventType.test.ts +213 -0
- package/Tests/Server/Services/PublicNoteResendAccess.test.ts +994 -0
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +48 -15
- package/Tests/Server/Services/RunnerJobEnqueueKubectlAiAgent.test.ts +620 -0
- package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +170 -3
- package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +72 -0
- package/Tests/Server/Services/RunnerServiceAgentName.test.ts +6 -4
- package/Tests/Server/Services/ScheduledMaintenanceAttachmentEdit.test.ts +2113 -0
- package/Tests/Server/Services/ScheduledMaintenanceMonitorRelease.test.ts +972 -0
- package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +289 -9
- package/Tests/Server/Services/SmsServiceFailIfNotSent.test.ts +67 -0
- package/Tests/Server/Services/StatusPageReportIncidentCounts.test.ts +610 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCounts.test.ts +201 -0
- package/Tests/Server/Services/StatusPageSubscriberAudienceCountsPostgres.test.ts +271 -0
- package/Tests/Server/Services/StatusPageSubscriberConfirmationTemplateEscaping.test.ts +200 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationLogRedaction.test.ts +54 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateCompile.test.ts +37 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateIncidentRecordAccess.test.ts +772 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookup.test.ts +506 -0
- package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateLookupPostgres.test.ts +261 -0
- package/Tests/Server/Services/StatusPageSubscriberReport.test.ts +21 -5
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribe.test.ts +1618 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribeLinkSenders.test.ts +373 -0
- package/Tests/Server/Services/StatusPageSubscriberUnsubscribePostgres.test.ts +388 -0
- package/Tests/Server/Services/SubscriberNotificationInFlightRequeue.test.ts +500 -0
- package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +2237 -0
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +3988 -138
- package/Tests/Server/Types/MarkdownEmailLinks.test.ts +320 -0
- package/Tests/Server/Types/Workflow/Components/Email.test.ts +491 -1
- package/Tests/Server/Types/Workflow/Components/EmailSmtpPinning.test.ts +398 -0
- package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +107 -1
- package/Tests/Server/Utils/AI/IncidentPostmortemRunner.test.ts +351 -0
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +2 -0
- package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +310 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +70 -0
- package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +58 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +125 -1
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +252 -3
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerProjectGates.test.ts +240 -0
- package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +2 -0
- package/Tests/Server/Utils/CustomField/CustomFieldRename.test.ts +586 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +246 -10
- package/Tests/Server/Utils/DataSource/EgressGuardDeploymentConfig.test.ts +226 -0
- package/Tests/Server/Utils/DataSource/EgressGuardPinning.test.ts +131 -0
- package/Tests/Server/Utils/DataSource/HttpFetch.test.ts +4 -0
- package/Tests/Server/Utils/EgressPolicyEnvironment.ts +45 -0
- package/Tests/Server/Utils/Mail/PinnedSmtpSocket.test.ts +409 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaObservationBuilderUnits.test.ts +23 -0
- package/Tests/Server/Utils/SSRFProtection.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionCloudServiceAddresses.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +4 -0
- package/Tests/Server/Utils/SSRFProtectionResolutionDetail.test.ts +314 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScope.test.ts +1699 -0
- package/Tests/Server/Utils/StatusPage/IncidentStatusPageScopeQueriesPostgres.test.ts +508 -0
- package/Tests/Server/Utils/StatusPage/IncidentSubscriberAudienceCallerPermission.test.ts +246 -0
- package/Tests/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.test.ts +1348 -0
- package/Tests/Server/Utils/StatusPage/StatusPageReadAccess.test.ts +221 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.test.ts +132 -0
- package/Tests/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.test.ts +155 -0
- package/Tests/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.test.ts +708 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaim.test.ts +255 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationClaimPostgres.test.ts +528 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.test.ts +1238 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationFanOut.test.ts +472 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.test.ts +1168 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationRunLimit.test.ts +275 -0
- package/Tests/Server/Utils/StatusPage/SubscriberNotificationTiming.test.ts +131 -0
- package/Tests/Server/Utils/StatusPageResource.test.ts +98 -0
- package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +68 -0
- package/Tests/Server/Utils/Telemetry/InventoryMirrorPostgres.test.ts +370 -0
- package/Tests/Server/Utils/Telemetry/NetworkDeviceInventoryAttributes.test.ts +522 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +155 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.test.ts +8631 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativePush.test.ts +2852 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +367 -1
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +45 -3
- package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +17 -0
- package/Tests/Server/Utils/VM/VMRunnerSsrf.test.ts +75 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +25 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNames.test.ts +3119 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNamesPostgres.test.ts +1721 -0
- package/Tests/Types/CustomField/CustomFieldSavedViews.test.ts +247 -0
- package/Tests/Types/CustomField/CustomFieldTemplateValues.test.ts +186 -0
- package/Tests/Types/CustomField/CustomFieldTypeCorrespondence.test.ts +48 -0
- package/Tests/Types/CustomField/CustomFieldValueFormat.test.ts +215 -0
- package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +343 -0
- package/Tests/Types/CustomField/CustomFieldVariableKey.test.ts +364 -0
- package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +581 -113
- package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +510 -0
- package/Tests/Types/SafeHtml.test.ts +102 -0
- package/Tests/Types/StatusPage/IncidentCreatedRenotify.test.ts +419 -0
- package/Tests/Types/StatusPage/IncidentCreatedResend.test.ts +118 -0
- package/Tests/Types/StatusPage/IncidentScopeAddedPagesNotification.test.ts +558 -0
- package/Tests/Types/StatusPage/IncidentSubscriberAudience.test.ts +284 -0
- package/Tests/Types/StatusPage/StatusPageSubscriberUnsubscribe.test.ts +341 -0
- package/Tests/Types/StatusPage/SubscriberNotificationPreview.test.ts +196 -0
- package/Tests/Types/StatusPage/SubscriberNotificationResend.test.ts +201 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateCompiler.test.ts +277 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplatePreview.test.ts +179 -0
- package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +324 -0
- package/Tests/Types/StatusPage/SubscriberUpdateNotification.test.ts +60 -13
- package/Tests/Types/Team/ComplianceRule.test.ts +1029 -0
- package/Tests/Types/Team/TeamComplianceStatus.test.ts +176 -0
- package/Tests/UI/Components/ActionButton/RowActions.test.tsx +641 -0
- package/Tests/UI/Components/ActionButton/RowActionsAccessibility.test.tsx +414 -0
- package/Tests/UI/Components/ActionButton/SplitActionButtons.test.ts +565 -0
- package/Tests/UI/Components/Charts/BarChartDragToSelect.test.tsx +386 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickResetWithoutDblclick.test.tsx +1025 -0
- package/Tests/UI/Components/Charts/ChartGroupPageZoomHint.test.tsx +196 -0
- package/Tests/UI/Components/Charts/ChartPlaceholdersTakeDoubleClick.test.tsx +1861 -0
- package/Tests/UI/Components/Charts/ChartPlotClicksWhileResetArmed.test.tsx +382 -0
- package/Tests/UI/Components/Charts/ChartRangeSelection.test.tsx +704 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionDoubleClickReset.test.tsx +1481 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionRealRecharts.test.tsx +918 -0
- package/Tests/UI/Components/Charts/ChartRowBucketStart.test.ts +350 -0
- package/Tests/UI/Components/Charts/DoubleClickReset.test.tsx +996 -0
- package/Tests/UI/Components/Charts/HistogramDoubleClickResetRealRecharts.test.tsx +965 -0
- package/Tests/UI/Components/Charts/HistogramDriftThenRefetch.test.tsx +277 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionDataChange.test.tsx +1757 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionRealRecharts.test.tsx +560 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ChartPageTimeRangeZoom.test.tsx +513 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.test.tsx +845 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.test.tsx +119 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHintTailwind.test.tsx +274 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.test.ts +433 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.test.tsx +863 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ZoomDocsPromises.test.tsx +1147 -0
- package/Tests/UI/Components/CustomFields/CustomFieldFormFields.test.ts +432 -0
- package/Tests/UI/Components/CustomFields/CustomFieldModelFormFields.test.tsx +685 -0
- package/Tests/UI/Components/CustomFields/CustomFieldsDetailOrder.test.tsx +469 -0
- package/Tests/UI/Components/DisabledButtonTooltip.test.tsx +14 -3
- package/Tests/UI/Components/EntityDropdownEscape.test.tsx +454 -0
- package/Tests/UI/Components/EntityDropdownFocusLeave.test.tsx +420 -0
- package/Tests/UI/Components/Forms/FormFieldDropdownDisabled.test.tsx +233 -0
- package/Tests/UI/Components/Forms/ModelFormCustomFieldInputs.test.tsx +325 -0
- package/Tests/UI/Components/Forms/ModelFormDropdownOptionsRefused.test.tsx +358 -0
- package/Tests/UI/Components/Input.test.tsx +80 -1
- package/Tests/UI/Components/LogsAnalyticsViewZoom.test.tsx +947 -0
- package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +17 -5
- package/Tests/UI/Components/LogsViewerAnalyticsZoom.test.tsx +501 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +6 -4
- package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +60 -8
- package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +476 -0
- package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +22 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +7 -5
- package/Tests/UI/Components/MoreMenuPortal.test.tsx +623 -0
- package/Tests/UI/Components/StatusPage/ResourceGridActions.test.tsx +538 -0
- package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +14 -4
- package/Tests/UI/Components/TableCellWrapping.test.tsx +3 -3
- package/Tests/UI/Components/TableRowActions.test.tsx +472 -0
- package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerZoomScope.test.tsx +470 -0
- package/Tests/UI/Components/TelemetryViewer/UseViewerTimeRangeZoom.test.tsx +571 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerDoubleClickResetUnderDataChange.test.tsx +928 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerFollowsEnclosingZoom.test.tsx +1569 -0
- package/Tests/UI/Components/Toggle.test.tsx +66 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardRefreshNames.test.tsx +1023 -0
- package/Tests/UI/Monitor/NetworkPathView.test.tsx +289 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +201 -0
- package/Tests/UI/Rum/FidelityNotices.test.ts +54 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +72 -0
- package/Tests/UI/Rum/ReplayFrameCapture.test.ts +1009 -9
- package/Tests/UI/Rum/ReplayRecordedAssets.test.ts +1069 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +913 -2
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +443 -8
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +439 -9
- package/Tests/UI/Rum/UserFlowTablesRowActions.test.tsx +501 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +47 -19
- package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +2 -0
- package/Tests/Utils/AiRemediation/KubernetesAiAgentPolicyCopyParity.test.ts +396 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +104 -1
- package/Tests/Utils/Incident/IncidentNoteTemplateVariables.test.ts +623 -0
- package/Tests/Utils/Markdown/MarkdownEscape.test.ts +89 -0
- package/Tests/Utils/ProbeNetworkFailureUtil.test.ts +992 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +575 -0
- package/Types/AI/AIRunType.ts +9 -4
- package/Types/AI/InvestigationNotStartedReason.ts +6 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +14 -16
- package/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.ts +28 -0
- package/Types/CustomField/CustomFieldOrder.ts +55 -0
- package/Types/CustomField/CustomFieldSavedViews.ts +225 -0
- package/Types/CustomField/CustomFieldTemplateMerge.ts +71 -0
- package/Types/CustomField/CustomFieldType.ts +14 -0
- package/Types/CustomField/CustomFieldValueFormat.ts +161 -0
- package/Types/CustomField/CustomFieldValueValidator.ts +488 -0
- package/Types/CustomField/CustomFieldVariableKey.ts +211 -0
- package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +4 -2
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +263 -32
- package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +20 -16
- package/Types/Kubernetes/KubernetesClusterAiInsights.ts +81 -0
- package/Types/Monitor/ProxmoxAlertTemplates.ts +4 -4
- package/Types/SafeHtml.ts +93 -0
- package/Types/StatusPage/IncidentCreatedRenotify.ts +224 -0
- package/Types/StatusPage/IncidentCreatedResend.ts +108 -0
- package/Types/StatusPage/IncidentScopeAddedPagesNotification.ts +343 -0
- package/Types/StatusPage/IncidentSubscriberAudience.ts +332 -0
- package/Types/StatusPage/StatusPageSubscriberUnsubscribe.ts +405 -0
- package/Types/StatusPage/SubscriberNotificationInterruption.ts +32 -0
- package/Types/StatusPage/SubscriberNotificationPreview.ts +322 -0
- package/Types/StatusPage/SubscriberNotificationResend.ts +132 -0
- package/Types/StatusPage/SubscriberNotificationTemplateCompiler.ts +180 -0
- package/Types/StatusPage/SubscriberNotificationTemplatePreview.ts +301 -0
- package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +217 -4
- package/Types/StatusPage/SubscriberUpdateNotification.ts +32 -11
- package/Types/Team/ComplianceNotificationChannel.ts +22 -0
- package/Types/Team/ComplianceRule.ts +434 -0
- package/Types/Team/ComplianceRuleType.ts +21 -0
- package/Types/Team/TeamComplianceStatus.ts +81 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +28 -0
- package/UI/Components/ActionButton/ActionButtonSchema.ts +21 -0
- package/UI/Components/ActionButton/RowActions.tsx +238 -0
- package/UI/Components/ActionButton/SplitActionButtons.ts +173 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +32 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +40 -3
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +37 -11
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +80 -243
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +122 -31
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +95 -244
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +214 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.ts +32 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.ts +599 -0
- package/UI/Components/Charts/Line/LineChart.tsx +32 -2
- package/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx +70 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.tsx +226 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.tsx +73 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.ts +163 -0
- package/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.ts +215 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +20 -8
- package/UI/Components/Charts/Utils/XAxis.ts +75 -0
- package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +493 -59
- package/UI/Components/CustomFields/CustomFieldFormFields.ts +317 -0
- package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +395 -0
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +95 -55
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +107 -11
- package/UI/Components/Forms/Fields/FormField.tsx +10 -0
- package/UI/Components/Forms/ModelForm.tsx +70 -8
- package/UI/Components/Forms/Validation.ts +1 -1
- package/UI/Components/Input/Input.tsx +90 -57
- package/UI/Components/List/ListRow.tsx +8 -74
- package/UI/Components/LogsViewer/LogsViewer.tsx +40 -11
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +22 -6
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +209 -6
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +127 -84
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +3 -0
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +2 -4
- package/UI/Components/ModelTable/AnalyticsModelTable.tsx +2 -6
- package/UI/Components/ModelTable/BaseModelTable.tsx +21 -9
- package/UI/Components/ModelTable/CustomFieldColumns.tsx +14 -1
- package/UI/Components/ModelTable/ModelTable.tsx +6 -7
- package/UI/Components/MoreMenu/MoreMenu.tsx +365 -30
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +70 -17
- package/UI/Components/OrderedStatesList/Item.tsx +7 -72
- package/UI/Components/StatusPage/ResourceGrid.tsx +126 -77
- package/UI/Components/Table/TableBody.tsx +8 -2
- package/UI/Components/Table/TableRow.tsx +20 -140
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +41 -10
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +47 -9
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +25 -6
- package/UI/Components/TelemetryViewer/types.ts +2 -0
- package/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.ts +448 -0
- package/UI/Components/Toggle/Toggle.tsx +26 -0
- package/UI/Components/Tooltip/Tooltip.tsx +8 -1
- package/UI/Styles/Theme.css +14 -2
- package/UI/Utils/SensitiveUrlToken.ts +10 -5
- package/Utils/API.ts +247 -2
- package/Utils/AiRemediation/CommandPolicy.ts +1 -1
- package/Utils/AiRemediation/KubectlPolicy.ts +1 -1
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +46 -2
- package/Utils/Incident/IncidentNoteTemplateVariables.ts +304 -0
- package/Utils/Markdown/MarkdownEscape.ts +65 -0
- package/Utils/ProbeNetworkFailureUtil.ts +673 -0
- package/build/dist/Models/DatabaseModels/Incident.js +267 -1
- package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js +207 -1
- package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js +31 -0
- package/build/dist/Models/DatabaseModels/IncidentEpisode.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +124 -1
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js +385 -0
- package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +3 -3
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +56 -5
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js +51 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerJob.js +74 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +56 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js +131 -0
- package/build/dist/Models/DatabaseModels/StatusPageSubscriber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +134 -3
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +6 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +17 -10
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +144 -24
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/IncidentAPI.js +100 -1
- package/build/dist/Server/API/IncidentAPI.js.map +1 -1
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +436 -22
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +69 -13
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProxmoxResourceAPI.js +187 -14
- package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +417 -176
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageSubscriberAPI.js +52 -13
- package/build/dist/Server/API/StatusPageSubscriberAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +27 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795300000000-SkipHiddenIncidentCreatedNotifications.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js +57 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795400000000-AddIncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795500000000-AddIncidentTemplateStatusPageScopeFlag.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795600000000-AddStatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js +26 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795700000000-AddStatusPageSubscriberIsAddedByTeam.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795800000000-AddIncidentCustomFieldCreateAndNotificationSettings.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1795900000000-AddSubscriberNotificationClaimedAt.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js +84 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +20 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +3 -0
- package/build/dist/Server/Infrastructure/Semaphore.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +89 -3
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js +149 -0
- package/build/dist/Server/Middleware/SubscriberNotificationPreviewRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js +190 -0
- package/build/dist/Server/Middleware/SubscriberNotificationTestSendRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/TelemetryIngest.js +34 -19
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +59 -1
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +248 -13
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +51 -15
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +56 -7
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +204 -8
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +24 -0
- package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +14 -0
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js +26 -0
- package/build/dist/Server/Services/IncidentEpisodeStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js +26 -1
- package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +1251 -72
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +51 -15
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/IncidentStateTimelineService.js +12 -0
- package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +83 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js +158 -0
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js +1145 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +842 -371
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +86 -17
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +22 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxResourceService.js +258 -3
- package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
- package/build/dist/Server/Services/RunnerJobService.js +178 -92
- package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
- package/build/dist/Server/Services/RunnerService.js +1 -1
- package/build/dist/Server/Services/RunnerService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +26 -1
- package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +582 -20
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +316 -46
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/SmsService.js +2 -22
- package/build/dist/Server/Services/SmsService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +47 -9
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +237 -32
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js +109 -0
- package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageSubscriberService.js +925 -99
- package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceSettingService.js +833 -7
- package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
- package/build/dist/Server/Types/Markdown.js +110 -6
- package/build/dist/Server/Types/Markdown.js.map +1 -1
- package/build/dist/Server/Types/Workflow/Components/Email.js +55 -6
- package/build/dist/Server/Types/Workflow/Components/Email.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +52 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +13 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +7 -3
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +29 -15
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +56 -20
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +39 -5
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js +30 -3
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +13 -2
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +1 -1
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +4 -2
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js +211 -0
- package/build/dist/Server/Utils/CustomField/CustomFieldRename.js.map +1 -0
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +41 -12
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js +101 -0
- package/build/dist/Server/Utils/Mail/PinnedSmtpSocket.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js +9 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaObservationBuilder.js.map +1 -1
- package/build/dist/Server/Utils/SSRFProtection.js +48 -6
- package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js +631 -0
- package/build/dist/Server/Utils/StatusPage/IncidentStatusPageScope.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js +403 -0
- package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js +451 -0
- package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js +13 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageExclusion.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js +91 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageReadAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js +101 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeNotice.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js +47 -0
- package/build/dist/Server/Utils/StatusPage/StatusPageSubscriberUnsubscribeToken.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js +273 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js +73 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationClaim.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js +722 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationDeliveryRecord.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js +102 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationFanOut.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js +527 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js +278 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationResendAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js +137 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationRunLimit.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js +103 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberNotificationTiming.js.map +1 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js +114 -0
- package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageResource.js +39 -7
- package/build/dist/Server/Utils/StatusPageResource.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +111 -6
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +40 -4
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js +296 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js +699 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +77 -19
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
- package/build/dist/Server/Utils/VM/VMRunner.js +1 -0
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js +3 -0
- package/build/dist/Server/Utils/Workflow/OAuth2TokenClient.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +505 -42
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIRunType.js +9 -4
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +10 -16
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js +28 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldOrder.js +36 -0
- package/build/dist/Types/CustomField/CustomFieldOrder.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js +135 -0
- package/build/dist/Types/CustomField/CustomFieldSavedViews.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js +27 -0
- package/build/dist/Types/CustomField/CustomFieldTemplateMerge.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldType.js +12 -0
- package/build/dist/Types/CustomField/CustomFieldType.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js +126 -0
- package/build/dist/Types/CustomField/CustomFieldValueFormat.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js +280 -0
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js +150 -0
- package/build/dist/Types/CustomField/CustomFieldVariableKey.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +72 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +20 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js +17 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js.map +1 -0
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +4 -4
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/SafeHtml.js +84 -0
- package/build/dist/Types/SafeHtml.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js +117 -0
- package/build/dist/Types/StatusPage/IncidentCreatedRenotify.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js +86 -0
- package/build/dist/Types/StatusPage/IncidentCreatedResend.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js +246 -0
- package/build/dist/Types/StatusPage/IncidentScopeAddedPagesNotification.js.map +1 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js +183 -0
- package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js +277 -0
- package/build/dist/Types/StatusPage/StatusPageSubscriberUnsubscribe.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js +27 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationInterruption.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js +190 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationPreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js +102 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationResend.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js +97 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateCompiler.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js +175 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js.map +1 -0
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +144 -4
- package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -1
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js +29 -9
- package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js.map +1 -1
- package/build/dist/Types/Team/ComplianceNotificationChannel.js +23 -0
- package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRule.js +304 -0
- package/build/dist/Types/Team/ComplianceRule.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRuleType.js +21 -0
- package/build/dist/Types/Team/ComplianceRuleType.js.map +1 -1
- package/build/dist/Types/Team/TeamComplianceStatus.js +2 -0
- package/build/dist/Types/Team/TeamComplianceStatus.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +25 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js +20 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/RowActions.js +113 -0
- package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js +71 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js.map +1 -0
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +16 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +16 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +27 -5
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +61 -194
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +84 -26
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +75 -196
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +133 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js +26 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js +371 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +16 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js +35 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js +107 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js +41 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js +117 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js +121 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -7
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +70 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +305 -38
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js +169 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +212 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -0
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +64 -49
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +89 -14
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +11 -2
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +39 -5
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Validation.js +1 -1
- package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +69 -54
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/List/ListRow.js +4 -39
- package/build/dist/UI/Components/List/ListRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +31 -8
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +10 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +139 -21
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +30 -8
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/AnalyticsModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +12 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +13 -1
- package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +253 -14
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +43 -13
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/Item.js +2 -38
- package/build/dist/UI/Components/OrderedStatesList/Item.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +53 -15
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +6 -2
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +12 -75
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +32 -7
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +27 -9
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +11 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js +272 -0
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Toggle/Toggle.js +14 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/SensitiveUrlToken.js +10 -5
- package/build/dist/UI/Utils/SensitiveUrlToken.js.map +1 -1
- package/build/dist/Utils/API.js +177 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +27 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -1
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js +155 -0
- package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js.map +1 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js +48 -0
- package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -1
- package/build/dist/Utils/ProbeNetworkFailureUtil.js +460 -0
- package/build/dist/Utils/ProbeNetworkFailureUtil.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import URL from "../API/URL";
|
|
2
|
+
/*
|
|
3
|
+
* The unsubscribe link every status page subscriber notification carries, and
|
|
4
|
+
* what the status page's unsubscribe page and its API say about one.
|
|
5
|
+
*
|
|
6
|
+
* WHY A TOKEN
|
|
7
|
+
*
|
|
8
|
+
* The link used to be the subscriber's manage page,
|
|
9
|
+
* {statusPageUrl}/update-subscription/{subscriberId}. On a private status page
|
|
10
|
+
* that page, like everything else on the page, needs a signed-in visitor - and
|
|
11
|
+
* the people a private page emails are often not people who have an account on
|
|
12
|
+
* it (a site's staff, a mailing list). So an internal audience had no way to
|
|
13
|
+
* stop the emails. The link now carries a random token that belongs to the one
|
|
14
|
+
* subscription (StatusPageSubscriber.unsubscribeToken): holding the link is
|
|
15
|
+
* what lets its recipient unsubscribe, signed in or not, on a public page or a
|
|
16
|
+
* private one, and nothing about the page itself is shown to them.
|
|
17
|
+
*
|
|
18
|
+
* WHY A CONFIRMATION
|
|
19
|
+
*
|
|
20
|
+
* Opening the link changes nothing. Mail scanners and link previewers fetch
|
|
21
|
+
* every link in a message, and a single stray click is not a decision - least
|
|
22
|
+
* of all for an address a team added on purpose, such as a site's mailing
|
|
23
|
+
* list, where one reader could otherwise take the whole site off the list. The
|
|
24
|
+
* page asks, and only its POST unsubscribes.
|
|
25
|
+
*
|
|
26
|
+
* THE LINK'S SHAPE
|
|
27
|
+
*
|
|
28
|
+
* {statusPageUrl}/unsubscribe/{subscriberId}-{token}
|
|
29
|
+
*
|
|
30
|
+
* The subscriber id and the token travel as ONE path segment on purpose. The
|
|
31
|
+
* status page registers "unsubscribe" as a route whose next segment is a
|
|
32
|
+
* bearer credential (Common/Server/Views/Partials/SensitiveUrlToken.ejs), so
|
|
33
|
+
* the credential is moved out of the address bar before any analytics tag a
|
|
34
|
+
* status page loads can report it - the same treatment a password reset link
|
|
35
|
+
* gets. That mechanism strips exactly one segment. The id is kept in the
|
|
36
|
+
* credential so the server can find the subscription by its primary key and
|
|
37
|
+
* compare the token in constant time, rather than look the token itself up.
|
|
38
|
+
*
|
|
39
|
+
* A credential with no token - just the id - is what an out-of-date link
|
|
40
|
+
* leads to (see StatusPageSubscriberAPI's old GET route); the page then says
|
|
41
|
+
* the link has expired instead of offering to unsubscribe.
|
|
42
|
+
*
|
|
43
|
+
* Browser-safe: the status page app, the server and the workers all use this
|
|
44
|
+
* file, so they agree on the link, the credential and the answers.
|
|
45
|
+
*/
|
|
46
|
+
// What the unsubscribe API answers about a link, before and after confirming.
|
|
47
|
+
export var StatusPageSubscriberUnsubscribeState;
|
|
48
|
+
(function (StatusPageSubscriberUnsubscribeState) {
|
|
49
|
+
// The link is good and the subscription is live: the page asks to confirm.
|
|
50
|
+
StatusPageSubscriberUnsubscribeState["Subscribed"] = "Subscribed";
|
|
51
|
+
// The link is good and the subscription is already cancelled.
|
|
52
|
+
StatusPageSubscriberUnsubscribeState["Unsubscribed"] = "Unsubscribed";
|
|
53
|
+
/*
|
|
54
|
+
* Everything else: a wrong token, a subscriber that does not exist or was
|
|
55
|
+
* deleted, one on another status page, or a malformed link. One answer for
|
|
56
|
+
* all of them, so the API cannot be used to find out which subscriptions
|
|
57
|
+
* exist.
|
|
58
|
+
*/
|
|
59
|
+
StatusPageSubscriberUnsubscribeState["Invalid"] = "Invalid";
|
|
60
|
+
})(StatusPageSubscriberUnsubscribeState || (StatusPageSubscriberUnsubscribeState = {}));
|
|
61
|
+
// Which kind of subscription a link belongs to, so the page can name it.
|
|
62
|
+
export var StatusPageSubscriberUnsubscribeChannel;
|
|
63
|
+
(function (StatusPageSubscriberUnsubscribeChannel) {
|
|
64
|
+
StatusPageSubscriberUnsubscribeChannel["Email"] = "Email";
|
|
65
|
+
StatusPageSubscriberUnsubscribeChannel["SMS"] = "SMS";
|
|
66
|
+
StatusPageSubscriberUnsubscribeChannel["Slack"] = "Slack";
|
|
67
|
+
StatusPageSubscriberUnsubscribeChannel["MicrosoftTeams"] = "MicrosoftTeams";
|
|
68
|
+
StatusPageSubscriberUnsubscribeChannel["Webhook"] = "Webhook";
|
|
69
|
+
})(StatusPageSubscriberUnsubscribeChannel || (StatusPageSubscriberUnsubscribeChannel = {}));
|
|
70
|
+
const UUID_PATTERN = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}";
|
|
71
|
+
const TOKEN_PATTERN = /^[0-9a-f]{64}$/;
|
|
72
|
+
const CREDENTIAL_PATTERN = new RegExp(`^(${UUID_PATTERN})(?:-([0-9a-fA-F]{64}))?$`);
|
|
73
|
+
/*
|
|
74
|
+
* An unsubscribe link's credential anywhere in a text: the route segment, the
|
|
75
|
+
* subscriber id, and the 64 hex characters of its token. No lookahead after
|
|
76
|
+
* the token, so a token that some template runs straight into more text is
|
|
77
|
+
* still caught.
|
|
78
|
+
*/
|
|
79
|
+
const LINK_TOKEN_PATTERN = new RegExp(`(/unsubscribe/${UUID_PATTERN})-[0-9a-fA-F]{64}`, "g");
|
|
80
|
+
class StatusPageSubscriberUnsubscribe {
|
|
81
|
+
static isWellFormedToken(value) {
|
|
82
|
+
return typeof value === "string" && TOKEN_PATTERN.test(value);
|
|
83
|
+
}
|
|
84
|
+
/*
|
|
85
|
+
* The text with the token of every unsubscribe link in it replaced by
|
|
86
|
+
* "[redacted]": ".../unsubscribe/{id}-[redacted]".
|
|
87
|
+
*
|
|
88
|
+
* For any copy of a message that is kept where people other than its
|
|
89
|
+
* recipient can read it. The token is the whole of what lets the link's
|
|
90
|
+
* holder cancel the subscription without signing in, on a private status
|
|
91
|
+
* page too, so it may only ever leave the server inside the message to the
|
|
92
|
+
* subscription's own contact. An SMS is the case in point: the SMS log keeps
|
|
93
|
+
* its text, and project members who may not touch subscribers (Viewer, and
|
|
94
|
+
* any role with Read SMS Log) can read that log. The id is kept, so the log
|
|
95
|
+
* still says which subscription the message went to.
|
|
96
|
+
*/
|
|
97
|
+
static redactCredentials(text) {
|
|
98
|
+
if (!text || typeof text !== "string") {
|
|
99
|
+
return text;
|
|
100
|
+
}
|
|
101
|
+
return text.replace(LINK_TOKEN_PATTERN, `$1-${StatusPageSubscriberUnsubscribe.REDACTED_TOKEN}`);
|
|
102
|
+
}
|
|
103
|
+
/*
|
|
104
|
+
* The one path segment the link carries: "{subscriberId}-{token}", or just
|
|
105
|
+
* the id when there is no token.
|
|
106
|
+
*/
|
|
107
|
+
static buildCredential(data) {
|
|
108
|
+
const subscriberId = data.subscriberId.toString().toLowerCase();
|
|
109
|
+
if (!StatusPageSubscriberUnsubscribe.isWellFormedToken(data.unsubscribeToken)) {
|
|
110
|
+
return subscriberId;
|
|
111
|
+
}
|
|
112
|
+
return `${subscriberId}-${data.unsubscribeToken}`;
|
|
113
|
+
}
|
|
114
|
+
/*
|
|
115
|
+
* Read a credential back. Returns null for anything that is not one - a
|
|
116
|
+
* stale token from another flow that shares the same sessionStorage slot,
|
|
117
|
+
* a truncated link, a guess - so the page can show its "invalid link"
|
|
118
|
+
* state without asking the server.
|
|
119
|
+
*/
|
|
120
|
+
static parseCredential(value) {
|
|
121
|
+
if (!value || typeof value !== "string") {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const match = value
|
|
125
|
+
.trim()
|
|
126
|
+
.match(CREDENTIAL_PATTERN);
|
|
127
|
+
if (!match || !match[1]) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
subscriberId: match[1].toLowerCase(),
|
|
132
|
+
token: match[2] ? match[2].toLowerCase() : null,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/*
|
|
136
|
+
* The link that goes into every subscriber notification. Without a token -
|
|
137
|
+
* which only a subscription created around the migration could lack - the
|
|
138
|
+
* link still leads somewhere useful: the page that says the link is out of
|
|
139
|
+
* date and what to do instead.
|
|
140
|
+
*/
|
|
141
|
+
static buildLink(data) {
|
|
142
|
+
return URL.fromString(data.statusPageUrl.toString()).addRoute(`/${StatusPageSubscriberUnsubscribe.PAGE_ROUTE_SEGMENT}/${StatusPageSubscriberUnsubscribe.buildCredential({
|
|
143
|
+
subscriberId: data.subscriberId,
|
|
144
|
+
unsubscribeToken: data.unsubscribeToken,
|
|
145
|
+
})}`);
|
|
146
|
+
}
|
|
147
|
+
/*
|
|
148
|
+
* The link an SMS to this subscriber carries where every other message
|
|
149
|
+
* carries its unsubscribe link (unsubscribeUrl, from buildLink).
|
|
150
|
+
*
|
|
151
|
+
* On a public status page an SMS keeps the subscriber's manage page,
|
|
152
|
+
* {statusPageUrl}/update-subscription/{subscriberId}, as it always had.
|
|
153
|
+
* That page works there without signing in, and is 57 characters shorter
|
|
154
|
+
* than the token link - and an SMS is billed by the 160-character segment,
|
|
155
|
+
* so the token link would push most default subscriber texts into another
|
|
156
|
+
* segment, at a cost to every SMS subscriber on every notification, for
|
|
157
|
+
* nothing the manage page does not already do. Opening either link changes
|
|
158
|
+
* nothing by itself.
|
|
159
|
+
*
|
|
160
|
+
* On a private status page (or when it is not known whether the page is
|
|
161
|
+
* public) the manage page needs a signed-in visitor, so the SMS carries the
|
|
162
|
+
* unsubscribe link, the only way its recipient can stop the texts.
|
|
163
|
+
*
|
|
164
|
+
* Email, Slack, Microsoft Teams and webhooks carry the unsubscribe link on
|
|
165
|
+
* every page: length costs nothing there, and its confirmation page is
|
|
166
|
+
* what keeps mail scanners from unsubscribing anyone.
|
|
167
|
+
*/
|
|
168
|
+
static buildSmsLink(data) {
|
|
169
|
+
if (data.isPublicStatusPage === true) {
|
|
170
|
+
return StatusPageSubscriberUnsubscribe.buildManageSubscriptionLink({
|
|
171
|
+
statusPageUrl: data.statusPageUrl,
|
|
172
|
+
subscriberId: data.subscriberId,
|
|
173
|
+
}).toString();
|
|
174
|
+
}
|
|
175
|
+
return data.unsubscribeUrl.toString();
|
|
176
|
+
}
|
|
177
|
+
/*
|
|
178
|
+
* The subscriber's manage page, where a subscriber on a public status page
|
|
179
|
+
* (or a signed-in one on a private page) chooses which resources and event
|
|
180
|
+
* types they hear about. It is keyed by the subscriber id alone and is still
|
|
181
|
+
* what the "manage your subscription" email links to, and what an SMS from
|
|
182
|
+
* a public status page carries (see buildSmsLink); every other
|
|
183
|
+
* notification links to the unsubscribe page instead, which offers this one
|
|
184
|
+
* on public pages.
|
|
185
|
+
*/
|
|
186
|
+
static buildManageSubscriptionLink(data) {
|
|
187
|
+
return URL.fromString(data.statusPageUrl.toString()).addRoute(`/update-subscription/${data.subscriberId.toString()}`);
|
|
188
|
+
}
|
|
189
|
+
/*
|
|
190
|
+
* What the unsubscribe page names the subscription by. An email address is
|
|
191
|
+
* shown in full: it is where the link was sent, and recognising a shared
|
|
192
|
+
* address such as site03-all@ is the point. A phone number is masked to its
|
|
193
|
+
* last four digits. Slack and Teams show the workspace name they were
|
|
194
|
+
* registered with, and a webhook only its host - never a webhook URL, which
|
|
195
|
+
* is itself a credential.
|
|
196
|
+
*
|
|
197
|
+
* The team's own notice about an unsubscribe passes maskPhone: false - the
|
|
198
|
+
* team can read the number on the dashboard already, and needs it to know
|
|
199
|
+
* which subscriber left.
|
|
200
|
+
*/
|
|
201
|
+
static describeContact(subscriber, options) {
|
|
202
|
+
const text = (value) => {
|
|
203
|
+
if (value === null || value === undefined) {
|
|
204
|
+
return "";
|
|
205
|
+
}
|
|
206
|
+
return String(value).trim();
|
|
207
|
+
};
|
|
208
|
+
const email = text(subscriber.subscriberEmail);
|
|
209
|
+
if (email) {
|
|
210
|
+
return {
|
|
211
|
+
channel: StatusPageSubscriberUnsubscribeChannel.Email,
|
|
212
|
+
contact: email,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const phone = text(subscriber.subscriberPhone);
|
|
216
|
+
if (phone) {
|
|
217
|
+
return {
|
|
218
|
+
channel: StatusPageSubscriberUnsubscribeChannel.SMS,
|
|
219
|
+
contact: (options === null || options === void 0 ? void 0 : options.maskPhone) === false
|
|
220
|
+
? phone
|
|
221
|
+
: StatusPageSubscriberUnsubscribe.maskPhone(phone),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
if (text(subscriber.slackIncomingWebhookUrl) ||
|
|
225
|
+
text(subscriber.slackWorkspaceName)) {
|
|
226
|
+
return {
|
|
227
|
+
channel: StatusPageSubscriberUnsubscribeChannel.Slack,
|
|
228
|
+
contact: text(subscriber.slackWorkspaceName),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (text(subscriber.microsoftTeamsIncomingWebhookUrl) ||
|
|
232
|
+
text(subscriber.microsoftTeamsWorkspaceName)) {
|
|
233
|
+
return {
|
|
234
|
+
channel: StatusPageSubscriberUnsubscribeChannel.MicrosoftTeams,
|
|
235
|
+
contact: text(subscriber.microsoftTeamsWorkspaceName),
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
const webhook = text(subscriber.subscriberWebhook);
|
|
239
|
+
if (webhook) {
|
|
240
|
+
return {
|
|
241
|
+
channel: StatusPageSubscriberUnsubscribeChannel.Webhook,
|
|
242
|
+
contact: StatusPageSubscriberUnsubscribe.hostOf(webhook),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
// Every digit but the last four replaced, so the number is recognisable only to its owner.
|
|
248
|
+
static maskPhone(phone) {
|
|
249
|
+
const digitCount = (phone.match(/\d/g) || []).length;
|
|
250
|
+
let digitsSeen = 0;
|
|
251
|
+
return phone.replace(/\d/g, (digit) => {
|
|
252
|
+
digitsSeen++;
|
|
253
|
+
return digitsSeen > digitCount - 4 ? digit : "•";
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
static hostOf(url) {
|
|
257
|
+
const match = url.match(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/(?:[^@/?#]*@)?([^/?#:]+)/);
|
|
258
|
+
return match && match[1] ? match[1].toLowerCase() : "";
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/*
|
|
262
|
+
* The status page route segment the link opens, on both a custom domain
|
|
263
|
+
* (/unsubscribe/...) and the page's own address (/status-page/{id}/unsubscribe/...).
|
|
264
|
+
* SensitiveUrlToken.ejs and Common/UI/Utils/SensitiveUrlToken.ts list it
|
|
265
|
+
* as a token-bearing route.
|
|
266
|
+
*/
|
|
267
|
+
StatusPageSubscriberUnsubscribe.PAGE_ROUTE_SEGMENT = "unsubscribe";
|
|
268
|
+
/*
|
|
269
|
+
* 32 random bytes as lowercase hex (StatusPageSubscriberUnsubscribeToken
|
|
270
|
+
* generates them; the migration backfills the same shape from two random
|
|
271
|
+
* UUIDs with their dashes removed).
|
|
272
|
+
*/
|
|
273
|
+
StatusPageSubscriberUnsubscribe.TOKEN_LENGTH = 64;
|
|
274
|
+
// What redactCredentials puts where a token was.
|
|
275
|
+
StatusPageSubscriberUnsubscribe.REDACTED_TOKEN = "[redacted]";
|
|
276
|
+
export default StatusPageSubscriberUnsubscribe;
|
|
277
|
+
//# sourceMappingURL=StatusPageSubscriberUnsubscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusPageSubscriberUnsubscribe.js","sourceRoot":"","sources":["../../../../Types/StatusPage/StatusPageSubscriberUnsubscribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* What a subscriber notification says when its send was interrupted: its
|
|
3
|
+
* worker crashed, was redeployed or lost its database connection part-way,
|
|
4
|
+
* so nothing was left to settle it, and the sweeper
|
|
5
|
+
* (StatusPageSubscriber:TimeoutStuckNotifications) marked it Failed rather
|
|
6
|
+
* than leave it "being sent" forever.
|
|
7
|
+
*
|
|
8
|
+
* Shared by the sweeper, which writes it, and anything that wants to tell an
|
|
9
|
+
* interruption from an ordinary failure.
|
|
10
|
+
*/
|
|
11
|
+
class SubscriberNotificationInterruption {
|
|
12
|
+
static isInterruptedMessage(message) {
|
|
13
|
+
return Boolean(message &&
|
|
14
|
+
message.startsWith(SubscriberNotificationInterruption.messagePrefix));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
SubscriberNotificationInterruption.messagePrefix = "Interrupted:";
|
|
18
|
+
/*
|
|
19
|
+
* For the incident created notification, which records the status pages
|
|
20
|
+
* it has told as it goes (Incident.statusPagesNotifiedOnCreation), so
|
|
21
|
+
* Retry picks up after them.
|
|
22
|
+
*/
|
|
23
|
+
SubscriberNotificationInterruption.resumesMessage = `${SubscriberNotificationInterruption.messagePrefix} this notification stopped being sent before it finished, because the server sending it restarted or stopped responding. The status pages it finished are recorded, so Retry sends it only to the status pages that were not sent it in full.`;
|
|
24
|
+
// For every other notification, which Retry sends to every status page.
|
|
25
|
+
SubscriberNotificationInterruption.resendsMessage = `${SubscriberNotificationInterruption.messagePrefix} this notification stopped being sent before it finished, because the server sending it restarted or stopped responding, so some subscribers may not have been sent it. Retry sends it again to every status page, including the subscribers who already got it.`;
|
|
26
|
+
export default SubscriberNotificationInterruption;
|
|
27
|
+
//# sourceMappingURL=SubscriberNotificationInterruption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriberNotificationInterruption.js","sourceRoot":"","sources":["../../../../Types/StatusPage/SubscriberNotificationInterruption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAqB,kCAAkC;IAa9C,MAAM,CAAC,oBAAoB,CAChC,OAAkC;QAElC,OAAO,OAAO,CACZ,OAAO;YACL,OAAO,CAAC,UAAU,CAAC,kCAAkC,CAAC,aAAa,CAAC,CACvE,CAAC;IACJ,CAAC;;AAnBsB,gDAAa,GAAW,cAAc,CAAC;AAE9D;;;;GAIG;AACoB,iDAAc,GAAW,GAAG,kCAAkC,CAAC,aAAa,+OAA+O,CAAC;AAEnV,wEAAwE;AACjD,iDAAc,GAAW,GAAG,kCAAkC,CAAC,aAAa,kQAAkQ,CAAC;eAXnV,kCAAkC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import URL from "../API/URL";
|
|
2
|
+
import IncidentSubscriberAudience from "./IncidentSubscriberAudience";
|
|
3
|
+
import StatusPageSubscriberUnsubscribe from "./StatusPageSubscriberUnsubscribe";
|
|
4
|
+
/*
|
|
5
|
+
* "Preview notification" and "Send test to me": the email a status page's
|
|
6
|
+
* subscribers would get about an incident, shown before anything is sent -
|
|
7
|
+
* on the last step of declaring an incident, and while a public note is being
|
|
8
|
+
* written.
|
|
9
|
+
*
|
|
10
|
+
* The server (App/FeatureSet/Notification/API/SubscriberNotificationPreview)
|
|
11
|
+
* builds each page's email through SubscriberIncidentEmailBuilder, the one
|
|
12
|
+
* code path the subscriber jobs send through, and renders it with the mailer's
|
|
13
|
+
* own MailService.render. So the subject and HTML shown here are the ones a
|
|
14
|
+
* subscriber gets, apart from one thing: every subscriber's unsubscribe link
|
|
15
|
+
* carries their own token, which a preview has no subscriber to take it from,
|
|
16
|
+
* so the preview's link is a sample (getPreviewUnsubscribeUrl).
|
|
17
|
+
*
|
|
18
|
+
* Only counts ever leave the server: no subscriber address is read out.
|
|
19
|
+
*
|
|
20
|
+
* Everything here is shared by the server, which answers, and the dashboard,
|
|
21
|
+
* which asks and shows, so the two cannot drift apart.
|
|
22
|
+
*/
|
|
23
|
+
// Which email is previewed.
|
|
24
|
+
export var SubscriberNotificationPreviewEvent;
|
|
25
|
+
(function (SubscriberNotificationPreviewEvent) {
|
|
26
|
+
// "Incident created", for an incident that is being declared.
|
|
27
|
+
SubscriberNotificationPreviewEvent["IncidentCreated"] = "IncidentCreated";
|
|
28
|
+
// "Incident update", for a public note being written on an incident.
|
|
29
|
+
SubscriberNotificationPreviewEvent["IncidentPublicNoteCreated"] = "IncidentPublicNoteCreated";
|
|
30
|
+
})(SubscriberNotificationPreviewEvent || (SubscriberNotificationPreviewEvent = {}));
|
|
31
|
+
/*
|
|
32
|
+
* Why a status page's subscribers get the email they get. The jobs use the
|
|
33
|
+
* page's custom email template only when it has a body and the page sends
|
|
34
|
+
* through its own SMTP server; everything else gets the default email.
|
|
35
|
+
*/
|
|
36
|
+
export var SubscriberEmailTemplateChoiceReason;
|
|
37
|
+
(function (SubscriberEmailTemplateChoiceReason) {
|
|
38
|
+
// The page's custom template, sent through the page's own SMTP server.
|
|
39
|
+
SubscriberEmailTemplateChoiceReason["CustomTemplate"] = "CustomTemplate";
|
|
40
|
+
// No custom email template is linked to the page for this event.
|
|
41
|
+
SubscriberEmailTemplateChoiceReason["NoCustomTemplate"] = "NoCustomTemplate";
|
|
42
|
+
// A custom template is linked, but the page has no SMTP server of its own.
|
|
43
|
+
SubscriberEmailTemplateChoiceReason["CustomTemplateNeedsCustomSmtp"] = "CustomTemplateNeedsCustomSmtp";
|
|
44
|
+
// A custom template is linked, but its body is empty.
|
|
45
|
+
SubscriberEmailTemplateChoiceReason["CustomTemplateIsEmpty"] = "CustomTemplateIsEmpty";
|
|
46
|
+
})(SubscriberEmailTemplateChoiceReason || (SubscriberEmailTemplateChoiceReason = {}));
|
|
47
|
+
// Why nothing will be sent, whatever the email would look like.
|
|
48
|
+
export var SubscriberNotificationPreviewNothingSentReason;
|
|
49
|
+
(function (SubscriberNotificationPreviewNothingSentReason) {
|
|
50
|
+
// No monitor: subscribers hear about an incident through its monitors.
|
|
51
|
+
SubscriberNotificationPreviewNothingSentReason["NoMonitors"] = "NoMonitors";
|
|
52
|
+
// The incident exists and is hidden from status pages (or private).
|
|
53
|
+
SubscriberNotificationPreviewNothingSentReason["HiddenFromStatusPages"] = "HiddenFromStatusPages";
|
|
54
|
+
// The incident being declared is private.
|
|
55
|
+
SubscriberNotificationPreviewNothingSentReason["PrivateIncident"] = "PrivateIncident";
|
|
56
|
+
// 'Notify Status Page Subscribers' is off on the incident being declared.
|
|
57
|
+
SubscriberNotificationPreviewNothingSentReason["NotifyOff"] = "NotifyOff";
|
|
58
|
+
// No status page that lists its monitors will show it.
|
|
59
|
+
SubscriberNotificationPreviewNothingSentReason["NoStatusPages"] = "NoStatusPages";
|
|
60
|
+
})(SubscriberNotificationPreviewNothingSentReason || (SubscriberNotificationPreviewNothingSentReason = {}));
|
|
61
|
+
class SubscriberNotificationPreview {
|
|
62
|
+
/*
|
|
63
|
+
* The unsubscribe link a preview and a test email carry. A subscriber's
|
|
64
|
+
* real link carries its own token (StatusPageSubscriberUnsubscribe), which
|
|
65
|
+
* a preview has no subscriber for, so this one names no subscription: the
|
|
66
|
+
* status page opens it as an out-of-date link and changes nothing.
|
|
67
|
+
*/
|
|
68
|
+
static getPreviewUnsubscribeUrl(statusPageUrl) {
|
|
69
|
+
return URL.fromString(statusPageUrl)
|
|
70
|
+
.addRoute(`/${StatusPageSubscriberUnsubscribe.PAGE_ROUTE_SEGMENT}/preview`)
|
|
71
|
+
.toString();
|
|
72
|
+
}
|
|
73
|
+
static toJSON(result) {
|
|
74
|
+
return {
|
|
75
|
+
event: result.event,
|
|
76
|
+
nothingSentReason: result.nothingSentReason,
|
|
77
|
+
statusPages: result.statusPages.map((statusPage) => {
|
|
78
|
+
return {
|
|
79
|
+
statusPageId: statusPage.statusPageId,
|
|
80
|
+
name: statusPage.name,
|
|
81
|
+
subscriberCounts: Object.assign({}, statusPage.subscriberCounts),
|
|
82
|
+
subject: statusPage.subject,
|
|
83
|
+
html: statusPage.html,
|
|
84
|
+
templateChoice: {
|
|
85
|
+
usesCustomTemplate: statusPage.templateChoice.usesCustomTemplate,
|
|
86
|
+
reason: statusPage.templateChoice.reason,
|
|
87
|
+
customTemplateName: statusPage.templateChoice.customTemplateName || null,
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}),
|
|
91
|
+
audience: IncidentSubscriberAudience.toJSON(result.audience),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/*
|
|
95
|
+
* The server's answer as the dashboard receives it. Read defensively: a
|
|
96
|
+
* field that is missing or of the wrong type reads as "nothing", so a
|
|
97
|
+
* preview can never break the form it opens from.
|
|
98
|
+
*/
|
|
99
|
+
static fromJSON(json) {
|
|
100
|
+
const events = Object.values(SubscriberNotificationPreviewEvent);
|
|
101
|
+
const reasons = Object.values(SubscriberNotificationPreviewNothingSentReason);
|
|
102
|
+
const choiceReasons = Object.values(SubscriberEmailTemplateChoiceReason);
|
|
103
|
+
const statusPagesJson = Array.isArray(json["statusPages"])
|
|
104
|
+
? json["statusPages"].filter((item) => {
|
|
105
|
+
return Boolean(item) && typeof item === "object";
|
|
106
|
+
})
|
|
107
|
+
: [];
|
|
108
|
+
return {
|
|
109
|
+
event: events.includes(String(json["event"]))
|
|
110
|
+
? json["event"]
|
|
111
|
+
: SubscriberNotificationPreviewEvent.IncidentCreated,
|
|
112
|
+
nothingSentReason: reasons.includes(String(json["nothingSentReason"]))
|
|
113
|
+
? json["nothingSentReason"]
|
|
114
|
+
: null,
|
|
115
|
+
statusPages: statusPagesJson.map((item) => {
|
|
116
|
+
const choice = item["templateChoice"] || {};
|
|
117
|
+
return {
|
|
118
|
+
statusPageId: String(item["statusPageId"] || ""),
|
|
119
|
+
name: String(item["name"] || ""),
|
|
120
|
+
subscriberCounts: IncidentSubscriberAudience.countsFromJSON(item["subscriberCounts"]),
|
|
121
|
+
subject: String(item["subject"] || ""),
|
|
122
|
+
html: String(item["html"] || ""),
|
|
123
|
+
templateChoice: {
|
|
124
|
+
usesCustomTemplate: choice["usesCustomTemplate"] === true,
|
|
125
|
+
reason: choiceReasons.includes(String(choice["reason"]))
|
|
126
|
+
? choice["reason"]
|
|
127
|
+
: SubscriberEmailTemplateChoiceReason.NoCustomTemplate,
|
|
128
|
+
customTemplateName: typeof choice["customTemplateName"] === "string" &&
|
|
129
|
+
choice["customTemplateName"]
|
|
130
|
+
? choice["customTemplateName"]
|
|
131
|
+
: undefined,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}),
|
|
135
|
+
audience: IncidentSubscriberAudience.fromJSON(json["audience"] || {}),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// A request as it travels: the dates as ISO strings.
|
|
139
|
+
static requestToJSON(request) {
|
|
140
|
+
const json = {
|
|
141
|
+
event: request.event,
|
|
142
|
+
};
|
|
143
|
+
if (request.event === SubscriberNotificationPreviewEvent.IncidentCreated) {
|
|
144
|
+
json["incident"] = {
|
|
145
|
+
title: request.incident.title,
|
|
146
|
+
description: request.incident.description,
|
|
147
|
+
incidentSeverityId: request.incident.incidentSeverityId,
|
|
148
|
+
monitorIds: [...request.incident.monitorIds],
|
|
149
|
+
statusPageIds: [...request.incident.statusPageIds],
|
|
150
|
+
labelIds: [...request.incident.labelIds],
|
|
151
|
+
customFields: Object.assign({}, request.incident.customFields),
|
|
152
|
+
isPrivate: request.incident.isPrivate,
|
|
153
|
+
shouldStatusPageSubscribersBeNotifiedOnIncidentCreated: request.incident
|
|
154
|
+
.shouldStatusPageSubscribersBeNotifiedOnIncidentCreated,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
json["incidentId"] = request.incidentId;
|
|
159
|
+
json["note"] = request.note;
|
|
160
|
+
json["postedAt"] = request.postedAt
|
|
161
|
+
? request.postedAt.toISOString()
|
|
162
|
+
: null;
|
|
163
|
+
}
|
|
164
|
+
if ("statusPageId" in request && request.statusPageId) {
|
|
165
|
+
json["statusPageId"] = request.statusPageId;
|
|
166
|
+
}
|
|
167
|
+
return json;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Where the router is mounted, under the notification API.
|
|
171
|
+
SubscriberNotificationPreview.routerPath = "/subscriber-notification-preview";
|
|
172
|
+
SubscriberNotificationPreview.previewPath = "/preview";
|
|
173
|
+
SubscriberNotificationPreview.sendTestPath = "/send-test";
|
|
174
|
+
// The longest note or description a preview takes.
|
|
175
|
+
SubscriberNotificationPreview.maxTextLength = 100000;
|
|
176
|
+
// The longest title a preview takes.
|
|
177
|
+
SubscriberNotificationPreview.maxTitleLength = 1000;
|
|
178
|
+
/*
|
|
179
|
+
* The most custom field values an incident being previewed carries, and
|
|
180
|
+
* how long they may be together, written out as JSON. Each value is
|
|
181
|
+
* rendered, Markdown included, and goes into every page's email, so
|
|
182
|
+
* without a bound one request could make the server render as much as it
|
|
183
|
+
* can be sent. A project's own fields fit many times over.
|
|
184
|
+
*/
|
|
185
|
+
SubscriberNotificationPreview.maxCustomFieldCount = 250;
|
|
186
|
+
SubscriberNotificationPreview.maxCustomFieldsLength = 200000;
|
|
187
|
+
// What a test email's subject starts with, so it reads as a test.
|
|
188
|
+
SubscriberNotificationPreview.testEmailSubjectPrefix = "[Test] ";
|
|
189
|
+
export default SubscriberNotificationPreview;
|
|
190
|
+
//# sourceMappingURL=SubscriberNotificationPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriberNotificationPreview.js","sourceRoot":"","sources":["../../../../Types/StatusPage/SubscriberNotificationPreview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import StatusPageSubscriberNotificationStatus from "./StatusPageSubscriberNotificationStatus";
|
|
2
|
+
/*
|
|
3
|
+
* Sending a status page subscriber notification again: an incident public
|
|
4
|
+
* note's, or the notification that an incident was created.
|
|
5
|
+
*
|
|
6
|
+
* A notification is sent again by putting its status back to Pending; the
|
|
7
|
+
* job that sends it picks up Pending rows. What that reaches differs:
|
|
8
|
+
*
|
|
9
|
+
* - a public note (and a state change) is sent to every status page the
|
|
10
|
+
* incident reaches now, including the pages that were sent it before;
|
|
11
|
+
* - the incident-created notification keeps a record of the pages it was
|
|
12
|
+
* sent to in full (Incident.statusPagesNotifiedOnCreation). Retry after a
|
|
13
|
+
* failure resumes after them; Resend after a success, and 'Resend to all
|
|
14
|
+
* pages' after a failure (IncidentCreatedResend), empty the record so every
|
|
15
|
+
* page is sent it again.
|
|
16
|
+
*
|
|
17
|
+
* Which of the two a settled notification offers is decided here, so the
|
|
18
|
+
* dashboard's buttons and the server's checks cannot drift apart:
|
|
19
|
+
*
|
|
20
|
+
* - Success offers Resend: it went out, and someone wants it to go out again
|
|
21
|
+
* (a list that was fixed, a page added after a scope change);
|
|
22
|
+
* - Failed offers Retry: not everyone was sent it;
|
|
23
|
+
* - Skipped offers nothing. A note posted with notify off keeps
|
|
24
|
+
* shouldStatusPageSubscribersBeNotifiedOnNoteCreated false - a column no
|
|
25
|
+
* one may update - and the job only sends notes with it true, so a skipped
|
|
26
|
+
* note put back to Pending would sit there forever. Other skips (a hidden
|
|
27
|
+
* incident, no monitors) would only be skipped again; publishing a hidden
|
|
28
|
+
* incident offers its own 'notify' checkbox (IncidentCreatedRenotify);
|
|
29
|
+
* - Pending and InProgress offer nothing: the notification is on its way.
|
|
30
|
+
*/
|
|
31
|
+
export var SubscriberNotificationResendAction;
|
|
32
|
+
(function (SubscriberNotificationResendAction) {
|
|
33
|
+
// After a failure: send it again to whoever was not sent it.
|
|
34
|
+
SubscriberNotificationResendAction["Retry"] = "Retry";
|
|
35
|
+
// After a success: send it again to everyone it reaches now.
|
|
36
|
+
SubscriberNotificationResendAction["Resend"] = "Resend";
|
|
37
|
+
})(SubscriberNotificationResendAction || (SubscriberNotificationResendAction = {}));
|
|
38
|
+
class SubscriberNotificationResend {
|
|
39
|
+
/*
|
|
40
|
+
* What a notification in `status` offers: Retry after a failure, and
|
|
41
|
+
* Resend after a success where the caller supports resending one
|
|
42
|
+
* (`isResendAfterSuccessOffered`). Null for anything else.
|
|
43
|
+
*
|
|
44
|
+
* A caller that leaves `isResendAfterSuccessOffered` off keeps the old
|
|
45
|
+
* behaviour: only a failed notification can be sent again.
|
|
46
|
+
*/
|
|
47
|
+
static getAction(data) {
|
|
48
|
+
if (data.status === StatusPageSubscriberNotificationStatus.Failed) {
|
|
49
|
+
return SubscriberNotificationResendAction.Retry;
|
|
50
|
+
}
|
|
51
|
+
if (data.status === StatusPageSubscriberNotificationStatus.Success &&
|
|
52
|
+
data.isResendAfterSuccessOffered) {
|
|
53
|
+
return SubscriberNotificationResendAction.Resend;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
/*
|
|
58
|
+
* Why a public note's notification may not be put back to Pending by a
|
|
59
|
+
* user or an API key, or null when it may:
|
|
60
|
+
*
|
|
61
|
+
* - a note posted with notify off: the job never sends it (see the header),
|
|
62
|
+
* so the note would sit in Pending forever;
|
|
63
|
+
* - a notification being sent right now: the send settles its own status
|
|
64
|
+
* when it finishes and would overwrite the Pending, so the request would
|
|
65
|
+
* be lost without a word.
|
|
66
|
+
*
|
|
67
|
+
* Success and Failed are the cases the dashboard offers. Pending is
|
|
68
|
+
* allowed and changes nothing. A skipped notification of a note that does
|
|
69
|
+
* notify (the incident was hidden, or had no monitors, when it went out)
|
|
70
|
+
* is allowed too: the job looks at it afresh, so it goes out if what
|
|
71
|
+
* skipped it has changed. The dashboard does not offer that one.
|
|
72
|
+
*/
|
|
73
|
+
static getPublicNoteResendRefusal(data) {
|
|
74
|
+
if (data.shouldStatusPageSubscribersBeNotifiedOnNoteCreated === false) {
|
|
75
|
+
return this.notePostedWithoutNotifyingMessage;
|
|
76
|
+
}
|
|
77
|
+
if (data.status === StatusPageSubscriberNotificationStatus.InProgress) {
|
|
78
|
+
return this.beingSentMessage;
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
/*
|
|
83
|
+
* Whether an update asks for a public note's notification to be sent
|
|
84
|
+
* again: it writes Pending into the note's 'posted' status column. The
|
|
85
|
+
* workers write that column too, but as root, which is never checked.
|
|
86
|
+
*/
|
|
87
|
+
static isPublicNoteResendRequested(data) {
|
|
88
|
+
return ((data === null || data === void 0 ? void 0 : data.subscriberNotificationStatusOnNoteCreated) ===
|
|
89
|
+
StatusPageSubscriberNotificationStatus.Pending);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/*
|
|
93
|
+
* Why the server refuses to send a public note's notification again,
|
|
94
|
+
* shown to whoever asked.
|
|
95
|
+
*/
|
|
96
|
+
SubscriberNotificationResend.notePostedWithoutNotifyingMessage = "This note was posted without notifying subscribers, so there is nothing to resend. Post a new note with Notify Status Page Subscribers ticked to tell them.";
|
|
97
|
+
SubscriberNotificationResend.beingSentMessage = "This notification is being sent right now. Wait until it has finished, then send it again.";
|
|
98
|
+
SubscriberNotificationResend.noPermissionToResendNoteMessage = "You do not have permission to send this note's notification again. Sending it again needs the permission to post public notes that notify subscribers, as well as the permission to edit public notes.";
|
|
99
|
+
SubscriberNotificationResend.noPermissionToNotifyAboutEditMessage = "You do not have permission to notify subscribers about this edit. Notifying them needs the permission to post public notes that notify subscribers, as well as the permission to edit public notes. Save the edit without notifying subscribers, or ask someone who can post notifying notes.";
|
|
100
|
+
SubscriberNotificationResend.updateBeingSentMessage = "This note's update notification is being sent right now. Wait until it has finished, then save your edit with Notify subscribers about this update ticked again - or save it without notifying subscribers.";
|
|
101
|
+
export default SubscriberNotificationResend;
|
|
102
|
+
//# sourceMappingURL=SubscriberNotificationResend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriberNotificationResend.js","sourceRoot":"","sources":["../../../../Types/StatusPage/SubscriberNotificationResend.ts"],"names":[],"mappings":"AAAA,OAAO,sCAAsC,MAAM,0CAA0C,CAAC;AAE9F;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAN,IAAY,kCAKX;AALD,WAAY,kCAAkC;IAC5C,6DAA6D;IAC7D,qDAAe,CAAA;IACf,6DAA6D;IAC7D,uDAAiB,CAAA;AACnB,CAAC,EALW,kCAAkC,KAAlC,kCAAkC,QAK7C;AAED,MAAqB,4BAA4B;IAoB/C;;;;;;;OAOG;IACI,MAAM,CAAC,SAAS,CAAC,IAGvB;QACC,IAAI,IAAI,CAAC,MAAM,KAAK,sCAAsC,CAAC,MAAM,EAAE,CAAC;YAClE,OAAO,kCAAkC,CAAC,KAAK,CAAC;QAClD,CAAC;QAED,IACE,IAAI,CAAC,MAAM,KAAK,sCAAsC,CAAC,OAAO;YAC9D,IAAI,CAAC,2BAA2B,EAChC,CAAC;YACD,OAAO,kCAAkC,CAAC,MAAM,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,MAAM,CAAC,0BAA0B,CAAC,IAMxC;QACC,IAAI,IAAI,CAAC,kDAAkD,KAAK,KAAK,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,iCAAiC,CAAC;QAChD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,sCAAsC,CAAC,UAAU,EAAE,CAAC;YACtE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,2BAA2B,CACvC,IAAyE;QAEzE,OAAO,CACL,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,yCAAyC;YAC/C,sCAAsC,CAAC,OAAO,CAC/C,CAAC;IACJ,CAAC;;AA3FD;;;GAGG;AACoB,8DAAiC,GACtD,6JAA6J,CAAC;AAEzI,6CAAgB,GACrC,4FAA4F,CAAC;AAExE,4DAA+B,GACpD,wMAAwM,CAAC;AAEpL,iEAAoC,GACzD,+RAA+R,CAAC;AAE3Q,mDAAsB,GAC3C,6MAA6M,CAAC;eAlB7L,4BAA4B"}
|