@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
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
import { LIMIT_PER_PROJECT } from "../Database/LimitMax";
|
|
2
|
+
import Dictionary from "../Dictionary";
|
|
3
|
+
import { sortCustomFieldDefinitions } from "./CustomFieldOrder";
|
|
4
|
+
import { isValidCustomFieldVariableKey } from "./CustomFieldVariableKey";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* What happens to an incident custom field when an incident is declared: is
|
|
8
|
+
* it asked for, and must it be filled in? A project answers that once per
|
|
9
|
+
* field, with the field's own Show on Create and Required on Create switches.
|
|
10
|
+
* This module is how an incident template - and an incident form - answers
|
|
11
|
+
* it differently for itself (issue #4114): a template for a data breach can
|
|
12
|
+
* require "Affected Location" while the others leave it out.
|
|
13
|
+
*
|
|
14
|
+
* The settings are one JSON object KEYED BY THE FIELD'S TEMPLATE VARIABLE KEY
|
|
15
|
+
* (IncidentCustomField.variableKey), never by its name. Values are stored by
|
|
16
|
+
* name, but a name can change; the key is made from the name once and never
|
|
17
|
+
* changes, so renaming a field keeps every template's setting for it, and a
|
|
18
|
+
* template exported to another project finds the same fields there. A field
|
|
19
|
+
* the object does not list is Default.
|
|
20
|
+
*
|
|
21
|
+
* Two readers, and Default means something different to each:
|
|
22
|
+
*
|
|
23
|
+
* - an incident TEMPLATE only overrides. Default (or no entry) leaves the
|
|
24
|
+
* field's own switches in charge - see
|
|
25
|
+
* applyTemplateCustomFieldCreateSettings;
|
|
26
|
+
* - an incident FORM is a page anyone with its link can fill in, so it asks
|
|
27
|
+
* only for the fields it names as Required or Optional. Default and Hidden
|
|
28
|
+
* are both "not asked" there - see getIncidentFormAskedDefinitions. A
|
|
29
|
+
* public page must never show a field's name, or a dropdown's options,
|
|
30
|
+
* that an admin did not choose to put on it.
|
|
31
|
+
*
|
|
32
|
+
* Only the dashboard's Declare Incident form and the public incident form
|
|
33
|
+
* apply them. Incidents created through the API, by monitors, workflows and
|
|
34
|
+
* integrations never see a template's settings, exactly as they never see the
|
|
35
|
+
* project-wide Required on Create.
|
|
36
|
+
*
|
|
37
|
+
* Pure, with no database or React imports, so the server that checks a write,
|
|
38
|
+
* the dashboard that applies a template and the public form all read the
|
|
39
|
+
* settings the same way.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
export enum CustomFieldCreateSetting {
|
|
43
|
+
// Follow the field's own Show on Create and Required on Create.
|
|
44
|
+
Default = "Default",
|
|
45
|
+
// Asked for, and must be filled in.
|
|
46
|
+
Required = "Required",
|
|
47
|
+
// Asked for, and may be left empty.
|
|
48
|
+
Optional = "Optional",
|
|
49
|
+
// Not asked for.
|
|
50
|
+
Hidden = "Hidden",
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// One setting per field, keyed by the field's template variable key.
|
|
54
|
+
export type CustomFieldCreateSettings = Dictionary<CustomFieldCreateSetting>;
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* What a field ends up as once Default is resolved: asked and required,
|
|
58
|
+
* asked, or not asked.
|
|
59
|
+
*/
|
|
60
|
+
export type EffectiveCustomFieldCreateSetting =
|
|
61
|
+
| CustomFieldCreateSetting.Required
|
|
62
|
+
| CustomFieldCreateSetting.Optional
|
|
63
|
+
| CustomFieldCreateSetting.Hidden;
|
|
64
|
+
|
|
65
|
+
// Every setting, in the order a picker lists them.
|
|
66
|
+
export const CUSTOM_FIELD_CREATE_SETTINGS: ReadonlyArray<CustomFieldCreateSetting> =
|
|
67
|
+
[
|
|
68
|
+
CustomFieldCreateSetting.Default,
|
|
69
|
+
CustomFieldCreateSetting.Required,
|
|
70
|
+
CustomFieldCreateSetting.Optional,
|
|
71
|
+
CustomFieldCreateSetting.Hidden,
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* One entry per field at most, and a project holds at most this many fields.
|
|
76
|
+
* Anything larger is not a settings object anybody wrote by hand.
|
|
77
|
+
*/
|
|
78
|
+
export const CUSTOM_FIELD_CREATE_SETTINGS_MAX_ENTRIES: number =
|
|
79
|
+
LIMIT_PER_PROJECT;
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
* The fields a definition needs for its setting to be applied. The key is
|
|
83
|
+
* optional because older rows predate it (every field has had one since
|
|
84
|
+
* migration 1795800000000), and a definition without one can only be Default.
|
|
85
|
+
*/
|
|
86
|
+
export interface CustomFieldCreateSettingsDefinition {
|
|
87
|
+
variableKey?: string | null | undefined;
|
|
88
|
+
showOnCreate?: boolean | null | undefined;
|
|
89
|
+
isRequiredOnCreate?: boolean | null | undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/*
|
|
93
|
+
* Problems are reported together so an API caller fixing several entries
|
|
94
|
+
* does not find them one request at a time, but bounded: a settings object
|
|
95
|
+
* made of ten thousand typos still reads as a few sentences.
|
|
96
|
+
*/
|
|
97
|
+
const MAX_LISTED_PROBLEMS: number = 5;
|
|
98
|
+
|
|
99
|
+
// Keys and values are quoted back, cut short so a pasted essay stays one line.
|
|
100
|
+
const MAX_QUOTED_LENGTH: number = 80;
|
|
101
|
+
|
|
102
|
+
type QuoteFunction = (value: unknown) => string;
|
|
103
|
+
|
|
104
|
+
const quote: QuoteFunction = (value: unknown): string => {
|
|
105
|
+
let text: string | undefined;
|
|
106
|
+
|
|
107
|
+
try {
|
|
108
|
+
text = typeof value === "string" ? value : JSON.stringify(value);
|
|
109
|
+
} catch {
|
|
110
|
+
text = String(value);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (text === undefined) {
|
|
114
|
+
text = String(value);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (text.length > MAX_QUOTED_LENGTH) {
|
|
118
|
+
text = `${text.slice(0, MAX_QUOTED_LENGTH)}...`;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return `"${text}"`;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
type IsPlainObjectFunction = (
|
|
125
|
+
value: unknown,
|
|
126
|
+
) => value is Record<string, unknown>;
|
|
127
|
+
|
|
128
|
+
const isPlainObject: IsPlainObjectFunction = (
|
|
129
|
+
value: unknown,
|
|
130
|
+
): value is Record<string, unknown> => {
|
|
131
|
+
return (
|
|
132
|
+
value !== null &&
|
|
133
|
+
typeof value === "object" &&
|
|
134
|
+
!Array.isArray(value) &&
|
|
135
|
+
!(value instanceof Date)
|
|
136
|
+
);
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/*
|
|
140
|
+
* Own properties only. A field named "Constructor" has the key "constructor",
|
|
141
|
+
* and reading that off a plain object that does not list it would otherwise
|
|
142
|
+
* find Object.prototype.constructor.
|
|
143
|
+
*/
|
|
144
|
+
type HasOwnFunction = (target: Record<string, unknown>, key: string) => boolean;
|
|
145
|
+
|
|
146
|
+
const hasOwn: HasOwnFunction = (
|
|
147
|
+
target: Record<string, unknown>,
|
|
148
|
+
key: string,
|
|
149
|
+
): boolean => {
|
|
150
|
+
return Object.prototype.hasOwnProperty.call(target, key);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export type IsCustomFieldCreateSettingFunction = (
|
|
154
|
+
value: unknown,
|
|
155
|
+
) => value is CustomFieldCreateSetting;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Whether a value is one of the four settings, spelled exactly as the enum
|
|
159
|
+
* spells it. "required" is not "Required": the server stores what it is sent
|
|
160
|
+
* and never rewrites it, so it only accepts what it can store as sent.
|
|
161
|
+
*/
|
|
162
|
+
export const isCustomFieldCreateSetting: IsCustomFieldCreateSettingFunction = (
|
|
163
|
+
value: unknown,
|
|
164
|
+
): value is CustomFieldCreateSetting => {
|
|
165
|
+
return (
|
|
166
|
+
typeof value === "string" &&
|
|
167
|
+
(CUSTOM_FIELD_CREATE_SETTINGS as ReadonlyArray<string>).includes(value)
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export type ValidateCustomFieldCreateSettingsFunction = (
|
|
172
|
+
value: unknown,
|
|
173
|
+
) => string | null;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Why a value cannot be stored as a template's or form's custom field
|
|
177
|
+
* settings, or null when it can. Nothing (null or undefined) is fine: it
|
|
178
|
+
* clears the settings.
|
|
179
|
+
*
|
|
180
|
+
* It only judges, never repairs. The API stores exactly what it was sent:
|
|
181
|
+
* Terraform compares a JSON column with the value in its configuration, so a
|
|
182
|
+
* server that dropped a Default entry or fixed the case of a value would
|
|
183
|
+
* report a change on every plan.
|
|
184
|
+
*/
|
|
185
|
+
export const validateCustomFieldCreateSettings: ValidateCustomFieldCreateSettingsFunction =
|
|
186
|
+
(value: unknown): string | null => {
|
|
187
|
+
if (value === null || value === undefined) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (!isPlainObject(value)) {
|
|
192
|
+
return `Custom Field Settings must be an object that maps each incident custom field's template variable key to Required, Optional, Hidden or Default, such as {"impact": "Required"}, but was sent ${quote(
|
|
193
|
+
value,
|
|
194
|
+
)}.`;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const entries: Array<[string, unknown]> = Object.entries(value);
|
|
198
|
+
|
|
199
|
+
if (entries.length > CUSTOM_FIELD_CREATE_SETTINGS_MAX_ENTRIES) {
|
|
200
|
+
return `Custom Field Settings can list at most ${CUSTOM_FIELD_CREATE_SETTINGS_MAX_ENTRIES} fields, but lists ${entries.length}.`;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const problems: Array<string> = [];
|
|
204
|
+
|
|
205
|
+
for (const [key, setting] of entries) {
|
|
206
|
+
if (!isValidCustomFieldVariableKey(key)) {
|
|
207
|
+
problems.push(
|
|
208
|
+
`${quote(
|
|
209
|
+
key,
|
|
210
|
+
)} is not an incident custom field's template variable key. Keys are lowercase letters and digits joined by single underscores, such as "affected_location".`,
|
|
211
|
+
);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (!isCustomFieldCreateSetting(setting)) {
|
|
216
|
+
problems.push(
|
|
217
|
+
`The setting for ${quote(
|
|
218
|
+
key,
|
|
219
|
+
)} must be Required, Optional, Hidden or Default, but was sent ${quote(
|
|
220
|
+
setting,
|
|
221
|
+
)}.`,
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (problems.length === 0) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const listed: string = problems.slice(0, MAX_LISTED_PROBLEMS).join(" ");
|
|
231
|
+
const more: number = problems.length - MAX_LISTED_PROBLEMS;
|
|
232
|
+
|
|
233
|
+
if (more <= 0) {
|
|
234
|
+
return listed;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return `${listed} ${more} more ${
|
|
238
|
+
more === 1 ? "entry is" : "entries are"
|
|
239
|
+
} not valid either.`;
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
export type ReadCustomFieldCreateSettingsFunction = (
|
|
243
|
+
value: unknown,
|
|
244
|
+
) => CustomFieldCreateSettings;
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* The settings a stored value holds, for anything that applies them: every
|
|
248
|
+
* entry with a valid key and a valid setting, and nothing else. Never throws,
|
|
249
|
+
* so a value written before validation existed - or by hand, straight into
|
|
250
|
+
* the database - makes those fields Default instead of breaking the page
|
|
251
|
+
* that reads it.
|
|
252
|
+
*/
|
|
253
|
+
export const readCustomFieldCreateSettings: ReadCustomFieldCreateSettingsFunction =
|
|
254
|
+
(value: unknown): CustomFieldCreateSettings => {
|
|
255
|
+
const settings: CustomFieldCreateSettings = {};
|
|
256
|
+
|
|
257
|
+
if (!isPlainObject(value)) {
|
|
258
|
+
return settings;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
for (const [key, setting] of Object.entries(value)) {
|
|
262
|
+
if (
|
|
263
|
+
isValidCustomFieldVariableKey(key) &&
|
|
264
|
+
isCustomFieldCreateSetting(setting)
|
|
265
|
+
) {
|
|
266
|
+
settings[key] = setting;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return settings;
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
export type GetCustomFieldCreateSettingFunction = (
|
|
274
|
+
settings: unknown,
|
|
275
|
+
variableKey?: string | null | undefined,
|
|
276
|
+
) => CustomFieldCreateSetting;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* One field's setting: Default when the settings do not list the key, list
|
|
280
|
+
* something invalid for it, or the field has no key at all.
|
|
281
|
+
*/
|
|
282
|
+
export const getCustomFieldCreateSetting: GetCustomFieldCreateSettingFunction =
|
|
283
|
+
(
|
|
284
|
+
settings: unknown,
|
|
285
|
+
variableKey?: string | null | undefined,
|
|
286
|
+
): CustomFieldCreateSetting => {
|
|
287
|
+
if (
|
|
288
|
+
!variableKey ||
|
|
289
|
+
!isValidCustomFieldVariableKey(variableKey) ||
|
|
290
|
+
!isPlainObject(settings) ||
|
|
291
|
+
!hasOwn(settings, variableKey)
|
|
292
|
+
) {
|
|
293
|
+
return CustomFieldCreateSetting.Default;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const setting: unknown = settings[variableKey];
|
|
297
|
+
|
|
298
|
+
return isCustomFieldCreateSetting(setting)
|
|
299
|
+
? setting
|
|
300
|
+
: CustomFieldCreateSetting.Default;
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
export type GetEffectiveCustomFieldCreateSettingFunction = (
|
|
304
|
+
definition: CustomFieldCreateSettingsDefinition,
|
|
305
|
+
settings?: unknown,
|
|
306
|
+
) => EffectiveCustomFieldCreateSetting;
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* What the Details step of declaring an incident does with a field, once a
|
|
310
|
+
* template's settings are applied: Required, Optional or Hidden. Default
|
|
311
|
+
* resolves to the field's own switches - Hidden unless Show on Create is on,
|
|
312
|
+
* then Required or Optional by Required on Create - so with no settings this
|
|
313
|
+
* is the field's project-wide behaviour, which a settings picker can show
|
|
314
|
+
* next to "Default".
|
|
315
|
+
*/
|
|
316
|
+
export const getEffectiveCustomFieldCreateSetting: GetEffectiveCustomFieldCreateSettingFunction =
|
|
317
|
+
(
|
|
318
|
+
definition: CustomFieldCreateSettingsDefinition,
|
|
319
|
+
settings?: unknown,
|
|
320
|
+
): EffectiveCustomFieldCreateSetting => {
|
|
321
|
+
const setting: CustomFieldCreateSetting = getCustomFieldCreateSetting(
|
|
322
|
+
settings,
|
|
323
|
+
definition.variableKey,
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
if (setting !== CustomFieldCreateSetting.Default) {
|
|
327
|
+
return setting;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/*
|
|
331
|
+
* The same two tests the Declare Incident form makes: only fields with
|
|
332
|
+
* Show on Create are on its Details step, and only those with Required on
|
|
333
|
+
* Create as well are required there. Required alone asks for nothing.
|
|
334
|
+
*/
|
|
335
|
+
if (definition.showOnCreate !== true) {
|
|
336
|
+
return CustomFieldCreateSetting.Hidden;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return definition.isRequiredOnCreate === true
|
|
340
|
+
? CustomFieldCreateSetting.Required
|
|
341
|
+
: CustomFieldCreateSetting.Optional;
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
export type GetIncidentFormCustomFieldSettingFunction = (
|
|
345
|
+
settings: unknown,
|
|
346
|
+
variableKey?: string | null | undefined,
|
|
347
|
+
) => EffectiveCustomFieldCreateSetting;
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* One field's setting on an incident form, where only Required and Optional
|
|
351
|
+
* ask for anything: Default, Hidden and a field the form does not list are
|
|
352
|
+
* all Hidden ("not asked").
|
|
353
|
+
*/
|
|
354
|
+
export const getIncidentFormCustomFieldSetting: GetIncidentFormCustomFieldSettingFunction =
|
|
355
|
+
(
|
|
356
|
+
settings: unknown,
|
|
357
|
+
variableKey?: string | null | undefined,
|
|
358
|
+
): EffectiveCustomFieldCreateSetting => {
|
|
359
|
+
const setting: CustomFieldCreateSetting = getCustomFieldCreateSetting(
|
|
360
|
+
settings,
|
|
361
|
+
variableKey,
|
|
362
|
+
);
|
|
363
|
+
|
|
364
|
+
if (
|
|
365
|
+
setting === CustomFieldCreateSetting.Required ||
|
|
366
|
+
setting === CustomFieldCreateSetting.Optional
|
|
367
|
+
) {
|
|
368
|
+
return setting;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
return CustomFieldCreateSetting.Hidden;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
type CopyWithFunction = <T extends CustomFieldCreateSettingsDefinition>(
|
|
375
|
+
definition: T,
|
|
376
|
+
changes: {
|
|
377
|
+
showOnCreate?: boolean;
|
|
378
|
+
isRequiredOnCreate?: boolean;
|
|
379
|
+
},
|
|
380
|
+
) => T;
|
|
381
|
+
|
|
382
|
+
/*
|
|
383
|
+
* A copy of a definition with its switches changed. The copy keeps the
|
|
384
|
+
* original's prototype: a server caller may hand over model instances, and a
|
|
385
|
+
* spread would return plain objects that TypeScript still types as models -
|
|
386
|
+
* the first method called on one would throw.
|
|
387
|
+
*/
|
|
388
|
+
const copyWith: CopyWithFunction = <
|
|
389
|
+
T extends CustomFieldCreateSettingsDefinition,
|
|
390
|
+
>(
|
|
391
|
+
definition: T,
|
|
392
|
+
changes: {
|
|
393
|
+
showOnCreate?: boolean;
|
|
394
|
+
isRequiredOnCreate?: boolean;
|
|
395
|
+
},
|
|
396
|
+
): T => {
|
|
397
|
+
const copy: T = Object.create(Object.getPrototypeOf(definition)) as T;
|
|
398
|
+
|
|
399
|
+
return Object.assign(copy, definition, changes);
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
export type ApplyTemplateCustomFieldCreateSettingsFunction = <
|
|
403
|
+
T extends CustomFieldCreateSettingsDefinition,
|
|
404
|
+
>(
|
|
405
|
+
definitions: Array<T>,
|
|
406
|
+
settings: unknown,
|
|
407
|
+
) => Array<T>;
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* The project's field definitions as an incident template's settings make
|
|
411
|
+
* them: Required shows the field and requires it, Optional shows it without
|
|
412
|
+
* requiring it, Hidden leaves it off, and Default leaves the field's own
|
|
413
|
+
* switches as they are. Hand the result to whatever picks the Details step's
|
|
414
|
+
* fields (they filter on showOnCreate), and every later step - the initial
|
|
415
|
+
* values, the required checks, the subscriber preview - follows.
|
|
416
|
+
*
|
|
417
|
+
* Returns new objects, in the order given; the definitions passed in are
|
|
418
|
+
* never changed.
|
|
419
|
+
*/
|
|
420
|
+
export const applyTemplateCustomFieldCreateSettings: ApplyTemplateCustomFieldCreateSettingsFunction =
|
|
421
|
+
<T extends CustomFieldCreateSettingsDefinition>(
|
|
422
|
+
definitions: Array<T>,
|
|
423
|
+
settings: unknown,
|
|
424
|
+
): Array<T> => {
|
|
425
|
+
const read: CustomFieldCreateSettings =
|
|
426
|
+
readCustomFieldCreateSettings(settings);
|
|
427
|
+
|
|
428
|
+
return definitions.map((definition: T): T => {
|
|
429
|
+
switch (getCustomFieldCreateSetting(read, definition.variableKey)) {
|
|
430
|
+
case CustomFieldCreateSetting.Required:
|
|
431
|
+
return copyWith(definition, {
|
|
432
|
+
showOnCreate: true,
|
|
433
|
+
isRequiredOnCreate: true,
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
case CustomFieldCreateSetting.Optional:
|
|
437
|
+
return copyWith(definition, {
|
|
438
|
+
showOnCreate: true,
|
|
439
|
+
isRequiredOnCreate: false,
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
case CustomFieldCreateSetting.Hidden:
|
|
443
|
+
return copyWith(definition, {
|
|
444
|
+
showOnCreate: false,
|
|
445
|
+
isRequiredOnCreate: false,
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
default:
|
|
449
|
+
return copyWith(definition, {});
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
export type GetIncidentFormAskedDefinitionsFunction = <
|
|
455
|
+
T extends CustomFieldCreateSettingsDefinition & {
|
|
456
|
+
sortOrder?: number | null | undefined;
|
|
457
|
+
},
|
|
458
|
+
>(
|
|
459
|
+
definitions: Array<T>,
|
|
460
|
+
settings: unknown,
|
|
461
|
+
) => Array<T>;
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* The fields an incident form asks for: only those its settings make
|
|
465
|
+
* Required or Optional, whatever their own Show on Create says. Each comes
|
|
466
|
+
* back as a copy with showOnCreate on and isRequiredOnCreate saying whether
|
|
467
|
+
* the form requires it, in the order fields are shown everywhere else
|
|
468
|
+
* (sortCustomFieldDefinitions).
|
|
469
|
+
*
|
|
470
|
+
* The public form is built from this list and its answers are checked
|
|
471
|
+
* against it, so a field that is not on it can neither be seen nor filled in
|
|
472
|
+
* through the form.
|
|
473
|
+
*/
|
|
474
|
+
export const getIncidentFormAskedDefinitions: GetIncidentFormAskedDefinitionsFunction =
|
|
475
|
+
<
|
|
476
|
+
T extends CustomFieldCreateSettingsDefinition & {
|
|
477
|
+
sortOrder?: number | null | undefined;
|
|
478
|
+
},
|
|
479
|
+
>(
|
|
480
|
+
definitions: Array<T>,
|
|
481
|
+
settings: unknown,
|
|
482
|
+
): Array<T> => {
|
|
483
|
+
const read: CustomFieldCreateSettings =
|
|
484
|
+
readCustomFieldCreateSettings(settings);
|
|
485
|
+
|
|
486
|
+
const asked: Array<T> = [];
|
|
487
|
+
|
|
488
|
+
for (const definition of definitions) {
|
|
489
|
+
const setting: EffectiveCustomFieldCreateSetting =
|
|
490
|
+
getIncidentFormCustomFieldSetting(read, definition.variableKey);
|
|
491
|
+
|
|
492
|
+
if (setting === CustomFieldCreateSetting.Hidden) {
|
|
493
|
+
continue;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
asked.push(
|
|
497
|
+
copyWith(definition, {
|
|
498
|
+
showOnCreate: true,
|
|
499
|
+
isRequiredOnCreate: setting === CustomFieldCreateSetting.Required,
|
|
500
|
+
}),
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
return sortCustomFieldDefinitions(asked);
|
|
505
|
+
};
|
|
506
|
+
|
|
507
|
+
export type CompactCustomFieldCreateSettingsFunction = (
|
|
508
|
+
settings: unknown,
|
|
509
|
+
options?: {
|
|
510
|
+
/*
|
|
511
|
+
* For an incident form, where Hidden and Default both mean "not asked":
|
|
512
|
+
* drop Hidden entries too, so only the questions the form asks remain.
|
|
513
|
+
*/
|
|
514
|
+
dropHidden?: boolean | undefined;
|
|
515
|
+
},
|
|
516
|
+
) => CustomFieldCreateSettings;
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* The smallest settings object that means the same thing, for a settings
|
|
520
|
+
* form to save: Default entries (which say nothing) and invalid ones are
|
|
521
|
+
* left out, and with dropHidden so are Hidden ones. The server never does
|
|
522
|
+
* this to what it is sent (see validateCustomFieldCreateSettings); a client
|
|
523
|
+
* that wants a tidy value sends one.
|
|
524
|
+
*/
|
|
525
|
+
export const compactCustomFieldCreateSettings: CompactCustomFieldCreateSettingsFunction =
|
|
526
|
+
(
|
|
527
|
+
settings: unknown,
|
|
528
|
+
options?: {
|
|
529
|
+
dropHidden?: boolean | undefined;
|
|
530
|
+
},
|
|
531
|
+
): CustomFieldCreateSettings => {
|
|
532
|
+
const compacted: CustomFieldCreateSettings = {};
|
|
533
|
+
|
|
534
|
+
for (const [key, setting] of Object.entries(
|
|
535
|
+
readCustomFieldCreateSettings(settings),
|
|
536
|
+
)) {
|
|
537
|
+
if (setting === CustomFieldCreateSetting.Default) {
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
if (options?.dropHidden && setting === CustomFieldCreateSetting.Hidden) {
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
compacted[key] = setting;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
return compacted;
|
|
549
|
+
};
|
|
@@ -158,4 +158,81 @@ export const hasCustomFieldMappingSource: HasCustomFieldMappingSourceFunction =
|
|
|
158
158
|
return Boolean(value);
|
|
159
159
|
};
|
|
160
160
|
|
|
161
|
+
/*
|
|
162
|
+
* The two columns of a custom field definition that map it from a field of
|
|
163
|
+
* a related resource. Loose, so definition rows and the forms' own
|
|
164
|
+
* definitions can be passed as they are.
|
|
165
|
+
*/
|
|
166
|
+
export interface CustomFieldMappingColumns {
|
|
167
|
+
mapFromResourceType?: string | null | undefined;
|
|
168
|
+
mapFromCustomFieldName?: string | null | undefined;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export type GetCustomFieldInheritanceSourceFunction = (data: {
|
|
172
|
+
definitionTableName: string | undefined;
|
|
173
|
+
definition: CustomFieldMappingColumns;
|
|
174
|
+
}) => CustomFieldMappingSourceInfo | undefined;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* The resource a field copies its value from - undefined for a field that
|
|
178
|
+
* is typed in, or mapped from a resource its table cannot reach.
|
|
179
|
+
*/
|
|
180
|
+
export const getCustomFieldInheritanceSource: GetCustomFieldInheritanceSourceFunction =
|
|
181
|
+
(data: {
|
|
182
|
+
definitionTableName: string | undefined;
|
|
183
|
+
definition: CustomFieldMappingColumns;
|
|
184
|
+
}): CustomFieldMappingSourceInfo | undefined => {
|
|
185
|
+
if (
|
|
186
|
+
!data.definition.mapFromResourceType ||
|
|
187
|
+
!data.definition.mapFromCustomFieldName
|
|
188
|
+
) {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return getCustomFieldMappingSource({
|
|
193
|
+
definitionTableName: data.definitionTableName,
|
|
194
|
+
resource: data.definition.mapFromResourceType,
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export type IsCustomFieldInheritedByRecordFunction = (data: {
|
|
199
|
+
definitionTableName: string | undefined;
|
|
200
|
+
definition: CustomFieldMappingColumns;
|
|
201
|
+
// The record as it will be created: its relations decide.
|
|
202
|
+
record: Record<string, unknown> | null | undefined;
|
|
203
|
+
}) => boolean;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Whether a field's value will be copied from a related resource rather than
|
|
207
|
+
* typed: it is mapped (an incident field from a monitor field) and the
|
|
208
|
+
* record is attached to something to copy from (the incident has a
|
|
209
|
+
* monitor). The server applies the mapping last on create, so asking for
|
|
210
|
+
* such a value would only have it replaced.
|
|
211
|
+
*
|
|
212
|
+
* The one rule every form that decides whether to ask for a field follows:
|
|
213
|
+
* the dashboard's Declare Incident form and template wizard (through
|
|
214
|
+
* isCustomFieldInherited), and the public incident forms.
|
|
215
|
+
*/
|
|
216
|
+
export const isCustomFieldInheritedByRecord: IsCustomFieldInheritedByRecordFunction =
|
|
217
|
+
(data: {
|
|
218
|
+
definitionTableName: string | undefined;
|
|
219
|
+
definition: CustomFieldMappingColumns;
|
|
220
|
+
record: Record<string, unknown> | null | undefined;
|
|
221
|
+
}): boolean => {
|
|
222
|
+
const source: CustomFieldMappingSourceInfo | undefined =
|
|
223
|
+
getCustomFieldInheritanceSource({
|
|
224
|
+
definitionTableName: data.definitionTableName,
|
|
225
|
+
definition: data.definition,
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
if (!source) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return hasCustomFieldMappingSource({
|
|
233
|
+
source: source,
|
|
234
|
+
record: data.record,
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
|
|
161
238
|
export default CUSTOM_FIELD_MAPPING_CATALOG;
|
|
@@ -45,8 +45,10 @@ export interface CustomFieldValueValidationError {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/*
|
|
48
|
-
* Values and
|
|
49
|
-
*
|
|
48
|
+
* Values and lists (of options, or of entries that are not options) are
|
|
49
|
+
* quoted back in the message, bounded so that a pasted essay, a field with
|
|
50
|
+
* two hundred options or a list of a million entries still reads as one
|
|
51
|
+
* line.
|
|
50
52
|
*/
|
|
51
53
|
const MAX_QUOTED_VALUE_LENGTH: number = 80;
|
|
52
54
|
const MAX_LISTED_OPTIONS: number = 10;
|
|
@@ -287,11 +289,12 @@ const validateMultiSelectValue: ValidateOneFunction = (data: {
|
|
|
287
289
|
return null;
|
|
288
290
|
}
|
|
289
291
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
292
|
+
/*
|
|
293
|
+
* The entries are listed as the options are, the first few and a count
|
|
294
|
+
* of the rest: a write can send any number of them, and the message is
|
|
295
|
+
* logged and sent back whole.
|
|
296
|
+
*/
|
|
297
|
+
return `${listOptions(notOptions)} ${
|
|
295
298
|
notOptions.length === 1 ? "is not one of" : "are not among"
|
|
296
299
|
} the options for ${quote(name)}. Choose from: ${listOptions(options)}.`;
|
|
297
300
|
};
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* its expiry
|
|
11
11
|
*
|
|
12
12
|
* Until either ends nothing changes; after it, enterprise configuration
|
|
13
|
-
* becomes read-only and
|
|
13
|
+
* becomes read-only and SCIM provisioning and audit logging stop
|
|
14
14
|
* (EnterpriseEdition.isFeatureActive) until a license is activated.
|
|
15
15
|
*
|
|
16
16
|
* They live here, with no server dependency, so the copy that states them in
|