@oneuptime/common 14.0.9 → 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/AutoRemediationSuggestion.ts +60 -0
- package/Models/DatabaseModels/CephCluster.ts +225 -0
- package/Models/DatabaseModels/CloudResource.ts +12 -0
- package/Models/DatabaseModels/DatabaseServer.ts +225 -0
- package/Models/DatabaseModels/DockerHost.ts +225 -0
- package/Models/DatabaseModels/DockerSwarmCluster.ts +225 -0
- package/Models/DatabaseModels/GlobalConfig.ts +1 -1
- 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 +225 -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 +16 -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 +225 -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 +225 -0
- package/Models/DatabaseModels/ResourceAiAgent.ts +419 -0
- package/Models/DatabaseModels/RumApplication.ts +12 -0
- package/Models/DatabaseModels/RunnerJob.ts +144 -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 +225 -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/AutoRemediationAPI.ts +392 -1
- package/Server/API/IncidentFormAPI.ts +376 -0
- package/Server/API/ProjectOIDC.ts +16 -25
- package/Server/API/ProjectSSO.ts +16 -24
- package/Server/API/ResourceAiAccessAPI.ts +1669 -0
- 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/1796300000000-AddResourceAiAgents.ts +423 -0
- 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 +10 -0
- package/Server/Infrastructure/Semaphore.ts +22 -0
- package/Server/Middleware/IncidentFormRateLimit.ts +847 -0
- package/Server/Middleware/TelemetryIngest.ts +15 -5
- package/Server/Middleware/UserAuthorization.ts +16 -38
- package/Server/Services/AIService.ts +10 -13
- package/Server/Services/AnalyticsDatabaseService.ts +45 -1
- package/Server/Services/AutoRemediationRuleEngineService.ts +940 -112
- package/Server/Services/CephClusterService.ts +109 -1
- package/Server/Services/DatabaseServerService.ts +116 -1
- package/Server/Services/DockerHostService.ts +109 -1
- package/Server/Services/DockerSwarmClusterService.ts +113 -1
- package/Server/Services/HostService.ts +126 -4
- 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/MetricRecordingRuleService.ts +47 -0
- package/Server/Services/OpenTelemetryIngestService.ts +37 -4
- package/Server/Services/PodmanHostService.ts +109 -1
- package/Server/Services/ProjectService.ts +0 -59
- package/Server/Services/ProxmoxClusterService.ts +110 -1
- package/Server/Services/ResourceAiAccessService.ts +1439 -0
- package/Server/Services/ResourceAiAgentJobService.ts +202 -0
- package/Server/Services/ResourceAiAgentService.ts +2432 -0
- package/Server/Services/RunnerJobService.ts +611 -4
- package/Server/Services/StatusPagePrivateUserService.ts +1 -4
- package/Server/Services/StatusPageService.ts +1 -51
- package/Server/Services/TeamComplianceSettingService.ts +163 -42
- package/Server/Services/TelemetryUsageBillingService.ts +28 -0
- package/Server/Services/TraceRecordingRuleService.ts +33 -0
- package/Server/Services/UserNotificationRuleService.ts +8 -1
- package/Server/Services/VMwareVCenterService.ts +110 -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 +1442 -34
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +968 -34
- package/Server/Utils/AI/Remediation/RemediationPlanRunner.ts +25 -1
- package/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.ts +622 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAccessContext.ts +271 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.ts +45 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.ts +964 -0
- package/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.ts +333 -0
- package/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.ts +882 -0
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +125 -12
- package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +99 -15
- package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +99 -15
- 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/AutoRemediation/CommandPlanExecutor.ts +396 -13
- package/Server/Utils/AutoRemediation/RemediationVerifier.ts +35 -2
- package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +9 -1
- 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/SessionReplay/SessionReplayBudgetMetrics.ts +920 -0
- package/Server/Utils/SessionReplay/SessionReplayUsage.ts +84 -6
- 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/Alert.ts +35 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +33 -15
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.ts +21 -1
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +301 -225
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +38 -16
- package/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.ts +389 -175
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +376 -144
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.ts +163 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +396 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.ts +418 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.ts +152 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.ts +251 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.ts +214 -0
- 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 +267 -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 +23 -6
- 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/InvestigationInfrastructureTools.test.tsx +506 -0
- 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/RemediationSuggestionCardDescription.test.tsx +209 -0
- package/Tests/App/Dashboard/RemediationSuggestionCardResource.test.tsx +317 -0
- package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +921 -0
- package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +555 -0
- package/Tests/App/Dashboard/ResourceAiAgentInstall.test.ts +860 -0
- package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +2010 -0
- package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +1455 -0
- package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +931 -0
- package/Tests/App/Dashboard/ResourceAiNavigation.test.tsx +575 -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/RunbookStepTypeMaps.test.ts +38 -7
- 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 +61 -10
- package/Tests/Models/DatabaseModels/IncidentFormModel.test.ts +1250 -0
- package/Tests/Models/DatabaseModels/MessageQueueModels.test.ts +1983 -0
- package/Tests/Models/DatabaseModels/ResourceAiAccessColumns.test.ts +738 -0
- package/Tests/Models/DatabaseModels/ResourceAiAgentModel.test.ts +842 -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/AutoRemediationApproveResourceRound.test.ts +835 -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/ResourceAiAccessAPI.test.ts +2730 -0
- 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/AddDatabaseServerTablesMigration.test.ts +60 -0
- package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +438 -0
- package/Tests/Server/Infrastructure/Postgres/AddResourceAiAgentsMigration.test.ts +659 -0
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleNotificationChannelsMigration.test.ts +255 -0
- package/Tests/Server/Infrastructure/Postgres/MessageQueueTablesMigration.test.ts +637 -0
- package/Tests/Server/Infrastructure/SemaphoreMutex.test.ts +31 -0
- package/Tests/Server/Middleware/IncidentFormRateLimit.test.ts +1630 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +63 -5
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +103 -5
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +19 -1
- 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/AutoRemediationResourceRuleEngine.test.ts +1279 -0
- package/Tests/Server/Services/DatabaseServerService.test.ts +55 -0
- package/Tests/Server/Services/GroupTelemetryUsageExcludeNames.test.ts +299 -0
- package/Tests/Server/Services/HostServiceFindOrCreateMemo.test.ts +44 -0
- 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/MonitorProbeServiceIntervalScheduling.test.ts +45 -6
- 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/RecordingRuleReservedMetricName.test.ts +171 -0
- package/Tests/Server/Services/ResourceAiAccessChangeAuthorization.test.ts +256 -0
- package/Tests/Server/Services/ResourceAiAccessService.test.ts +1373 -0
- package/Tests/Server/Services/ResourceAiAgentJobService.test.ts +375 -0
- package/Tests/Server/Services/ResourceAiAgentServiceHelpers.test.ts +1114 -0
- package/Tests/Server/Services/ResourceAiAgentServiceLifecycle.test.ts +1050 -0
- package/Tests/Server/Services/ResourceAiAgentServiceRegister.test.ts +2251 -0
- package/Tests/Server/Services/ResourceAiSettingsCreate.test.ts +373 -0
- package/Tests/Server/Services/ResourceAiSettingsPermission.test.ts +1042 -0
- package/Tests/Server/Services/ResourceServiceDeleteCleansUpAi.test.ts +319 -0
- package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +56 -6
- package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +30 -1
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +105 -0
- package/Tests/Server/Services/RunnerJobEnqueueResourceCommand.test.ts +986 -0
- package/Tests/Server/Services/RunnerJobResourceCommandLane.test.ts +211 -0
- package/Tests/Server/Services/RunnerJobResourceCommandTimeoutAndRedaction.test.ts +352 -0
- 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/Services/TelemetryUsageBillingSloExclusion.test.ts +218 -0
- package/Tests/Server/TestingUtils/Services/FakeRunnerJobCount.ts +145 -0
- 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 +694 -0
- package/Tests/Server/Utils/AI/InvestigationInfrastructureReport.test.ts +721 -0
- 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/RemediationCommandTools.test.ts +94 -1
- package/Tests/Server/Utils/AI/RemediationCommandToolsResource.test.ts +1530 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +14 -25
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +1251 -0
- package/Tests/Server/Utils/AI/RemediationPlanRunner.test.ts +117 -0
- package/Tests/Server/Utils/AI/RemediationResourceCopyParity.test.ts +463 -0
- package/Tests/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.test.ts +1004 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +266 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.test.ts +1220 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.test.ts +569 -0
- package/Tests/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.test.ts +834 -0
- 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/AutoRemediation/CommandPlanExecutorResource.test.ts +717 -0
- package/Tests/Server/Utils/AutoRemediation/RemediationVerifierResourceFollowUp.test.ts +338 -0
- package/Tests/Server/Utils/EditionEnforcement.test.ts +107 -147
- package/Tests/Server/Utils/Monitor/Criteria/SessionReplayBudgetTemplateCriteria.test.ts +422 -0
- 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/SessionReplay/SessionReplayBudgetMetrics.test.ts +1647 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +143 -1
- 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/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +33 -3
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsAccountNotLinked.test.ts +1093 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.test.ts +1049 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +1676 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCards.test.ts +2884 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.test.ts +2490 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmit.test.ts +2293 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateSubmitServerTimezone.test.ts +386 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.test.ts +1477 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.test.ts +1967 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsStripHtmlTags.test.ts +92 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsSubmittedFormRemoval.test.ts +1819 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.test.ts +1033 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezoneServerZone.test.ts +610 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsBotMessageHandling.test.ts +2610 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsCreateCommandsEndToEnd.test.ts +4672 -0
- package/Tests/Server/Utils/Workspace/WorkspaceCreateProjectReferences.test.ts +190 -65
- package/Tests/Types/AI/AIAgentRunLimits.test.ts +255 -0
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlan.test.ts +10 -4
- package/Tests/Types/AutoRemediation/AiRemediationCommandPlanResourceCommand.test.ts +305 -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/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +277 -13
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationUtil.test.ts +113 -0
- package/Tests/Types/Monitor/RumAlertTemplates.test.ts +773 -2
- package/Tests/Types/ResourceAiAgent/AiResourceType.test.ts +419 -0
- package/Tests/Types/ResourceAiAgent/ResourceAiAccess.test.ts +519 -0
- package/Tests/Types/Runbook/RunbookStepType.test.ts +147 -8
- 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/Rum/RecordingHealthDashboard.test.tsx +769 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +81 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +17 -0
- package/Tests/Utils/AiRemediation/Resource/CephCommandPolicy.test.ts +1653 -0
- package/Tests/Utils/AiRemediation/Resource/CephOutputRedaction.test.ts +204 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseCommandPolicy.test.ts +1077 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.test.ts +558 -0
- package/Tests/Utils/AiRemediation/Resource/DatabaseQueryRedactor.test.ts +834 -0
- package/Tests/Utils/AiRemediation/Resource/DockerCliGrammar.test.ts +747 -0
- package/Tests/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.test.ts +1259 -0
- package/Tests/Utils/AiRemediation/Resource/DockerOutputRedaction.test.ts +386 -0
- package/Tests/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.test.ts +782 -0
- package/Tests/Utils/AiRemediation/Resource/GovcCommandPolicy.test.ts +2259 -0
- package/Tests/Utils/AiRemediation/Resource/HostCommandPolicy.test.ts +2019 -0
- package/Tests/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.test.ts +2497 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicy.test.ts +1305 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.test.ts +585 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactor.test.ts +334 -0
- package/Tests/Utils/AiRemediation/Resource/ResourceOutputRedactorCopyParity.test.ts +98 -0
- package/Tests/Utils/AiRemediation/Resource/ResourcePolicyImportClosure.test.ts +391 -0
- package/Tests/Utils/AiRemediation/ResourceAiAgentPolicyCopyParity.test.ts +497 -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/Tests/Utils/SessionReplay/SessionReplayBudgetMetricType.test.ts +383 -0
- package/Types/AI/AIAgentRunLimits.ts +146 -0
- package/Types/AI/ResourceAiAccessApi.ts +140 -0
- package/Types/AI/ResourceAiAccessPermissions.ts +126 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +183 -2
- 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/Monitor/Recommendation/MonitorRecommendationCatalog.ts +55 -22
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +35 -3
- package/Types/Monitor/RumAlertTemplates.ts +351 -4
- package/Types/Permission.ts +310 -0
- package/Types/ResourceAiAgent/AiResourceType.ts +310 -0
- package/Types/ResourceAiAgent/ResourceAiAccess.ts +580 -0
- package/Types/Rules/RuleCriteriaFieldRegistry.ts +12 -0
- package/Types/Rules/RuleRun.ts +4 -0
- package/Types/Rum/SessionReplayBudgetMetricType.ts +47 -0
- package/Types/Runbook/RunbookStepType.ts +29 -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/Telemetry/TelemetryIngestSurface.ts +14 -2
- 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/AI/InvestigationReport.ts +121 -15
- package/Utils/AiRemediation/Resource/CephCommandPolicy.ts +1936 -0
- package/Utils/AiRemediation/Resource/DatabaseCommandPolicy.ts +166 -0
- package/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.ts +1532 -0
- package/Utils/AiRemediation/Resource/DatabaseQueryRedactor.ts +1394 -0
- package/Utils/AiRemediation/Resource/DockerCliGrammar.ts +1839 -0
- package/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.ts +490 -0
- package/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.ts +687 -0
- package/Utils/AiRemediation/Resource/GovcCommandPolicy.ts +2096 -0
- package/Utils/AiRemediation/Resource/HostCommandPolicy.ts +2982 -0
- package/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.ts +1679 -0
- package/Utils/AiRemediation/Resource/ResourceCommandPolicy.ts +851 -0
- package/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.ts +593 -0
- package/Utils/AiRemediation/Resource/ResourceOutputRedactor.ts +2812 -0
- 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/SessionReplay/SessionReplayBudgetMetricType.ts +184 -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/AutoRemediationSuggestion.js +62 -0
- package/build/dist/Models/DatabaseModels/AutoRemediationSuggestion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CephCluster.js +231 -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 +231 -0
- package/build/dist/Models/DatabaseModels/DatabaseServer.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerHost.js +231 -0
- package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +231 -0
- package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
- package/build/dist/Models/DatabaseModels/GlobalConfig.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 +231 -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 +16 -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 +231 -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 +231 -0
- package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ResourceAiAgent.js +439 -0
- package/build/dist/Models/DatabaseModels/ResourceAiAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/RumApplication.js +12 -0
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerJob.js +145 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.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 +231 -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/AutoRemediationAPI.js +231 -1
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- 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/ResourceAiAccessAPI.js +1119 -0
- package/build/dist/Server/API/ResourceAiAccessAPI.js.map +1 -0
- 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/1796300000000-AddResourceAiAgents.js +168 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796300000000-AddResourceAiAgents.js.map +1 -0
- 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 +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Infrastructure/Semaphore.js +6 -0
- package/build/dist/Server/Infrastructure/Semaphore.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/TelemetryIngest.js +12 -5
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- 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/AnalyticsDatabaseService.js +26 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +601 -3
- package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/CephClusterService.js +104 -0
- package/build/dist/Server/Services/CephClusterService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseServerService.js +99 -0
- package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
- package/build/dist/Server/Services/DockerHostService.js +104 -0
- package/build/dist/Server/Services/DockerHostService.js.map +1 -1
- package/build/dist/Server/Services/DockerSwarmClusterService.js +104 -0
- package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
- package/build/dist/Server/Services/HostService.js +114 -2
- package/build/dist/Server/Services/HostService.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/MetricRecordingRuleService.js +46 -0
- package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +25 -4
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PodmanHostService.js +104 -0
- package/build/dist/Server/Services/PodmanHostService.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/ProxmoxClusterService.js +104 -0
- package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
- package/build/dist/Server/Services/ResourceAiAccessService.js +1028 -0
- package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -0
- package/build/dist/Server/Services/ResourceAiAgentJobService.js +173 -0
- package/build/dist/Server/Services/ResourceAiAgentJobService.js.map +1 -0
- package/build/dist/Server/Services/ResourceAiAgentService.js +1687 -0
- package/build/dist/Server/Services/ResourceAiAgentService.js.map +1 -0
- package/build/dist/Server/Services/RunnerJobService.js +344 -5
- package/build/dist/Server/Services/RunnerJobService.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/TelemetryUsageBillingService.js +26 -0
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceRecordingRuleService.js +37 -0
- package/build/dist/Server/Services/TraceRecordingRuleService.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/VMwareVCenterService.js +104 -0
- package/build/dist/Server/Services/VMwareVCenterService.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 +1036 -32
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +661 -41
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js +21 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationPlanRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js +354 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/InfrastructureInvestigationToolkit.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js +160 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessContext.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js +33 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAccessToolNames.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js +640 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiAccessSettings.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js +226 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceAiDeleteCleanup.js.map +1 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js +602 -0
- package/build/dist/Server/Utils/AI/ResourceAccess/ResourceCommandJobRunner.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +90 -14
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +73 -10
- package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +73 -10
- 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/AutoRemediation/CommandPlanExecutor.js +290 -13
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js +29 -1
- package/build/dist/Server/Utils/AutoRemediation/RemediationVerifier.js.map +1 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +9 -1
- package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.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/SessionReplay/SessionReplayBudgetMetrics.js +627 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js +60 -5
- package/build/dist/Server/Utils/SessionReplay/SessionReplayUsage.js.map +1 -1
- 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/Alert.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +19 -15
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js +17 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Auth.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +186 -210
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +22 -16
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js +233 -167
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +273 -111
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js +129 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsActivityDeduplicator.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +266 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js +258 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCreateCommands.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js +104 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsMessageSize.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js +183 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsReplies.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js +123 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsTimezone.js.map +1 -0
- package/build/dist/Types/AI/AIAgentRunLimits.js +91 -0
- package/build/dist/Types/AI/AIAgentRunLimits.js.map +1 -0
- package/build/dist/Types/AI/ResourceAiAccessApi.js +30 -0
- package/build/dist/Types/AI/ResourceAiAccessApi.js.map +1 -0
- package/build/dist/Types/AI/ResourceAiAccessPermissions.js +98 -0
- package/build/dist/Types/AI/ResourceAiAccessPermissions.js.map +1 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +116 -29
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- 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/Monitor/Recommendation/MonitorRecommendationCatalog.js +47 -21
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +5 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/RumAlertTemplates.js +199 -3
- package/build/dist/Types/Monitor/RumAlertTemplates.js.map +1 -1
- package/build/dist/Types/Permission.js +274 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/ResourceAiAgent/AiResourceType.js +242 -0
- package/build/dist/Types/ResourceAiAgent/AiResourceType.js.map +1 -0
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js +281 -0
- package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -0
- 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/Rum/SessionReplayBudgetMetricType.js +45 -0
- package/build/dist/Types/Rum/SessionReplayBudgetMetricType.js.map +1 -0
- package/build/dist/Types/Runbook/RunbookStepType.js +27 -0
- package/build/dist/Types/Runbook/RunbookStepType.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/Telemetry/TelemetryIngestSurface.js +13 -2
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.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/AI/InvestigationReport.js +71 -11
- package/build/dist/Utils/AI/InvestigationReport.js.map +1 -1
- package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js +1462 -0
- package/build/dist/Utils/AiRemediation/Resource/CephCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js +122 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js +1139 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseDiagnosticCatalog.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js +1060 -0
- package/build/dist/Utils/AiRemediation/Resource/DatabaseQueryRedactor.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js +1301 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerCliGrammar.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js +370 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerEngineCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js +498 -0
- package/build/dist/Utils/AiRemediation/Resource/DockerSwarmCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js +1565 -0
- package/build/dist/Utils/AiRemediation/Resource/GovcCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js +2206 -0
- package/build/dist/Utils/AiRemediation/Resource/HostCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js +1129 -0
- package/build/dist/Utils/AiRemediation/Resource/ProxmoxCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js +565 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicy.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js +408 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceCommandPolicyCore.js.map +1 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js +1910 -0
- package/build/dist/Utils/AiRemediation/Resource/ResourceOutputRedactor.js.map +1 -0
- 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/SessionReplay/SessionReplayBudgetMetricType.js +160 -0
- package/build/dist/Utils/SessionReplay/SessionReplayBudgetMetricType.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
|
@@ -16,6 +16,7 @@ import TablePermission from "../../../../../Server/Types/Database/Permissions/Ta
|
|
|
16
16
|
import UpdatePermission from "../../../../../Server/Types/Database/Permissions/UpdatePermission";
|
|
17
17
|
import DatabaseRequestType from "../../../../../Server/Types/BaseDatabase/DatabaseRequestType";
|
|
18
18
|
import Query from "../../../../../Server/Types/Database/Query";
|
|
19
|
+
import QueryDeepPartialEntity from "../../../../../Types/Database/PartialEntity";
|
|
19
20
|
import EnterpriseEdition from "../../../../../Server/Enterprise/EnterpriseEdition";
|
|
20
21
|
import EnterpriseFeature, {
|
|
21
22
|
ALL_ENTERPRISE_FEATURES,
|
|
@@ -60,10 +61,10 @@ import { setTestBillingEnabled } from "../../../Enterprise/TestBillingFlag";
|
|
|
60
61
|
|
|
61
62
|
/*
|
|
62
63
|
* EditionPermission is the license gate on enterprise CONFIGURATION: creating
|
|
63
|
-
* or updating the
|
|
64
|
-
* models
|
|
64
|
+
* or updating the three @TableEditionAccessControl({ requiresEnterprise })
|
|
65
|
+
* models - project SCIM, status page SCIM and team compliance settings.
|
|
65
66
|
*
|
|
66
|
-
* The rules under test
|
|
67
|
+
* The rules under test:
|
|
67
68
|
* - billing on (the cloud): never refuses; plan gates live in
|
|
68
69
|
* BillingPermission.
|
|
69
70
|
* - internal root writes: never refused.
|
|
@@ -75,10 +76,18 @@ import { setTestBillingEnabled } from "../../../Enterprise/TestBillingFlag";
|
|
|
75
76
|
* model's feature, and refused with the license message otherwise.
|
|
76
77
|
* - an unknown snapshot (the first load has not finished, or reading it
|
|
77
78
|
* throws) refuses writes - fail closed.
|
|
78
|
-
* - the exception: an update that only tightens security (
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
79
|
+
* - the exception: an update that only tightens security (rotating a SCIM
|
|
80
|
+
* bearer token) needs no license, in either edition. It is judged on what
|
|
81
|
+
* the update writes, which only UpdatePermission has; without the data an
|
|
82
|
+
* update gets the full check.
|
|
83
|
+
*
|
|
84
|
+
* Single sign-on configuration (project, status page and global SAML/OIDC
|
|
85
|
+
* providers, and a global provider's project attachments) is Community
|
|
86
|
+
* Edition configuration: the edition check never refuses it, in any edition
|
|
87
|
+
* or license state, for any caller. Who may write it is decided by the usual
|
|
88
|
+
* table permissions (project owners and admins for project and status page
|
|
89
|
+
* providers, master admins for global ones), and on the cloud by the Scale
|
|
90
|
+
* plan gate (see SsoScalePlanGate.test.ts).
|
|
82
91
|
*
|
|
83
92
|
* Billing and the edition are pinned in every test: CI's config.env sets
|
|
84
93
|
* BILLING_ENABLED=true, so an unpinned suite would only test the cloud path
|
|
@@ -110,14 +119,6 @@ type EditionState =
|
|
|
110
119
|
|
|
111
120
|
const ENTERPRISE_MODELS: ReadonlyArray<[string, ModelType, EnterpriseFeature]> =
|
|
112
121
|
[
|
|
113
|
-
["GlobalSSO", GlobalSSO, EnterpriseFeature.SSO],
|
|
114
|
-
["GlobalOIDC", GlobalOIDC, EnterpriseFeature.SSO],
|
|
115
|
-
["GlobalSSOProject", GlobalSSOProject, EnterpriseFeature.SSO],
|
|
116
|
-
["GlobalOIDCProject", GlobalOIDCProject, EnterpriseFeature.SSO],
|
|
117
|
-
["ProjectSSO", ProjectSSO, EnterpriseFeature.SSO],
|
|
118
|
-
["ProjectOIDC", ProjectOIDC, EnterpriseFeature.SSO],
|
|
119
|
-
["StatusPageSSO", StatusPageSSO, EnterpriseFeature.SSO],
|
|
120
|
-
["StatusPageOIDC", StatusPageOIDC, EnterpriseFeature.SSO],
|
|
121
122
|
["ProjectSCIM", ProjectSCIM, EnterpriseFeature.SCIM],
|
|
122
123
|
["StatusPageSCIM", StatusPageSCIM, EnterpriseFeature.SCIM],
|
|
123
124
|
[
|
|
@@ -127,6 +128,34 @@ const ENTERPRISE_MODELS: ReadonlyArray<[string, ModelType, EnterpriseFeature]> =
|
|
|
127
128
|
],
|
|
128
129
|
];
|
|
129
130
|
|
|
131
|
+
// Community Edition configuration: never gated by the edition check.
|
|
132
|
+
const SSO_MODELS: ReadonlyArray<[string, ModelType]> = [
|
|
133
|
+
["GlobalSSO", GlobalSSO],
|
|
134
|
+
["GlobalOIDC", GlobalOIDC],
|
|
135
|
+
["GlobalSSOProject", GlobalSSOProject],
|
|
136
|
+
["GlobalOIDCProject", GlobalOIDCProject],
|
|
137
|
+
["ProjectSSO", ProjectSSO],
|
|
138
|
+
["ProjectOIDC", ProjectOIDC],
|
|
139
|
+
["StatusPageSSO", StatusPageSSO],
|
|
140
|
+
["StatusPageOIDC", StatusPageOIDC],
|
|
141
|
+
];
|
|
142
|
+
|
|
143
|
+
// The single sign-on models a project owner configures.
|
|
144
|
+
const PROJECT_SSO_MODELS: ReadonlyArray<[string, ModelType]> = [
|
|
145
|
+
["ProjectSSO", ProjectSSO],
|
|
146
|
+
["ProjectOIDC", ProjectOIDC],
|
|
147
|
+
["StatusPageSSO", StatusPageSSO],
|
|
148
|
+
["StatusPageOIDC", StatusPageOIDC],
|
|
149
|
+
];
|
|
150
|
+
|
|
151
|
+
// The single sign-on models only a master admin configures.
|
|
152
|
+
const GLOBAL_SSO_MODELS: ReadonlyArray<[string, ModelType]> = [
|
|
153
|
+
["GlobalSSO", GlobalSSO],
|
|
154
|
+
["GlobalOIDC", GlobalOIDC],
|
|
155
|
+
["GlobalSSOProject", GlobalSSOProject],
|
|
156
|
+
["GlobalOIDCProject", GlobalOIDCProject],
|
|
157
|
+
];
|
|
158
|
+
|
|
130
159
|
const ORDINARY_MODELS: ReadonlyArray<[string, ModelType]> = [
|
|
131
160
|
["Project", Project],
|
|
132
161
|
["Monitor", Monitor],
|
|
@@ -212,6 +241,11 @@ const propsFor: (caller: Caller) => DatabaseCommonInteractionProps = (
|
|
|
212
241
|
return buildUserProps([Permission.ProjectOwner]);
|
|
213
242
|
};
|
|
214
243
|
|
|
244
|
+
const masterAdminProps: () => DatabaseCommonInteractionProps =
|
|
245
|
+
(): DatabaseCommonInteractionProps => {
|
|
246
|
+
return { userId, isMasterAdmin: true };
|
|
247
|
+
};
|
|
248
|
+
|
|
215
249
|
const describeEdition: (edition: EditionState) => string = (
|
|
216
250
|
edition: EditionState,
|
|
217
251
|
): string => {
|
|
@@ -302,16 +336,19 @@ const runEditionCheck: (input: {
|
|
|
302
336
|
modelType: ModelType;
|
|
303
337
|
operation: DatabaseRequestType;
|
|
304
338
|
caller: Caller;
|
|
339
|
+
data?: unknown;
|
|
305
340
|
}) => Outcome = (input: {
|
|
306
341
|
modelType: ModelType;
|
|
307
342
|
operation: DatabaseRequestType;
|
|
308
343
|
caller: Caller;
|
|
344
|
+
data?: unknown;
|
|
309
345
|
}): Outcome => {
|
|
310
346
|
try {
|
|
311
347
|
const result: unknown = EditionPermissions.checkEditionPermissions(
|
|
312
348
|
input.modelType,
|
|
313
349
|
propsFor(input.caller),
|
|
314
350
|
input.operation,
|
|
351
|
+
input.data,
|
|
315
352
|
);
|
|
316
353
|
|
|
317
354
|
// A Promise here would mean a refusal could be lost to a missed await.
|
|
@@ -394,9 +431,29 @@ const allEditionStates: () => Array<EditionState> = (): Array<EditionState> => {
|
|
|
394
431
|
|
|
395
432
|
states.push({ kind: "enterprise", snapshot: null });
|
|
396
433
|
|
|
434
|
+
// A usable license that leaves every runtime feature out.
|
|
435
|
+
states.push({
|
|
436
|
+
kind: "enterprise",
|
|
437
|
+
snapshot: createLicenseSnapshot({
|
|
438
|
+
features: [EnterpriseFeature.TeamCompliance],
|
|
439
|
+
}),
|
|
440
|
+
});
|
|
441
|
+
|
|
397
442
|
return states;
|
|
398
443
|
};
|
|
399
444
|
|
|
445
|
+
const withoutFeature: (
|
|
446
|
+
models: ReadonlyArray<[string, ModelType]>,
|
|
447
|
+
) => Array<[string, ModelType, null]> = (
|
|
448
|
+
models: ReadonlyArray<[string, ModelType]>,
|
|
449
|
+
): Array<[string, ModelType, null]> => {
|
|
450
|
+
return models.map(
|
|
451
|
+
([name, modelType]: [string, ModelType]): [string, ModelType, null] => {
|
|
452
|
+
return [name, modelType, null];
|
|
453
|
+
},
|
|
454
|
+
);
|
|
455
|
+
};
|
|
456
|
+
|
|
400
457
|
describe("EditionPermission.checkEditionPermissions", () => {
|
|
401
458
|
beforeEach(() => {
|
|
402
459
|
setTestBillingEnabled(false);
|
|
@@ -429,6 +486,25 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
429
486
|
},
|
|
430
487
|
);
|
|
431
488
|
|
|
489
|
+
test.each([true, false])(
|
|
490
|
+
"billing=%p: the single sign-on models are never gated in any edition state",
|
|
491
|
+
(billing: boolean) => {
|
|
492
|
+
const mismatches: Array<string> = [];
|
|
493
|
+
|
|
494
|
+
for (const edition of allEditionStates()) {
|
|
495
|
+
mismatches.push(
|
|
496
|
+
...findMismatches({
|
|
497
|
+
billing,
|
|
498
|
+
edition,
|
|
499
|
+
models: withoutFeature(SSO_MODELS),
|
|
500
|
+
}),
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
expect(mismatches).toEqual([]);
|
|
505
|
+
},
|
|
506
|
+
);
|
|
507
|
+
|
|
432
508
|
test.each([true, false])(
|
|
433
509
|
"billing=%p: ordinary models are never gated in any edition state",
|
|
434
510
|
(billing: boolean) => {
|
|
@@ -439,15 +515,7 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
439
515
|
...findMismatches({
|
|
440
516
|
billing,
|
|
441
517
|
edition,
|
|
442
|
-
models: ORDINARY_MODELS
|
|
443
|
-
([name, modelType]: [string, ModelType]): [
|
|
444
|
-
string,
|
|
445
|
-
ModelType,
|
|
446
|
-
null,
|
|
447
|
-
] => {
|
|
448
|
-
return [name, modelType, null];
|
|
449
|
-
},
|
|
450
|
-
),
|
|
518
|
+
models: withoutFeature(ORDINARY_MODELS),
|
|
451
519
|
}),
|
|
452
520
|
);
|
|
453
521
|
}
|
|
@@ -484,7 +552,7 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
484
552
|
|
|
485
553
|
expect(
|
|
486
554
|
runEditionCheck({
|
|
487
|
-
modelType:
|
|
555
|
+
modelType: ProjectSCIM,
|
|
488
556
|
operation: DatabaseRequestType.Create,
|
|
489
557
|
caller: "regular user",
|
|
490
558
|
}),
|
|
@@ -521,6 +589,37 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
521
589
|
},
|
|
522
590
|
);
|
|
523
591
|
|
|
592
|
+
test.each(SSO_MODELS)(
|
|
593
|
+
"%s: create and update are allowed, for users and master admins",
|
|
594
|
+
(_name: string, modelType: ModelType) => {
|
|
595
|
+
for (const caller of ALL_CALLERS) {
|
|
596
|
+
for (const operation of ALL_OPERATIONS) {
|
|
597
|
+
expect(runEditionCheck({ modelType, operation, caller })).toBe(
|
|
598
|
+
"allowed",
|
|
599
|
+
);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
// Whatever the update writes: there is no tighten-only rule to meet.
|
|
604
|
+
for (const data of [
|
|
605
|
+
{ isEnabled: true },
|
|
606
|
+
{ isEnabled: false },
|
|
607
|
+
{ name: "Okta", isEnabled: true },
|
|
608
|
+
{},
|
|
609
|
+
undefined,
|
|
610
|
+
]) {
|
|
611
|
+
expect(
|
|
612
|
+
runEditionCheck({
|
|
613
|
+
modelType,
|
|
614
|
+
operation: DatabaseRequestType.Update,
|
|
615
|
+
caller: "regular user",
|
|
616
|
+
data,
|
|
617
|
+
}),
|
|
618
|
+
).toBe("allowed");
|
|
619
|
+
}
|
|
620
|
+
},
|
|
621
|
+
);
|
|
622
|
+
|
|
524
623
|
test.each(ENTERPRISE_MODELS)(
|
|
525
624
|
"%s: read and delete stay allowed so leftover configuration can be seen and removed",
|
|
526
625
|
(_name: string, modelType: ModelType) => {
|
|
@@ -636,23 +735,51 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
636
735
|
},
|
|
637
736
|
);
|
|
638
737
|
|
|
738
|
+
test.each(UNUSABLE_STATUSES)(
|
|
739
|
+
"a %s license leaves single sign-on configuration writable, for users and master admins",
|
|
740
|
+
(status: EnterpriseLicenseStatus) => {
|
|
741
|
+
installFakeEnterpriseModule({
|
|
742
|
+
snapshot: createLicenseSnapshotWithStatus(status),
|
|
743
|
+
});
|
|
744
|
+
|
|
745
|
+
for (const [, modelType] of SSO_MODELS) {
|
|
746
|
+
for (const caller of ALL_CALLERS) {
|
|
747
|
+
for (const operation of ALL_OPERATIONS) {
|
|
748
|
+
expect(runEditionCheck({ modelType, operation, caller })).toBe(
|
|
749
|
+
"allowed",
|
|
750
|
+
);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
);
|
|
756
|
+
|
|
639
757
|
test("before the first license load finishes (no snapshot) writes are refused - fail closed", () => {
|
|
640
758
|
installFakeEnterpriseModule({ snapshot: null });
|
|
641
759
|
|
|
642
760
|
expect(
|
|
643
761
|
runEditionCheck({
|
|
644
|
-
modelType:
|
|
762
|
+
modelType: ProjectSCIM,
|
|
645
763
|
operation: DatabaseRequestType.Create,
|
|
646
764
|
caller: "master admin",
|
|
647
765
|
}),
|
|
648
766
|
).toBe("license");
|
|
649
767
|
expect(
|
|
650
768
|
runEditionCheck({
|
|
651
|
-
modelType:
|
|
769
|
+
modelType: ProjectSCIM,
|
|
652
770
|
operation: DatabaseRequestType.Read,
|
|
653
771
|
caller: "master admin",
|
|
654
772
|
}),
|
|
655
773
|
).toBe("allowed");
|
|
774
|
+
|
|
775
|
+
// Single sign-on never waits for the license.
|
|
776
|
+
expect(
|
|
777
|
+
runEditionCheck({
|
|
778
|
+
modelType: GlobalSSO,
|
|
779
|
+
operation: DatabaseRequestType.Create,
|
|
780
|
+
caller: "master admin",
|
|
781
|
+
}),
|
|
782
|
+
).toBe("allowed");
|
|
656
783
|
});
|
|
657
784
|
|
|
658
785
|
test("a snapshot read that throws refuses writes - fail closed", () => {
|
|
@@ -661,18 +788,25 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
661
788
|
|
|
662
789
|
expect(
|
|
663
790
|
runEditionCheck({
|
|
664
|
-
modelType:
|
|
791
|
+
modelType: TeamComplianceSetting,
|
|
665
792
|
operation: DatabaseRequestType.Update,
|
|
666
793
|
caller: "regular user",
|
|
667
794
|
}),
|
|
668
795
|
).toBe("license");
|
|
669
796
|
expect(
|
|
670
797
|
runEditionCheck({
|
|
671
|
-
modelType:
|
|
798
|
+
modelType: TeamComplianceSetting,
|
|
672
799
|
operation: DatabaseRequestType.Delete,
|
|
673
800
|
caller: "regular user",
|
|
674
801
|
}),
|
|
675
802
|
).toBe("allowed");
|
|
803
|
+
expect(
|
|
804
|
+
runEditionCheck({
|
|
805
|
+
modelType: ProjectSSO,
|
|
806
|
+
operation: DatabaseRequestType.Update,
|
|
807
|
+
caller: "regular user",
|
|
808
|
+
}),
|
|
809
|
+
).toBe("allowed");
|
|
676
810
|
});
|
|
677
811
|
|
|
678
812
|
test("the check follows the license as it changes, with no restart", () => {
|
|
@@ -773,7 +907,7 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
773
907
|
},
|
|
774
908
|
);
|
|
775
909
|
|
|
776
|
-
test("an empty feature list entitles nothing", () => {
|
|
910
|
+
test("an empty feature list entitles nothing, and single sign-on needs no feature", () => {
|
|
777
911
|
installFakeEnterpriseModule({
|
|
778
912
|
snapshot: createLicenseSnapshot({ features: [] }),
|
|
779
913
|
});
|
|
@@ -787,6 +921,16 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
787
921
|
}),
|
|
788
922
|
).toBe("license");
|
|
789
923
|
}
|
|
924
|
+
|
|
925
|
+
for (const [, modelType] of SSO_MODELS) {
|
|
926
|
+
expect(
|
|
927
|
+
runEditionCheck({
|
|
928
|
+
modelType,
|
|
929
|
+
operation: DatabaseRequestType.Create,
|
|
930
|
+
caller: "regular user",
|
|
931
|
+
}),
|
|
932
|
+
).toBe("allowed");
|
|
933
|
+
}
|
|
790
934
|
});
|
|
791
935
|
});
|
|
792
936
|
|
|
@@ -794,6 +938,8 @@ describe("EditionPermission.checkEditionPermissions", () => {
|
|
|
794
938
|
/*
|
|
795
939
|
* The facade's guard test should make this impossible; if it ever
|
|
796
940
|
* happens the gate must fail closed rather than let the write through.
|
|
941
|
+
* (It is also why the single sign-on models lost their
|
|
942
|
+
* requiresEnterprise decorator, not only their map entries.)
|
|
797
943
|
*/
|
|
798
944
|
class UnmappedEnterpriseModel extends Monitor {}
|
|
799
945
|
|
|
@@ -885,12 +1031,13 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
885
1031
|
});
|
|
886
1032
|
|
|
887
1033
|
describe("CreatePermission: master admins are checked before their early return", () => {
|
|
888
|
-
test("a master admin cannot create a
|
|
1034
|
+
test("a master admin cannot create a project's SCIM configuration on the Community Edition", () => {
|
|
889
1035
|
expect(() => {
|
|
890
|
-
CreatePermission.checkCreatePermissions(
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
1036
|
+
CreatePermission.checkCreatePermissions(
|
|
1037
|
+
ProjectSCIM,
|
|
1038
|
+
new ProjectSCIM(),
|
|
1039
|
+
masterAdminProps(),
|
|
1040
|
+
);
|
|
894
1041
|
}).toThrow(
|
|
895
1042
|
new PaymentRequiredException(
|
|
896
1043
|
EnterpriseEdition.COMMUNITY_EDITION_MESSAGE,
|
|
@@ -898,16 +1045,17 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
898
1045
|
);
|
|
899
1046
|
});
|
|
900
1047
|
|
|
901
|
-
test("a master admin cannot create
|
|
1048
|
+
test("a master admin cannot create team compliance settings when the license expired", () => {
|
|
902
1049
|
installFakeEnterpriseModule({
|
|
903
1050
|
snapshot: createLicenseSnapshotWithStatus("expired"),
|
|
904
1051
|
});
|
|
905
1052
|
|
|
906
1053
|
expect(() => {
|
|
907
|
-
CreatePermission.checkCreatePermissions(
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
1054
|
+
CreatePermission.checkCreatePermissions(
|
|
1055
|
+
TeamComplianceSetting,
|
|
1056
|
+
new TeamComplianceSetting(),
|
|
1057
|
+
masterAdminProps(),
|
|
1058
|
+
);
|
|
911
1059
|
}).toThrow(
|
|
912
1060
|
new PaymentRequiredException(
|
|
913
1061
|
EnterpriseEdition.LICENSE_REQUIRED_MESSAGE,
|
|
@@ -915,37 +1063,42 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
915
1063
|
);
|
|
916
1064
|
});
|
|
917
1065
|
|
|
918
|
-
test("a master admin can create
|
|
1066
|
+
test("a master admin can create them with a valid license", () => {
|
|
919
1067
|
installFakeEnterpriseModule();
|
|
920
1068
|
|
|
921
1069
|
expect(() => {
|
|
922
|
-
CreatePermission.checkCreatePermissions(
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
1070
|
+
CreatePermission.checkCreatePermissions(
|
|
1071
|
+
StatusPageSCIM,
|
|
1072
|
+
new StatusPageSCIM(),
|
|
1073
|
+
masterAdminProps(),
|
|
1074
|
+
);
|
|
926
1075
|
}).not.toThrow();
|
|
927
1076
|
});
|
|
928
1077
|
|
|
929
1078
|
test("internal root writes are not checked", () => {
|
|
930
1079
|
expect(() => {
|
|
931
|
-
CreatePermission.checkCreatePermissions(
|
|
932
|
-
|
|
933
|
-
|
|
1080
|
+
CreatePermission.checkCreatePermissions(
|
|
1081
|
+
ProjectSCIM,
|
|
1082
|
+
new ProjectSCIM(),
|
|
1083
|
+
{ isRoot: true },
|
|
1084
|
+
);
|
|
934
1085
|
}).not.toThrow();
|
|
935
1086
|
expect(() => {
|
|
936
|
-
CreatePermission.checkCreatePermissions(
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
1087
|
+
CreatePermission.checkCreatePermissions(
|
|
1088
|
+
ProjectSCIM,
|
|
1089
|
+
new ProjectSCIM(),
|
|
1090
|
+
{ isRoot: true, isMasterAdmin: true },
|
|
1091
|
+
);
|
|
940
1092
|
}).not.toThrow();
|
|
941
1093
|
});
|
|
942
1094
|
|
|
943
1095
|
test("a master admin creating an ordinary model is unaffected", () => {
|
|
944
1096
|
expect(() => {
|
|
945
|
-
CreatePermission.checkCreatePermissions(
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
1097
|
+
CreatePermission.checkCreatePermissions(
|
|
1098
|
+
Project,
|
|
1099
|
+
new Project(),
|
|
1100
|
+
masterAdminProps(),
|
|
1101
|
+
);
|
|
949
1102
|
}).not.toThrow();
|
|
950
1103
|
});
|
|
951
1104
|
|
|
@@ -953,29 +1106,93 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
953
1106
|
setTestBillingEnabled(true);
|
|
954
1107
|
|
|
955
1108
|
expect(() => {
|
|
956
|
-
CreatePermission.checkCreatePermissions(
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
1109
|
+
CreatePermission.checkCreatePermissions(
|
|
1110
|
+
ProjectSCIM,
|
|
1111
|
+
new ProjectSCIM(),
|
|
1112
|
+
masterAdminProps(),
|
|
1113
|
+
);
|
|
960
1114
|
}).not.toThrow();
|
|
961
1115
|
});
|
|
1116
|
+
|
|
1117
|
+
describe.each([
|
|
1118
|
+
[
|
|
1119
|
+
"the Community Edition",
|
|
1120
|
+
(): void => {
|
|
1121
|
+
return uninstallEnterpriseModule();
|
|
1122
|
+
},
|
|
1123
|
+
],
|
|
1124
|
+
[
|
|
1125
|
+
"an expired license",
|
|
1126
|
+
(): void => {
|
|
1127
|
+
installFakeEnterpriseModule({
|
|
1128
|
+
snapshot: createLicenseSnapshotWithStatus("expired"),
|
|
1129
|
+
});
|
|
1130
|
+
},
|
|
1131
|
+
],
|
|
1132
|
+
[
|
|
1133
|
+
"no license snapshot yet",
|
|
1134
|
+
(): void => {
|
|
1135
|
+
installFakeEnterpriseModule({ snapshot: null });
|
|
1136
|
+
},
|
|
1137
|
+
],
|
|
1138
|
+
[
|
|
1139
|
+
"a valid license",
|
|
1140
|
+
(): void => {
|
|
1141
|
+
installFakeEnterpriseModule();
|
|
1142
|
+
},
|
|
1143
|
+
],
|
|
1144
|
+
] as Array<[string, () => void]>)(
|
|
1145
|
+
"on %s",
|
|
1146
|
+
(_state: string, install: () => void) => {
|
|
1147
|
+
beforeEach(() => {
|
|
1148
|
+
install();
|
|
1149
|
+
});
|
|
1150
|
+
|
|
1151
|
+
test.each(GLOBAL_SSO_MODELS)(
|
|
1152
|
+
"a master admin can create %s (global single sign-on)",
|
|
1153
|
+
(_name: string, modelType: ModelType) => {
|
|
1154
|
+
expect(() => {
|
|
1155
|
+
CreatePermission.checkCreatePermissions(
|
|
1156
|
+
modelType,
|
|
1157
|
+
new modelType(),
|
|
1158
|
+
masterAdminProps(),
|
|
1159
|
+
);
|
|
1160
|
+
}).not.toThrow();
|
|
1161
|
+
},
|
|
1162
|
+
);
|
|
1163
|
+
|
|
1164
|
+
test.each(PROJECT_SSO_MODELS)(
|
|
1165
|
+
"a master admin can create %s too",
|
|
1166
|
+
(_name: string, modelType: ModelType) => {
|
|
1167
|
+
expect(() => {
|
|
1168
|
+
CreatePermission.checkCreatePermissions(
|
|
1169
|
+
modelType,
|
|
1170
|
+
new modelType(),
|
|
1171
|
+
masterAdminProps(),
|
|
1172
|
+
);
|
|
1173
|
+
}).not.toThrow();
|
|
1174
|
+
},
|
|
1175
|
+
);
|
|
1176
|
+
},
|
|
1177
|
+
);
|
|
962
1178
|
});
|
|
963
1179
|
|
|
964
1180
|
/*
|
|
965
|
-
* These use
|
|
966
|
-
*
|
|
967
|
-
* (see "tighten-only updates" below).
|
|
1181
|
+
* These use a column that is not a tighten-only update: a SCIM change
|
|
1182
|
+
* other than rotating the bearer token is configuration.
|
|
968
1183
|
*/
|
|
969
1184
|
describe("UpdatePermission: master admins are checked before their early return", () => {
|
|
970
|
-
const query: Query<
|
|
1185
|
+
const query: Query<ProjectSCIM> = {
|
|
1186
|
+
_id: "44444444-4444-4444-8444-444444444444",
|
|
1187
|
+
} as Query<ProjectSCIM>;
|
|
971
1188
|
|
|
972
|
-
test("a master admin cannot update a
|
|
1189
|
+
test("a master admin cannot update a project's SCIM configuration on the Community Edition", async () => {
|
|
973
1190
|
await expect(
|
|
974
1191
|
UpdatePermission.checkUpdatePermissions(
|
|
975
|
-
|
|
1192
|
+
ProjectSCIM,
|
|
976
1193
|
query,
|
|
977
|
-
{
|
|
978
|
-
|
|
1194
|
+
{ autoProvisionUsers: true },
|
|
1195
|
+
masterAdminProps(),
|
|
979
1196
|
),
|
|
980
1197
|
).rejects.toThrow(
|
|
981
1198
|
new PaymentRequiredException(
|
|
@@ -993,10 +1210,10 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
993
1210
|
|
|
994
1211
|
await expect(
|
|
995
1212
|
UpdatePermission.checkUpdatePermissions(
|
|
996
|
-
|
|
1213
|
+
ProjectSCIM,
|
|
997
1214
|
query,
|
|
998
|
-
{
|
|
999
|
-
|
|
1215
|
+
{ autoProvisionUsers: true },
|
|
1216
|
+
masterAdminProps(),
|
|
1000
1217
|
),
|
|
1001
1218
|
).rejects.toThrow(
|
|
1002
1219
|
new PaymentRequiredException(
|
|
@@ -1015,10 +1232,10 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1015
1232
|
|
|
1016
1233
|
await expect(
|
|
1017
1234
|
UpdatePermission.checkUpdatePermissions(
|
|
1018
|
-
|
|
1235
|
+
ProjectSCIM,
|
|
1019
1236
|
query,
|
|
1020
|
-
{
|
|
1021
|
-
|
|
1237
|
+
{ autoProvisionUsers: true },
|
|
1238
|
+
masterAdminProps(),
|
|
1022
1239
|
),
|
|
1023
1240
|
).resolves.toBe(query);
|
|
1024
1241
|
},
|
|
@@ -1027,79 +1244,247 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1027
1244
|
test("internal root updates are not checked", async () => {
|
|
1028
1245
|
await expect(
|
|
1029
1246
|
UpdatePermission.checkUpdatePermissions(
|
|
1030
|
-
|
|
1247
|
+
ProjectSCIM,
|
|
1031
1248
|
query,
|
|
1032
|
-
{
|
|
1249
|
+
{ autoProvisionUsers: false },
|
|
1033
1250
|
{ isRoot: true },
|
|
1034
1251
|
),
|
|
1035
1252
|
).resolves.toBe(query);
|
|
1036
1253
|
});
|
|
1254
|
+
|
|
1255
|
+
test.each([
|
|
1256
|
+
[
|
|
1257
|
+
"the Community Edition",
|
|
1258
|
+
(): void => {
|
|
1259
|
+
return uninstallEnterpriseModule();
|
|
1260
|
+
},
|
|
1261
|
+
],
|
|
1262
|
+
...UNUSABLE_STATUSES.map((status: EnterpriseLicenseStatus) => {
|
|
1263
|
+
return [
|
|
1264
|
+
`a ${status} license`,
|
|
1265
|
+
(): void => {
|
|
1266
|
+
installFakeEnterpriseModule({
|
|
1267
|
+
snapshot: createLicenseSnapshotWithStatus(status),
|
|
1268
|
+
});
|
|
1269
|
+
},
|
|
1270
|
+
];
|
|
1271
|
+
}),
|
|
1272
|
+
] as Array<[string, () => void]>)(
|
|
1273
|
+
"on %s a master admin can switch global single sign-on providers on and edit them",
|
|
1274
|
+
async (_state: string, install: () => void) => {
|
|
1275
|
+
install();
|
|
1276
|
+
|
|
1277
|
+
const globalQuery: Query<GlobalSSO> = {
|
|
1278
|
+
name: "Okta",
|
|
1279
|
+
} as Query<GlobalSSO>;
|
|
1280
|
+
|
|
1281
|
+
await expect(
|
|
1282
|
+
UpdatePermission.checkUpdatePermissions(
|
|
1283
|
+
GlobalSSO,
|
|
1284
|
+
globalQuery,
|
|
1285
|
+
{ isEnabled: true, name: "Okta (renamed)" },
|
|
1286
|
+
masterAdminProps(),
|
|
1287
|
+
),
|
|
1288
|
+
).resolves.toBe(globalQuery);
|
|
1289
|
+
await expect(
|
|
1290
|
+
UpdatePermission.checkUpdatePermissions(
|
|
1291
|
+
GlobalOIDC,
|
|
1292
|
+
globalQuery as unknown as Query<GlobalOIDC>,
|
|
1293
|
+
{ isEnabled: false, restrictToAttachedProjects: false },
|
|
1294
|
+
masterAdminProps(),
|
|
1295
|
+
),
|
|
1296
|
+
).resolves.toBe(globalQuery);
|
|
1297
|
+
await expect(
|
|
1298
|
+
UpdatePermission.checkUpdatePermissions(
|
|
1299
|
+
GlobalSSOProject,
|
|
1300
|
+
globalQuery as unknown as Query<GlobalSSOProject>,
|
|
1301
|
+
{ isEnabled: true },
|
|
1302
|
+
masterAdminProps(),
|
|
1303
|
+
),
|
|
1304
|
+
).resolves.toBe(globalQuery);
|
|
1305
|
+
await expect(
|
|
1306
|
+
UpdatePermission.checkUpdatePermissions(
|
|
1307
|
+
GlobalOIDCProject,
|
|
1308
|
+
globalQuery as unknown as Query<GlobalOIDCProject>,
|
|
1309
|
+
{ isEnabled: true },
|
|
1310
|
+
masterAdminProps(),
|
|
1311
|
+
),
|
|
1312
|
+
).resolves.toBe(globalQuery);
|
|
1313
|
+
},
|
|
1314
|
+
);
|
|
1037
1315
|
});
|
|
1038
1316
|
|
|
1039
|
-
describe("DeletePermission: removing
|
|
1040
|
-
test.each(
|
|
1317
|
+
describe("DeletePermission: removing configuration always works", () => {
|
|
1318
|
+
test.each([
|
|
1319
|
+
...ENTERPRISE_MODELS.map(
|
|
1320
|
+
([name, modelType]: [string, ModelType, EnterpriseFeature]): [
|
|
1321
|
+
string,
|
|
1322
|
+
ModelType,
|
|
1323
|
+
] => {
|
|
1324
|
+
return [name, modelType];
|
|
1325
|
+
},
|
|
1326
|
+
),
|
|
1327
|
+
...SSO_MODELS,
|
|
1328
|
+
])(
|
|
1041
1329
|
"a master admin can delete %s on the Community Edition",
|
|
1042
1330
|
async (_name: string, modelType: ModelType) => {
|
|
1043
1331
|
await expect(
|
|
1044
1332
|
DeletePermission.checkDeletePermission(
|
|
1045
1333
|
modelType,
|
|
1046
1334
|
{},
|
|
1047
|
-
|
|
1335
|
+
masterAdminProps(),
|
|
1048
1336
|
),
|
|
1049
1337
|
).resolves.toEqual({});
|
|
1050
1338
|
},
|
|
1051
1339
|
);
|
|
1052
1340
|
|
|
1053
1341
|
test("a project owner passes the table-level delete check on the Community Edition", () => {
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1342
|
+
for (const modelType of [ProjectSCIM, ProjectSSO, StatusPageOIDC]) {
|
|
1343
|
+
expect(() => {
|
|
1344
|
+
TablePermission.checkTableLevelPermissions(
|
|
1345
|
+
modelType,
|
|
1346
|
+
buildUserProps([Permission.ProjectOwner]),
|
|
1347
|
+
DatabaseRequestType.Delete,
|
|
1348
|
+
);
|
|
1349
|
+
}).not.toThrow();
|
|
1350
|
+
}
|
|
1061
1351
|
});
|
|
1062
1352
|
});
|
|
1063
1353
|
|
|
1064
1354
|
describe("TablePermission: the operation reaches the edition check", () => {
|
|
1065
|
-
test("a project owner's create is refused on the Community Edition", () => {
|
|
1355
|
+
test("a project owner's create of SCIM configuration is refused on the Community Edition", () => {
|
|
1066
1356
|
expect(() => {
|
|
1067
1357
|
TablePermission.checkTableLevelPermissions(
|
|
1068
|
-
|
|
1358
|
+
ProjectSCIM,
|
|
1069
1359
|
buildUserProps([Permission.ProjectOwner]),
|
|
1070
1360
|
DatabaseRequestType.Create,
|
|
1071
1361
|
);
|
|
1072
|
-
}).toThrow(
|
|
1362
|
+
}).toThrow(
|
|
1363
|
+
new PaymentRequiredException(
|
|
1364
|
+
EnterpriseEdition.COMMUNITY_EDITION_MESSAGE,
|
|
1365
|
+
),
|
|
1366
|
+
);
|
|
1073
1367
|
});
|
|
1074
1368
|
|
|
1075
|
-
test("a project owner's read is allowed on the Community Edition", () => {
|
|
1369
|
+
test("a project owner's read of SCIM configuration is allowed on the Community Edition", () => {
|
|
1076
1370
|
expect(() => {
|
|
1077
1371
|
TablePermission.checkTableLevelPermissions(
|
|
1078
|
-
|
|
1372
|
+
ProjectSCIM,
|
|
1079
1373
|
buildUserProps([Permission.ProjectOwner]),
|
|
1080
1374
|
DatabaseRequestType.Read,
|
|
1081
1375
|
);
|
|
1082
1376
|
}).not.toThrow();
|
|
1083
1377
|
});
|
|
1084
1378
|
|
|
1085
|
-
test("a project owner's create passes with a valid license", () => {
|
|
1379
|
+
test("a project owner's create of SCIM configuration passes with a valid license", () => {
|
|
1086
1380
|
installFakeEnterpriseModule();
|
|
1087
1381
|
|
|
1088
1382
|
expect(() => {
|
|
1089
1383
|
TablePermission.checkTableLevelPermissions(
|
|
1090
|
-
|
|
1384
|
+
ProjectSCIM,
|
|
1091
1385
|
buildUserProps([Permission.ProjectOwner]),
|
|
1092
1386
|
DatabaseRequestType.Create,
|
|
1093
1387
|
);
|
|
1094
1388
|
}).not.toThrow();
|
|
1095
1389
|
});
|
|
1096
1390
|
|
|
1391
|
+
describe.each([
|
|
1392
|
+
[
|
|
1393
|
+
"the Community Edition",
|
|
1394
|
+
(): void => {
|
|
1395
|
+
return uninstallEnterpriseModule();
|
|
1396
|
+
},
|
|
1397
|
+
],
|
|
1398
|
+
...UNUSABLE_STATUSES.map((status: EnterpriseLicenseStatus) => {
|
|
1399
|
+
return [
|
|
1400
|
+
`a ${status} license`,
|
|
1401
|
+
(): void => {
|
|
1402
|
+
installFakeEnterpriseModule({
|
|
1403
|
+
snapshot: createLicenseSnapshotWithStatus(status),
|
|
1404
|
+
});
|
|
1405
|
+
},
|
|
1406
|
+
];
|
|
1407
|
+
}),
|
|
1408
|
+
[
|
|
1409
|
+
"a valid license",
|
|
1410
|
+
(): void => {
|
|
1411
|
+
installFakeEnterpriseModule();
|
|
1412
|
+
},
|
|
1413
|
+
],
|
|
1414
|
+
] as Array<[string, () => void]>)(
|
|
1415
|
+
"on %s",
|
|
1416
|
+
(_state: string, install: () => void) => {
|
|
1417
|
+
beforeEach(() => {
|
|
1418
|
+
install();
|
|
1419
|
+
});
|
|
1420
|
+
|
|
1421
|
+
test.each(PROJECT_SSO_MODELS)(
|
|
1422
|
+
"a project owner can create and read %s",
|
|
1423
|
+
(_name: string, modelType: ModelType) => {
|
|
1424
|
+
for (const operation of [
|
|
1425
|
+
DatabaseRequestType.Create,
|
|
1426
|
+
DatabaseRequestType.Read,
|
|
1427
|
+
DatabaseRequestType.Delete,
|
|
1428
|
+
]) {
|
|
1429
|
+
expect(() => {
|
|
1430
|
+
TablePermission.checkTableLevelPermissions(
|
|
1431
|
+
modelType,
|
|
1432
|
+
buildUserProps([Permission.ProjectOwner]),
|
|
1433
|
+
operation,
|
|
1434
|
+
);
|
|
1435
|
+
}).not.toThrow();
|
|
1436
|
+
}
|
|
1437
|
+
},
|
|
1438
|
+
);
|
|
1439
|
+
|
|
1440
|
+
test.each(PROJECT_SSO_MODELS)(
|
|
1441
|
+
"a project admin can create %s",
|
|
1442
|
+
(_name: string, modelType: ModelType) => {
|
|
1443
|
+
expect(() => {
|
|
1444
|
+
TablePermission.checkTableLevelPermissions(
|
|
1445
|
+
modelType,
|
|
1446
|
+
buildUserProps([Permission.ProjectAdmin]),
|
|
1447
|
+
DatabaseRequestType.Create,
|
|
1448
|
+
);
|
|
1449
|
+
}).not.toThrow();
|
|
1450
|
+
},
|
|
1451
|
+
);
|
|
1452
|
+
|
|
1453
|
+
// The right roles still decide: the edition gate never replaced them.
|
|
1454
|
+
test.each(PROJECT_SSO_MODELS)(
|
|
1455
|
+
"a project member still cannot create %s",
|
|
1456
|
+
(_name: string, modelType: ModelType) => {
|
|
1457
|
+
expect(() => {
|
|
1458
|
+
TablePermission.checkTableLevelPermissions(
|
|
1459
|
+
modelType,
|
|
1460
|
+
buildUserProps([Permission.ProjectMember]),
|
|
1461
|
+
DatabaseRequestType.Create,
|
|
1462
|
+
);
|
|
1463
|
+
}).toThrow(NotAuthorizedException);
|
|
1464
|
+
},
|
|
1465
|
+
);
|
|
1466
|
+
|
|
1467
|
+
test.each(GLOBAL_SSO_MODELS)(
|
|
1468
|
+
"a project owner still cannot create %s (global single sign-on is for master admins)",
|
|
1469
|
+
(_name: string, modelType: ModelType) => {
|
|
1470
|
+
expect(() => {
|
|
1471
|
+
TablePermission.checkTableLevelPermissions(
|
|
1472
|
+
modelType,
|
|
1473
|
+
buildUserProps([Permission.ProjectOwner]),
|
|
1474
|
+
DatabaseRequestType.Create,
|
|
1475
|
+
);
|
|
1476
|
+
}).toThrow(NotAuthorizedException);
|
|
1477
|
+
},
|
|
1478
|
+
);
|
|
1479
|
+
},
|
|
1480
|
+
);
|
|
1481
|
+
|
|
1097
1482
|
test("the edition check does not replace the permission check: a licensed install still refuses a user without permission", () => {
|
|
1098
1483
|
installFakeEnterpriseModule();
|
|
1099
1484
|
|
|
1100
1485
|
expect(() => {
|
|
1101
1486
|
TablePermission.checkTableLevelPermissions(
|
|
1102
|
-
|
|
1487
|
+
ProjectSCIM,
|
|
1103
1488
|
buildUserProps([Permission.ProjectMember]),
|
|
1104
1489
|
DatabaseRequestType.Create,
|
|
1105
1490
|
);
|
|
@@ -1107,13 +1492,15 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1107
1492
|
});
|
|
1108
1493
|
|
|
1109
1494
|
test("a signed-out caller still gets 'not logged in' before any edition answer", () => {
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1495
|
+
for (const modelType of [ProjectSCIM, ProjectSSO]) {
|
|
1496
|
+
expect(() => {
|
|
1497
|
+
TablePermission.checkTableLevelPermissions(
|
|
1498
|
+
modelType,
|
|
1499
|
+
{},
|
|
1500
|
+
DatabaseRequestType.Create,
|
|
1501
|
+
);
|
|
1502
|
+
}).toThrow(NotAuthenticatedException);
|
|
1503
|
+
}
|
|
1117
1504
|
});
|
|
1118
1505
|
|
|
1119
1506
|
/*
|
|
@@ -1129,7 +1516,7 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1129
1516
|
|
|
1130
1517
|
expect(() => {
|
|
1131
1518
|
TablePermission.checkTableLevelPermissions(
|
|
1132
|
-
|
|
1519
|
+
ProjectSCIM,
|
|
1133
1520
|
buildUserProps([Permission.ProjectOwner]),
|
|
1134
1521
|
DatabaseRequestType.Update,
|
|
1135
1522
|
);
|
|
@@ -1138,7 +1525,7 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1138
1525
|
|
|
1139
1526
|
expect(() => {
|
|
1140
1527
|
TablePermission.checkTableLevelPermissions(
|
|
1141
|
-
|
|
1528
|
+
ProjectSCIM,
|
|
1142
1529
|
buildUserProps([Permission.ProjectOwner]),
|
|
1143
1530
|
DatabaseRequestType.Create,
|
|
1144
1531
|
);
|
|
@@ -1148,9 +1535,9 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1148
1535
|
});
|
|
1149
1536
|
|
|
1150
1537
|
describe("UpdatePermission: every caller's update is edition-checked with its data", () => {
|
|
1151
|
-
const query: Query<
|
|
1538
|
+
const query: Query<ProjectSCIM> = {
|
|
1152
1539
|
_id: "33333333-3333-4333-8333-333333333333",
|
|
1153
|
-
} as Query<
|
|
1540
|
+
} as Query<ProjectSCIM>;
|
|
1154
1541
|
|
|
1155
1542
|
const ownerProps: () => DatabaseCommonInteractionProps =
|
|
1156
1543
|
(): DatabaseCommonInteractionProps => {
|
|
@@ -1161,18 +1548,18 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1161
1548
|
// What follows the edition check needs a database; it is not under test.
|
|
1162
1549
|
jest.spyOn(BasePermission, "checkPermissions").mockImplementation((async (
|
|
1163
1550
|
_modelType: unknown,
|
|
1164
|
-
checkedQuery: Query<
|
|
1551
|
+
checkedQuery: Query<ProjectSCIM>,
|
|
1165
1552
|
) => {
|
|
1166
1553
|
return { query: checkedQuery };
|
|
1167
1554
|
}) as never);
|
|
1168
1555
|
});
|
|
1169
1556
|
|
|
1170
|
-
test("a project owner's ordinary update is refused on the Community Edition", async () => {
|
|
1557
|
+
test("a project owner's ordinary SCIM update is refused on the Community Edition", async () => {
|
|
1171
1558
|
await expect(
|
|
1172
1559
|
UpdatePermission.checkUpdatePermissions(
|
|
1173
|
-
|
|
1560
|
+
ProjectSCIM,
|
|
1174
1561
|
query,
|
|
1175
|
-
{
|
|
1562
|
+
{ autoProvisionUsers: true },
|
|
1176
1563
|
ownerProps(),
|
|
1177
1564
|
),
|
|
1178
1565
|
).rejects.toThrow(
|
|
@@ -1183,7 +1570,7 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1183
1570
|
});
|
|
1184
1571
|
|
|
1185
1572
|
test.each(UNUSABLE_STATUSES)(
|
|
1186
|
-
"a project owner cannot
|
|
1573
|
+
"a project owner cannot change SCIM provisioning with a %s license",
|
|
1187
1574
|
async (status: EnterpriseLicenseStatus) => {
|
|
1188
1575
|
installFakeEnterpriseModule({
|
|
1189
1576
|
snapshot: createLicenseSnapshotWithStatus(status),
|
|
@@ -1191,9 +1578,9 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1191
1578
|
|
|
1192
1579
|
await expect(
|
|
1193
1580
|
UpdatePermission.checkUpdatePermissions(
|
|
1194
|
-
|
|
1581
|
+
ProjectSCIM,
|
|
1195
1582
|
query,
|
|
1196
|
-
{
|
|
1583
|
+
{ enablePushGroups: true },
|
|
1197
1584
|
ownerProps(),
|
|
1198
1585
|
),
|
|
1199
1586
|
).rejects.toThrow(
|
|
@@ -1205,7 +1592,7 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1205
1592
|
);
|
|
1206
1593
|
|
|
1207
1594
|
test.each(UNUSABLE_STATUSES)(
|
|
1208
|
-
"a project owner can
|
|
1595
|
+
"a project owner can rotate a leaked SCIM bearer token with a %s license",
|
|
1209
1596
|
async (status: EnterpriseLicenseStatus) => {
|
|
1210
1597
|
installFakeEnterpriseModule({
|
|
1211
1598
|
snapshot: createLicenseSnapshotWithStatus(status),
|
|
@@ -1213,30 +1600,15 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1213
1600
|
|
|
1214
1601
|
await expect(
|
|
1215
1602
|
UpdatePermission.checkUpdatePermissions(
|
|
1216
|
-
|
|
1603
|
+
ProjectSCIM,
|
|
1217
1604
|
query,
|
|
1218
|
-
{
|
|
1605
|
+
{ bearerToken: ObjectID.generate().toString() },
|
|
1219
1606
|
ownerProps(),
|
|
1220
1607
|
),
|
|
1221
1608
|
).resolves.toEqual(query);
|
|
1222
1609
|
},
|
|
1223
1610
|
);
|
|
1224
1611
|
|
|
1225
|
-
test("a project owner can rotate a leaked SCIM bearer token with an expired license", async () => {
|
|
1226
|
-
installFakeEnterpriseModule({
|
|
1227
|
-
snapshot: createLicenseSnapshotWithStatus("expired"),
|
|
1228
|
-
});
|
|
1229
|
-
|
|
1230
|
-
await expect(
|
|
1231
|
-
UpdatePermission.checkUpdatePermissions(
|
|
1232
|
-
ProjectSCIM,
|
|
1233
|
-
query as unknown as Query<ProjectSCIM>,
|
|
1234
|
-
{ bearerToken: ObjectID.generate().toString() },
|
|
1235
|
-
ownerProps(),
|
|
1236
|
-
),
|
|
1237
|
-
).resolves.toEqual(query);
|
|
1238
|
-
});
|
|
1239
|
-
|
|
1240
1612
|
test("a project owner cannot rotate the token and change anything else in one update", async () => {
|
|
1241
1613
|
installFakeEnterpriseModule({
|
|
1242
1614
|
snapshot: createLicenseSnapshotWithStatus("expired"),
|
|
@@ -1245,7 +1617,7 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1245
1617
|
await expect(
|
|
1246
1618
|
UpdatePermission.checkUpdatePermissions(
|
|
1247
1619
|
ProjectSCIM,
|
|
1248
|
-
query
|
|
1620
|
+
query,
|
|
1249
1621
|
{
|
|
1250
1622
|
bearerToken: ObjectID.generate().toString(),
|
|
1251
1623
|
autoProvisionUsers: true,
|
|
@@ -1259,16 +1631,16 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1259
1631
|
* The allowance is about the license, never about who may write: a
|
|
1260
1632
|
* caller without update permission is still turned away.
|
|
1261
1633
|
*/
|
|
1262
|
-
test("
|
|
1634
|
+
test("rotating a SCIM token still needs permission to update it", async () => {
|
|
1263
1635
|
installFakeEnterpriseModule({
|
|
1264
1636
|
snapshot: createLicenseSnapshotWithStatus("expired"),
|
|
1265
1637
|
});
|
|
1266
1638
|
|
|
1267
1639
|
await expect(
|
|
1268
1640
|
UpdatePermission.checkUpdatePermissions(
|
|
1269
|
-
|
|
1641
|
+
ProjectSCIM,
|
|
1270
1642
|
query,
|
|
1271
|
-
{
|
|
1643
|
+
{ bearerToken: ObjectID.generate().toString() },
|
|
1272
1644
|
buildUserProps([Permission.ProjectMember]),
|
|
1273
1645
|
),
|
|
1274
1646
|
).rejects.toThrow(NotAuthorizedException);
|
|
@@ -1277,48 +1649,64 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1277
1649
|
test("a signed-out caller gets 'not logged in' before any edition answer", async () => {
|
|
1278
1650
|
await expect(
|
|
1279
1651
|
UpdatePermission.checkUpdatePermissions(
|
|
1280
|
-
|
|
1652
|
+
ProjectSCIM,
|
|
1281
1653
|
query,
|
|
1282
|
-
{
|
|
1654
|
+
{ autoProvisionUsers: true },
|
|
1283
1655
|
{},
|
|
1284
1656
|
),
|
|
1285
1657
|
).rejects.toThrow(NotAuthenticatedException);
|
|
1286
1658
|
});
|
|
1287
1659
|
|
|
1288
|
-
test(
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
{
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1660
|
+
test.each([
|
|
1661
|
+
[
|
|
1662
|
+
"the Community Edition",
|
|
1663
|
+
(): void => {
|
|
1664
|
+
return uninstallEnterpriseModule();
|
|
1665
|
+
},
|
|
1666
|
+
],
|
|
1667
|
+
...UNUSABLE_STATUSES.map((status: EnterpriseLicenseStatus) => {
|
|
1668
|
+
return [
|
|
1669
|
+
`a ${status} license`,
|
|
1670
|
+
(): void => {
|
|
1671
|
+
installFakeEnterpriseModule({
|
|
1672
|
+
snapshot: createLicenseSnapshotWithStatus(status),
|
|
1673
|
+
});
|
|
1674
|
+
},
|
|
1675
|
+
];
|
|
1676
|
+
}),
|
|
1677
|
+
] as Array<[string, () => void]>)(
|
|
1678
|
+
"on %s a project owner can edit, switch on and switch off single sign-on providers",
|
|
1679
|
+
async (_state: string, install: () => void) => {
|
|
1680
|
+
install();
|
|
1301
1681
|
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1682
|
+
for (const [, modelType] of PROJECT_SSO_MODELS) {
|
|
1683
|
+
for (const data of [
|
|
1684
|
+
{ isEnabled: true },
|
|
1685
|
+
{ isEnabled: false },
|
|
1686
|
+
{ name: "Okta (renamed)", isEnabled: true },
|
|
1687
|
+
]) {
|
|
1688
|
+
await expect(
|
|
1689
|
+
UpdatePermission.checkUpdatePermissions(
|
|
1690
|
+
modelType,
|
|
1691
|
+
query as unknown as Query<BaseModel>,
|
|
1692
|
+
data as QueryDeepPartialEntity<BaseModel>,
|
|
1693
|
+
ownerProps(),
|
|
1694
|
+
),
|
|
1695
|
+
).resolves.toEqual(query);
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
},
|
|
1699
|
+
);
|
|
1305
1700
|
|
|
1701
|
+
test("editing a single sign-on provider still needs permission to update it", async () => {
|
|
1306
1702
|
await expect(
|
|
1307
1703
|
UpdatePermission.checkUpdatePermissions(
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
{ isEnabled:
|
|
1311
|
-
|
|
1312
|
-
),
|
|
1313
|
-
).resolves.toBe(globalQuery);
|
|
1314
|
-
await expect(
|
|
1315
|
-
UpdatePermission.checkUpdatePermissions(
|
|
1316
|
-
GlobalOIDC,
|
|
1317
|
-
globalQuery as unknown as Query<GlobalOIDC>,
|
|
1318
|
-
{ isEnabled: false, restrictToAttachedProjects: false },
|
|
1319
|
-
{ userId, isMasterAdmin: true },
|
|
1704
|
+
ProjectSSO,
|
|
1705
|
+
query as unknown as Query<ProjectSSO>,
|
|
1706
|
+
{ isEnabled: true },
|
|
1707
|
+
buildUserProps([Permission.ProjectMember]),
|
|
1320
1708
|
),
|
|
1321
|
-
).rejects.toThrow(
|
|
1709
|
+
).rejects.toThrow(NotAuthorizedException);
|
|
1322
1710
|
});
|
|
1323
1711
|
|
|
1324
1712
|
test("the data reaches the edition check unchanged", async () => {
|
|
@@ -1328,10 +1716,12 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1328
1716
|
EditionPermissions,
|
|
1329
1717
|
"checkEditionPermissions",
|
|
1330
1718
|
);
|
|
1331
|
-
const data: {
|
|
1719
|
+
const data: { bearerToken: string } = {
|
|
1720
|
+
bearerToken: ObjectID.generate().toString(),
|
|
1721
|
+
};
|
|
1332
1722
|
|
|
1333
1723
|
await UpdatePermission.checkUpdatePermissions(
|
|
1334
|
-
|
|
1724
|
+
ProjectSCIM,
|
|
1335
1725
|
query,
|
|
1336
1726
|
data,
|
|
1337
1727
|
ownerProps(),
|
|
@@ -1349,21 +1739,11 @@ describe("EditionPermission wiring through the permission entry points", () => {
|
|
|
1349
1739
|
});
|
|
1350
1740
|
|
|
1351
1741
|
/*
|
|
1352
|
-
* Tighten-only updates: the incident-response
|
|
1353
|
-
*
|
|
1354
|
-
*
|
|
1742
|
+
* Tighten-only updates: the incident-response move (rotate a leaked SCIM
|
|
1743
|
+
* bearer token) needs no license. Everything else about enterprise
|
|
1744
|
+
* configuration still does. Single sign-on configuration has no tighten-only
|
|
1745
|
+
* rules because it needs none: every update of it is allowed.
|
|
1355
1746
|
*/
|
|
1356
|
-
const IDENTITY_PROVIDER_MODELS: ReadonlyArray<[string, ModelType]> = [
|
|
1357
|
-
["GlobalSSO", GlobalSSO],
|
|
1358
|
-
["GlobalOIDC", GlobalOIDC],
|
|
1359
|
-
["GlobalSSOProject", GlobalSSOProject],
|
|
1360
|
-
["GlobalOIDCProject", GlobalOIDCProject],
|
|
1361
|
-
["ProjectSSO", ProjectSSO],
|
|
1362
|
-
["ProjectOIDC", ProjectOIDC],
|
|
1363
|
-
["StatusPageSSO", StatusPageSSO],
|
|
1364
|
-
["StatusPageOIDC", StatusPageOIDC],
|
|
1365
|
-
];
|
|
1366
|
-
|
|
1367
1747
|
const SCIM_MODELS: ReadonlyArray<[string, ModelType]> = [
|
|
1368
1748
|
["ProjectSCIM", ProjectSCIM],
|
|
1369
1749
|
["StatusPageSCIM", StatusPageSCIM],
|
|
@@ -1382,24 +1762,12 @@ const runUpdateCheck: (input: {
|
|
|
1382
1762
|
caller: Caller;
|
|
1383
1763
|
data: unknown;
|
|
1384
1764
|
}): Outcome => {
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
);
|
|
1392
|
-
|
|
1393
|
-
return "allowed";
|
|
1394
|
-
} catch (err) {
|
|
1395
|
-
if (!(err instanceof PaymentRequiredException)) {
|
|
1396
|
-
throw err;
|
|
1397
|
-
}
|
|
1398
|
-
|
|
1399
|
-
return err.message === EnterpriseEdition.COMMUNITY_EDITION_MESSAGE
|
|
1400
|
-
? "community"
|
|
1401
|
-
: "license";
|
|
1402
|
-
}
|
|
1765
|
+
return runEditionCheck({
|
|
1766
|
+
modelType: input.modelType,
|
|
1767
|
+
operation: DatabaseRequestType.Update,
|
|
1768
|
+
caller: input.caller,
|
|
1769
|
+
data: input.data,
|
|
1770
|
+
});
|
|
1403
1771
|
};
|
|
1404
1772
|
|
|
1405
1773
|
describe("EditionPermission: tighten-only updates", () => {
|
|
@@ -1415,34 +1783,6 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1415
1783
|
});
|
|
1416
1784
|
|
|
1417
1785
|
describe("isTightenOnlyUpdate", () => {
|
|
1418
|
-
test.each(IDENTITY_PROVIDER_MODELS)(
|
|
1419
|
-
"%s: only isEnabled=false is tighten-only",
|
|
1420
|
-
(_name: string, modelType: ModelType) => {
|
|
1421
|
-
const tableName: string = new modelType().tableName!;
|
|
1422
|
-
|
|
1423
|
-
expect(
|
|
1424
|
-
EditionPermissions.isTightenOnlyUpdate(tableName, {
|
|
1425
|
-
isEnabled: false,
|
|
1426
|
-
}),
|
|
1427
|
-
).toBe(true);
|
|
1428
|
-
|
|
1429
|
-
for (const value of [true, "false", 0, null, "", {}]) {
|
|
1430
|
-
expect(
|
|
1431
|
-
EditionPermissions.isTightenOnlyUpdate(tableName, {
|
|
1432
|
-
isEnabled: value,
|
|
1433
|
-
}),
|
|
1434
|
-
).toBe(false);
|
|
1435
|
-
}
|
|
1436
|
-
|
|
1437
|
-
// Another model's tighten-only column is not this model's.
|
|
1438
|
-
expect(
|
|
1439
|
-
EditionPermissions.isTightenOnlyUpdate(tableName, {
|
|
1440
|
-
bearerToken: newBearerToken(),
|
|
1441
|
-
}),
|
|
1442
|
-
).toBe(false);
|
|
1443
|
-
},
|
|
1444
|
-
);
|
|
1445
|
-
|
|
1446
1786
|
test.each(SCIM_MODELS)(
|
|
1447
1787
|
"%s: only a new, long bearerToken is tighten-only",
|
|
1448
1788
|
(_name: string, modelType: ModelType) => {
|
|
@@ -1482,32 +1822,43 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1482
1822
|
},
|
|
1483
1823
|
);
|
|
1484
1824
|
|
|
1825
|
+
test.each(SSO_MODELS)(
|
|
1826
|
+
"%s: has no tighten-only rules (single sign-on is not enterprise configuration)",
|
|
1827
|
+
(_name: string, modelType: ModelType) => {
|
|
1828
|
+
const tableName: string = new modelType().tableName!;
|
|
1829
|
+
|
|
1830
|
+
for (const data of [
|
|
1831
|
+
{ isEnabled: false },
|
|
1832
|
+
{ isEnabled: true },
|
|
1833
|
+
{ bearerToken: newBearerToken() },
|
|
1834
|
+
]) {
|
|
1835
|
+
expect(EditionPermissions.isTightenOnlyUpdate(tableName, data)).toBe(
|
|
1836
|
+
false,
|
|
1837
|
+
);
|
|
1838
|
+
}
|
|
1839
|
+
},
|
|
1840
|
+
);
|
|
1841
|
+
|
|
1485
1842
|
test("one more column makes it an ordinary update", () => {
|
|
1486
1843
|
expect(
|
|
1487
|
-
EditionPermissions.isTightenOnlyUpdate("
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
}),
|
|
1491
|
-
).toBe(false);
|
|
1492
|
-
expect(
|
|
1493
|
-
EditionPermissions.isTightenOnlyUpdate("ProjectOIDC", {
|
|
1494
|
-
isEnabled: false,
|
|
1495
|
-
clientSecret: "new-secret",
|
|
1844
|
+
EditionPermissions.isTightenOnlyUpdate("ProjectSCIM", {
|
|
1845
|
+
bearerToken: newBearerToken(),
|
|
1846
|
+
enablePushGroups: true,
|
|
1496
1847
|
}),
|
|
1497
1848
|
).toBe(false);
|
|
1498
1849
|
expect(
|
|
1499
|
-
EditionPermissions.isTightenOnlyUpdate("
|
|
1850
|
+
EditionPermissions.isTightenOnlyUpdate("StatusPageSCIM", {
|
|
1500
1851
|
bearerToken: newBearerToken(),
|
|
1501
|
-
|
|
1852
|
+
autoDeprovisionUsers: false,
|
|
1502
1853
|
}),
|
|
1503
1854
|
).toBe(false);
|
|
1504
1855
|
});
|
|
1505
1856
|
|
|
1506
1857
|
test("columns set to undefined are not written, so they do not count", () => {
|
|
1507
1858
|
expect(
|
|
1508
|
-
EditionPermissions.isTightenOnlyUpdate("
|
|
1509
|
-
|
|
1510
|
-
|
|
1859
|
+
EditionPermissions.isTightenOnlyUpdate("ProjectSCIM", {
|
|
1860
|
+
bearerToken: newBearerToken(),
|
|
1861
|
+
enablePushGroups: undefined,
|
|
1511
1862
|
}),
|
|
1512
1863
|
).toBe(true);
|
|
1513
1864
|
});
|
|
@@ -1517,15 +1868,15 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1517
1868
|
undefined,
|
|
1518
1869
|
null,
|
|
1519
1870
|
{},
|
|
1520
|
-
{
|
|
1871
|
+
{ bearerToken: undefined },
|
|
1521
1872
|
[],
|
|
1522
|
-
[{
|
|
1523
|
-
|
|
1873
|
+
[{ bearerToken: newBearerToken() }],
|
|
1874
|
+
`bearerToken=${newBearerToken()}`,
|
|
1524
1875
|
false,
|
|
1525
1876
|
]) {
|
|
1526
|
-
expect(
|
|
1527
|
-
|
|
1528
|
-
);
|
|
1877
|
+
expect(
|
|
1878
|
+
EditionPermissions.isTightenOnlyUpdate("ProjectSCIM", data),
|
|
1879
|
+
).toBe(false);
|
|
1529
1880
|
}
|
|
1530
1881
|
});
|
|
1531
1882
|
|
|
@@ -1541,12 +1892,12 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1541
1892
|
"__proto__",
|
|
1542
1893
|
]) {
|
|
1543
1894
|
const data: Record<string, unknown> = JSON.parse(
|
|
1544
|
-
`{"
|
|
1895
|
+
`{"bearerToken": "${newBearerToken()}", "${column}": false}`,
|
|
1545
1896
|
);
|
|
1546
1897
|
|
|
1547
|
-
expect(
|
|
1548
|
-
|
|
1549
|
-
);
|
|
1898
|
+
expect(
|
|
1899
|
+
EditionPermissions.isTightenOnlyUpdate("ProjectSCIM", data),
|
|
1900
|
+
).toBe(false);
|
|
1550
1901
|
}
|
|
1551
1902
|
});
|
|
1552
1903
|
|
|
@@ -1567,7 +1918,7 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1567
1918
|
for (const tableName of ["Monitor", "Project", "", null, undefined]) {
|
|
1568
1919
|
expect(
|
|
1569
1920
|
EditionPermissions.isTightenOnlyUpdate(tableName, {
|
|
1570
|
-
|
|
1921
|
+
bearerToken: newBearerToken(),
|
|
1571
1922
|
}),
|
|
1572
1923
|
).toBe(false);
|
|
1573
1924
|
}
|
|
@@ -1575,16 +1926,29 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1575
1926
|
});
|
|
1576
1927
|
|
|
1577
1928
|
describe("the list itself", () => {
|
|
1578
|
-
test("covers exactly the
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
.sort(),
|
|
1929
|
+
test("covers exactly the SCIM models, and only their bearer token", () => {
|
|
1930
|
+
const columns: ReadonlyMap<
|
|
1931
|
+
string,
|
|
1932
|
+
ReadonlyArray<string>
|
|
1933
|
+
> = EditionPermissions.getTightenOnlyColumns();
|
|
1934
|
+
|
|
1935
|
+
expect(Array.from(columns.keys()).sort()).toEqual(
|
|
1936
|
+
["ProjectSCIM", "StatusPageSCIM"].sort(),
|
|
1587
1937
|
);
|
|
1938
|
+
|
|
1939
|
+
for (const [, tableColumns] of columns) {
|
|
1940
|
+
expect([...tableColumns]).toEqual(["bearerToken"]);
|
|
1941
|
+
}
|
|
1942
|
+
});
|
|
1943
|
+
|
|
1944
|
+
test("no single sign-on table is listed", () => {
|
|
1945
|
+
const tables: Array<string> = Array.from(
|
|
1946
|
+
EditionPermissions.getTightenOnlyColumns().keys(),
|
|
1947
|
+
);
|
|
1948
|
+
|
|
1949
|
+
for (const [name] of SSO_MODELS) {
|
|
1950
|
+
expect(tables).not.toContain(name);
|
|
1951
|
+
}
|
|
1588
1952
|
});
|
|
1589
1953
|
|
|
1590
1954
|
test("every listed table is an enterprise model, and every listed column is a real column of it", () => {
|
|
@@ -1646,7 +2010,7 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1646
2010
|
},
|
|
1647
2011
|
],
|
|
1648
2012
|
[
|
|
1649
|
-
"a license without
|
|
2013
|
+
"a license without SCIM or team compliance",
|
|
1650
2014
|
(): void => {
|
|
1651
2015
|
installFakeEnterpriseModule({
|
|
1652
2016
|
snapshot: createLicenseSnapshot({
|
|
@@ -1658,11 +2022,11 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1658
2022
|
];
|
|
1659
2023
|
|
|
1660
2024
|
test.each(UNAVAILABLE_STATES)(
|
|
1661
|
-
"with %s,
|
|
2025
|
+
"with %s, rotating a SCIM bearer token is allowed, for users and master admins",
|
|
1662
2026
|
(_state: string, install: () => void) => {
|
|
1663
2027
|
install();
|
|
1664
2028
|
|
|
1665
|
-
for (const [, modelType] of
|
|
2029
|
+
for (const [, modelType] of SCIM_MODELS) {
|
|
1666
2030
|
for (const caller of [
|
|
1667
2031
|
"regular user",
|
|
1668
2032
|
"master admin",
|
|
@@ -1671,7 +2035,7 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1671
2035
|
runUpdateCheck({
|
|
1672
2036
|
modelType,
|
|
1673
2037
|
caller,
|
|
1674
|
-
data: {
|
|
2038
|
+
data: { bearerToken: newBearerToken() },
|
|
1675
2039
|
}),
|
|
1676
2040
|
).toBe("allowed");
|
|
1677
2041
|
}
|
|
@@ -1680,18 +2044,23 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1680
2044
|
);
|
|
1681
2045
|
|
|
1682
2046
|
test.each(UNAVAILABLE_STATES)(
|
|
1683
|
-
"with %s,
|
|
2047
|
+
"with %s, every update of single sign-on configuration is allowed",
|
|
1684
2048
|
(_state: string, install: () => void) => {
|
|
1685
2049
|
install();
|
|
1686
2050
|
|
|
1687
|
-
for (const [, modelType] of
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
}
|
|
1694
|
-
|
|
2051
|
+
for (const [, modelType] of SSO_MODELS) {
|
|
2052
|
+
for (const data of [
|
|
2053
|
+
{ isEnabled: true },
|
|
2054
|
+
{ isEnabled: false },
|
|
2055
|
+
{ isEnabled: false, name: "Okta" },
|
|
2056
|
+
{ name: "Okta" },
|
|
2057
|
+
{},
|
|
2058
|
+
undefined,
|
|
2059
|
+
]) {
|
|
2060
|
+
expect(
|
|
2061
|
+
runUpdateCheck({ modelType, caller: "master admin", data }),
|
|
2062
|
+
).toBe("allowed");
|
|
2063
|
+
}
|
|
1695
2064
|
}
|
|
1696
2065
|
},
|
|
1697
2066
|
);
|
|
@@ -1705,25 +2074,13 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1705
2074
|
? "license"
|
|
1706
2075
|
: "community";
|
|
1707
2076
|
|
|
1708
|
-
for (const [, modelType] of IDENTITY_PROVIDER_MODELS) {
|
|
1709
|
-
for (const data of [
|
|
1710
|
-
{ isEnabled: true },
|
|
1711
|
-
{ isEnabled: false, name: "Okta" },
|
|
1712
|
-
{ name: "Okta" },
|
|
1713
|
-
{},
|
|
1714
|
-
undefined,
|
|
1715
|
-
]) {
|
|
1716
|
-
expect(
|
|
1717
|
-
runUpdateCheck({ modelType, caller: "regular user", data }),
|
|
1718
|
-
).toBe(expected);
|
|
1719
|
-
}
|
|
1720
|
-
}
|
|
1721
|
-
|
|
1722
2077
|
for (const [, modelType] of SCIM_MODELS) {
|
|
1723
2078
|
for (const data of [
|
|
1724
2079
|
{ bearerToken: "short" },
|
|
1725
2080
|
{ bearerToken: newBearerToken(), autoDeprovisionUsers: false },
|
|
1726
2081
|
{ autoProvisionUsers: false },
|
|
2082
|
+
{},
|
|
2083
|
+
undefined,
|
|
1727
2084
|
]) {
|
|
1728
2085
|
expect(
|
|
1729
2086
|
runUpdateCheck({ modelType, caller: "master admin", data }),
|
|
@@ -1749,10 +2106,10 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1749
2106
|
|
|
1750
2107
|
expect(() => {
|
|
1751
2108
|
EditionPermissions.checkEditionPermissions(
|
|
1752
|
-
|
|
2109
|
+
ProjectSCIM,
|
|
1753
2110
|
propsFor("regular user"),
|
|
1754
2111
|
DatabaseRequestType.Create,
|
|
1755
|
-
{
|
|
2112
|
+
{ bearerToken: newBearerToken() },
|
|
1756
2113
|
);
|
|
1757
2114
|
}).toThrow(
|
|
1758
2115
|
new PaymentRequiredException(
|
|
@@ -1768,7 +2125,7 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1768
2125
|
|
|
1769
2126
|
expect(
|
|
1770
2127
|
runUpdateCheck({
|
|
1771
|
-
modelType:
|
|
2128
|
+
modelType: ProjectSCIM,
|
|
1772
2129
|
caller: "regular user",
|
|
1773
2130
|
data: undefined,
|
|
1774
2131
|
}),
|
|
@@ -1780,9 +2137,9 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1780
2137
|
|
|
1781
2138
|
expect(
|
|
1782
2139
|
runUpdateCheck({
|
|
1783
|
-
modelType:
|
|
2140
|
+
modelType: ProjectSCIM,
|
|
1784
2141
|
caller: "regular user",
|
|
1785
|
-
data: {
|
|
2142
|
+
data: { autoProvisionUsers: true, enablePushGroups: true },
|
|
1786
2143
|
}),
|
|
1787
2144
|
).toBe("allowed");
|
|
1788
2145
|
|
|
@@ -1791,9 +2148,9 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1791
2148
|
|
|
1792
2149
|
expect(
|
|
1793
2150
|
runUpdateCheck({
|
|
1794
|
-
modelType:
|
|
2151
|
+
modelType: ProjectSCIM,
|
|
1795
2152
|
caller: "regular user",
|
|
1796
|
-
data: {
|
|
2153
|
+
data: { autoProvisionUsers: true },
|
|
1797
2154
|
}),
|
|
1798
2155
|
).toBe("allowed");
|
|
1799
2156
|
|
|
@@ -1801,9 +2158,9 @@ describe("EditionPermission: tighten-only updates", () => {
|
|
|
1801
2158
|
|
|
1802
2159
|
expect(
|
|
1803
2160
|
runUpdateCheck({
|
|
1804
|
-
modelType:
|
|
2161
|
+
modelType: ProjectSCIM,
|
|
1805
2162
|
caller: "root",
|
|
1806
|
-
data: {
|
|
2163
|
+
data: { autoProvisionUsers: true },
|
|
1807
2164
|
}),
|
|
1808
2165
|
).toBe("allowed");
|
|
1809
2166
|
});
|