@oneuptime/common 14.0.10 → 14.0.11
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/AIConversation.ts +127 -1
- package/Models/DatabaseModels/CephCluster.ts +12 -0
- package/Models/DatabaseModels/CloudResource.ts +12 -0
- package/Models/DatabaseModels/DatabaseServer.ts +12 -0
- package/Models/DatabaseModels/DockerHost.ts +12 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +12 -0
- package/Models/DatabaseModels/GlobalOidc.ts +0 -4
- package/Models/DatabaseModels/GlobalOidcProject.ts +0 -4
- package/Models/DatabaseModels/GlobalSso.ts +0 -4
- package/Models/DatabaseModels/GlobalSsoProject.ts +0 -4
- package/Models/DatabaseModels/Host.ts +12 -0
- package/Models/DatabaseModels/IncidentForm.ts +594 -0
- package/Models/DatabaseModels/IncidentFormSubmission.ts +283 -0
- package/Models/DatabaseModels/IncidentTemplate.ts +59 -0
- package/Models/DatabaseModels/Index.ts +14 -0
- package/Models/DatabaseModels/IoTFleet.ts +12 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +12 -0
- package/Models/DatabaseModels/MessageQueue.ts +1102 -0
- package/Models/DatabaseModels/MessageQueueLabelRule.ts +553 -0
- package/Models/DatabaseModels/MessageQueueOwnerRule.ts +633 -0
- package/Models/DatabaseModels/MessageQueueOwnerTeam.ts +491 -0
- package/Models/DatabaseModels/MessageQueueOwnerUser.ts +490 -0
- package/Models/DatabaseModels/PodmanHost.ts +12 -0
- package/Models/DatabaseModels/Project.ts +59 -0
- package/Models/DatabaseModels/ProjectOidc.ts +0 -4
- package/Models/DatabaseModels/ProjectSso.ts +0 -4
- package/Models/DatabaseModels/ProxmoxCluster.ts +12 -0
- package/Models/DatabaseModels/RumApplication.ts +12 -0
- package/Models/DatabaseModels/ServerlessFunction.ts +12 -0
- package/Models/DatabaseModels/Service.ts +12 -0
- package/Models/DatabaseModels/StatusPageOidc.ts +0 -4
- package/Models/DatabaseModels/StatusPageSso.ts +0 -4
- package/Models/DatabaseModels/TeamComplianceSetting.ts +47 -2
- package/Models/DatabaseModels/VMwareVCenter.ts +12 -0
- package/Server/API/AIChatAPI.ts +13 -114
- package/Server/API/AIInvestigationAPI.ts +3 -3
- package/Server/API/AIInvestigationConversationAPI.ts +266 -0
- package/Server/API/IncidentFormAPI.ts +376 -0
- package/Server/API/ProjectOIDC.ts +16 -25
- package/Server/API/ProjectSSO.ts +16 -24
- package/Server/API/StatusPageAPI.ts +42 -77
- package/Server/Enterprise/EnterpriseEdition.ts +93 -28
- package/Server/Enterprise/EnterpriseFeature.ts +25 -3
- package/Server/Enterprise/EnterpriseLicenseSnapshot.ts +1 -1
- package/Server/Enterprise/EnterpriseServerModule.ts +4 -1
- package/Server/EnvironmentConfig.ts +1 -1
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.ts +129 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.ts +52 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.ts +75 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.ts +477 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
- package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
- package/Server/Middleware/UserAuthorization.ts +16 -38
- package/Server/Services/AIService.ts +10 -13
- package/Server/Services/IncidentCustomFieldService.ts +112 -2
- package/Server/Services/IncidentEpisodeMemberService.ts +24 -4
- package/Server/Services/IncidentEpisodeService.ts +10 -1
- package/Server/Services/IncidentFormService.ts +1566 -0
- package/Server/Services/IncidentFormSubmissionService.ts +97 -0
- package/Server/Services/IncidentGroupingEngineService.ts +45 -8
- package/Server/Services/IncidentService.ts +123 -5
- package/Server/Services/IncidentTemplateService.ts +22 -0
- package/Server/Services/Index.ts +14 -0
- package/Server/Services/MessageQueueLabelRuleEngineService.ts +321 -0
- package/Server/Services/MessageQueueLabelRuleService.ts +14 -0
- package/Server/Services/MessageQueueOwnerRuleEngineService.ts +412 -0
- package/Server/Services/MessageQueueOwnerRuleService.ts +14 -0
- package/Server/Services/MessageQueueOwnerTeamService.ts +62 -0
- package/Server/Services/MessageQueueOwnerUserService.ts +62 -0
- package/Server/Services/MessageQueueService.ts +1463 -0
- package/Server/Services/OpenTelemetryIngestService.ts +37 -4
- package/Server/Services/ProjectService.ts +0 -59
- package/Server/Services/StatusPagePrivateUserService.ts +1 -4
- package/Server/Services/StatusPageService.ts +1 -51
- package/Server/Services/TeamComplianceSettingService.ts +163 -42
- package/Server/Services/UserNotificationRuleService.ts +8 -1
- package/Server/Services/WorkspaceNotificationSummaryService.ts +12 -3
- package/Server/Types/Database/Permissions/CreatePermission.ts +17 -3
- package/Server/Types/Database/Permissions/EditionPermission.ts +140 -38
- package/Server/Types/Database/Permissions/OwnerTableRegistry.ts +16 -0
- package/Server/Types/Database/Permissions/TablePermission.ts +3 -3
- package/Server/Types/Database/Permissions/UpdatePermission.ts +20 -6
- package/Server/Utils/AI/Chat/AgentContextCompactor.ts +200 -0
- package/Server/Utils/AI/Chat/ChatAgentRunner.ts +307 -48
- package/Server/Utils/AI/Chat/ChatRunCancellation.ts +156 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +78 -18
- package/Server/Utils/AI/Chat/ObservabilityChatPrompt.ts +1 -1
- package/Server/Utils/AI/Chat/ToolOutputPager.ts +322 -0
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +88 -30
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +13 -1
- package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +0 -32
- package/Server/Utils/AI/CodeFix/FixRunBudget.ts +27 -25
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +7 -1
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +34 -14
- package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +69 -24
- package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +9 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +53 -10
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +27 -10
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +27 -10
- package/Server/Utils/AI/SRE/InvestigationQueue.ts +16 -19
- package/Server/Utils/AI/SRE/InvestigationThread.ts +646 -0
- package/Server/Utils/AI/SRE/InvestigationThreadService.ts +715 -0
- package/Server/Utils/AI/Toolbox/Serializer.ts +10 -3
- package/Server/Utils/EditionEnforcement.ts +19 -202
- package/Server/Utils/LLM/LLMService.ts +259 -63
- package/Server/Utils/RelaxedScimTeamLocksReport.ts +245 -0
- package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +25 -0
- package/Server/Utils/SameOriginRequest.ts +203 -0
- package/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.ts +2 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +4 -1
- package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +1402 -0
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +4 -1
- package/Server/Utils/VendorAssets.ts +3 -3
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +3 -1
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +3 -1
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +10 -1
- package/Tests/App/Accounts/IncidentFormPage.test.tsx +2036 -0
- package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +119 -0
- package/Tests/App/Accounts/IncidentFormUtils.test.ts +1157 -0
- package/Tests/App/Accounts/LoginPasskey.test.tsx +6 -4
- package/Tests/App/Accounts/LoginSso.test.tsx +724 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationRequireSso.test.tsx +338 -0
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoCardLocales.test.tsx +331 -0
- package/Tests/App/AdminDashboard/AdminEnterprisePluginPage.test.tsx +47 -33
- package/Tests/App/AdminDashboard/GlobalSsoOidcPages.test.tsx +1021 -0
- package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +876 -78
- package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +20 -3
- package/Tests/App/Dashboard/CephProxmoxVMwareDocumentationCards.test.tsx +359 -0
- package/Tests/App/Dashboard/CephSetupGuide.test.ts +961 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +381 -95
- package/Tests/App/Dashboard/CloudSetupGuide.test.ts +1463 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +174 -12
- package/Tests/App/Dashboard/ContainerSetupGuideCards.test.tsx +345 -0
- package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +501 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -1
- package/Tests/App/Dashboard/DatabaseDocumentationCard.test.tsx +400 -0
- package/Tests/App/Dashboard/DatabaseDocumentationMarkdown.test.ts +5 -0
- package/Tests/App/Dashboard/DatabaseSetupGuide.test.ts +1869 -0
- package/Tests/App/Dashboard/DatabaseTelemetryScope.test.ts +44 -0
- package/Tests/App/Dashboard/DatabaseTelemetryTabs.test.tsx +50 -9
- package/Tests/App/Dashboard/DockerSetupGuide.test.ts +899 -0
- package/Tests/App/Dashboard/DockerSwarmSetupGuide.test.ts +964 -0
- package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +141 -7
- package/Tests/App/Dashboard/EnterprisePluginPage.test.tsx +52 -39
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +7 -1
- package/Tests/App/Dashboard/GettingStartedTaskRoutes.test.tsx +331 -0
- package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +925 -0
- package/Tests/App/Dashboard/HostDocumentationCard.test.tsx +225 -0
- package/Tests/App/Dashboard/HostSetupGuide.test.ts +1183 -0
- package/Tests/App/Dashboard/IdentityEnterpriseShells.test.tsx +69 -45
- package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +745 -0
- package/Tests/App/Dashboard/IncidentCreateTemplateOwners.test.tsx +414 -0
- package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +1042 -0
- package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +1816 -0
- package/Tests/App/Dashboard/IncidentFormPlan.test.ts +89 -0
- package/Tests/App/Dashboard/IncidentFormShareLinkCard.test.tsx +846 -0
- package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +1324 -0
- package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +630 -0
- package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +13 -0
- package/Tests/App/Dashboard/IncomingEmailMonitorLinkVerifyHint.test.tsx +104 -0
- package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1107 -0
- package/Tests/App/Dashboard/InvestigationConversationData.test.ts +546 -0
- package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +170 -5
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +207 -2
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +729 -34
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +9 -21
- package/Tests/App/Dashboard/InvestigationReportView.test.tsx +274 -37
- package/Tests/App/Dashboard/InvestigationStatusBadge.test.tsx +130 -0
- package/Tests/App/Dashboard/IoTDocumentationCard.test.tsx +218 -0
- package/Tests/App/Dashboard/IoTSetupGuide.test.ts +1124 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +20 -6
- package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +107 -83
- package/Tests/App/Dashboard/KubernetesSetupGuide.test.ts +787 -0
- package/Tests/App/Dashboard/MessageQueueBreadcrumbs.test.tsx +228 -0
- package/Tests/App/Dashboard/MessageQueueBrokerHealth.test.tsx +1538 -0
- package/Tests/App/Dashboard/MessageQueueBrokerHealthMetricChart.test.tsx +969 -0
- package/Tests/App/Dashboard/MessageQueueBrokerHealthReads.test.ts +889 -0
- package/Tests/App/Dashboard/MessageQueueBrokerMetricsReach.test.ts +236 -0
- package/Tests/App/Dashboard/MessageQueueDocumentationCard.test.tsx +479 -0
- package/Tests/App/Dashboard/MessageQueueListPages.test.tsx +1232 -0
- package/Tests/App/Dashboard/MessageQueueMetricDescriptions.test.ts +244 -0
- package/Tests/App/Dashboard/MessageQueueMonitorLink.test.ts +952 -0
- package/Tests/App/Dashboard/MessageQueueMonitorLinkMonitorCreate.test.tsx +859 -0
- package/Tests/App/Dashboard/MessageQueueOverview.test.tsx +1773 -0
- package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +196 -0
- package/Tests/App/Dashboard/MessageQueuePresentation.test.ts +799 -0
- package/Tests/App/Dashboard/MessageQueueProducersConsumers.test.tsx +680 -0
- package/Tests/App/Dashboard/MessageQueueRoutes.test.tsx +383 -0
- package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +278 -0
- package/Tests/App/Dashboard/MessageQueueSetupGuide.test.ts +2778 -0
- package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +273 -0
- package/Tests/App/Dashboard/MessageQueueSpanPopulations.test.ts +930 -0
- package/Tests/App/Dashboard/MessageQueueSpanStore.ts +351 -0
- package/Tests/App/Dashboard/MessageQueueTelemetryScope.test.ts +375 -0
- package/Tests/App/Dashboard/MessageQueueTelemetryScopeTabs.test.tsx +668 -0
- package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +685 -0
- package/Tests/App/Dashboard/MonitorAndHomeNotOperationalMenus.test.tsx +342 -0
- package/Tests/App/Dashboard/MonitorCreateFirstRunDefaults.test.tsx +623 -0
- package/Tests/App/Dashboard/MonitorCreateFromMonitorBackedDevice.test.tsx +442 -0
- package/Tests/App/Dashboard/MonitorLogsPageViewSummary.test.tsx +814 -0
- package/Tests/App/Dashboard/MonitorSetupCardBodies.test.tsx +246 -0
- package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +8 -0
- package/Tests/App/Dashboard/OnboardingSsoEmptyState.test.tsx +27 -12
- package/Tests/App/Dashboard/PlanGatedPage.test.tsx +292 -0
- package/Tests/App/Dashboard/PodmanSetupGuide.test.ts +948 -0
- package/Tests/App/Dashboard/ProductOrientation.test.tsx +5 -4
- package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +266 -0
- package/Tests/App/Dashboard/ProxmoxSetupGuide.test.ts +1318 -0
- package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
- package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +298 -9
- package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +453 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +16 -0
- package/Tests/App/Dashboard/ResourceConnectionGuideCard.test.tsx +444 -0
- package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsInfra.test.tsx +798 -0
- package/Tests/App/Dashboard/ResourceConnectionGuideOverviewsPlatforms.test.tsx +717 -0
- package/Tests/App/Dashboard/ResourceConnectionGuides.test.ts +981 -0
- package/Tests/App/Dashboard/ResourceConnectionState.test.ts +132 -0
- package/Tests/App/Dashboard/RumDocumentationCard.test.tsx +293 -0
- package/Tests/App/Dashboard/RumSessionReplayRetentionSettings.test.tsx +467 -0
- package/Tests/App/Dashboard/RumSetupGuide.test.ts +758 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +25 -0
- package/Tests/App/Dashboard/ServerlessDocumentationCard.test.tsx +254 -0
- package/Tests/App/Dashboard/ServerlessSetupGuide.test.ts +1074 -0
- package/Tests/App/Dashboard/SetupGuide.test.ts +246 -0
- package/Tests/App/Dashboard/SetupGuideCard.test.tsx +756 -0
- package/Tests/App/Dashboard/SloListSideMenu.test.tsx +120 -0
- package/Tests/App/Dashboard/SsoPages.test.tsx +833 -0
- package/Tests/App/Dashboard/TelemetryDocumentation.test.tsx +253 -0
- package/Tests/App/Dashboard/TelemetryRetentionShells.test.tsx +730 -0
- package/Tests/App/Dashboard/VMwareSetupGuide.test.ts +1033 -0
- package/Tests/App/StatusPage/StatusPageSsoEmptyState.test.tsx +87 -7
- package/Tests/Models/DatabaseModels/DatabaseServerModels.test.ts +28 -9
- package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
- package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
- package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +4 -2
- package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +190 -14
- package/Tests/Models/IncidentTemplateCustomFieldSettingsColumn.test.ts +291 -0
- package/Tests/Server/API/AIInvestigationConversationAPI.test.ts +412 -0
- package/Tests/Server/API/GlobalConfigLicense.test.ts +38 -9
- package/Tests/Server/API/IncidentFormAPI.test.ts +942 -0
- package/Tests/Server/API/IncidentFormPublicRoutes.test.ts +1653 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -1
- package/Tests/Server/API/{SsoProviderListingsEdition.test.ts → SsoProviderListings.test.ts} +164 -110
- package/Tests/Server/Enterprise/EnterpriseEdition.test.ts +76 -54
- package/Tests/Server/Enterprise/EnterpriseFeatureActive.test.ts +125 -42
- package/Tests/Server/Enterprise/EnterpriseLicenseSnapshot.test.ts +36 -10
- package/Tests/Server/Enterprise/EnterpriseModelFeatureMap.test.ts +51 -9
- package/Tests/Server/Enterprise/FakeEnterpriseModule.ts +13 -8
- package/Tests/Server/Enterprise/SsoInCommunityEdition.test.ts +540 -0
- package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +3 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
- package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
- package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +16 -17
- package/Tests/Server/Middleware/UserAuthorizationSsoEnforcement.test.ts +544 -0
- package/Tests/Server/Services/AIServiceDailyBudget.test.ts +37 -8
- package/Tests/Server/Services/IncidentCreatedFeedTitle.test.ts +212 -0
- package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +297 -0
- package/Tests/Server/Services/IncidentFormOwnersCreatedNotification.test.ts +497 -0
- package/Tests/Server/Services/IncidentFormPostgres.test.ts +958 -0
- package/Tests/Server/Services/IncidentFormPublicForm.test.ts +1260 -0
- package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +2520 -0
- package/Tests/Server/Services/IncidentFormRegistration.test.ts +159 -0
- package/Tests/Server/Services/IncidentFormService.test.ts +663 -0
- package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +430 -0
- package/Tests/Server/Services/IncidentFormSubmissionTemplateBranch.test.ts +473 -0
- package/Tests/Server/Services/IncidentGroupingTemplateSubstitution.test.ts +81 -0
- package/Tests/Server/Services/IncidentTemplateCustomFieldSettings.test.ts +262 -0
- package/Tests/Server/Services/IncidentTemplateOwnersOnDeclare.test.ts +566 -0
- package/Tests/Server/Services/IncidentTitleMarkdownSinks.test.ts +640 -0
- package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +3 -3
- package/Tests/Server/Services/MessageQueueOwnerServices.test.ts +440 -0
- package/Tests/Server/Services/MessageQueueRegistries.test.ts +577 -0
- package/Tests/Server/Services/MessageQueueRuleEngines.test.ts +900 -0
- package/Tests/Server/Services/MessageQueueService.test.ts +2210 -0
- package/Tests/Server/Services/MessageQueueSqlPostgres.test.ts +1271 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
- package/Tests/Server/Services/OpenTelemetryRetentionOverrideEdition.test.ts +474 -0
- package/Tests/Server/Services/OpenTelemetryServiceResolutionCache.test.ts +21 -0
- package/Tests/Server/Services/OwnerRowUniqueness.test.ts +3 -0
- package/Tests/Server/Services/ProjectServiceAuditLogLicense.test.ts +0 -1
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
- package/Tests/Server/Services/SsoRequirementReads.test.ts +454 -0
- package/Tests/Server/Services/SsoRequirementWrites.test.ts +529 -0
- package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +3 -3
- package/Tests/Server/Services/StatusPagePrivateUserInvitationPolicy.test.ts +107 -89
- package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +1068 -176
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +1962 -200
- package/Tests/Server/Types/Database/Permissions/EditionPermission.test.ts +654 -297
- package/Tests/Server/Types/Database/Permissions/RetentionOverrideColumns.test.ts +784 -0
- package/Tests/Server/Types/Database/Permissions/SsoScalePlanGate.test.ts +418 -0
- package/Tests/Server/Utils/AI/AIAlertGating.test.ts +0 -1
- package/Tests/Server/Utils/AI/AIInvestigationEngineRunLimits.test.ts +136 -0
- package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +15 -14
- package/Tests/Server/Utils/AI/AgentContextCompactor.test.ts +351 -0
- package/Tests/Server/Utils/AI/ChatAgentRunnerSharedThread.test.ts +842 -0
- package/Tests/Server/Utils/AI/ChatRunCancellation.test.ts +195 -0
- package/Tests/Server/Utils/AI/CodeFixReadiness.test.ts +10 -57
- package/Tests/Server/Utils/AI/FixRunBudget.test.ts +20 -24
- package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +7 -30
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +225 -29
- package/Tests/Server/Utils/AI/InvestigationInfrastructureAccessWiring.test.ts +266 -25
- package/Tests/Server/Utils/AI/InvestigationThread.test.ts +580 -0
- package/Tests/Server/Utils/AI/InvestigationThreadService.test.ts +801 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +525 -43
- package/Tests/Server/Utils/AI/KubectlJobRunner.test.ts +4 -2
- package/Tests/Server/Utils/AI/LLMServiceUnreachableProvider.test.ts +435 -0
- package/Tests/Server/Utils/AI/ObservabilityAssistantLimits.test.ts +462 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +2 -0
- package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +297 -15
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +10 -6
- package/Tests/Server/Utils/AI/ToolOutputPager.test.ts +382 -0
- package/Tests/Server/Utils/AI/ToolResultSerializer.test.ts +23 -4
- package/Tests/Server/Utils/AI/Toolbox/LogTools.test.ts +25 -6
- package/Tests/Server/Utils/AI/Toolbox/Serializer.test.ts +14 -3
- package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
- package/Tests/Server/Utils/{CommunityEditionSsoReport.test.ts → RelaxedScimTeamLocksReport.test.ts} +212 -208
- package/Tests/Server/Utils/SameOriginRequest.test.ts +372 -0
- package/Tests/Server/Utils/Telemetry/EntityRegistry.test.ts +20 -0
- package/Tests/Server/Utils/Telemetry/MessageQueueDiscovery.test.ts +2590 -0
- package/Tests/Server/Utils/Telemetry/MessageQueueSpanQueryTwin.ts +246 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +23 -0
- package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
- package/Tests/Types/Code/JsonSyntax.test.ts +1300 -0
- package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +1113 -0
- package/Tests/Types/CustomField/CustomFieldMappingCatalog.test.ts +91 -0
- package/Tests/Types/CustomField/CustomFieldValueValidator.test.ts +30 -0
- package/Tests/Types/Incident/IncidentFormIpAllowlist.test.ts +227 -0
- package/Tests/Types/Incident/IncidentFormPublic.test.ts +1916 -0
- package/Tests/Types/MessageQueue/MessageQueueEntityKey.test.ts +916 -0
- package/Tests/Types/MessageQueue/MessageQueueIdentity.test.ts +567 -0
- package/Tests/Types/MessageQueue/MessageQueueManualIdentity.test.ts +686 -0
- package/Tests/Types/MessageQueue/MessageQueueMetricCatalog.test.ts +1726 -0
- package/Tests/Types/MessageQueue/MessageQueueMetricResolution.test.ts +1758 -0
- package/Tests/Types/MessageQueue/MessagingInstrumentationFixtures.test.ts +4686 -0
- package/Tests/Types/MessageQueue/MessagingSystem.test.ts +840 -0
- package/Tests/Types/MessageQueue/MessagingTelemetryFixtures.ts +3287 -0
- package/Tests/Types/MessageQueue/MessagingTelemetryResolver.test.ts +2966 -0
- package/Tests/Types/Monitor/MessageQueueAlertTemplates.test.ts +5401 -0
- package/Tests/Types/Monitor/MetricEngineFold.ts +154 -0
- package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +5 -3
- package/Tests/Types/Team/ComplianceRule.test.ts +588 -37
- package/Tests/Types/Team/TeamComplianceStatus.test.ts +64 -11
- package/Tests/Types/XML.test.ts +51 -0
- package/Tests/UI/Components/CodeEditor/CodeEditor.test.tsx +2362 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorCommands.test.ts +810 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorHighlight.test.ts +338 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorLanguages.test.ts +222 -0
- package/Tests/UI/Components/CodeEditor/CodeEditorStyles.test.ts +807 -0
- package/Tests/UI/Components/CodeEditor/NoMonaco.test.ts +245 -0
- package/Tests/UI/Components/CodeEditor/YamlEditor.test.tsx +729 -0
- package/Tests/UI/Components/CopyTextButton.test.tsx +76 -0
- package/Tests/UI/Components/EditionLabelLapseCopy.ts +51 -14
- package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +131 -23
- package/Tests/UI/Components/ErrorMessageAction.test.tsx +142 -0
- package/Tests/UI/Components/FacetSidebarInScope.test.tsx +459 -0
- package/Tests/UI/Components/FacetValuesInScope.test.ts +270 -0
- package/Tests/UI/Components/Forms/FormFieldCodeEditors.test.tsx +294 -0
- package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +126 -0
- package/Tests/UI/Components/Forms/FormFieldYaml.test.tsx +22 -75
- package/Tests/UI/Components/Forms/ModelFormOnBeforeCreateMiscData.test.tsx +254 -0
- package/Tests/UI/Components/Icon.test.tsx +32 -0
- package/Tests/UI/Components/Input.test.tsx +31 -0
- package/Tests/UI/Components/LockedFilterChipScope.test.tsx +501 -0
- package/Tests/UI/Components/MarkdownConverters.test.ts +253 -1
- package/Tests/UI/Components/MarkdownEditor.test.tsx +2785 -2
- package/Tests/UI/Components/MarkdownEditorHistory.test.ts +243 -0
- package/Tests/UI/Components/MarkdownListEditing.test.ts +1118 -0
- package/Tests/UI/Components/MarkdownPaste.test.ts +1180 -0
- package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +466 -0
- package/Tests/UI/Components/MarkdownVisualEditing.test.ts +1089 -0
- package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +623 -0
- package/Tests/UI/Components/ResetObjectID.test.tsx +282 -0
- package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
- package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +439 -0
- package/Tests/UI/Components/Table/TableEmptyState.test.tsx +352 -0
- package/Tests/UI/Components/TableRowMobileTitles.test.tsx +78 -0
- package/Tests/UI/Components/TextArea.test.tsx +19 -0
- package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +12 -29
- package/Tests/UI/Components/fixtures/MarkdownPasteFixtures.ts +460 -0
- package/Tests/UI/EsbuildConfig.test.ts +115 -39
- package/Tests/UI/EsbuildEnterpriseAlias.test.ts +4 -4
- package/Tests/UI/Monitor/MonitorLogSummaryRender.test.tsx +377 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
- package/Tests/Utils/LabelRuleImportExport.test.ts +5 -0
- package/Tests/Utils/Markdown/DashboardMarkdownRenderer.ts +81 -0
- package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +1339 -0
- package/Tests/Utils/Monitor/MonitorLogSummaryUtil.test.ts +862 -0
- package/Types/AI/AIAgentRunLimits.ts +146 -0
- package/Types/Code/CodeType.ts +2 -0
- package/Types/Code/JsonSyntax.ts +923 -0
- package/Types/CustomField/CustomFieldCreateSettings.ts +549 -0
- package/Types/CustomField/CustomFieldMappingCatalog.ts +77 -0
- package/Types/CustomField/CustomFieldValueValidator.ts +10 -7
- package/Types/EnterpriseLicense/EnterpriseLicensePeriods.ts +1 -1
- package/Types/Icon/IconProp.ts +2 -0
- package/Types/Incident/IncidentFormIpAllowlist.ts +206 -0
- package/Types/Incident/IncidentFormPublic.ts +1145 -0
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +10 -3
- package/Types/MessageQueue/MessageQueueIdentity.ts +256 -0
- package/Types/MessageQueue/MessageQueueManualIdentity.ts +325 -0
- package/Types/MessageQueue/MessageQueueMetricCatalog.ts +1357 -0
- package/Types/MessageQueue/MessagingSystem.ts +518 -0
- package/Types/MessageQueue/MessagingTelemetryResolver.ts +2311 -0
- package/Types/Monitor/MessageQueueAlertTemplates.ts +2128 -0
- package/Types/Permission.ts +310 -0
- package/Types/ResourceAiAgent/ResourceAiAccess.ts +10 -4
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
- package/Types/Rules/RuleRun.ts +4 -0
- package/Types/Team/ComplianceNotificationChannel.ts +4 -3
- package/Types/Team/ComplianceRule.ts +71 -18
- package/Types/Team/ComplianceRuleType.ts +2 -2
- package/Types/Team/TeamComplianceStatus.ts +6 -2
- package/Types/Telemetry/EntityType.ts +16 -0
- package/Types/Telemetry/LockedFilterDetail.ts +22 -0
- package/Types/XML.ts +26 -0
- package/UI/Components/CodeEditor/CodeEditor.css +379 -0
- package/UI/Components/CodeEditor/CodeEditor.tsx +1128 -294
- package/UI/Components/CodeEditor/CodeEditorCommands.ts +774 -0
- package/UI/Components/CodeEditor/CodeEditorHighlight.ts +106 -0
- package/UI/Components/CodeEditor/CodeEditorLanguages.ts +164 -0
- package/UI/Components/CodeEditor/YamlEditor.tsx +28 -326
- package/UI/Components/CopyTextButton/CopyTextButton.tsx +5 -1
- package/UI/Components/CustomFields/CustomFieldModelFormFields.tsx +6 -25
- package/UI/Components/EditionLabel/EditionLabel.tsx +14 -13
- package/UI/Components/ErrorMessage/ErrorMessage.tsx +11 -1
- package/UI/Components/Forms/Fields/FormField.tsx +8 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/Icon/Icon.tsx +18 -0
- package/UI/Components/Input/Input.tsx +11 -4
- package/UI/Components/LogsViewer/LogsViewer.tsx +4 -0
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +21 -3
- package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
- package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +877 -79
- package/UI/Components/Markdown.tsx/MarkdownEditorHistory.ts +284 -0
- package/UI/Components/Markdown.tsx/MarkdownListEditing.ts +1362 -0
- package/UI/Components/Markdown.tsx/MarkdownPaste.ts +1326 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +106 -10
- package/UI/Components/Markdown.tsx/MarkdownVisualEditing.ts +1032 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +85 -7
- package/UI/Components/ResetObjectID/ResetObjectID.tsx +35 -9
- package/UI/Components/Table/EmptyTableMessage.ts +81 -0
- package/UI/Components/Table/Table.tsx +50 -21
- package/UI/Components/Table/TableRow.tsx +9 -1
- package/UI/Components/TelemetryViewer/FacetVisibility.ts +97 -2
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +13 -0
- package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +214 -7
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +21 -3
- package/UI/Components/TextArea/TextArea.tsx +9 -2
- package/UI/Components/Workflow/ModelFieldPicker.tsx +10 -12
- package/UI/Styles/Theme.css +8 -0
- package/UI/esbuild-config.js +2 -32
- package/Utils/LabelRuleImportExport.ts +2 -0
- package/Utils/Markdown/UntrustedMarkdown.ts +1513 -0
- package/Utils/Monitor/IncomingEmailMonitorRequestUtil.ts +41 -0
- package/Utils/Monitor/MonitorLogSummaryUtil.ts +212 -0
- package/Utils/Telemetry/EntityKey.ts +48 -0
- package/build/dist/Models/DatabaseModels/AIConversation.js +125 -1
- package/build/dist/Models/DatabaseModels/AIConversation.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +12 -0
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DatabaseServer.js +12 -0
- package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +12 -0
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalOidcProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSso.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js +0 -4
- package/build/dist/Models/DatabaseModels/GlobalSsoProject.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Host.js +12 -0
- package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IncidentForm.js +605 -0
- package/build/dist/Models/DatabaseModels/IncidentForm.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js +299 -0
- package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +1 -0
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js +60 -0
- package/build/dist/Models/DatabaseModels/IncidentTemplate.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Index.js +14 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/IoTFleet.js +12 -0
- package/build/dist/Models/DatabaseModels/IoTFleet.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MessageQueue.js +1106 -0
- package/build/dist/Models/DatabaseModels/MessageQueue.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js +562 -0
- package/build/dist/Models/DatabaseModels/MessageQueueLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js +643 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js +506 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js +505 -0
- package/build/dist/Models/DatabaseModels/MessageQueueOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js +12 -0
- package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +61 -0
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectOidc.js +0 -4
- package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProjectSso.js +0 -4
- package/build/dist/Models/DatabaseModels/ProjectSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +12 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ServerlessFunction.js +12 -0
- package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Service.js +12 -0
- package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js +0 -4
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageSso.js +0 -4
- package/build/dist/Models/DatabaseModels/StatusPageSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +49 -3
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +12 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +9 -103
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +3 -3
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationConversationAPI.js +162 -0
- package/build/dist/Server/API/AIInvestigationConversationAPI.js.map +1 -0
- package/build/dist/Server/API/IncidentFormAPI.js +245 -0
- package/build/dist/Server/API/IncidentFormAPI.js.map +1 -0
- package/build/dist/Server/API/ProjectOIDC.js +16 -24
- package/build/dist/Server/API/ProjectOIDC.js.map +1 -1
- package/build/dist/Server/API/ProjectSSO.js +16 -24
- package/build/dist/Server/API/ProjectSSO.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +42 -75
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseEdition.js +79 -25
- package/build/dist/Server/Enterprise/EnterpriseEdition.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseFeature.js +24 -3
- package/build/dist/Server/Enterprise/EnterpriseFeature.js.map +1 -1
- package/build/dist/Server/Enterprise/EnterpriseLicenseSnapshot.js +1 -1
- package/build/dist/Server/Enterprise/EnterpriseServerModule.js.map +1 -1
- package/build/dist/Server/EnvironmentConfig.js +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js +63 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796400000000-AddIncidentForms.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796500000000-AddTeamComplianceRuleNotificationChannels.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796600000000-AddAIInvestigationConversationAndTimeLimits.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js +183 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796700000000-AddMessageQueueTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IncidentFormRateLimit.js +559 -0
- package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +1 -0
- package/build/dist/Server/Middleware/UserAuthorization.js +11 -30
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +10 -13
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/IncidentCustomFieldService.js +83 -0
- package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js +8 -4
- package/build/dist/Server/Services/IncidentEpisodeMemberService.js.map +1 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js +10 -1
- package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
- package/build/dist/Server/Services/IncidentFormService.js +1202 -0
- package/build/dist/Server/Services/IncidentFormService.js.map +1 -0
- package/build/dist/Server/Services/IncidentFormSubmissionService.js +91 -0
- package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +1 -0
- package/build/dist/Server/Services/IncidentGroupingEngineService.js +20 -8
- package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +106 -4
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentTemplateService.js +18 -0
- package/build/dist/Server/Services/IncidentTemplateService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +14 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js +262 -0
- package/build/dist/Server/Services/MessageQueueLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueLabelRuleService.js +13 -0
- package/build/dist/Server/Services/MessageQueueLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js +334 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/MessageQueueOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerTeamService.js +62 -0
- package/build/dist/Server/Services/MessageQueueOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueOwnerUserService.js +62 -0
- package/build/dist/Server/Services/MessageQueueOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/MessageQueueService.js +1140 -0
- package/build/dist/Server/Services/MessageQueueService.js.map +1 -0
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +0 -54
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/StatusPagePrivateUserService.js +1 -4
- package/build/dist/Server/Services/StatusPagePrivateUserService.js.map +1 -1
- package/build/dist/Server/Services/StatusPageService.js +0 -46
- package/build/dist/Server/Services/StatusPageService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceSettingService.js +120 -31
- package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js +8 -1
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js +12 -3
- package/build/dist/Server/Services/WorkspaceNotificationSummaryService.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js +6 -3
- package/build/dist/Server/Types/Database/Permissions/CreatePermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js +109 -37
- package/build/dist/Server/Types/Database/Permissions/EditionPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js +16 -0
- package/build/dist/Server/Types/Database/Permissions/OwnerTableRegistry.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/TablePermission.js +3 -3
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js +9 -6
- package/build/dist/Server/Types/Database/Permissions/UpdatePermission.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js +128 -0
- package/build/dist/Server/Utils/AI/Chat/AgentContextCompactor.js.map +1 -0
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js +192 -50
- package/build/dist/Server/Utils/AI/Chat/ChatAgentRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js +133 -0
- package/build/dist/Server/Utils/AI/Chat/ChatRunCancellation.js.map +1 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +53 -13
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityChatPrompt.js +1 -1
- package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js +206 -0
- package/build/dist/Server/Utils/AI/Chat/ToolOutputPager.js.map +1 -0
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +53 -26
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +4 -2
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -29
- package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js.map +1 -1
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +24 -24
- package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +7 -2
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +29 -14
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +38 -14
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +2 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +40 -10
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +19 -7
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +19 -7
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +15 -18
- package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js +412 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationThread.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js +495 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationThreadService.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/Serializer.js +10 -3
- package/build/dist/Server/Utils/AI/Toolbox/Serializer.js.map +1 -1
- package/build/dist/Server/Utils/EditionEnforcement.js +20 -158
- package/build/dist/Server/Utils/EditionEnforcement.js.map +1 -1
- package/build/dist/Server/Utils/LLM/LLMService.js +193 -54
- package/build/dist/Server/Utils/LLM/LLMService.js.map +1 -1
- package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js +160 -0
- package/build/dist/Server/Utils/RelaxedScimTeamLocksReport.js.map +1 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +25 -0
- package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -1
- package/build/dist/Server/Utils/SameOriginRequest.js +151 -0
- package/build/dist/Server/Utils/SameOriginRequest.js.map +1 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js +2 -0
- package/build/dist/Server/Utils/TeamMember/ProjectLeaveResourceCleanup.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +4 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +1015 -0
- package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +4 -1
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
- package/build/dist/Server/Utils/VendorAssets.js +3 -3
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +3 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +3 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +10 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
- package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
- package/build/dist/Types/Code/CodeType.js +2 -0
- package/build/dist/Types/Code/CodeType.js.map +1 -1
- package/build/dist/Types/Code/JsonSyntax.js +604 -0
- package/build/dist/Types/Code/JsonSyntax.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +310 -0
- package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js +38 -0
- package/build/dist/Types/CustomField/CustomFieldMappingCatalog.js.map +1 -1
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js +10 -7
- package/build/dist/Types/CustomField/CustomFieldValueValidator.js.map +1 -1
- package/build/dist/Types/EnterpriseLicense/EnterpriseLicensePeriods.js +1 -1
- package/build/dist/Types/Icon/IconProp.js +2 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Incident/IncidentFormIpAllowlist.js +119 -0
- package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +1 -0
- package/build/dist/Types/Incident/IncidentFormPublic.js +678 -0
- package/build/dist/Types/Incident/IncidentFormPublic.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +10 -3
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
- package/build/dist/Types/MessageQueue/MessageQueueIdentity.js +184 -0
- package/build/dist/Types/MessageQueue/MessageQueueIdentity.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js +190 -0
- package/build/dist/Types/MessageQueue/MessageQueueManualIdentity.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js +1057 -0
- package/build/dist/Types/MessageQueue/MessageQueueMetricCatalog.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessagingSystem.js +394 -0
- package/build/dist/Types/MessageQueue/MessagingSystem.js.map +1 -0
- package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js +1768 -0
- package/build/dist/Types/MessageQueue/MessagingTelemetryResolver.js.map +1 -0
- package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js +1207 -0
- package/build/dist/Types/Monitor/MessageQueueAlertTemplates.js.map +1 -0
- package/build/dist/Types/Permission.js +274 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +10 -4
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -1
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +12 -0
- package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
- package/build/dist/Types/Rules/RuleRun.js +4 -0
- package/build/dist/Types/Rules/RuleRun.js.map +1 -1
- package/build/dist/Types/Team/ComplianceNotificationChannel.js +4 -3
- package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -1
- package/build/dist/Types/Team/ComplianceRule.js +48 -14
- package/build/dist/Types/Team/ComplianceRule.js.map +1 -1
- package/build/dist/Types/Team/ComplianceRuleType.js +2 -2
- package/build/dist/Types/Telemetry/EntityType.js +16 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/XML.js +23 -0
- package/build/dist/Types/XML.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js +641 -266
- package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
- package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js +464 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorCommands.js.map +1 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js +69 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorHighlight.js.map +1 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js +108 -0
- package/build/dist/UI/Components/CodeEditor/CodeEditorLanguages.js.map +1 -0
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js +14 -186
- package/build/dist/UI/Components/CodeEditor/YamlEditor.js.map +1 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js +5 -14
- package/build/dist/UI/Components/CustomFields/CustomFieldModelFormFields.js.map +1 -1
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js +14 -13
- package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +1 -1
- package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +8 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +8 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +11 -3
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +2 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +14 -4
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +710 -65
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js +238 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownEditorHistory.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js +1028 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownListEditing.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js +1088 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownPaste.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +70 -10
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js +887 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownVisualEditing.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +57 -6
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +7 -5
- package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
- package/build/dist/UI/Components/Table/EmptyTableMessage.js +51 -0
- package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +30 -11
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +9 -2
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +63 -1
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +4 -2
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +91 -10
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +14 -4
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TextArea/TextArea.js +9 -3
- package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
- package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +1 -2
- package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
- package/build/dist/Utils/LabelRuleImportExport.js +2 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -1
- package/build/dist/Utils/Markdown/UntrustedMarkdown.js +988 -0
- package/build/dist/Utils/Markdown/UntrustedMarkdown.js.map +1 -0
- package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js +34 -0
- package/build/dist/Utils/Monitor/IncomingEmailMonitorRequestUtil.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js +148 -0
- package/build/dist/Utils/Monitor/MonitorLogSummaryUtil.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +36 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/package.json +1 -3
- package/Server/Utils/CommunityEditionSsoReport.ts +0 -361
- package/Tests/App/Accounts/LoginSsoEdition.test.tsx +0 -616
- package/Tests/App/AdminDashboard/AdminAuthenticationSsoEdition.test.tsx +0 -217
- package/Tests/App/AdminDashboard/GlobalSSOEnterpriseShells.test.tsx +0 -271
- package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +0 -215
- package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +0 -784
- package/Tests/Server/Middleware/UserAuthorizationEditionEnforcement.test.ts +0 -518
- package/Tests/Server/Services/SsoRequirementReadMasking.test.ts +0 -419
- package/Tests/Server/Services/SsoRequirementWriteGuard.test.ts +0 -769
- package/Tests/UI/Components/CodeEditor.test.tsx +0 -638
- package/Tests/UI/Components/MonacoLoader.test.ts +0 -67
- package/Tests/UI/Components/MonacoRuntime.test.ts +0 -121
- package/Tests/UI/Components/Telemetry/TelemetryRetentionConfigForm.test.tsx +0 -329
- package/Tests/UI/Components/YamlEditor.test.tsx +0 -847
- package/UI/Components/CodeEditor/MonacoLoader.ts +0 -36
- package/UI/Components/Telemetry/TelemetryRetentionConfigForm.tsx +0 -319
- package/UI/Components/Telemetry/TelemetryRetentionConfigSummary.tsx +0 -223
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js +0 -223
- package/build/dist/Server/Utils/CommunityEditionSsoReport.js.map +0 -1
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js +0 -34
- package/build/dist/UI/Components/CodeEditor/MonacoLoader.js.map +0 -1
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js +0 -171
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigForm.js.map +0 -1
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js +0 -119
- package/build/dist/UI/Components/Telemetry/TelemetryRetentionConfigSummary.js.map +0 -1
|
@@ -44,6 +44,8 @@ import ServerlessFunctionService from "./ServerlessFunctionService";
|
|
|
44
44
|
import CloudResourceService from "./CloudResourceService";
|
|
45
45
|
import RumApplicationService from "./RumApplicationService";
|
|
46
46
|
import IoTFleetService from "./IoTFleetService";
|
|
47
|
+
import EnterpriseEdition from "../Enterprise/EnterpriseEdition";
|
|
48
|
+
import EnterpriseFeature from "../Enterprise/EnterpriseFeature";
|
|
47
49
|
import GlobalCache from "../Infrastructure/GlobalCache";
|
|
48
50
|
import InProcessMemo from "../Utils/InProcessMemo";
|
|
49
51
|
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
@@ -472,6 +474,37 @@ export default class OTelIngestService {
|
|
|
472
474
|
return context;
|
|
473
475
|
}
|
|
474
476
|
|
|
477
|
+
/*
|
|
478
|
+
* Retention overrides - retention by telemetry type (project-wide and per
|
|
479
|
+
* service or resource) and per-service or per-resource retention - are an
|
|
480
|
+
* Enterprise feature (EnterpriseFeature.TelemetryRetention). While it is
|
|
481
|
+
* not active (the Community Edition, or a self-hosted license that lapsed
|
|
482
|
+
* or leaves it out) every row gets the project's default retention, and the
|
|
483
|
+
* configured overrides are kept, unused, until it is active again.
|
|
484
|
+
*
|
|
485
|
+
* Asked each time metadata is built, not when the caches above are warmed,
|
|
486
|
+
* so a license change takes effect on the next row without waiting for a
|
|
487
|
+
* cache to expire. Every signal resolves its retention from this metadata
|
|
488
|
+
* (resolveTelemetryRetentionInDays), so this is the one place to decide.
|
|
489
|
+
*/
|
|
490
|
+
public static applyRetentionOverrideEdition(
|
|
491
|
+
metadata: TelemetryServiceMetadata,
|
|
492
|
+
): TelemetryServiceMetadata {
|
|
493
|
+
if (
|
|
494
|
+
EnterpriseEdition.isFeatureActive(EnterpriseFeature.TelemetryRetention)
|
|
495
|
+
) {
|
|
496
|
+
return metadata;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
return {
|
|
500
|
+
...metadata,
|
|
501
|
+
dataRententionInDays: metadata.projectRetentionInDays,
|
|
502
|
+
serviceRetentionConfig: null,
|
|
503
|
+
serviceRetentionInDays: null,
|
|
504
|
+
projectRetentionConfig: null,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
|
|
475
508
|
@CaptureSpan()
|
|
476
509
|
public static async telemetryServiceFromName(data: {
|
|
477
510
|
serviceName: string;
|
|
@@ -746,7 +779,7 @@ export default class OTelIngestService {
|
|
|
746
779
|
): TelemetryServiceMetadata => {
|
|
747
780
|
const serviceLevelRetention: number | null =
|
|
748
781
|
resolved.retainTelemetryDataForDays ?? null;
|
|
749
|
-
return {
|
|
782
|
+
return this.applyRetentionOverrideEdition({
|
|
750
783
|
serviceName: data.serviceName,
|
|
751
784
|
primaryEntityId: new ObjectID(resolved.serviceId),
|
|
752
785
|
primaryEntityType: ServiceType.OpenTelemetry,
|
|
@@ -766,7 +799,7 @@ export default class OTelIngestService {
|
|
|
766
799
|
serviceRetentionInDays: serviceLevelRetention,
|
|
767
800
|
projectRetentionConfig: projectContext.projectRetentionConfig,
|
|
768
801
|
projectRetentionInDays: projectContext.projectRetentionInDays,
|
|
769
|
-
};
|
|
802
|
+
});
|
|
770
803
|
};
|
|
771
804
|
|
|
772
805
|
if (!resolution) {
|
|
@@ -863,7 +896,7 @@ export default class OTelIngestService {
|
|
|
863
896
|
const resourceRetention: ResourceRetention =
|
|
864
897
|
await this.getResourceRetention(data.resourceId, data.primaryEntityType);
|
|
865
898
|
|
|
866
|
-
return {
|
|
899
|
+
return this.applyRetentionOverrideEdition({
|
|
867
900
|
serviceName: data.serviceName,
|
|
868
901
|
primaryEntityId: data.resourceId,
|
|
869
902
|
primaryEntityType: data.primaryEntityType,
|
|
@@ -874,7 +907,7 @@ export default class OTelIngestService {
|
|
|
874
907
|
serviceRetentionInDays: resourceRetention.retainTelemetryDataForDays,
|
|
875
908
|
projectRetentionConfig: projectContext.projectRetentionConfig,
|
|
876
909
|
projectRetentionInDays: projectContext.projectRetentionInDays,
|
|
877
|
-
};
|
|
910
|
+
});
|
|
878
911
|
}
|
|
879
912
|
|
|
880
913
|
/*
|
|
@@ -14,7 +14,6 @@ import { OnCreate, OnDelete, OnFind, OnUpdate } from "../Types/Database/Hooks";
|
|
|
14
14
|
import QueryHelper from "../Types/Database/QueryHelper";
|
|
15
15
|
import UpdateBy from "../Types/Database/UpdateBy";
|
|
16
16
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
17
|
-
import EditionEnforcement from "../Utils/EditionEnforcement";
|
|
18
17
|
import EnterpriseEdition from "../Enterprise/EnterpriseEdition";
|
|
19
18
|
import EnterpriseFeature from "../Enterprise/EnterpriseFeature";
|
|
20
19
|
import Errors from "../Utils/Errors";
|
|
@@ -145,15 +144,6 @@ export type ProjectBalanceColumnName =
|
|
|
145
144
|
*/
|
|
146
145
|
export const MAX_BALANCE_ADJUSTMENT_IN_USD_CENTS: number = 10_000 * 100;
|
|
147
146
|
|
|
148
|
-
/*
|
|
149
|
-
* The project columns that hold its SSO requirement: the ones onFindSuccess
|
|
150
|
-
* masks and onBeforeUpdate guards while SSO is not active.
|
|
151
|
-
*/
|
|
152
|
-
export const PROJECT_SSO_REQUIREMENT_COLUMNS: ReadonlyArray<string> = [
|
|
153
|
-
"requireSsoForLogin",
|
|
154
|
-
"requireSsoWithSsoProviderId",
|
|
155
|
-
];
|
|
156
|
-
|
|
157
147
|
// The project columns that decide what the audit log records and keeps.
|
|
158
148
|
export interface ProjectAuditLogSettings {
|
|
159
149
|
enableAuditLogs: boolean;
|
|
@@ -693,17 +683,6 @@ export class ProjectService extends DatabaseService<Model> {
|
|
|
693
683
|
protected override async onBeforeUpdate(
|
|
694
684
|
updateBy: UpdateBy<Model>,
|
|
695
685
|
): Promise<OnUpdate<Model>> {
|
|
696
|
-
/*
|
|
697
|
-
* While SSO is not active this caller only ever read the requirement as
|
|
698
|
-
* off (see onFindSuccess), so a write of it must not switch the stored
|
|
699
|
-
* requirement off, or set one nobody could see. Drops or refuses it.
|
|
700
|
-
*/
|
|
701
|
-
EditionEnforcement.guardSsoRequirementWrite({
|
|
702
|
-
props: updateBy.props,
|
|
703
|
-
data: updateBy.data as unknown as Record<string, unknown>,
|
|
704
|
-
columns: PROJECT_SSO_REQUIREMENT_COLUMNS,
|
|
705
|
-
});
|
|
706
|
-
|
|
707
686
|
/*
|
|
708
687
|
* Any project field could have changed; invalidate the in-process cache
|
|
709
688
|
* of the SSO flag. Cheap to refetch on the next request.
|
|
@@ -2857,44 +2836,6 @@ These are no longer recorded against the project and have to be cancelled by han
|
|
|
2857
2836
|
return { findBy, carryForward: null };
|
|
2858
2837
|
}
|
|
2859
2838
|
|
|
2860
|
-
/*
|
|
2861
|
-
* While SSO is not active a project's SSO requirement is not enforced: on
|
|
2862
|
-
* the Community Edition (the SSO login routes are part of the Enterprise
|
|
2863
|
-
* Edition), and on an Enterprise install whose license is lapsed or does
|
|
2864
|
-
* not include SSO (the routes refuse). Reads made for a caller then report
|
|
2865
|
-
* the EFFECTIVE value: not required, no required provider. Clients decide
|
|
2866
|
-
* from these columns whether to start an SSO flow - the mobile app hides a
|
|
2867
|
-
* project's on-call data behind an SSO login it cannot complete, and its
|
|
2868
|
-
* store builds cannot be patched.
|
|
2869
|
-
*
|
|
2870
|
-
* Only the returned objects change. Internal (root) reads, and the stored
|
|
2871
|
-
* row, keep the real value, and onBeforeUpdate keeps a caller from writing
|
|
2872
|
-
* the masked value back. So running the Enterprise Edition with a valid
|
|
2873
|
-
* license (or in its trial or grace period) again restores enforcement
|
|
2874
|
-
* exactly as configured.
|
|
2875
|
-
*/
|
|
2876
|
-
@CaptureSpan()
|
|
2877
|
-
protected override async onFindSuccess(
|
|
2878
|
-
onFind: OnFind<Model>,
|
|
2879
|
-
items: Array<Model>,
|
|
2880
|
-
): Promise<OnFind<Model>> {
|
|
2881
|
-
if (
|
|
2882
|
-
EditionEnforcement.shouldMaskSsoRequirementOnRead(onFind.findBy.props)
|
|
2883
|
-
) {
|
|
2884
|
-
for (const item of items) {
|
|
2885
|
-
if (item.requireSsoForLogin !== undefined) {
|
|
2886
|
-
item.requireSsoForLogin = false;
|
|
2887
|
-
}
|
|
2888
|
-
|
|
2889
|
-
if (item.requireSsoWithSsoProviderId !== undefined) {
|
|
2890
|
-
item.requireSsoWithSsoProviderId = null!;
|
|
2891
|
-
}
|
|
2892
|
-
}
|
|
2893
|
-
}
|
|
2894
|
-
|
|
2895
|
-
return { ...onFind, carryForward: items };
|
|
2896
|
-
}
|
|
2897
|
-
|
|
2898
2839
|
@CaptureSpan()
|
|
2899
2840
|
protected override async onBeforeDelete(
|
|
2900
2841
|
deleteBy: DeleteBy<Model>,
|
|
@@ -4,7 +4,6 @@ import { EncryptionSecret } from "../EnvironmentConfig";
|
|
|
4
4
|
import CreateBy from "../Types/Database/CreateBy";
|
|
5
5
|
import UpdateBy from "../Types/Database/UpdateBy";
|
|
6
6
|
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
7
|
-
import EditionEnforcement from "../Utils/EditionEnforcement";
|
|
8
7
|
import logger from "../Utils/Logger";
|
|
9
8
|
import DatabaseService from "./DatabaseService";
|
|
10
9
|
import MailService from "./MailService";
|
|
@@ -190,10 +189,8 @@ export class Service extends DatabaseService<Model> {
|
|
|
190
189
|
/*
|
|
191
190
|
* SCIM and admin-created users must follow the page's login policy too.
|
|
192
191
|
* Do not create a password-reset credential when only SSO can be used.
|
|
193
|
-
* On the Community Edition there is no SSO login for status pages, so a
|
|
194
|
-
* leftover requirement is not enforced and the user gets a password link.
|
|
195
192
|
*/
|
|
196
|
-
if (
|
|
193
|
+
if (statusPage.requireSsoForLogin) {
|
|
197
194
|
return createdItem;
|
|
198
195
|
}
|
|
199
196
|
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import DatabaseConfig from "../DatabaseConfig";
|
|
2
2
|
import InMemoryTTLCache from "../Infrastructure/InMemoryTTLCache";
|
|
3
3
|
import CreateBy from "../Types/Database/CreateBy";
|
|
4
|
-
import { OnCreate,
|
|
4
|
+
import { OnCreate, OnUpdate } from "../Types/Database/Hooks";
|
|
5
5
|
import UpdateBy from "../Types/Database/UpdateBy";
|
|
6
6
|
import CookieUtil from "../Utils/Cookie";
|
|
7
|
-
import EditionEnforcement from "../Utils/EditionEnforcement";
|
|
8
7
|
import { ExpressRequest } from "../Utils/Express";
|
|
9
8
|
import JSONWebToken from "../Utils/JsonWebToken";
|
|
10
9
|
import logger, { LogAttributes } from "../Utils/Logger";
|
|
@@ -115,14 +114,6 @@ export {
|
|
|
115
114
|
StatusPageReportRow,
|
|
116
115
|
};
|
|
117
116
|
|
|
118
|
-
/*
|
|
119
|
-
* The status page column that holds its SSO requirement: the one
|
|
120
|
-
* onFindSuccess masks and onBeforeUpdate guards while SSO is not active.
|
|
121
|
-
*/
|
|
122
|
-
export const STATUS_PAGE_SSO_REQUIREMENT_COLUMNS: ReadonlyArray<string> = [
|
|
123
|
-
"requireSsoForLogin",
|
|
124
|
-
];
|
|
125
|
-
|
|
126
117
|
/*
|
|
127
118
|
* What a report's incident counts read of the status page: which project's
|
|
128
119
|
* incidents to count, and whether the page only shows incidents limited to
|
|
@@ -298,36 +289,6 @@ export class Service extends DatabaseService<StatusPage> {
|
|
|
298
289
|
return this.getDefaultEmailFooterText();
|
|
299
290
|
}
|
|
300
291
|
|
|
301
|
-
/*
|
|
302
|
-
* While SSO is not active a status page's SSO requirement is not enforced:
|
|
303
|
-
* on the Community Edition (status page SSO login is part of the
|
|
304
|
-
* Enterprise Edition), and on an Enterprise install whose license is
|
|
305
|
-
* lapsed or does not include SSO (the SSO routes refuse). Reads made for a
|
|
306
|
-
* caller then report the EFFECTIVE value: not required. Internal (root)
|
|
307
|
-
* reads and the stored row keep the real value, and onBeforeUpdate keeps a
|
|
308
|
-
* caller from writing the masked value back, so running the Enterprise
|
|
309
|
-
* Edition with a valid license (or in its trial or grace period) again
|
|
310
|
-
* restores enforcement exactly as configured. The public master-page route
|
|
311
|
-
* reads as root and applies the same rule itself.
|
|
312
|
-
*/
|
|
313
|
-
@CaptureSpan()
|
|
314
|
-
protected override async onFindSuccess(
|
|
315
|
-
onFind: OnFind<StatusPage>,
|
|
316
|
-
items: Array<StatusPage>,
|
|
317
|
-
): Promise<OnFind<StatusPage>> {
|
|
318
|
-
if (
|
|
319
|
-
EditionEnforcement.shouldMaskSsoRequirementOnRead(onFind.findBy.props)
|
|
320
|
-
) {
|
|
321
|
-
for (const item of items) {
|
|
322
|
-
if (item.requireSsoForLogin !== undefined) {
|
|
323
|
-
item.requireSsoForLogin = false;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
return { ...onFind, carryForward: items };
|
|
329
|
-
}
|
|
330
|
-
|
|
331
292
|
@CaptureSpan()
|
|
332
293
|
protected override async onBeforeCreate(
|
|
333
294
|
createBy: CreateBy<StatusPage>,
|
|
@@ -1130,17 +1091,6 @@ export class Service extends DatabaseService<StatusPage> {
|
|
|
1130
1091
|
protected override async onBeforeUpdate(
|
|
1131
1092
|
updateBy: UpdateBy<StatusPage>,
|
|
1132
1093
|
): Promise<OnUpdate<StatusPage>> {
|
|
1133
|
-
/*
|
|
1134
|
-
* While SSO is not active this caller only ever read the requirement as
|
|
1135
|
-
* off (see onFindSuccess), so a write of it must not switch the stored
|
|
1136
|
-
* requirement off, or set one nobody could see. Drops or refuses it.
|
|
1137
|
-
*/
|
|
1138
|
-
EditionEnforcement.guardSsoRequirementWrite({
|
|
1139
|
-
props: updateBy.props,
|
|
1140
|
-
data: updateBy.data as unknown as Record<string, unknown>,
|
|
1141
|
-
columns: STATUS_PAGE_SSO_REQUIREMENT_COLUMNS,
|
|
1142
|
-
});
|
|
1143
|
-
|
|
1144
1094
|
// is enabling SMS subscribers.
|
|
1145
1095
|
|
|
1146
1096
|
if (updateBy.data.enableSmsSubscribers) {
|
|
@@ -24,18 +24,25 @@ import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
|
|
|
24
24
|
|
|
25
25
|
/*
|
|
26
26
|
* The part of a compliance rule that decides what it checks: its type, the
|
|
27
|
-
*
|
|
27
|
+
* channels it insists on (empty = any) and the severities it is scoped to
|
|
28
28
|
* (empty = every severity of its kind). Two rules with the same scope check
|
|
29
29
|
* exactly the same thing, which is what "duplicate" means here.
|
|
30
30
|
*/
|
|
31
31
|
export interface ComplianceRuleScope {
|
|
32
32
|
ruleType: ComplianceRuleType;
|
|
33
|
-
|
|
33
|
+
// In catalog order, each once (ComplianceRule.normaliseChannels).
|
|
34
|
+
notificationChannels: Array<ComplianceNotificationChannel>;
|
|
34
35
|
severityKind: ComplianceSeverityKind | null;
|
|
35
36
|
// Sorted, de-duplicated ids of the severity list the rule's kind uses.
|
|
36
37
|
severityIds: Array<string>;
|
|
37
38
|
}
|
|
38
39
|
|
|
40
|
+
// The two columns a rule's channels are stored in.
|
|
41
|
+
export interface StoredChannelColumns {
|
|
42
|
+
notificationChannels?: unknown;
|
|
43
|
+
notificationChannel?: unknown;
|
|
44
|
+
}
|
|
45
|
+
|
|
39
46
|
// A severity about to be deleted, as the severity services read it.
|
|
40
47
|
export interface DeletedSeverity {
|
|
41
48
|
_id?: string | undefined;
|
|
@@ -122,10 +129,10 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
122
129
|
createBy.data.ruleType,
|
|
123
130
|
);
|
|
124
131
|
|
|
125
|
-
|
|
132
|
+
TeamComplianceSettingService.normaliseChannelFields(createBy.data);
|
|
126
133
|
|
|
127
134
|
/*
|
|
128
|
-
* Normalise before anything is stored: a method rule carries no
|
|
135
|
+
* Normalise before anything is stored: a method rule carries no channels
|
|
129
136
|
* or severities, and an incident rule carries no alert severities. The
|
|
130
137
|
* form hides the fields that do not apply, but the API accepts whatever it
|
|
131
138
|
* is sent, and a stray alert severity on an incident rule would otherwise
|
|
@@ -150,7 +157,9 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
150
157
|
|
|
151
158
|
const scope: ComplianceRuleScope = TeamComplianceSettingService.getScope({
|
|
152
159
|
ruleType: ruleType,
|
|
153
|
-
|
|
160
|
+
notificationChannels: TeamComplianceSettingService.getStoredChannels(
|
|
161
|
+
createBy.data,
|
|
162
|
+
),
|
|
154
163
|
incidentSeverities: createBy.data.incidentSeverities,
|
|
155
164
|
alertSeverities: createBy.data.alertSeverities,
|
|
156
165
|
});
|
|
@@ -183,6 +192,7 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
183
192
|
|
|
184
193
|
const changesScope: boolean =
|
|
185
194
|
data["ruleType"] !== undefined ||
|
|
195
|
+
data["notificationChannels"] !== undefined ||
|
|
186
196
|
data["notificationChannel"] !== undefined ||
|
|
187
197
|
data["incidentSeverities"] !== undefined ||
|
|
188
198
|
data["alertSeverities"] !== undefined;
|
|
@@ -211,7 +221,7 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
211
221
|
? this.assertKnownRuleType(data["ruleType"])
|
|
212
222
|
: undefined;
|
|
213
223
|
|
|
214
|
-
|
|
224
|
+
TeamComplianceSettingService.normaliseChannelFields(data);
|
|
215
225
|
|
|
216
226
|
if (newRuleType) {
|
|
217
227
|
/*
|
|
@@ -237,6 +247,7 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
237
247
|
teamId: true,
|
|
238
248
|
projectId: true,
|
|
239
249
|
ruleType: true,
|
|
250
|
+
notificationChannels: true,
|
|
240
251
|
notificationChannel: true,
|
|
241
252
|
options: true,
|
|
242
253
|
incidentSeverities: {
|
|
@@ -328,10 +339,10 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
328
339
|
|
|
329
340
|
const scope: ComplianceRuleScope = TeamComplianceSettingService.getScope({
|
|
330
341
|
ruleType: ruleType,
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
342
|
+
// Sent as a pair by normaliseChannelFields, or not at all.
|
|
343
|
+
notificationChannels: TeamComplianceSettingService.getStoredChannels(
|
|
344
|
+
data["notificationChannels"] !== undefined ? data : existing,
|
|
345
|
+
),
|
|
335
346
|
incidentSeverities:
|
|
336
347
|
data["incidentSeverities"] !== undefined
|
|
337
348
|
? data["incidentSeverities"]
|
|
@@ -727,7 +738,7 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
727
738
|
|
|
728
739
|
for (const group of toPause.values()) {
|
|
729
740
|
/*
|
|
730
|
-
* Neither the type, the
|
|
741
|
+
* Neither the type, the channels nor a severity list: the update hook
|
|
731
742
|
* reads nothing for it. (Cast: the write type of a JSON column is too
|
|
732
743
|
* deep for the compiler to spell out.)
|
|
733
744
|
*/
|
|
@@ -754,23 +765,24 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
754
765
|
|
|
755
766
|
/*
|
|
756
767
|
* What a rule checks, from its stored (or about-to-be-stored) fields. Only
|
|
757
|
-
* the options its type uses count:
|
|
768
|
+
* the options its type uses count: channels on a method rule, or alert
|
|
758
769
|
* severities on an incident rule, change nothing about what is checked.
|
|
770
|
+
* `notificationChannels` is a list; see getStoredChannels for reading one
|
|
771
|
+
* off a row.
|
|
759
772
|
*/
|
|
760
773
|
public static getScope(data: {
|
|
761
774
|
ruleType: ComplianceRuleType;
|
|
762
|
-
|
|
775
|
+
notificationChannels: unknown;
|
|
763
776
|
incidentSeverities: unknown;
|
|
764
777
|
alertSeverities: unknown;
|
|
765
778
|
}): ComplianceRuleScope {
|
|
766
779
|
const severityKind: ComplianceSeverityKind | undefined =
|
|
767
780
|
ComplianceRule.getSeverityKind(data.ruleType);
|
|
768
781
|
|
|
769
|
-
const
|
|
770
|
-
ComplianceRule.supportsChannel(data.ruleType)
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
: null;
|
|
782
|
+
const notificationChannels: Array<ComplianceNotificationChannel> =
|
|
783
|
+
ComplianceRule.supportsChannel(data.ruleType)
|
|
784
|
+
? ComplianceRule.normaliseChannels(data.notificationChannels)
|
|
785
|
+
: [];
|
|
774
786
|
|
|
775
787
|
let severityIds: Array<string> = [];
|
|
776
788
|
|
|
@@ -784,23 +796,144 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
784
796
|
|
|
785
797
|
return {
|
|
786
798
|
ruleType: data.ruleType,
|
|
787
|
-
|
|
799
|
+
notificationChannels: notificationChannels,
|
|
788
800
|
severityKind: severityKind || null,
|
|
789
801
|
severityIds: severityIds,
|
|
790
802
|
};
|
|
791
803
|
}
|
|
792
804
|
|
|
805
|
+
/*
|
|
806
|
+
* Both lists are canonical - channels in catalog order, severity ids sorted
|
|
807
|
+
* - so the same selection compares equal however it was picked.
|
|
808
|
+
*/
|
|
793
809
|
public static isSameScope(
|
|
794
810
|
a: ComplianceRuleScope,
|
|
795
811
|
b: ComplianceRuleScope,
|
|
796
812
|
): boolean {
|
|
797
813
|
return (
|
|
798
814
|
a.ruleType === b.ruleType &&
|
|
799
|
-
a.
|
|
815
|
+
a.notificationChannels.join(",") === b.notificationChannels.join(",") &&
|
|
800
816
|
a.severityIds.join(",") === b.severityIds.join(",")
|
|
801
817
|
);
|
|
802
818
|
}
|
|
803
819
|
|
|
820
|
+
/*
|
|
821
|
+
* CHANNELS. What a rule insists on is the list in notificationChannels -
|
|
822
|
+
* every one of them - and the older notificationChannel column holds the
|
|
823
|
+
* first of that list, for everything that only knows the one column (see
|
|
824
|
+
* the model). What follows keeps the two in step.
|
|
825
|
+
*/
|
|
826
|
+
|
|
827
|
+
/*
|
|
828
|
+
* The channels a row holds, from its two columns. Every build that knows
|
|
829
|
+
* the list writes the pair together, the single column always the list's
|
|
830
|
+
* first channel. A build that does not - an older replica still serving
|
|
831
|
+
* during an upgrade, or a downgrade - writes only the single column and
|
|
832
|
+
* leaves the list as it was. So a row with no list, or whose list the
|
|
833
|
+
* single column no longer agrees with, was last written by such a build,
|
|
834
|
+
* and its single column is what the rule says; otherwise the list is.
|
|
835
|
+
* Rows from before the list existed have it backfilled by
|
|
836
|
+
* AddTeamComplianceRuleNotificationChannels.
|
|
837
|
+
*
|
|
838
|
+
* The comparison is on the stored values, before anything unknown is
|
|
839
|
+
* dropped, so a list a newer build wrote with a channel this one does not
|
|
840
|
+
* know still counts - for the channels it does know.
|
|
841
|
+
*/
|
|
842
|
+
public static getStoredChannels(
|
|
843
|
+
row: StoredChannelColumns,
|
|
844
|
+
): Array<ComplianceNotificationChannel> {
|
|
845
|
+
const single: unknown = row.notificationChannel ?? null;
|
|
846
|
+
|
|
847
|
+
if (Array.isArray(row.notificationChannels)) {
|
|
848
|
+
const first: unknown = row.notificationChannels[0] ?? null;
|
|
849
|
+
|
|
850
|
+
if (first === single) {
|
|
851
|
+
return ComplianceRule.normaliseChannels(row.notificationChannels);
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
return ComplianceRule.isKnownChannel(single) ? [single] : [];
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
/*
|
|
859
|
+
* The channels a SENT list asks for, as the list that will be stored:
|
|
860
|
+
* catalog order, each once (the order they were picked in is not part of
|
|
861
|
+
* the rule). Null is no channels - any channel. Anything else that is not
|
|
862
|
+
* a list of channels this build knows is refused rather than dropped: a
|
|
863
|
+
* list that silently lost a channel checks less than the admin asked for,
|
|
864
|
+
* and one that lost its only channel checks every channel.
|
|
865
|
+
*/
|
|
866
|
+
public static resolveSentChannels(
|
|
867
|
+
value: unknown,
|
|
868
|
+
): Array<ComplianceNotificationChannel> {
|
|
869
|
+
if (value === null) {
|
|
870
|
+
return [];
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
if (!Array.isArray(value)) {
|
|
874
|
+
throw new BadDataException(
|
|
875
|
+
"The notification channels of a compliance rule must be a list of channels.",
|
|
876
|
+
);
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
for (const item of value) {
|
|
880
|
+
TeamComplianceSettingService.assertKnownChannel(item);
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
return ComplianceRule.normaliseChannels(value);
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
/*
|
|
887
|
+
* Rewrites whichever channel column a payload sends into the pair that is
|
|
888
|
+
* stored: the list, and the single column set to its first channel. A
|
|
889
|
+
* payload that sends the list is taken at its list, whatever single
|
|
890
|
+
* channel rides along - a client that read a rule and sends it back sends
|
|
891
|
+
* both, and after the list changes the single one it holds is stale. One
|
|
892
|
+
* that sends only the single column (a client from before the list, or an
|
|
893
|
+
* older Dashboard) asks for exactly that channel, or for any channel when
|
|
894
|
+
* it is null. A payload that sends neither leaves both unsent.
|
|
895
|
+
*/
|
|
896
|
+
public static normaliseChannelFields(data: Model | JSONObject): void {
|
|
897
|
+
const target: JSONObject = data as JSONObject;
|
|
898
|
+
const sentList: unknown = target["notificationChannels"];
|
|
899
|
+
const sentSingle: unknown = target["notificationChannel"];
|
|
900
|
+
|
|
901
|
+
if (sentList === undefined && sentSingle === undefined) {
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
// Null / undefined is "any channel"; anything else must be a channel.
|
|
906
|
+
if (sentSingle !== undefined && sentSingle !== null) {
|
|
907
|
+
TeamComplianceSettingService.assertKnownChannel(sentSingle);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
let channels: Array<ComplianceNotificationChannel> = [];
|
|
911
|
+
|
|
912
|
+
if (sentList !== undefined) {
|
|
913
|
+
channels = TeamComplianceSettingService.resolveSentChannels(sentList);
|
|
914
|
+
} else if (ComplianceRule.isKnownChannel(sentSingle)) {
|
|
915
|
+
channels = [sentSingle];
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
TeamComplianceSettingService.setChannels(target, channels);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
private static setChannels(
|
|
922
|
+
target: JSONObject,
|
|
923
|
+
channels: Array<ComplianceNotificationChannel>,
|
|
924
|
+
): void {
|
|
925
|
+
target["notificationChannels"] = channels;
|
|
926
|
+
target["notificationChannel"] = channels[0] ?? null;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
private static assertKnownChannel(value: unknown): void {
|
|
930
|
+
if (!ComplianceRule.isKnownChannel(value)) {
|
|
931
|
+
throw new BadDataException(
|
|
932
|
+
`"${String(value)}" is not a notification channel a compliance rule can require.`,
|
|
933
|
+
);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
804
937
|
/*
|
|
805
938
|
* Severity ids from a severity list as it is STORED (or once a payload has
|
|
806
939
|
* been through normaliseSeverityLists): an id string, an ObjectID, a model,
|
|
@@ -992,22 +1125,10 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
992
1125
|
return value;
|
|
993
1126
|
}
|
|
994
1127
|
|
|
995
|
-
// Null / undefined is "any channel" and always valid.
|
|
996
|
-
private assertValidChannel(value: unknown): void {
|
|
997
|
-
if (value === undefined || value === null) {
|
|
998
|
-
return;
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
if (!ComplianceRule.isKnownChannel(value)) {
|
|
1002
|
-
throw new BadDataException(
|
|
1003
|
-
`"${String(value)}" is not a notification channel a compliance rule can require.`,
|
|
1004
|
-
);
|
|
1005
|
-
}
|
|
1006
|
-
}
|
|
1007
|
-
|
|
1008
1128
|
/*
|
|
1009
1129
|
* `clearUnsentOptions` also clears the options `data` does not mention, so
|
|
1010
1130
|
* an update writes them empty on the row instead of leaving what is stored.
|
|
1131
|
+
* Channels arrive here already paired by normaliseChannelFields.
|
|
1011
1132
|
*/
|
|
1012
1133
|
private clearOptionsThatDoNotApply(
|
|
1013
1134
|
data: Model | JSONObject,
|
|
@@ -1018,14 +1139,12 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
1018
1139
|
const severityKind: ComplianceSeverityKind | undefined =
|
|
1019
1140
|
ComplianceRule.getSeverityKind(ruleType);
|
|
1020
1141
|
|
|
1021
|
-
if (
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
)
|
|
1027
|
-
target["notificationChannel"] = null;
|
|
1028
|
-
}
|
|
1142
|
+
if (
|
|
1143
|
+
!ComplianceRule.supportsChannel(ruleType) &&
|
|
1144
|
+
(options.clearUnsentOptions ||
|
|
1145
|
+
target["notificationChannels"] !== undefined)
|
|
1146
|
+
) {
|
|
1147
|
+
TeamComplianceSettingService.setChannels(target, []);
|
|
1029
1148
|
}
|
|
1030
1149
|
|
|
1031
1150
|
if (
|
|
@@ -1112,6 +1231,7 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
1112
1231
|
select: {
|
|
1113
1232
|
_id: true,
|
|
1114
1233
|
ruleType: true,
|
|
1234
|
+
notificationChannels: true,
|
|
1115
1235
|
notificationChannel: true,
|
|
1116
1236
|
options: true,
|
|
1117
1237
|
incidentSeverities: {
|
|
@@ -1142,7 +1262,8 @@ export class TeamComplianceSettingService extends DatabaseService<Model> {
|
|
|
1142
1262
|
const siblingScope: ComplianceRuleScope =
|
|
1143
1263
|
TeamComplianceSettingService.getScope({
|
|
1144
1264
|
ruleType: data.scope.ruleType,
|
|
1145
|
-
|
|
1265
|
+
notificationChannels:
|
|
1266
|
+
TeamComplianceSettingService.getStoredChannels(sibling),
|
|
1146
1267
|
incidentSeverities: sibling.incidentSeverities,
|
|
1147
1268
|
alertSeverities: sibling.alertSeverities,
|
|
1148
1269
|
});
|
|
@@ -7,6 +7,7 @@ import { OnCreate, OnDelete, OnUpdate } from "../Types/Database/Hooks";
|
|
|
7
7
|
import DatabaseRequestType from "../Types/BaseDatabase/DatabaseRequestType";
|
|
8
8
|
import TenantPermission from "../Types/Database/Permissions/TenantPermission";
|
|
9
9
|
import Markdown, { MarkdownContentType } from "../Types/Markdown";
|
|
10
|
+
import { escapeMarkdownValue } from "../../Utils/Markdown/MarkdownEscape";
|
|
10
11
|
import CallService from "./CallService";
|
|
11
12
|
import DatabaseService from "./DatabaseService";
|
|
12
13
|
import IncidentService from "./IncidentService";
|
|
@@ -4218,7 +4219,13 @@ export class Service extends DatabaseService<Model> {
|
|
|
4218
4219
|
const lines: Array<string> = [
|
|
4219
4220
|
`🚨 **${data.headline}**`,
|
|
4220
4221
|
"",
|
|
4221
|
-
|
|
4222
|
+
/*
|
|
4223
|
+
* The identifier ends with a title - plain text, which anyone holding
|
|
4224
|
+
* an incident form's link may have typed - escaped as MarkdownEscape
|
|
4225
|
+
* says a title must be, so it cannot become an image or a link that
|
|
4226
|
+
* hides where it goes.
|
|
4227
|
+
*/
|
|
4228
|
+
`📋 **${escapeMarkdownValue(data.identifier)}**`,
|
|
4222
4229
|
"",
|
|
4223
4230
|
"👤 You're getting this because you're on call.",
|
|
4224
4231
|
];
|
|
@@ -812,8 +812,16 @@ export class Service extends DatabaseService<WorkspaceNotificationSummary> {
|
|
|
812
812
|
.toString();
|
|
813
813
|
const td: TimelineData | undefined = tlMap.get(id);
|
|
814
814
|
|
|
815
|
-
|
|
816
|
-
|
|
815
|
+
/*
|
|
816
|
+
* Title line with link. The title - plain text, which anyone
|
|
817
|
+
* holding an incident form's link may have typed - sits inside the
|
|
818
|
+
* link's text, so it is escaped like the names in these summaries:
|
|
819
|
+
* a "]" cannot end that text early and point the rest somewhere
|
|
820
|
+
* else, and "" is no image. (Escaping brackets alone is
|
|
821
|
+
* not enough inside a link's text: marked, for one, undoes "\[" and
|
|
822
|
+
* "\]" there before reading it.)
|
|
823
|
+
*/
|
|
824
|
+
let text: string = `${Service.bold(Service.link(linkUrl, `${display} — ${escapeMarkdownInline(inc.title || "Untitled")}`))}`;
|
|
817
825
|
|
|
818
826
|
// Meta line
|
|
819
827
|
const meta: Array<string> = [];
|
|
@@ -998,7 +1006,8 @@ export class Service extends DatabaseService<WorkspaceNotificationSummary> {
|
|
|
998
1006
|
.addRoute(`/${projectId.toString()}/incidents/episodes/${id}`)
|
|
999
1007
|
.toString();
|
|
1000
1008
|
|
|
1001
|
-
|
|
1009
|
+
// The title inside the link's text, escaped as an incident's is.
|
|
1010
|
+
let text: string = `${Service.bold(Service.link(linkUrl, escapeMarkdownInline(ep.title || "Untitled Episode")))}`;
|
|
1002
1011
|
const meta: Array<string> = [];
|
|
1003
1012
|
if (ep.incidentSeverity?.name) {
|
|
1004
1013
|
meta.push(`Severity: ${Service.bold(ep.incidentSeverity.name)}`);
|