@oneuptime/common 13.0.0 → 13.0.1
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/Alert.ts +55 -0
- package/Models/DatabaseModels/CloudResource.ts +45 -7
- package/Models/DatabaseModels/CodeRepository.ts +85 -0
- package/Models/DatabaseModels/GoogleSecOpsConnection.ts +57 -7
- package/Models/DatabaseModels/GoogleSecOpsConnectionRun.ts +263 -0
- package/Models/DatabaseModels/Incident.ts +55 -0
- package/Models/DatabaseModels/Index.ts +16 -0
- package/Models/DatabaseModels/ScheduledMaintenance.ts +55 -0
- package/Models/DatabaseModels/User.ts +51 -2
- package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +43 -2
- package/Models/DatabaseModels/UserWebAuthn.ts +17 -0
- package/Models/DatabaseModels/VMwareResource.ts +1149 -0
- package/Models/DatabaseModels/VMwareVCenter.ts +1122 -0
- package/Models/DatabaseModels/VMwareVCenterFeed.ts +625 -0
- package/Models/DatabaseModels/VMwareVCenterLabelRule.ts +514 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerRule.ts +596 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerTeam.ts +485 -0
- package/Models/DatabaseModels/VMwareVCenterOwnerUser.ts +484 -0
- package/Models/DatabaseModels/WorkflowVariable.ts +22 -1
- package/Server/API/AIAgentDataAPI.ts +79 -4
- package/Server/API/AIAgentGitHubAPI.ts +523 -0
- package/Server/API/AIChatAPI.ts +20 -1
- package/Server/API/BillingAPI.ts +33 -0
- package/Server/API/DashboardAPI.ts +10 -0
- package/Server/API/GitHubAPI.ts +47 -5
- package/Server/API/GoogleSecOpsConnectionAPI.ts +79 -0
- package/Server/API/UserWebAuthnAPI.ts +21 -1
- package/Server/API/VMwareResourceAPI.ts +143 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.ts +68 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.ts +26 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.ts +636 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.ts +83 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +12 -0
- package/Server/Middleware/IdentityRateLimit.ts +101 -0
- package/Server/Services/AIRunService.ts +13 -0
- package/Server/Services/BillingPaymentMethodService.ts +99 -28
- package/Server/Services/BillingService.ts +287 -20
- package/Server/Services/CloudResourceInstanceService.ts +70 -0
- package/Server/Services/ExceptionAggregationService.ts +1 -0
- package/Server/Services/GoogleSecOpsConnectionRunService.ts +10 -0
- package/Server/Services/GoogleSecOpsConnectionService.ts +12 -0
- package/Server/Services/Index.ts +16 -0
- package/Server/Services/LogAggregationService.ts +1 -0
- package/Server/Services/MetricAggregationService.ts +1 -0
- package/Server/Services/MobilePasskeyLoginService.ts +216 -0
- package/Server/Services/MonitorService.ts +51 -1
- package/Server/Services/MonitorTemplateService.ts +91 -29
- package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +132 -1
- package/Server/Services/NetworkDeviceAutoImportRuleService.ts +176 -2
- package/Server/Services/OpenTelemetryIngestService.ts +17 -0
- package/Server/Services/PayAsYouGoBillingService.ts +446 -0
- package/Server/Services/ProjectService.ts +46 -2
- package/Server/Services/ServerlessFunctionInstanceService.ts +71 -0
- package/Server/Services/TeamMemberService.ts +96 -36
- package/Server/Services/TelemetryIngestionKeyService.ts +80 -10
- package/Server/Services/TelemetryUsageBillingService.ts +95 -5
- package/Server/Services/TraceAggregationService.ts +5 -4
- package/Server/Services/UserWebAuthnService.ts +592 -133
- package/Server/Services/VMwareResourceService.ts +648 -0
- package/Server/Services/VMwareVCenterFeedService.ts +99 -0
- package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +240 -0
- package/Server/Services/VMwareVCenterLabelRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +252 -0
- package/Server/Services/VMwareVCenterOwnerRuleService.ts +14 -0
- package/Server/Services/VMwareVCenterOwnerTeamService.ts +139 -0
- package/Server/Services/VMwareVCenterOwnerUserService.ts +133 -0
- package/Server/Services/VMwareVCenterService.ts +629 -0
- package/Server/Services/WorkflowVariableService.ts +203 -0
- package/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.ts +17 -0
- package/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.ts +31 -1
- package/Server/Utils/CodeRepository/GitHub/GitHub.ts +7 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.ts +341 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.ts +274 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.ts +375 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubConversation.ts +846 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.ts +360 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubRunReply.ts +421 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.ts +140 -0
- package/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.ts +906 -0
- package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +143 -0
- package/Server/Utils/DataSource/EgressGuard.ts +160 -15
- package/Server/Utils/Database/TruncateColumnValue.ts +1 -1
- package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +2 -0
- package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +33 -0
- package/Server/Utils/EmailRollup/EmailRollupWriter.ts +44 -0
- package/Server/Utils/LogRedaction.ts +2 -1
- package/Server/Utils/Monitor/MonitorAlert.ts +1 -1
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +302 -3
- package/Server/Utils/Monitor/MonitorMaintenanceSuppression.ts +26 -4
- package/Server/Utils/Monitor/MonitorResourceContext.ts +5 -3
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +14 -0
- package/Server/Utils/Monitor/MonitorTemplateUtil.ts +1 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +26 -0
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +28 -5
- package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +3 -3
- package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +14 -9
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +116 -84
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +594 -195
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +466 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +5 -0
- package/Server/Utils/Telemetry/ResourceHeartbeat.ts +2 -1
- package/Server/Utils/Telemetry/TelemetryEntity.ts +181 -1
- package/Server/Utils/Telemetry/VMwareSnapshotScan.ts +1352 -0
- package/Tests/App/Accounts/LoginPasskey.test.tsx +529 -0
- package/Tests/App/Accounts/MobilePasskey.test.tsx +620 -0
- package/Tests/App/Accounts/PasswordRequirements.test.tsx +254 -0
- package/Tests/App/Accounts/RegisterPassword.test.tsx +553 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +224 -0
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +432 -0
- package/Tests/App/Dashboard/BackupCodes.test.tsx +414 -0
- package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +530 -0
- package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +195 -0
- package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +199 -0
- package/Tests/App/Dashboard/CloudDocumentationCard.test.tsx +198 -0
- package/Tests/App/Dashboard/CloudDocumentationMarkdown.test.ts +215 -0
- package/Tests/App/Dashboard/CloudFleetSummary.test.ts +183 -0
- package/Tests/App/Dashboard/CloudFleetSummaryComponent.test.tsx +248 -0
- package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +215 -0
- package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +3 -0
- package/Tests/App/Dashboard/DashboardHeaderRequests.test.tsx +441 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +458 -0
- package/Tests/App/Dashboard/DashboardToolbarPopupLayering.test.tsx +566 -0
- package/Tests/App/Dashboard/DiscoveryScanLivePage.test.tsx +376 -0
- package/Tests/App/Dashboard/DiscoveryScanLiveUpdates.test.tsx +642 -0
- package/Tests/App/Dashboard/DiscoveryScanProgress.test.tsx +267 -0
- package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +69 -231
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +244 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +724 -0
- package/Tests/App/Dashboard/MonitorTemplateSyncFields.test.tsx +539 -0
- package/Tests/App/Dashboard/OnCallLayerCardOverrides.test.tsx +24 -7
- package/Tests/App/Dashboard/OnCallOverridePresentation.test.ts +496 -0
- package/Tests/App/Dashboard/OnCallScheduleOverrideClarity.test.tsx +677 -0
- package/Tests/App/Dashboard/OnCallSchedulePreviewOverrides.test.tsx +31 -3
- package/Tests/App/Dashboard/PaidUsageConsent.test.tsx +180 -0
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +1220 -0
- package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +176 -275
- package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +380 -233
- package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +3 -23
- package/Tests/App/Dashboard/ResourceFeed.test.tsx +1 -0
- package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
- package/Tests/App/Dashboard/TwoFactorStatus.test.tsx +260 -0
- package/Tests/App/Dashboard/VMwareDashboardWidgets.test.ts +573 -0
- package/Tests/App/Dashboard/WidgetCatalog.test.ts +2 -0
- package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +768 -0
- package/Tests/App/StatusPage/StatusPageOverviewLiveAndSearch.test.tsx +532 -40
- package/Tests/App/StatusPage/StatusPageResourceSearchBox.test.tsx +19 -2
- package/Tests/Fixtures/MobilePasskeyUser.json +8 -0
- package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +25 -6
- package/Tests/Models/DatabaseModels/VMwareModels.test.ts +1134 -0
- package/Tests/Models/RunnerVersionLabel.test.ts +4 -2
- package/Tests/Server/API/AIChatProvidersAIEnabled.test.ts +259 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +31 -2
- package/Tests/Server/API/BillingPayAsYouGoStatus.test.ts +116 -0
- package/Tests/Server/API/DashboardPublicResourceListAPI.test.ts +29 -1
- package/Tests/Server/API/EnterpriseLicenseReportUserCount.test.ts +13 -2
- package/Tests/Server/API/GitHubWebhookSignature.test.ts +368 -0
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +248 -0
- package/Tests/Server/API/UserWebAuthnAuthenticationOptionsRoute.test.ts +330 -0
- package/Tests/Server/API/UserWebAuthnPasskeyAPI.test.ts +172 -0
- package/Tests/Server/API/VMwareResourceAPI.test.ts +546 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupMetadataMigration.test.ts +85 -0
- package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +34 -3
- package/Tests/Server/Middleware/PasskeyRateLimit.test.ts +141 -0
- package/Tests/Server/Services/AutoImportRuleRearmRecentScans.test.ts +343 -0
- package/Tests/Server/Services/AutoImportRuleWriteRearmsScans.test.ts +381 -0
- package/Tests/Server/Services/BillingPaymentMethodServiceSync.test.ts +175 -0
- package/Tests/Server/Services/BillingService.test.ts +26 -11
- package/Tests/Server/Services/BillingServiceMeteredPaymentAuthorization.test.ts +245 -0
- package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +362 -0
- package/Tests/Server/Services/CloudResourceInstanceStalePrune.test.ts +188 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +16 -2
- package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +153 -0
- package/Tests/Server/Services/HookFreeWriteLengthClamp.test.ts +13 -0
- package/Tests/Server/Services/InventoryItemPromotionGate.test.ts +5 -0
- package/Tests/Server/Services/InventoryUpsertSchemaParity.test.ts +36 -0
- package/Tests/Server/Services/InventoryUpsertTruncationGuard.test.ts +151 -0
- package/Tests/Server/Services/MobilePasskeyLoginIntegration.test.ts +231 -0
- package/Tests/Server/Services/MobilePasskeyLoginService.test.ts +315 -0
- package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +302 -0
- package/Tests/Server/Services/MonitorTemplateServiceFieldSync.test.ts +994 -0
- package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +22 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +7 -1
- package/Tests/Server/Services/PayAsYouGoBillingService.test.ts +857 -0
- package/Tests/Server/Services/PayAsYouGoStripeRateLimitBudget.test.ts +379 -0
- package/Tests/Server/Services/ProjectServiceExtendTrial.test.ts +99 -1
- package/Tests/Server/Services/ProjectServiceSubscriptionSeats.test.ts +134 -0
- package/Tests/Server/Services/ResourceFeedServices.test.ts +3 -2
- package/Tests/Server/Services/ResourceUpdateLastSeenLivenessFallback.test.ts +32 -6
- package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +363 -175
- package/Tests/Server/Services/ServerlessFunctionInstanceStalePrune.test.ts +200 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +3 -0
- package/Tests/Server/Services/TeamMemberBillingSeatSync.test.ts +762 -0
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +3 -0
- package/Tests/Server/Services/TelemetryIngestionKeyPolicyResolution.test.ts +72 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +17 -4
- package/Tests/Server/Services/TelemetryPayAsYouGoBilling.test.ts +355 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +41 -4
- package/Tests/Server/Services/UserNotificationEmailRollupModels.test.ts +37 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyIntegration.test.ts +401 -0
- package/Tests/Server/Services/UserWebAuthnPasskeyService.test.ts +769 -0
- package/Tests/Server/Services/UserWebAuthnUserVerification.test.ts +649 -0
- package/Tests/Server/Services/VMwareResourceService.test.ts +945 -0
- package/Tests/Server/Services/VMwareVCenterService.test.ts +722 -0
- package/Tests/Server/Services/WorkflowVariableRenameUniqueness.test.ts +842 -0
- package/Tests/Server/TestingUtils/PasskeyHttpIntegration.ts +102 -0
- package/Tests/Server/TestingUtils/SecurityKey.ts +464 -0
- package/Tests/Server/TestingUtils/WebAuthnServiceMocks.ts +60 -0
- package/Tests/Server/Types/Billing/PayAsYouGoMeteredAuthorization.test.ts +573 -0
- package/Tests/Server/Types/Database/Permissions/ProjectCustomerSupportAccessColumn.test.ts +261 -0
- package/Tests/Server/Types/Database/Permissions/WorkflowVariableColumnPermission.test.ts +95 -0
- package/Tests/Server/Utils/CodeRepository/GitHubAgentTaskTrigger.test.ts +2101 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandAuthorizer.test.ts +883 -0
- package/Tests/Server/Utils/CodeRepository/GitHubCommandParser.test.ts +1474 -0
- package/Tests/Server/Utils/CodeRepository/GitHubConversation.test.ts +1526 -0
- package/Tests/Server/Utils/CodeRepository/GitHubReplyComposer.test.ts +1389 -0
- package/Tests/Server/Utils/CodeRepository/GitHubRunReply.test.ts +1707 -0
- package/Tests/Server/Utils/CodeRepository/GitHubWebhookHandler.test.ts +2202 -0
- package/Tests/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.test.ts +345 -0
- package/Tests/Server/Utils/DataSource/EgressGuard.test.ts +896 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +246 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +299 -1
- package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +6 -0
- package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +185 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +33 -0
- package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +2 -1
- package/Tests/Server/Utils/Monitor/Criteria/TelemetryStepMetricAlias.test.ts +10 -0
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +66 -1
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluator.test.ts +362 -0
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +60 -1
- package/Tests/Server/Utils/Monitor/MonitorMaintenanceSuppression.test.ts +60 -0
- package/Tests/Server/Utils/Monitor/MonitorRootCauseTargetResolution.test.ts +423 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +6 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1 -0
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +46 -2
- package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +81 -45
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +711 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClickhouseIntegration.test.ts +223 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +69 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +838 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsErrorHandling.test.ts +241 -28
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +651 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +11 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +13 -12
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +112 -127
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsRequestContract.test.ts +12 -18
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsResponseParsing.test.ts +43 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +580 -0
- package/Tests/Server/Utils/Telemetry/VMwareSnapshotScan.test.ts +1748 -0
- package/Tests/Types/Cloud/CloudPlatform.test.ts +574 -0
- package/Tests/Types/Monitor/MetricAndProfileDefaultCriteria.test.ts +2 -0
- package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +9 -0
- package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepInfraMonitorUtils.test.ts +53 -8
- package/Tests/Types/Monitor/MonitorStepInfrastructureMonitors.test.ts +97 -0
- package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorStepTemplateSyncFields.test.ts +107 -0
- package/Tests/Types/Monitor/MonitorTemplateSyncField.test.ts +172 -0
- package/Tests/Types/Monitor/MonitorType.test.ts +1 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +2 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationAlertDebuggability.test.ts +1 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +9 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/SeriesContext/SeriesDebugHints.test.ts +131 -0
- package/Tests/Types/Monitor/SeriesContext/SeriesLabelDisplay.test.ts +10 -0
- package/Tests/Types/Monitor/VMwareAlertTemplates.test.ts +1608 -0
- package/Tests/Types/Monitor/VMwareMetricCatalog.test.ts +488 -0
- package/Tests/Types/OnCallDutyPolicy/OverrideProvenance.test.ts +295 -0
- package/Tests/Types/Runner/RunnerLiveStatus.test.ts +2 -2
- package/Tests/Types/SignupPassword.test.ts +205 -0
- package/Tests/Types/StatusPage/StatusPageLanguage.test.ts +44 -0
- package/Tests/Types/SupportedLanguages.test.ts +119 -0
- package/Tests/Types/Telemetry/EntityTypeGroups.test.ts +19 -0
- package/Tests/UI/ColorPickerBuild.test.ts +86 -0
- package/Tests/UI/Components/Breadcrumbs.test.tsx +32 -0
- package/Tests/UI/Components/Forms/ModelFormPreservesUserInput.test.tsx +937 -0
- package/Tests/UI/Components/Forms/ModelFormWriteOnlyColumnSelect.test.tsx +230 -0
- package/Tests/UI/Components/Forms/ValidationFormSteps.test.ts +3 -4
- package/Tests/UI/Components/LabelRuleImportExport.test.tsx +907 -0
- package/Tests/UI/Components/ModelTable/ModelTableCreateAfterEdit.test.tsx +514 -0
- package/Tests/UI/Components/MonitorGraphs/Uptime.test.tsx +301 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +2 -1
- package/Tests/UI/Components/TooltipLazyContent.test.tsx +373 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsMessagingEndpointGuidance.test.tsx +43 -12
- package/Tests/UI/ReactDomBuild.test.ts +104 -0
- package/Tests/UI/ReactRouterSingletonBuild.test.ts +11 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +148 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +29 -0
- package/Tests/UI/Utils/DashboardStackingLayers.test.ts +197 -0
- package/Tests/UI/Utils/LabelRuleImportExport.test.ts +546 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +109 -2
- package/Tests/UI/Utils/UseDashboardGridDnd.test.tsx +7 -2
- package/Tests/UI/Utils/UserEmailRegistrationStatus.test.tsx +295 -0
- package/Tests/UI/Utils/WebAuthn.test.ts +265 -0
- package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +5 -0
- package/Tests/Utils/Dashboard/Components/DashboardVMwareListComponents.test.ts +548 -0
- package/Tests/Utils/Dashboard/DashboardResourceListSharedArgs.test.ts +17 -3
- package/Tests/Utils/LabelRuleImportExport.test.ts +583 -0
- package/Tests/Utils/Monitor/MonitorSummarySnapshotUtil.test.ts +1 -0
- package/Tests/Utils/Monitor/MonitorTemplateSyncUtil.test.ts +590 -0
- package/Tests/Utils/RequestFailedDetails.test.ts +325 -0
- package/Tests/Utils/Telemetry/CloudInstanceIdentity.test.ts +255 -0
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +167 -0
- package/Tests/Utils/WebAuthnTestUtil.ts +79 -0
- package/Tests/__mocks__/simplewebauthn.js +33 -4
- package/Types/AI/CodeFixTaskContext.ts +122 -0
- package/Types/AI/CodeFixTaskType.ts +62 -0
- package/Types/Accounts/AccountsLanguage.ts +1 -0
- package/Types/AdminDashboard/AdminDashboardLanguage.ts +1 -0
- package/Types/Calendar/CalendarEvent.ts +16 -0
- package/Types/Cloud/CloudPlatform.ts +372 -0
- package/Types/CodeRepository/GitHubCommand.ts +69 -0
- package/Types/Dashboard/DashboardComponentType.ts +2 -0
- package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.ts +23 -0
- package/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.ts +30 -0
- package/Types/Dashboard/DashboardLanguage.ts +1 -0
- package/Types/Dashboard/DashboardTemplates.ts +314 -0
- package/Types/Docs/DocsLanguage.ts +1 -0
- package/Types/Exception/EgressGuardException.ts +65 -0
- package/Types/Icon/IconProp.ts +1 -0
- package/Types/Monitor/MetricMonitor/MetricMonitorResponse.ts +36 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +1 -0
- package/Types/Monitor/MonitorStep.ts +78 -17
- package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +1 -0
- package/Types/Monitor/MonitorStepVMwareMonitor.ts +127 -0
- package/Types/Monitor/MonitorTemplateSyncField.ts +291 -0
- package/Types/Monitor/MonitorType.ts +24 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +33 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +2 -0
- package/Types/Monitor/Recommendation/MonitorRecommendationUtil.ts +3 -0
- package/Types/Monitor/SeriesContext/SeriesDebugHints.ts +158 -0
- package/Types/Monitor/SeriesContext/SeriesLabelDisplay.ts +61 -0
- package/Types/Monitor/VMwareAlertTemplates.ts +1070 -0
- package/Types/Monitor/VMwareMetricCatalog.ts +914 -0
- package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +29 -0
- package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +16 -0
- package/Types/Password.ts +84 -5
- package/Types/Permission.ts +265 -0
- package/Types/Probe/RequestFailedDetails.ts +7 -0
- package/Types/Runner/RunnerLiveStatus.ts +1 -1
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -0
- package/Types/StatusPage/StatusPageLanguage.ts +1 -0
- package/Types/Telemetry/EntityType.ts +21 -0
- package/Types/Telemetry/ServiceType.ts +1 -0
- package/Typings/Index.d.ts +63 -0
- package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +2 -2
- package/UI/Components/Calendar/Calendar.css +78 -0
- package/UI/Components/Calendar/Calendar.tsx +28 -3
- package/UI/Components/Forms/BasicForm.tsx +44 -2
- package/UI/Components/Forms/Fields/ColorPicker.tsx +2 -1
- package/UI/Components/Forms/Fields/FormField.tsx +16 -3
- package/UI/Components/Forms/ModelForm.tsx +159 -5
- package/UI/Components/Forms/Types/Field.ts +8 -1
- package/UI/Components/Graphs/DayUptimeGraph.tsx +8 -10
- package/UI/Components/Icon/Icon.tsx +16 -0
- package/UI/Components/Input/Input.tsx +42 -7
- package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +441 -0
- package/UI/Components/LabelRule/LabelRuleTable.tsx +142 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +22 -5
- package/UI/Components/ModelTable/ModelTable.tsx +14 -6
- package/UI/Components/MonitorGraphs/Uptime.tsx +17 -27
- package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +3 -1
- package/UI/Components/Tooltip/Tooltip.tsx +52 -6
- package/UI/Utils/DashboardStackingLayers.ts +85 -0
- package/UI/Utils/LabelRuleImportExport.ts +310 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +4 -3
- package/UI/Utils/TelemetryService.ts +4 -3
- package/UI/Utils/UseDashboardGridDnd.ts +4 -1
- package/UI/Utils/UserEmailRegistrationStatus.ts +33 -5
- package/UI/Utils/WebAuthn.ts +220 -0
- package/UI/esbuild-config.js +4 -0
- package/Utils/API.ts +34 -0
- package/Utils/Dashboard/Components/DashboardVMwareHostListComponent.ts +38 -0
- package/Utils/Dashboard/Components/DashboardVMwareResourceListShared.ts +70 -0
- package/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.ts +76 -0
- package/Utils/Dashboard/Components/Index.ts +16 -0
- package/Utils/LabelRuleImportExport.ts +496 -0
- package/Utils/Monitor/MonitorTemplateSyncUtil.ts +164 -0
- package/Utils/NetworkDiscovery/DiscoveryScanStatus.ts +8 -0
- package/Utils/Telemetry/CloudInstanceIdentity.ts +94 -0
- package/Utils/Telemetry/EntityKey.ts +19 -0
- package/Utils/Telemetry/EntityRelationship.ts +19 -0
- package/build/dist/Models/DatabaseModels/Alert.js +54 -0
- package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CloudResource.js +44 -7
- package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/CodeRepository.js +87 -0
- package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +60 -7
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js +287 -0
- package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/Incident.js +54 -0
- package/build/dist/Models/DatabaseModels/Incident.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/ScheduledMaintenance.js +54 -0
- package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
- package/build/dist/Models/DatabaseModels/User.js +57 -4
- package/build/dist/Models/DatabaseModels/User.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +47 -2
- package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js +18 -0
- package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
- package/build/dist/Models/DatabaseModels/VMwareResource.js +1201 -0
- package/build/dist/Models/DatabaseModels/VMwareResource.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js +1149 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenter.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js +648 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterFeed.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js +522 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterLabelRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js +603 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerRule.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js +503 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerTeam.js.map +1 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js +502 -0
- package/build/dist/Models/DatabaseModels/VMwareVCenterOwnerUser.js.map +1 -0
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js +22 -1
- package/build/dist/Models/DatabaseModels/WorkflowVariable.js.map +1 -1
- package/build/dist/Server/API/AIAgentDataAPI.js +63 -3
- package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
- package/build/dist/Server/API/AIAgentGitHubAPI.js +363 -0
- package/build/dist/Server/API/AIAgentGitHubAPI.js.map +1 -0
- package/build/dist/Server/API/AIChatAPI.js +19 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BillingAPI.js +22 -0
- package/build/dist/Server/API/BillingAPI.js.map +1 -1
- package/build/dist/Server/API/DashboardAPI.js +10 -0
- package/build/dist/Server/API/DashboardAPI.js.map +1 -1
- package/build/dist/Server/API/GitHubAPI.js +33 -5
- package/build/dist/Server/API/GitHubAPI.js.map +1 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +56 -0
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -0
- package/build/dist/Server/API/UserWebAuthnAPI.js +17 -1
- package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
- package/build/dist/Server/API/VMwareResourceAPI.js +106 -0
- package/build/dist/Server/API/VMwareResourceAPI.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js +41 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791800000000-SplitWebAuthnChallengeByPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js +14 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1791900000000-AddSeverityAndStateToNotificationEmailRollup.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js +241 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792000000000-AddVMwareTables.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js +36 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792100000000-AddGitHubCommandSettingsToCodeRepository.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792200000000-AddUserWebAuthnPurpose.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792300000000-AddGoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/IdentityRateLimit.js +80 -0
- package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
- package/build/dist/Server/Services/AIRunService.js +14 -1
- package/build/dist/Server/Services/AIRunService.js.map +1 -1
- package/build/dist/Server/Services/BillingPaymentMethodService.js +71 -21
- package/build/dist/Server/Services/BillingPaymentMethodService.js.map +1 -1
- package/build/dist/Server/Services/BillingService.js +210 -22
- package/build/dist/Server/Services/BillingService.js.map +1 -1
- package/build/dist/Server/Services/CloudResourceInstanceService.js +66 -0
- package/build/dist/Server/Services/CloudResourceInstanceService.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +1 -0
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js +9 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +7 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +16 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +1 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +1 -0
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MobilePasskeyLoginService.js +137 -0
- package/build/dist/Server/Services/MobilePasskeyLoginService.js.map +1 -0
- package/build/dist/Server/Services/MonitorService.js +34 -1
- package/build/dist/Server/Services/MonitorService.js.map +1 -1
- package/build/dist/Server/Services/MonitorTemplateService.js +64 -26
- package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +124 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +142 -2
- package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
- package/build/dist/Server/Services/OpenTelemetryIngestService.js +28 -13
- package/build/dist/Server/Services/OpenTelemetryIngestService.js.map +1 -1
- package/build/dist/Server/Services/PayAsYouGoBillingService.js +297 -0
- package/build/dist/Server/Services/PayAsYouGoBillingService.js.map +1 -0
- package/build/dist/Server/Services/ProjectService.js +38 -2
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js +66 -0
- package/build/dist/Server/Services/ServerlessFunctionInstanceService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +85 -28
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js +61 -10
- package/build/dist/Server/Services/TelemetryIngestionKeyService.js.map +1 -1
- package/build/dist/Server/Services/TelemetryUsageBillingService.js +62 -5
- package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +5 -4
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserWebAuthnService.js +345 -113
- package/build/dist/Server/Services/UserWebAuthnService.js.map +1 -1
- package/build/dist/Server/Services/VMwareResourceService.js +395 -0
- package/build/dist/Server/Services/VMwareResourceService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js +89 -0
- package/build/dist/Server/Services/VMwareVCenterFeedService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +197 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterLabelRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +214 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js +13 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerRuleService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js +129 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerTeamService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js +122 -0
- package/build/dist/Server/Services/VMwareVCenterOwnerUserService.js.map +1 -0
- package/build/dist/Server/Services/VMwareVCenterService.js +533 -0
- package/build/dist/Server/Services/VMwareVCenterService.js.map +1 -0
- package/build/dist/Server/Services/WorkflowVariableService.js +169 -0
- package/build/dist/Server/Services/WorkflowVariableService.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js +12 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/ActiveMonitoringMeteredPlan.js.map +1 -1
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js +25 -2
- package/build/dist/Server/Types/Billing/MeteredPlan/TelemetryMeteredPlan.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHub.js.map +1 -1
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubAgentTaskTrigger.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js +226 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandAuthorizer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js +297 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubCommandParser.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js +582 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubConversation.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js +275 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubReplyComposer.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js +365 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubRunReply.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js +103 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookEvents.js.map +1 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js +661 -0
- package/build/dist/Server/Utils/CodeRepository/GitHub/GitHubWebhookHandler.js.map +1 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +113 -0
- package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
- package/build/dist/Server/Utils/DataSource/EgressGuard.js +99 -15
- package/build/dist/Server/Utils/DataSource/EgressGuard.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +2 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +18 -0
- package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +31 -2
- package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
- package/build/dist/Server/Utils/LogRedaction.js +2 -1
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +219 -4
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js +12 -4
- package/build/dist/Server/Utils/Monitor/MonitorMaintenanceSuppression.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +22 -9
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +21 -0
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +21 -6
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +3 -3
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +9 -9
- package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +92 -71
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +428 -143
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +376 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +5 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceHeartbeat.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +136 -1
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js +933 -0
- package/build/dist/Server/Utils/Telemetry/VMwareSnapshotScan.js.map +1 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js +40 -0
- package/build/dist/Types/AI/CodeFixTaskContext.js.map +1 -1
- package/build/dist/Types/AI/CodeFixTaskType.js +57 -0
- package/build/dist/Types/AI/CodeFixTaskType.js.map +1 -1
- package/build/dist/Types/Accounts/AccountsLanguage.js +1 -0
- package/build/dist/Types/Accounts/AccountsLanguage.js.map +1 -1
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js +1 -0
- package/build/dist/Types/AdminDashboard/AdminDashboardLanguage.js.map +1 -1
- package/build/dist/Types/Cloud/CloudPlatform.js +277 -0
- package/build/dist/Types/Cloud/CloudPlatform.js.map +1 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js +52 -0
- package/build/dist/Types/CodeRepository/GitHubCommand.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js +2 -0
- package/build/dist/Types/Dashboard/DashboardComponents/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js +1 -0
- package/build/dist/Types/Dashboard/DashboardLanguage.js.map +1 -1
- package/build/dist/Types/Dashboard/DashboardTemplates.js +286 -0
- package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
- package/build/dist/Types/Docs/DocsLanguage.js +1 -0
- package/build/dist/Types/Docs/DocsLanguage.js.map +1 -1
- package/build/dist/Types/Exception/EgressGuardException.js +59 -0
- package/build/dist/Types/Exception/EgressGuardException.js.map +1 -0
- package/build/dist/Types/Icon/IconProp.js +1 -0
- package/build/dist/Types/Icon/IconProp.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +1 -0
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +61 -18
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +1 -0
- package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js +71 -0
- package/build/dist/Types/Monitor/MonitorStepVMwareMonitor.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js +211 -0
- package/build/dist/Types/Monitor/MonitorTemplateSyncField.js.map +1 -0
- package/build/dist/Types/Monitor/MonitorType.js +23 -0
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +28 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +1 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js +2 -0
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationUtil.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js +120 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesDebugHints.js.map +1 -1
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js +60 -0
- package/build/dist/Types/Monitor/SeriesContext/SeriesLabelDisplay.js.map +1 -1
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js +775 -0
- package/build/dist/Types/Monitor/VMwareAlertTemplates.js.map +1 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js +799 -0
- package/build/dist/Types/Monitor/VMwareMetricCatalog.js.map +1 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +25 -0
- package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -1
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +5 -0
- package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -1
- package/build/dist/Types/Password.js +63 -5
- package/build/dist/Types/Password.js.map +1 -1
- package/build/dist/Types/Permission.js +234 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Probe/RequestFailedDetails.js +7 -0
- package/build/dist/Types/Probe/RequestFailedDetails.js.map +1 -1
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +2 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js +1 -0
- package/build/dist/Types/StatusPage/StatusPageLanguage.js.map +1 -1
- package/build/dist/Types/Telemetry/EntityType.js +21 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ServiceType.js +1 -0
- package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +2 -2
- package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/build/dist/UI/Components/Calendar/Calendar.js +24 -4
- package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +28 -3
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +10 -3
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +89 -6
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js +5 -6
- package/build/dist/UI/Components/Graphs/DayUptimeGraph.js.map +1 -1
- package/build/dist/UI/Components/Icon/Icon.js +14 -0
- package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +37 -8
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +228 -0
- package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +102 -0
- package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +15 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/ModelTable.js +13 -5
- package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js +14 -15
- package/build/dist/UI/Components/MonitorGraphs/Uptime.js.map +1 -1
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +2 -0
- package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +33 -4
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/UI/Utils/DashboardStackingLayers.js +44 -0
- package/build/dist/UI/Utils/DashboardStackingLayers.js.map +1 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js +195 -0
- package/build/dist/UI/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +4 -4
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/TelemetryService.js +3 -2
- package/build/dist/UI/Utils/TelemetryService.js.map +1 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js +2 -1
- package/build/dist/UI/Utils/UseDashboardGridDnd.js.map +1 -1
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js +21 -4
- package/build/dist/UI/Utils/UserEmailRegistrationStatus.js.map +1 -1
- package/build/dist/UI/Utils/WebAuthn.js +121 -0
- package/build/dist/UI/Utils/WebAuthn.js.map +1 -0
- package/build/dist/Utils/API.js +29 -0
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js +33 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareHostListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js +54 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareResourceListShared.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js +60 -0
- package/build/dist/Utils/Dashboard/Components/DashboardVMwareVirtualMachineListComponent.js.map +1 -0
- package/build/dist/Utils/Dashboard/Components/Index.js +8 -0
- package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
- package/build/dist/Utils/LabelRuleImportExport.js +356 -0
- package/build/dist/Utils/LabelRuleImportExport.js.map +1 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js +110 -0
- package/build/dist/Utils/Monitor/MonitorTemplateSyncUtil.js.map +1 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js +6 -0
- package/build/dist/Utils/NetworkDiscovery/DiscoveryScanStatus.js.map +1 -1
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js +88 -0
- package/build/dist/Utils/Telemetry/CloudInstanceIdentity.js.map +1 -0
- package/build/dist/Utils/Telemetry/EntityKey.js +15 -0
- package/build/dist/Utils/Telemetry/EntityKey.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +13 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/package.json +1 -1
|
@@ -138,6 +138,29 @@ const PROXMOX_NODE_ATTRIBUTE_TO_COLUMN: AttributeToColumnMap = {
|
|
|
138
138
|
"pve.id": "name",
|
|
139
139
|
};
|
|
140
140
|
|
|
141
|
+
/*
|
|
142
|
+
* The vcenter receiver stamps identity on RESOURCE attributes, so a
|
|
143
|
+
* dashboard variable may be keyed either as the bare attribute or as the
|
|
144
|
+
* `resource.`-prefixed form the metrics explorer exposes.
|
|
145
|
+
*/
|
|
146
|
+
const VMWARE_HOST_ATTRIBUTE_TO_COLUMN: AttributeToColumnMap = {
|
|
147
|
+
"vcenter.host.name": "name",
|
|
148
|
+
"resource.vcenter.host.name": "name",
|
|
149
|
+
"vcenter.cluster.name": "clusterName",
|
|
150
|
+
"resource.vcenter.cluster.name": "clusterName",
|
|
151
|
+
"vcenter.datacenter.name": "datacenterName",
|
|
152
|
+
"resource.vcenter.datacenter.name": "datacenterName",
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const VMWARE_VIRTUAL_MACHINE_ATTRIBUTE_TO_COLUMN: AttributeToColumnMap = {
|
|
156
|
+
"vcenter.vm.name": "name",
|
|
157
|
+
"resource.vcenter.vm.name": "name",
|
|
158
|
+
"vcenter.host.name": "hostName",
|
|
159
|
+
"resource.vcenter.host.name": "hostName",
|
|
160
|
+
"vcenter.cluster.name": "clusterName",
|
|
161
|
+
"resource.vcenter.cluster.name": "clusterName",
|
|
162
|
+
};
|
|
163
|
+
|
|
141
164
|
const CEPH_OSD_ATTRIBUTE_TO_COLUMN: AttributeToColumnMap = {
|
|
142
165
|
ceph_daemon: "externalId",
|
|
143
166
|
};
|
|
@@ -414,6 +437,41 @@ export default class PublicDashboardResourceListPolicy {
|
|
|
414
437
|
proxmoxClusterId: true,
|
|
415
438
|
proxmoxCluster: { name: true },
|
|
416
439
|
};
|
|
440
|
+
case DashboardComponentType.VMwareHostList:
|
|
441
|
+
return {
|
|
442
|
+
_id: true,
|
|
443
|
+
name: true,
|
|
444
|
+
externalId: true,
|
|
445
|
+
kind: true,
|
|
446
|
+
datacenterName: true,
|
|
447
|
+
clusterName: true,
|
|
448
|
+
latestCpuPercent: true,
|
|
449
|
+
latestMemoryPercent: true,
|
|
450
|
+
cpuCapacityMhz: true,
|
|
451
|
+
maxMemoryBytes: true,
|
|
452
|
+
metricsUpdatedAt: true,
|
|
453
|
+
vmwareVCenterId: true,
|
|
454
|
+
vmwareVCenter: { name: true },
|
|
455
|
+
};
|
|
456
|
+
case DashboardComponentType.VMwareVirtualMachineList:
|
|
457
|
+
return {
|
|
458
|
+
_id: true,
|
|
459
|
+
name: true,
|
|
460
|
+
externalId: true,
|
|
461
|
+
kind: true,
|
|
462
|
+
datacenterName: true,
|
|
463
|
+
clusterName: true,
|
|
464
|
+
hostName: true,
|
|
465
|
+
resourcePoolName: true,
|
|
466
|
+
isPoweredOn: true,
|
|
467
|
+
isTemplate: true,
|
|
468
|
+
latestCpuPercent: true,
|
|
469
|
+
latestMemoryPercent: true,
|
|
470
|
+
latestDiskPercent: true,
|
|
471
|
+
metricsUpdatedAt: true,
|
|
472
|
+
vmwareVCenterId: true,
|
|
473
|
+
vmwareVCenter: { name: true },
|
|
474
|
+
};
|
|
417
475
|
case DashboardComponentType.CephOsdList:
|
|
418
476
|
return {
|
|
419
477
|
_id: true,
|
|
@@ -675,6 +733,14 @@ export default class PublicDashboardResourceListPolicy {
|
|
|
675
733
|
return PublicDashboardResourceListPolicy.buildProxmoxGuestPolicy(
|
|
676
734
|
argumentsObject,
|
|
677
735
|
);
|
|
736
|
+
case DashboardComponentType.VMwareHostList:
|
|
737
|
+
return PublicDashboardResourceListPolicy.buildVMwareHostPolicy(
|
|
738
|
+
argumentsObject,
|
|
739
|
+
);
|
|
740
|
+
case DashboardComponentType.VMwareVirtualMachineList:
|
|
741
|
+
return PublicDashboardResourceListPolicy.buildVMwareVirtualMachinePolicy(
|
|
742
|
+
argumentsObject,
|
|
743
|
+
);
|
|
678
744
|
case DashboardComponentType.CephOsdList:
|
|
679
745
|
return PublicDashboardResourceListPolicy.buildCephOsdPolicy(
|
|
680
746
|
argumentsObject,
|
|
@@ -1205,6 +1271,83 @@ export default class PublicDashboardResourceListPolicy {
|
|
|
1205
1271
|
});
|
|
1206
1272
|
}
|
|
1207
1273
|
|
|
1274
|
+
/*
|
|
1275
|
+
* ESXi hosts. The vcenter receiver reports no per-host power or
|
|
1276
|
+
* connection state, so the host widget takes only the shared arguments
|
|
1277
|
+
* (vCenter scope, row cap): no status filter is accepted.
|
|
1278
|
+
*/
|
|
1279
|
+
private static buildVMwareHostPolicy(
|
|
1280
|
+
argumentsObject: Record<string, unknown>,
|
|
1281
|
+
): PolicyDraft {
|
|
1282
|
+
const query: Record<string, unknown> = { kind: "Host" };
|
|
1283
|
+
PublicDashboardResourceListPolicy.addIncludesFromArgument({
|
|
1284
|
+
query,
|
|
1285
|
+
queryKey: "vmwareVCenterId",
|
|
1286
|
+
argumentsObject,
|
|
1287
|
+
argumentKey: "vmwareVCenterIds",
|
|
1288
|
+
});
|
|
1289
|
+
|
|
1290
|
+
return {
|
|
1291
|
+
...PublicDashboardResourceListPolicy.listDraft({
|
|
1292
|
+
resourceType: "vmware-resource",
|
|
1293
|
+
query,
|
|
1294
|
+
sort: { name: SortOrder.Ascending },
|
|
1295
|
+
argumentsObject,
|
|
1296
|
+
}),
|
|
1297
|
+
attributeToColumn: VMWARE_HOST_ATTRIBUTE_TO_COLUMN,
|
|
1298
|
+
};
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
/*
|
|
1302
|
+
* Virtual machines (kind VirtualMachine covers VMs and VM templates;
|
|
1303
|
+
* templates carry isTemplate = true and a null power state).
|
|
1304
|
+
*/
|
|
1305
|
+
private static buildVMwareVirtualMachinePolicy(
|
|
1306
|
+
argumentsObject: Record<string, unknown>,
|
|
1307
|
+
): PolicyDraft {
|
|
1308
|
+
const query: Record<string, unknown> = { kind: "VirtualMachine" };
|
|
1309
|
+
PublicDashboardResourceListPolicy.addIncludesFromArgument({
|
|
1310
|
+
query,
|
|
1311
|
+
queryKey: "vmwareVCenterId",
|
|
1312
|
+
argumentsObject,
|
|
1313
|
+
argumentKey: "vmwareVCenterIds",
|
|
1314
|
+
});
|
|
1315
|
+
|
|
1316
|
+
const powerStateFilter: string | undefined =
|
|
1317
|
+
PublicDashboardResourceListPolicy.optionalEnum(
|
|
1318
|
+
argumentsObject,
|
|
1319
|
+
"powerStateFilter",
|
|
1320
|
+
["on", "off"],
|
|
1321
|
+
);
|
|
1322
|
+
if (powerStateFilter === "on") {
|
|
1323
|
+
query["isPoweredOn"] = true;
|
|
1324
|
+
} else if (powerStateFilter === "off") {
|
|
1325
|
+
query["isPoweredOn"] = false;
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
const templateFilter: string | undefined =
|
|
1329
|
+
PublicDashboardResourceListPolicy.optionalEnum(
|
|
1330
|
+
argumentsObject,
|
|
1331
|
+
"templateFilter",
|
|
1332
|
+
["exclude", "only"],
|
|
1333
|
+
);
|
|
1334
|
+
if (templateFilter === "exclude") {
|
|
1335
|
+
query["isTemplate"] = false;
|
|
1336
|
+
} else if (templateFilter === "only") {
|
|
1337
|
+
query["isTemplate"] = true;
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
return {
|
|
1341
|
+
...PublicDashboardResourceListPolicy.listDraft({
|
|
1342
|
+
resourceType: "vmware-resource",
|
|
1343
|
+
query,
|
|
1344
|
+
sort: { name: SortOrder.Ascending },
|
|
1345
|
+
argumentsObject,
|
|
1346
|
+
}),
|
|
1347
|
+
attributeToColumn: VMWARE_VIRTUAL_MACHINE_ATTRIBUTE_TO_COLUMN,
|
|
1348
|
+
};
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1208
1351
|
private static buildCephOsdPolicy(
|
|
1209
1352
|
argumentsObject: Record<string, unknown>,
|
|
1210
1353
|
): PolicyDraft {
|
|
@@ -3,6 +3,10 @@ import http from "http";
|
|
|
3
3
|
import https from "https";
|
|
4
4
|
import net from "net";
|
|
5
5
|
import BadDataException from "../../../Types/Exception/BadDataException";
|
|
6
|
+
import EgressGuardException, {
|
|
7
|
+
EgressFailureReason,
|
|
8
|
+
} from "../../../Types/Exception/EgressGuardException";
|
|
9
|
+
import logger from "../Logger";
|
|
6
10
|
|
|
7
11
|
/*
|
|
8
12
|
* SSRF egress guard for outbound connections whose target is chosen by a
|
|
@@ -80,6 +84,21 @@ export interface EgressGuardOptions {
|
|
|
80
84
|
* requests set it to false and receive one indistinguishable failure.
|
|
81
85
|
*/
|
|
82
86
|
includeResolvedAddressInError?: boolean | undefined;
|
|
87
|
+
/*
|
|
88
|
+
* TOTAL wall-clock budget for name resolution, across every attempt. It is a
|
|
89
|
+
* safety net against a wedged resolver, not a latency policy: callers with
|
|
90
|
+
* their own deadline (probe monitors have an execution-context timeout) pass
|
|
91
|
+
* a value above the resolver's own configured budget so the resolver's
|
|
92
|
+
* nameserver failover is allowed to finish, and let their deadline do the
|
|
93
|
+
* real bounding. Defaults to DEFAULT_DNS_RESOLVE_BUDGET_IN_MS.
|
|
94
|
+
*/
|
|
95
|
+
resolveTimeoutInMs?: number | undefined;
|
|
96
|
+
/*
|
|
97
|
+
* How many getaddrinfo attempts to make inside the budget above. Retrying
|
|
98
|
+
* absorbs the transient resolver failures (EAI_AGAIN, a nameserver
|
|
99
|
+
* restarting) that otherwise surface as a hard "target is down".
|
|
100
|
+
*/
|
|
101
|
+
resolveAttempts?: number | undefined;
|
|
83
102
|
}
|
|
84
103
|
|
|
85
104
|
export interface PinnedAgents {
|
|
@@ -112,7 +131,23 @@ export interface AddressVerdict {
|
|
|
112
131
|
isPrivateNetwork?: boolean | undefined;
|
|
113
132
|
}
|
|
114
133
|
|
|
115
|
-
|
|
134
|
+
/*
|
|
135
|
+
* Total resolution budget. Chosen so existing callers see no change in
|
|
136
|
+
* worst-case latency versus the single 5s lookup this replaced — the retries
|
|
137
|
+
* below fit INSIDE the same budget rather than extending it.
|
|
138
|
+
*/
|
|
139
|
+
export const DEFAULT_DNS_RESOLVE_BUDGET_IN_MS: number = 5000;
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* getaddrinfo fails transiently far more often than a host actually
|
|
143
|
+
* disappears — EAI_AGAIN under resolver load is the classic case, and it is
|
|
144
|
+
* why the Helm chart ships fallback nameservers. One shot at it turned every
|
|
145
|
+
* such blip into a monitor-down incident.
|
|
146
|
+
*/
|
|
147
|
+
export const DEFAULT_DNS_RESOLVE_ATTEMPTS: number = 3;
|
|
148
|
+
|
|
149
|
+
// Short enough that three attempts still fit comfortably in a 5s budget.
|
|
150
|
+
const DNS_RESOLVE_RETRY_DELAY_IN_MS: number = 150;
|
|
116
151
|
|
|
117
152
|
interface Ipv4Range {
|
|
118
153
|
base: number;
|
|
@@ -485,8 +520,9 @@ export default class DataSourceEgressGuard {
|
|
|
485
520
|
return { blocked: true, reason: "not a valid IP address" };
|
|
486
521
|
}
|
|
487
522
|
|
|
488
|
-
private static async
|
|
523
|
+
private static async lookupOnce(
|
|
489
524
|
hostname: string,
|
|
525
|
+
timeoutInMs: number,
|
|
490
526
|
): Promise<Array<ResolvedAddress>> {
|
|
491
527
|
/*
|
|
492
528
|
* dns.lookup (getaddrinfo) rather than dns.resolve so /etc/hosts and
|
|
@@ -506,7 +542,7 @@ export default class DataSourceEgressGuard {
|
|
|
506
542
|
(_resolve: (value: never) => void, reject: (error: Error) => void) => {
|
|
507
543
|
timeoutHandle = setTimeout(() => {
|
|
508
544
|
reject(new BadDataException(`DNS lookup timed out for ${hostname}`));
|
|
509
|
-
},
|
|
545
|
+
}, timeoutInMs);
|
|
510
546
|
},
|
|
511
547
|
);
|
|
512
548
|
|
|
@@ -519,6 +555,77 @@ export default class DataSourceEgressGuard {
|
|
|
519
555
|
}
|
|
520
556
|
}
|
|
521
557
|
|
|
558
|
+
/*
|
|
559
|
+
* Resolve with a bounded number of retries inside ONE total budget.
|
|
560
|
+
*
|
|
561
|
+
* A resolver that answers "no" instantly (NXDOMAIN, SERVFAIL, EAI_AGAIN) is
|
|
562
|
+
* retried within milliseconds, which is exactly the case that used to turn a
|
|
563
|
+
* momentary blip into an incident. A resolver that HANGS consumes the budget
|
|
564
|
+
* on its first attempt and is not retried, so the worst case is unchanged
|
|
565
|
+
* from the single lookup this replaced.
|
|
566
|
+
*/
|
|
567
|
+
private static async defaultResolve(
|
|
568
|
+
hostname: string,
|
|
569
|
+
options?: EgressGuardOptions,
|
|
570
|
+
): Promise<Array<ResolvedAddress>> {
|
|
571
|
+
const budgetInMs: number = Math.max(
|
|
572
|
+
1,
|
|
573
|
+
options?.resolveTimeoutInMs ?? DEFAULT_DNS_RESOLVE_BUDGET_IN_MS,
|
|
574
|
+
);
|
|
575
|
+
const maxAttempts: number = Math.max(
|
|
576
|
+
1,
|
|
577
|
+
options?.resolveAttempts ?? DEFAULT_DNS_RESOLVE_ATTEMPTS,
|
|
578
|
+
);
|
|
579
|
+
|
|
580
|
+
const startedAt: number = Date.now();
|
|
581
|
+
|
|
582
|
+
/*
|
|
583
|
+
* Keep the FIRST failure, not the last. Attempt one gets the whole budget,
|
|
584
|
+
* so its error is either the real resolver errno or a genuine full-budget
|
|
585
|
+
* timeout; a later attempt runs on whatever is left and can time out
|
|
586
|
+
* generically, burying the diagnosis. That errno is the entire value here
|
|
587
|
+
* — for detail-permitted callers it IS the user-facing message, and for a
|
|
588
|
+
* probe it is all the operator log has to go on.
|
|
589
|
+
*/
|
|
590
|
+
let firstError: unknown = undefined;
|
|
591
|
+
|
|
592
|
+
for (let attempt: number = 1; attempt <= maxAttempts; attempt++) {
|
|
593
|
+
const remainingInMs: number = budgetInMs - (Date.now() - startedAt);
|
|
594
|
+
|
|
595
|
+
if (remainingInMs <= 0) {
|
|
596
|
+
break;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
try {
|
|
600
|
+
return await this.lookupOnce(hostname, remainingInMs);
|
|
601
|
+
} catch (error) {
|
|
602
|
+
if (firstError === undefined) {
|
|
603
|
+
firstError = error;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/*
|
|
608
|
+
* Only sleep when another attempt can still start AND finish inside the
|
|
609
|
+
* budget; otherwise the delay is pure added latency on a failure.
|
|
610
|
+
*/
|
|
611
|
+
const budgetLeftInMs: number = budgetInMs - (Date.now() - startedAt);
|
|
612
|
+
if (
|
|
613
|
+
attempt >= maxAttempts ||
|
|
614
|
+
budgetLeftInMs <= DNS_RESOLVE_RETRY_DELAY_IN_MS
|
|
615
|
+
) {
|
|
616
|
+
break;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
await new Promise<void>((resolve: () => void) => {
|
|
620
|
+
setTimeout(resolve, DNS_RESOLVE_RETRY_DELAY_IN_MS);
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
throw (
|
|
625
|
+
firstError ?? new BadDataException(`DNS lookup timed out for ${hostname}`)
|
|
626
|
+
);
|
|
627
|
+
}
|
|
628
|
+
|
|
522
629
|
/*
|
|
523
630
|
* Resolve a hostname (or accept a literal IP) and assert every address it
|
|
524
631
|
* can reach is allowed. Returns the validated addresses so HTTP callers
|
|
@@ -533,7 +640,10 @@ export default class DataSourceEgressGuard {
|
|
|
533
640
|
const label: string = options?.targetLabel || DEFAULT_TARGET_LABEL;
|
|
534
641
|
|
|
535
642
|
if (!hostname) {
|
|
536
|
-
throw new
|
|
643
|
+
throw new EgressGuardException(
|
|
644
|
+
`${label} host is required.`,
|
|
645
|
+
EgressFailureReason.InvalidTarget,
|
|
646
|
+
);
|
|
537
647
|
}
|
|
538
648
|
|
|
539
649
|
// Literal [::1] style hosts arrive with brackets from URL parsing.
|
|
@@ -542,10 +652,15 @@ export default class DataSourceEgressGuard {
|
|
|
542
652
|
if (net.isIP(bareHostname) !== 0) {
|
|
543
653
|
const verdict: AddressVerdict = this.checkAddress(bareHostname, options);
|
|
544
654
|
if (verdict.blocked) {
|
|
545
|
-
|
|
655
|
+
/*
|
|
656
|
+
* A literal IP is echoed back with full detail on purpose: it tells
|
|
657
|
+
* the caller only what the caller itself typed.
|
|
658
|
+
*/
|
|
659
|
+
throw new EgressGuardException(
|
|
546
660
|
`${label} host ${bareHostname} is not allowed: ${verdict.reason}.${
|
|
547
661
|
verdict.isPrivateNetwork ? options?.privateNetworkHint || "" : ""
|
|
548
662
|
}`,
|
|
663
|
+
EgressFailureReason.AddressBlocked,
|
|
549
664
|
);
|
|
550
665
|
}
|
|
551
666
|
return [{ address: bareHostname, family: net.isIP(bareHostname) }];
|
|
@@ -554,7 +669,7 @@ export default class DataSourceEgressGuard {
|
|
|
554
669
|
const resolveFunction: EgressResolveFunction =
|
|
555
670
|
options?.resolveFunction ||
|
|
556
671
|
((host: string) => {
|
|
557
|
-
return this.defaultResolve(host);
|
|
672
|
+
return this.defaultResolve(host, options);
|
|
558
673
|
});
|
|
559
674
|
|
|
560
675
|
let addresses: Array<ResolvedAddress> = [];
|
|
@@ -562,25 +677,40 @@ export default class DataSourceEgressGuard {
|
|
|
562
677
|
addresses = await resolveFunction(bareHostname);
|
|
563
678
|
} catch (error) {
|
|
564
679
|
if (options?.includeResolvedAddressInError === false) {
|
|
565
|
-
|
|
680
|
+
/*
|
|
681
|
+
* The cause is destroyed for the caller by design, so log it here:
|
|
682
|
+
* this is the only place an operator can still learn whether a
|
|
683
|
+
* monitor failed on DNS or on address policy.
|
|
684
|
+
*/
|
|
685
|
+
logger.debug(
|
|
686
|
+
`EgressGuard: could not resolve ${bareHostname} - ${
|
|
687
|
+
error instanceof Error ? error.message : String(error)
|
|
688
|
+
}`,
|
|
689
|
+
);
|
|
690
|
+
throw new EgressGuardException(
|
|
566
691
|
`${label} host ${bareHostname} could not be reached.`,
|
|
692
|
+
EgressFailureReason.Unreachable,
|
|
567
693
|
);
|
|
568
694
|
}
|
|
569
|
-
throw new
|
|
695
|
+
throw new EgressGuardException(
|
|
570
696
|
`Could not resolve ${label.toLowerCase()} host ${bareHostname}: ${
|
|
571
697
|
error instanceof Error ? error.message : String(error)
|
|
572
698
|
}`,
|
|
699
|
+
EgressFailureReason.ResolutionFailed,
|
|
573
700
|
);
|
|
574
701
|
}
|
|
575
702
|
|
|
576
703
|
if (addresses.length === 0) {
|
|
577
704
|
if (options?.includeResolvedAddressInError === false) {
|
|
578
|
-
|
|
705
|
+
logger.debug(`EgressGuard: ${bareHostname} resolved to no addresses.`);
|
|
706
|
+
throw new EgressGuardException(
|
|
579
707
|
`${label} host ${bareHostname} could not be reached.`,
|
|
708
|
+
EgressFailureReason.Unreachable,
|
|
580
709
|
);
|
|
581
710
|
}
|
|
582
|
-
throw new
|
|
711
|
+
throw new EgressGuardException(
|
|
583
712
|
`Could not resolve ${label.toLowerCase()} host ${bareHostname}.`,
|
|
713
|
+
EgressFailureReason.ResolutionFailed,
|
|
584
714
|
);
|
|
585
715
|
}
|
|
586
716
|
|
|
@@ -591,14 +721,24 @@ export default class DataSourceEgressGuard {
|
|
|
591
721
|
);
|
|
592
722
|
if (verdict.blocked) {
|
|
593
723
|
if (options?.includeResolvedAddressInError === false) {
|
|
594
|
-
|
|
724
|
+
logger.debug(
|
|
725
|
+
`EgressGuard: ${bareHostname} resolved to a blocked address - ${verdict.reason}.`,
|
|
726
|
+
);
|
|
727
|
+
/*
|
|
728
|
+
* Reported as Unreachable, NOT AddressBlocked. Sharing one reason
|
|
729
|
+
* with the DNS branches above is what stops a tenant on a shared
|
|
730
|
+
* probe from using the difference to enumerate internal names.
|
|
731
|
+
*/
|
|
732
|
+
throw new EgressGuardException(
|
|
595
733
|
`${label} host ${bareHostname} could not be reached.`,
|
|
734
|
+
EgressFailureReason.Unreachable,
|
|
596
735
|
);
|
|
597
736
|
}
|
|
598
|
-
throw new
|
|
737
|
+
throw new EgressGuardException(
|
|
599
738
|
`${label} host ${bareHostname} resolves to ${resolved.address}, which is not allowed: ${verdict.reason}.${
|
|
600
739
|
verdict.isPrivateNetwork ? options?.privateNetworkHint || "" : ""
|
|
601
740
|
}`,
|
|
741
|
+
EgressFailureReason.AddressBlocked,
|
|
602
742
|
);
|
|
603
743
|
}
|
|
604
744
|
}
|
|
@@ -618,24 +758,29 @@ export default class DataSourceEgressGuard {
|
|
|
618
758
|
const label: string = options?.targetLabel || DEFAULT_TARGET_LABEL;
|
|
619
759
|
|
|
620
760
|
if (!urlString) {
|
|
621
|
-
throw new
|
|
761
|
+
throw new EgressGuardException(
|
|
762
|
+
`${label} URL is required.`,
|
|
763
|
+
EgressFailureReason.InvalidTarget,
|
|
764
|
+
);
|
|
622
765
|
}
|
|
623
766
|
|
|
624
767
|
let url: URL;
|
|
625
768
|
try {
|
|
626
769
|
url = new URL(urlString);
|
|
627
770
|
} catch {
|
|
628
|
-
throw new
|
|
771
|
+
throw new EgressGuardException(
|
|
629
772
|
`Invalid ${label.toLowerCase()} URL: ${urlString}`,
|
|
773
|
+
EgressFailureReason.InvalidTarget,
|
|
630
774
|
);
|
|
631
775
|
}
|
|
632
776
|
|
|
633
777
|
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
634
|
-
throw new
|
|
778
|
+
throw new EgressGuardException(
|
|
635
779
|
`${label} URL must use http or https (got ${url.protocol.replace(
|
|
636
780
|
":",
|
|
637
781
|
"",
|
|
638
782
|
)}).`,
|
|
783
|
+
EgressFailureReason.InvalidTarget,
|
|
639
784
|
);
|
|
640
785
|
}
|
|
641
786
|
|
|
@@ -6,7 +6,7 @@ import ColumnLength from "../../../Types/Database/ColumnLength";
|
|
|
6
6
|
*
|
|
7
7
|
* Per-value clamps for bounded varchar columns written by the bulk
|
|
8
8
|
* inventory upsert paths (Kubernetes / Docker / Docker Swarm / Podman /
|
|
9
|
-
* Proxmox / Ceph / IoT).
|
|
9
|
+
* Proxmox / VMware / Ceph / IoT).
|
|
10
10
|
*
|
|
11
11
|
* Those services hand-build `INSERT ... ON CONFLICT` statements and
|
|
12
12
|
* flush them in chunks of 500 rows through
|
|
@@ -39,6 +39,11 @@ import RollupCategory, {
|
|
|
39
39
|
* rows[].link raw our own table, href="{{this.link}}"
|
|
40
40
|
* rows[].hasLink raw {{#ifCond this.hasLink "true"}}
|
|
41
41
|
* rows[].metaLabel raw our own table, {{this.metaLabel}}
|
|
42
|
+
* rows[].severity raw our own table, {{this.severity}}
|
|
43
|
+
* rows[].currentState raw our own table, {{this.currentState}}
|
|
44
|
+
* rows[].hasSeverity raw {{#ifCond this.hasSeverity "true"}}
|
|
45
|
+
* rows[].hasCurrentState raw {{#ifCond this.hasCurrentState "true"}}
|
|
46
|
+
* rows[].hasDetails raw {{#ifCond this.hasDetails "true"}}
|
|
42
47
|
* rows[].isSectionStart raw {{#ifCond this.isSectionStart "true"}}
|
|
43
48
|
* rows[].sectionLabel raw our own section heading
|
|
44
49
|
* rows[].sectionCount raw our own section heading
|
|
@@ -74,6 +79,8 @@ export interface RollupRow {
|
|
|
74
79
|
title: string;
|
|
75
80
|
link: string;
|
|
76
81
|
hasLink: string;
|
|
82
|
+
severity: string;
|
|
83
|
+
currentState: string;
|
|
77
84
|
itemCount: number;
|
|
78
85
|
category: RollupCategory;
|
|
79
86
|
firstAtMs: number;
|
|
@@ -201,6 +208,8 @@ interface RollupGroup {
|
|
|
201
208
|
firstAt: number;
|
|
202
209
|
title: string;
|
|
203
210
|
link: string;
|
|
211
|
+
severity: string;
|
|
212
|
+
currentState: string;
|
|
204
213
|
category: RollupCategory;
|
|
205
214
|
itemCount: number;
|
|
206
215
|
}
|
|
@@ -210,6 +219,14 @@ interface CategoryCount {
|
|
|
210
219
|
count: number;
|
|
211
220
|
}
|
|
212
221
|
|
|
222
|
+
type NormaliseDetailFunction = (value: string | undefined) => string;
|
|
223
|
+
|
|
224
|
+
const normaliseDetail: NormaliseDetailFunction = (
|
|
225
|
+
value: string | undefined,
|
|
226
|
+
): string => {
|
|
227
|
+
return typeof value === "string" && value.trim() !== "" ? value : "";
|
|
228
|
+
};
|
|
229
|
+
|
|
213
230
|
/*
|
|
214
231
|
* Collapse the raw notification list into the rows a human reads.
|
|
215
232
|
*
|
|
@@ -244,6 +261,8 @@ export const foldItems: FoldItemsFunction = (
|
|
|
244
261
|
firstAt: createdAtMs,
|
|
245
262
|
title: item.subject ?? "",
|
|
246
263
|
link: link,
|
|
264
|
+
severity: normaliseDetail(item.severity),
|
|
265
|
+
currentState: normaliseDetail(item.currentState),
|
|
247
266
|
category: normaliseCategory(item.rollupCategory),
|
|
248
267
|
itemCount: 1,
|
|
249
268
|
});
|
|
@@ -271,6 +290,12 @@ export const foldItems: FoldItemsFunction = (
|
|
|
271
290
|
existing.latestAt = createdAtMs;
|
|
272
291
|
existing.title = item.subject ?? "";
|
|
273
292
|
existing.link = link;
|
|
293
|
+
/*
|
|
294
|
+
* All details describe the same notification as the title. Clearing a
|
|
295
|
+
* missing latest value avoids presenting an older snapshot as current.
|
|
296
|
+
*/
|
|
297
|
+
existing.severity = normaliseDetail(item.severity);
|
|
298
|
+
existing.currentState = normaliseDetail(item.currentState);
|
|
274
299
|
/*
|
|
275
300
|
* The category follows the LATEST item too. A group is keyed on its deep
|
|
276
301
|
* link, and two events about one resource can in principle be filed
|
|
@@ -295,6 +320,8 @@ export const foldItems: FoldItemsFunction = (
|
|
|
295
320
|
title: group.title,
|
|
296
321
|
link: group.link,
|
|
297
322
|
hasLink: group.link === "" ? "false" : "true",
|
|
323
|
+
severity: group.severity,
|
|
324
|
+
currentState: group.currentState,
|
|
298
325
|
itemCount: group.itemCount,
|
|
299
326
|
category: group.category,
|
|
300
327
|
firstAtMs: group.firstAt,
|
|
@@ -689,6 +716,12 @@ export const buildRollupEmail: BuildRollupEmailFunction = (
|
|
|
689
716
|
link: row.link,
|
|
690
717
|
hasLink: row.hasLink,
|
|
691
718
|
metaLabel: metaLabel,
|
|
719
|
+
severity: row.severity,
|
|
720
|
+
currentState: row.currentState,
|
|
721
|
+
hasSeverity: row.severity === "" ? "false" : "true",
|
|
722
|
+
hasCurrentState: row.currentState === "" ? "false" : "true",
|
|
723
|
+
hasDetails:
|
|
724
|
+
row.severity !== "" || row.currentState !== "" ? "true" : "false",
|
|
692
725
|
/*
|
|
693
726
|
* The heading is emitted by the first row of the section rather than
|
|
694
727
|
* by an entry of its own, so every element of this array is a real
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from "./EmailRollupConstants";
|
|
12
12
|
import UserNotificationEmailRollupItem from "../../../Models/DatabaseModels/UserNotificationEmailRollupItem";
|
|
13
13
|
import OneUptimeDate from "../../../Types/Date";
|
|
14
|
+
import ColumnLength from "../../../Types/Database/ColumnLength";
|
|
14
15
|
import Dictionary from "../../../Types/Dictionary";
|
|
15
16
|
import Email from "../../../Types/Email";
|
|
16
17
|
import { EmailEnvelope } from "../../../Types/Email/EmailMessage";
|
|
@@ -113,6 +114,29 @@ const KNOWN_LINK_VARS: ReadonlyArray<string> = [
|
|
|
113
114
|
"onCallPolicyViewLink",
|
|
114
115
|
];
|
|
115
116
|
|
|
117
|
+
/*
|
|
118
|
+
* Episode notifications can also contain child-resource details; keep the
|
|
119
|
+
* severity tied to the same resource as the event and its current state.
|
|
120
|
+
*/
|
|
121
|
+
const SEVERITY_VAR_BY_CATEGORY: Partial<Record<RollupCategory, string>> = {
|
|
122
|
+
[RollupCategory.Alerts]: "alertSeverity",
|
|
123
|
+
[RollupCategory.Incidents]: "incidentSeverity",
|
|
124
|
+
[RollupCategory.AlertEpisodes]: "episodeSeverity",
|
|
125
|
+
[RollupCategory.IncidentEpisodes]: "episodeSeverity",
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
function extractLabel(
|
|
129
|
+
value: string | JSONObject | undefined,
|
|
130
|
+
): string | undefined {
|
|
131
|
+
if (typeof value !== "string") {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const label: string = value.trim();
|
|
136
|
+
|
|
137
|
+
return label ? label.slice(0, ColumnLength.ShortText) : undefined;
|
|
138
|
+
}
|
|
139
|
+
|
|
116
140
|
type IsAbsoluteLinkFunction = (
|
|
117
141
|
value: string | JSONObject | undefined,
|
|
118
142
|
) => value is string;
|
|
@@ -322,6 +346,26 @@ export default class EmailRollupWriter {
|
|
|
322
346
|
ROLLUP_SUBJECT_MAX_LENGTH,
|
|
323
347
|
) ?? "";
|
|
324
348
|
|
|
349
|
+
const severityVar: string | undefined =
|
|
350
|
+
SEVERITY_VAR_BY_CATEGORY[category];
|
|
351
|
+
|
|
352
|
+
if (severityVar) {
|
|
353
|
+
const severity: string | undefined = extractLabel(
|
|
354
|
+
data.emailEnvelope.vars?.[severityVar],
|
|
355
|
+
);
|
|
356
|
+
const currentState: string | undefined = extractLabel(
|
|
357
|
+
data.emailEnvelope.vars?.["currentState"],
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
if (severity !== undefined) {
|
|
361
|
+
item.severity = severity;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (currentState !== undefined) {
|
|
365
|
+
item.currentState = currentState;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
325
369
|
const link: string | undefined = EmailRollupWriter.extractViewLink(
|
|
326
370
|
data.emailEnvelope.vars,
|
|
327
371
|
);
|
|
@@ -75,6 +75,7 @@ const SENSITIVE_KEY_FRAGMENTS: Array<string> = [
|
|
|
75
75
|
"onetimecode",
|
|
76
76
|
"logincode",
|
|
77
77
|
"resetcode",
|
|
78
|
+
"codeverifier",
|
|
78
79
|
/*
|
|
79
80
|
* A DSN carries the password inline, so the key name is the only signal
|
|
80
81
|
* we get before the value is already in the log line.
|
|
@@ -232,7 +233,7 @@ export const isSensitiveLogKey: IsSensitiveLogKeyFunction = (
|
|
|
232
233
|
* are too short to match safely against free-form prose.
|
|
233
234
|
*/
|
|
234
235
|
const TEXT_SECRET_WORDS: string =
|
|
235
|
-
"password|passwd|passphrase|secret|token|credential|credentials|authorization|cookie|api[_-]?key|private[_-]?key|access[_-]?key|assertion|attestation|signature|raw[_-]?id|client[_-]?data[_-]?json|authenticator[_-]?data|user[_-]?handle|two[_-]?factor[_-]?secret";
|
|
236
|
+
"password|passwd|passphrase|secret|token|credential|credentials|authorization|cookie|api[_-]?key|private[_-]?key|access[_-]?key|assertion|attestation|signature|raw[_-]?id|client[_-]?data[_-]?json|authenticator[_-]?data|user[_-]?handle|two[_-]?factor[_-]?secret|code[_-]?verifier";
|
|
236
237
|
|
|
237
238
|
// Bounded, so a long non-matching run cannot blow up on backtracking.
|
|
238
239
|
const KEY_PREFIX: string = "[A-Za-z0-9_.-]{0,40}";
|
|
@@ -673,7 +673,7 @@ export default class MonitorAlert {
|
|
|
673
673
|
/*
|
|
674
674
|
* Attach every resource this series identifies — host, docker
|
|
675
675
|
* host, podman host, k8s cluster, service, and the Proxmox /
|
|
676
|
-
* Ceph / Swarm / IoT clusters — resolved from the shared label
|
|
676
|
+
* VMware vCenter / Ceph / Swarm / IoT clusters — resolved from the shared label
|
|
677
677
|
* key map. Same call the incident path makes, so the two can't
|
|
678
678
|
* drift apart again.
|
|
679
679
|
*/
|