@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
|
@@ -7,6 +7,7 @@ import KubernetesCluster from "../../../Models/DatabaseModels/KubernetesCluster"
|
|
|
7
7
|
import PodmanHost from "../../../Models/DatabaseModels/PodmanHost";
|
|
8
8
|
import ProxmoxCluster from "../../../Models/DatabaseModels/ProxmoxCluster";
|
|
9
9
|
import Service from "../../../Models/DatabaseModels/Service";
|
|
10
|
+
import VMwareVCenter from "../../../Models/DatabaseModels/VMwareVCenter";
|
|
10
11
|
import Includes from "../../../Types/BaseDatabase/Includes";
|
|
11
12
|
import { LIMIT_PER_PROJECT } from "../../../Types/Database/LimitMax";
|
|
12
13
|
import { JSONObject } from "../../../Types/JSON";
|
|
@@ -21,6 +22,7 @@ import KubernetesClusterService from "../../Services/KubernetesClusterService";
|
|
|
21
22
|
import PodmanHostService from "../../Services/PodmanHostService";
|
|
22
23
|
import ProxmoxClusterService from "../../Services/ProxmoxClusterService";
|
|
23
24
|
import ServiceService from "../../Services/ServiceService";
|
|
25
|
+
import VMwareVCenterService from "../../Services/VMwareVCenterService";
|
|
24
26
|
import QueryHelper from "../../Types/Database/QueryHelper";
|
|
25
27
|
import SeriesResourceLabels, {
|
|
26
28
|
SeriesResourceRefs,
|
|
@@ -63,6 +65,7 @@ export interface SeriesLinkableModel {
|
|
|
63
65
|
kubernetesClusters?: Array<KubernetesCluster> | undefined;
|
|
64
66
|
services?: Array<Service> | undefined;
|
|
65
67
|
proxmoxClusters?: Array<ProxmoxCluster> | undefined;
|
|
68
|
+
vmwareVCenters?: Array<VMwareVCenter> | undefined;
|
|
66
69
|
cephClusters?: Array<CephCluster> | undefined;
|
|
67
70
|
dockerSwarmClusters?: Array<DockerSwarmCluster> | undefined;
|
|
68
71
|
iotFleets?: Array<IoTFleet> | undefined;
|
|
@@ -79,6 +82,7 @@ export interface SeriesResolvedResourceIds {
|
|
|
79
82
|
kubernetesClusterIds: Array<string>;
|
|
80
83
|
serviceIds: Array<string>;
|
|
81
84
|
proxmoxClusterIds: Array<string>;
|
|
85
|
+
vmwareVCenterIds: Array<string>;
|
|
82
86
|
cephClusterIds: Array<string>;
|
|
83
87
|
dockerSwarmClusterIds: Array<string>;
|
|
84
88
|
iotFleetIds: Array<string>;
|
|
@@ -151,7 +155,7 @@ export default class SeriesResourceLinker {
|
|
|
151
155
|
/*
|
|
152
156
|
* The one place that turns identifiers into database ids, shared by
|
|
153
157
|
* the series-label path and the monitor-step-config path
|
|
154
|
-
* (MonitorStepResourceIdentity). Keeping the
|
|
158
|
+
* (MonitorStepResourceIdentity). Keeping the ten-way lookup table,
|
|
155
159
|
* the project scoping and the `Includes` batching in a single
|
|
156
160
|
* function is what stops the two paths from resolving the same
|
|
157
161
|
* identifier to different rows.
|
|
@@ -164,9 +168,10 @@ export default class SeriesResourceLinker {
|
|
|
164
168
|
const refs: SeriesResourceRefs = input.refs;
|
|
165
169
|
|
|
166
170
|
/*
|
|
167
|
-
* Proxmox / Ceph / Docker Swarm / IoT carry no
|
|
168
|
-
* stamp at ingest — they are addressable by name
|
|
169
|
-
* `ids` lists are empty by construction, not by
|
|
171
|
+
* Proxmox / VMware / Ceph / Docker Swarm / IoT carry no
|
|
172
|
+
* `oneuptime.*.id` stamp at ingest — they are addressable by name
|
|
173
|
+
* only — so their `ids` lists are empty by construction, not by
|
|
174
|
+
* omission.
|
|
170
175
|
*/
|
|
171
176
|
const specs: Array<ResourceResolutionSpec> = [
|
|
172
177
|
{
|
|
@@ -205,6 +210,12 @@ export default class SeriesResourceLinker {
|
|
|
205
210
|
nameColumn: "name",
|
|
206
211
|
findBy: ProxmoxClusterService.findBy.bind(ProxmoxClusterService),
|
|
207
212
|
},
|
|
213
|
+
{
|
|
214
|
+
ids: [],
|
|
215
|
+
names: refs.vmwareVCenterNames,
|
|
216
|
+
nameColumn: "name",
|
|
217
|
+
findBy: VMwareVCenterService.findBy.bind(VMwareVCenterService),
|
|
218
|
+
},
|
|
208
219
|
{
|
|
209
220
|
ids: [],
|
|
210
221
|
names: refs.cephClusterNames,
|
|
@@ -234,6 +245,7 @@ export default class SeriesResourceLinker {
|
|
|
234
245
|
kubernetesClusterIds,
|
|
235
246
|
serviceIds,
|
|
236
247
|
proxmoxClusterIds,
|
|
248
|
+
vmwareVCenterIds,
|
|
237
249
|
cephClusterIds,
|
|
238
250
|
dockerSwarmClusterIds,
|
|
239
251
|
iotFleetIds,
|
|
@@ -257,6 +269,7 @@ export default class SeriesResourceLinker {
|
|
|
257
269
|
kubernetesClusterIds: kubernetesClusterIds || [],
|
|
258
270
|
serviceIds: serviceIds || [],
|
|
259
271
|
proxmoxClusterIds: proxmoxClusterIds || [],
|
|
272
|
+
vmwareVCenterIds: vmwareVCenterIds || [],
|
|
260
273
|
cephClusterIds: cephClusterIds || [],
|
|
261
274
|
dockerSwarmClusterIds: dockerSwarmClusterIds || [],
|
|
262
275
|
iotFleetIds: iotFleetIds || [],
|
|
@@ -385,6 +398,16 @@ export default class SeriesResourceLinker {
|
|
|
385
398
|
);
|
|
386
399
|
}
|
|
387
400
|
|
|
401
|
+
if (resolved.vmwareVCenterIds.length > 0) {
|
|
402
|
+
model.vmwareVCenters = this.mergeById(
|
|
403
|
+
model.vmwareVCenters,
|
|
404
|
+
resolved.vmwareVCenterIds,
|
|
405
|
+
(): VMwareVCenter => {
|
|
406
|
+
return new VMwareVCenter();
|
|
407
|
+
},
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
|
|
388
411
|
if (resolved.cephClusterIds.length > 0) {
|
|
389
412
|
model.cephClusters = this.mergeById(
|
|
390
413
|
model.cephClusters,
|
|
@@ -452,7 +475,7 @@ export default class SeriesResourceLinker {
|
|
|
452
475
|
/*
|
|
453
476
|
* Turn one resource type's ids and names into deduped database ids.
|
|
454
477
|
* Costs zero round-trips when the series carries neither, which is the
|
|
455
|
-
* common case for most of the
|
|
478
|
+
* common case for most of the ten types on any given series.
|
|
456
479
|
*
|
|
457
480
|
* `nameMatch: "exact"` is for series labels. Every identifier column
|
|
458
481
|
* read here is written by ingest from the same attribute the series
|
|
@@ -5,13 +5,13 @@ import UserService from "../../Services/UserService";
|
|
|
5
5
|
/*
|
|
6
6
|
* Shared formatting for the infrastructure and catalog resource feeds
|
|
7
7
|
* (Kubernetes clusters, Docker / Podman hosts, Docker Swarm / Proxmox / Ceph
|
|
8
|
-
* clusters, servers, cloud resources and catalog services).
|
|
8
|
+
* clusters, VMware vCenters, servers, cloud resources and catalog services).
|
|
9
9
|
*
|
|
10
10
|
* These resources come into existence two very different ways - somebody adds
|
|
11
11
|
* one by hand, or ingest registers one the first moment telemetry mentions it -
|
|
12
12
|
* and the overview page cannot tell you which happened. That is exactly the
|
|
13
13
|
* question the feed exists to answer, so the wording for it lives here once
|
|
14
|
-
* rather than
|
|
14
|
+
* rather than ten times over.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
/*
|
|
@@ -20,7 +20,7 @@ import UserService from "../../Services/UserService";
|
|
|
20
20
|
* Deliberately a whitelist. Every one of these resources is written on each
|
|
21
21
|
* heartbeat (lastSeenAt, otelCollectorStatus, agentVersion, and the rollup
|
|
22
22
|
* counters like nodeCount / containersRunning), so a blacklist would let the
|
|
23
|
-
* next counter column added to any of the
|
|
23
|
+
* next counter column added to any of the ten models silently start posting
|
|
24
24
|
* a feed item every 60 seconds per resource.
|
|
25
25
|
*/
|
|
26
26
|
export const MEANINGFUL_UPDATE_COLUMNS: Array<string> = [
|
|
@@ -27,10 +27,9 @@ import logger from "../Logger";
|
|
|
27
27
|
* explain the outage are precisely the ones the outage prevented from
|
|
28
28
|
* being written, so the failure is completely silent.
|
|
29
29
|
*
|
|
30
|
-
*
|
|
31
|
-
* column
|
|
32
|
-
*
|
|
33
|
-
* item.
|
|
30
|
+
* Messages are bounded by default; callers storing full diagnostics in a
|
|
31
|
+
* text column can explicitly disable truncation. The guarded write logs
|
|
32
|
+
* and swallows persistence failures so the loop advances to the next item.
|
|
34
33
|
*/
|
|
35
34
|
|
|
36
35
|
export const MAX_CONNECTOR_ERROR_MESSAGE_LENGTH: number = 1000;
|
|
@@ -52,11 +51,14 @@ const UNKNOWN_ERROR_MESSAGE: string = "Unknown error.";
|
|
|
52
51
|
|
|
53
52
|
export default class ConnectorErrorMessage {
|
|
54
53
|
/*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
54
|
+
* Errors contribute their .message; everything else is stringified.
|
|
55
|
+
* Truncation is the default for existing callers. Disable it only when
|
|
56
|
+
* the destination supports a complete error message.
|
|
58
57
|
*/
|
|
59
|
-
public static toMessage(
|
|
58
|
+
public static toMessage(
|
|
59
|
+
error: unknown,
|
|
60
|
+
options: { truncate?: boolean | undefined } = {},
|
|
61
|
+
): string {
|
|
60
62
|
let message: string = "";
|
|
61
63
|
|
|
62
64
|
if (error instanceof Error) {
|
|
@@ -71,7 +73,10 @@ export default class ConnectorErrorMessage {
|
|
|
71
73
|
return UNKNOWN_ERROR_MESSAGE;
|
|
72
74
|
}
|
|
73
75
|
|
|
74
|
-
if (
|
|
76
|
+
if (
|
|
77
|
+
options.truncate === false ||
|
|
78
|
+
message.length <= MAX_CONNECTOR_ERROR_MESSAGE_LENGTH
|
|
79
|
+
) {
|
|
75
80
|
return message;
|
|
76
81
|
}
|
|
77
82
|
|
|
@@ -4,6 +4,7 @@ import BadDataException from "../../../../Types/Exception/BadDataException";
|
|
|
4
4
|
import APIException from "../../../../Types/Exception/ApiException";
|
|
5
5
|
import { JSONArray, JSONObject, JSONValue } from "../../../../Types/JSON";
|
|
6
6
|
import logger from "../../Logger";
|
|
7
|
+
import { redactLogString, redactLogValue } from "../../LogRedaction";
|
|
7
8
|
|
|
8
9
|
/*
|
|
9
10
|
* Minimal Google SecOps (Chronicle) API client for the detections poller.
|
|
@@ -92,14 +93,6 @@ const DEFAULT_MAX_ALERTS: number = 1000;
|
|
|
92
93
|
const REQUEST_TIMEOUT_IN_SECONDS: number = 60;
|
|
93
94
|
const REQUEST_TIMEOUT_IN_MS: number = REQUEST_TIMEOUT_IN_SECONDS * 1000;
|
|
94
95
|
|
|
95
|
-
/*
|
|
96
|
-
* How much of a body any diagnostic echoes. One bound for every echo site,
|
|
97
|
-
* because the integration doc and the connections page both quote a single
|
|
98
|
-
* figure — a second bound would make one of them wrong without anything
|
|
99
|
-
* saying so.
|
|
100
|
-
*/
|
|
101
|
-
const BODY_ECHO_LIMIT: number = 500;
|
|
102
|
-
|
|
103
96
|
/*
|
|
104
97
|
* The 22 documented {region}-chronicle.googleapis.com prefixes. An
|
|
105
98
|
* allowlist rather than a shape regex because *.googleapis.com is a DNS
|
|
@@ -141,8 +134,8 @@ const SUPPORTED_REGIONS: Array<string> = [
|
|
|
141
134
|
const EU_REGION_ALIASES: Array<string> = ["eu", "europe"];
|
|
142
135
|
|
|
143
136
|
/*
|
|
144
|
-
* The token endpoint is customer-supplied, and
|
|
145
|
-
*
|
|
137
|
+
* The token endpoint is customer-supplied, and its error response is
|
|
138
|
+
* echoed into lastError with credentials redacted and rendered in the
|
|
146
139
|
* dashboard — a blind SSRF plus a read-back channel. Region and instance
|
|
147
140
|
* were always guarded; this one was not, which reads as an oversight
|
|
148
141
|
* rather than a decision.
|
|
@@ -171,21 +164,6 @@ const UNKNOWN_FIELD_PATTERN: RegExp =
|
|
|
171
164
|
/cannot bind query parameter|unknown name/i;
|
|
172
165
|
const MISSING_FIELD_PATTERN: RegExp = /required|missing/i;
|
|
173
166
|
|
|
174
|
-
/*
|
|
175
|
-
* The doc marks snapshotQuery `Required.`, but that is a field_behavior
|
|
176
|
-
* annotation the HTTP transcoder does not enforce; this service validates
|
|
177
|
-
* queries in-band (validSnapshotQuery / queryValidationErrors) rather than
|
|
178
|
-
* rejecting them. Fortinet's shipping connector omits it and gets 200, and
|
|
179
|
-
* the doc defines empty-snapshot-query semantics as "match all baseline".
|
|
180
|
-
* NOT verified against a live tenant.
|
|
181
|
-
*
|
|
182
|
-
* Deliberately NOT Google's SDK default `feedback_summary.status != "CLOSED"`
|
|
183
|
-
* — that drops every CLOSED alert, trading a loud 400 for silent data loss.
|
|
184
|
-
* If it turns out to be enforced, the 400 will name the missing field and
|
|
185
|
-
* this is the one line to change.
|
|
186
|
-
*/
|
|
187
|
-
const SNAPSHOT_QUERY: string | null = null;
|
|
188
|
-
|
|
189
167
|
/*
|
|
190
168
|
* Every field a FetchAlertsViewResponse chunk may carry. A body in which no
|
|
191
169
|
* element carries at least one of these is not this endpoint's response,
|
|
@@ -249,6 +227,10 @@ export default class GoogleSecOpsClient {
|
|
|
249
227
|
}
|
|
250
228
|
}
|
|
251
229
|
|
|
230
|
+
public async testAuthentication(): Promise<void> {
|
|
231
|
+
await this.getAccessToken();
|
|
232
|
+
}
|
|
233
|
+
|
|
252
234
|
public static validateInstanceResourceName(name: string): void {
|
|
253
235
|
if (!INSTANCE_REGEX.test(name || "")) {
|
|
254
236
|
throw new BadDataException(
|
|
@@ -361,7 +343,7 @@ export default class GoogleSecOpsClient {
|
|
|
361
343
|
|
|
362
344
|
if (!response.ok) {
|
|
363
345
|
throw new APIException(
|
|
364
|
-
`Google token exchange failed (HTTP ${response.status}): ${
|
|
346
|
+
`Google token exchange failed (HTTP ${response.status}): ${GoogleSecOpsClient.redactErrorBody(responseText)}`,
|
|
365
347
|
);
|
|
366
348
|
}
|
|
367
349
|
|
|
@@ -409,32 +391,28 @@ export default class GoogleSecOpsClient {
|
|
|
409
391
|
startTime: Date;
|
|
410
392
|
endTime: Date;
|
|
411
393
|
maxAlerts?: number | undefined;
|
|
394
|
+
includeNonAlertingDetections?: boolean | undefined;
|
|
412
395
|
}): Promise<FetchAlertsResult> {
|
|
413
396
|
let accessToken: string = await this.getAccessToken();
|
|
414
397
|
|
|
415
398
|
const maxReturnedAlerts: number = data.maxAlerts || DEFAULT_MAX_ALERTS;
|
|
416
399
|
|
|
417
400
|
/*
|
|
418
|
-
*
|
|
419
|
-
*
|
|
420
|
-
*
|
|
421
|
-
* google.
|
|
422
|
-
* shipping clients (Google's own secops-wrapper SDK and Fortinet's
|
|
423
|
-
* certified FortiSOAR connector), not verified verbatim in the docs.
|
|
424
|
-
* It is safe to send anyway because the parameter is optional and the
|
|
425
|
-
* failure mode is loud: a wrong name 400s with `Unknown name`, exactly
|
|
426
|
-
* like the `pageSize` this replaced, and never fails silently.
|
|
401
|
+
* Google requires snapshotQuery and documents its empty value as
|
|
402
|
+
* matching the entire baseline. Send it explicitly, including CLOSED
|
|
403
|
+
* alerts, with the nested count option this streaming endpoint accepts.
|
|
404
|
+
* https://cloud.google.com/chronicle/docs/reference/rest/v1alpha/projects.locations.instances.legacy/legacyFetchAlertsView
|
|
427
405
|
*/
|
|
428
406
|
const params: URLSearchParams = new URLSearchParams({
|
|
429
407
|
"timeRange.startTime": data.startTime.toISOString(),
|
|
430
408
|
"timeRange.endTime": data.endTime.toISOString(),
|
|
409
|
+
snapshotQuery: "",
|
|
431
410
|
"alertListOptions.maxReturnedAlerts": String(maxReturnedAlerts),
|
|
411
|
+
includeNonAlertingDetections: data.includeNonAlertingDetections
|
|
412
|
+
? "ALERTS_FEATURE_PREFERENCE_ENABLED"
|
|
413
|
+
: "ALERTS_FEATURE_PREFERENCE_DISABLED",
|
|
432
414
|
});
|
|
433
415
|
|
|
434
|
-
if (SNAPSHOT_QUERY) {
|
|
435
|
-
params.set("snapshotQuery", SNAPSHOT_QUERY);
|
|
436
|
-
}
|
|
437
|
-
|
|
438
416
|
const url: string = `${this.getApiBaseUrl()}/legacy:legacyFetchAlertsView?${params.toString()}`;
|
|
439
417
|
|
|
440
418
|
let response: FetchResponseLike = await this.requestAlerts(
|
|
@@ -459,7 +437,7 @@ export default class GoogleSecOpsClient {
|
|
|
459
437
|
|
|
460
438
|
if (!response.ok) {
|
|
461
439
|
throw new APIException(
|
|
462
|
-
`Google SecOps alerts fetch failed (HTTP ${response.status}): ${
|
|
440
|
+
`Google SecOps alerts fetch failed (HTTP ${response.status}): ${GoogleSecOpsClient.redactErrorBody(responseText)}` +
|
|
463
441
|
GoogleSecOpsClient.describeHttpFailure(response.status, responseText),
|
|
464
442
|
);
|
|
465
443
|
}
|
|
@@ -550,15 +528,45 @@ export default class GoogleSecOpsClient {
|
|
|
550
528
|
stepLabel: string,
|
|
551
529
|
): Promise<FetchResponseLike> {
|
|
552
530
|
const controller: AbortController = new AbortController();
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
531
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
532
|
+
const timeout: Promise<never> = new Promise(
|
|
533
|
+
(
|
|
534
|
+
_resolve: (value: never | PromiseLike<never>) => void,
|
|
535
|
+
reject: (reason?: unknown) => void,
|
|
536
|
+
): void => {
|
|
537
|
+
timer = setTimeout((): void => {
|
|
538
|
+
controller.abort();
|
|
539
|
+
reject(
|
|
540
|
+
new APIException(
|
|
541
|
+
`Google SecOps ${stepLabel} timed out after ${REQUEST_TIMEOUT_IN_SECONDS} seconds with no response.`,
|
|
542
|
+
),
|
|
543
|
+
);
|
|
544
|
+
}, REQUEST_TIMEOUT_IN_MS);
|
|
545
|
+
},
|
|
546
|
+
);
|
|
556
547
|
|
|
557
548
|
try {
|
|
558
|
-
return await
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
549
|
+
return await Promise.race([
|
|
550
|
+
(async (): Promise<FetchResponseLike> => {
|
|
551
|
+
const response: FetchResponseLike = await this.fetchImplementation(
|
|
552
|
+
url,
|
|
553
|
+
{
|
|
554
|
+
...init,
|
|
555
|
+
signal: controller.signal,
|
|
556
|
+
},
|
|
557
|
+
);
|
|
558
|
+
// The deadline covers the streamed body as well as response headers.
|
|
559
|
+
const responseText: string = await response.text();
|
|
560
|
+
return {
|
|
561
|
+
ok: response.ok,
|
|
562
|
+
status: response.status,
|
|
563
|
+
text: async (): Promise<string> => {
|
|
564
|
+
return responseText;
|
|
565
|
+
},
|
|
566
|
+
};
|
|
567
|
+
})(),
|
|
568
|
+
timeout,
|
|
569
|
+
]);
|
|
562
570
|
} catch (error) {
|
|
563
571
|
if (controller.signal.aborted) {
|
|
564
572
|
throw new APIException(
|
|
@@ -720,21 +728,45 @@ export default class GoogleSecOpsClient {
|
|
|
720
728
|
GoogleSecOpsClient.readLastBoolean(chunks, "complete") === true;
|
|
721
729
|
const progress: number =
|
|
722
730
|
GoogleSecOpsClient.readLastNumber(chunks, "progress") ?? 0;
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
731
|
+
let truncatedByCount: boolean = chunks.some(
|
|
732
|
+
(chunk: JSONObject): boolean => {
|
|
733
|
+
return chunk["tooManyAlerts"] === true;
|
|
734
|
+
},
|
|
735
|
+
);
|
|
736
|
+
const truncatedByBytes: boolean = chunks.some(
|
|
737
|
+
(chunk: JSONObject): boolean => {
|
|
738
|
+
return chunk["memoryLimitExceeded"] === true;
|
|
739
|
+
},
|
|
740
|
+
);
|
|
728
741
|
const baselineAlertsCount: number =
|
|
729
742
|
GoogleSecOpsClient.readLastNumber(chunks, "baselineAlertsCount") ?? 0;
|
|
730
743
|
const filteredAlertsCount: number =
|
|
731
744
|
GoogleSecOpsClient.readLastNumber(chunks, "filteredAlertsCount") ?? 0;
|
|
732
745
|
|
|
746
|
+
/*
|
|
747
|
+
* Google's list ceiling can truncate the list without tooManyAlerts.
|
|
748
|
+
* snapshotQuery is empty, so every baseline match belongs in this result.
|
|
749
|
+
*/
|
|
750
|
+
truncatedByCount =
|
|
751
|
+
truncatedByCount ||
|
|
752
|
+
Math.max(filteredAlertsCount, baselineAlertsCount) > alerts.length ||
|
|
753
|
+
(alerts.length >= maxReturnedAlerts &&
|
|
754
|
+
!chunks.some((chunk: JSONObject): boolean => {
|
|
755
|
+
return (
|
|
756
|
+
chunk["filteredAlertsCount"] !== undefined ||
|
|
757
|
+
chunk["baselineAlertsCount"] !== undefined
|
|
758
|
+
);
|
|
759
|
+
}));
|
|
760
|
+
|
|
733
761
|
GoogleSecOpsClient.throwOnInBandValidationErrors(chunks);
|
|
734
762
|
|
|
735
763
|
if (truncatedByCount) {
|
|
736
764
|
logger.warn(
|
|
737
|
-
|
|
765
|
+
chunks.some((chunk: JSONObject): boolean => {
|
|
766
|
+
return chunk["tooManyAlerts"] === true;
|
|
767
|
+
})
|
|
768
|
+
? "GoogleSecOpsClient: Chronicle set tooManyAlerts — the window matched more alerts than it will return, and this endpoint has no pagination. Narrow the poll window."
|
|
769
|
+
: "GoogleSecOpsClient: the returned alert list is smaller than its matched count or reached its ceiling without a total. This endpoint has no pagination. Narrow the poll window.",
|
|
738
770
|
);
|
|
739
771
|
}
|
|
740
772
|
|
|
@@ -833,7 +865,7 @@ export default class GoogleSecOpsClient {
|
|
|
833
865
|
}
|
|
834
866
|
|
|
835
867
|
throw new APIException(
|
|
836
|
-
`Google SecOps alerts fetch returned an unexpected response root: ${
|
|
868
|
+
`Google SecOps alerts fetch returned an unexpected response root: ${GoogleSecOpsClient.redactErrorBody(text)}`,
|
|
837
869
|
);
|
|
838
870
|
}
|
|
839
871
|
|
|
@@ -863,7 +895,7 @@ export default class GoogleSecOpsClient {
|
|
|
863
895
|
|
|
864
896
|
if (recognized.length === 0) {
|
|
865
897
|
throw new APIException(
|
|
866
|
-
`Google SecOps alerts fetch returned an unrecognized response shape: ${
|
|
898
|
+
`Google SecOps alerts fetch returned an unrecognized response shape: ${GoogleSecOpsClient.redactErrorBody(text)}`,
|
|
867
899
|
);
|
|
868
900
|
}
|
|
869
901
|
}
|
|
@@ -1034,7 +1066,7 @@ export default class GoogleSecOpsClient {
|
|
|
1034
1066
|
}
|
|
1035
1067
|
|
|
1036
1068
|
throw new APIException(
|
|
1037
|
-
`Google SecOps alerts query was rejected by Chronicle on an HTTP 200: ${reasons.join("; ")
|
|
1069
|
+
`Google SecOps alerts query was rejected by Chronicle on an HTTP 200: ${redactLogString(reasons.join("; "))}`,
|
|
1038
1070
|
);
|
|
1039
1071
|
}
|
|
1040
1072
|
|
|
@@ -1082,11 +1114,16 @@ export default class GoogleSecOpsClient {
|
|
|
1082
1114
|
const value: JSONValue | undefined = entry[key];
|
|
1083
1115
|
|
|
1084
1116
|
if (typeof value === "string" && value) {
|
|
1085
|
-
|
|
1117
|
+
const details: JSONObject = { ...entry };
|
|
1118
|
+
delete details[key];
|
|
1119
|
+
|
|
1120
|
+
return Object.keys(details).length > 0
|
|
1121
|
+
? `${value}; ${JSON.stringify(redactLogValue(details))}`
|
|
1122
|
+
: value;
|
|
1086
1123
|
}
|
|
1087
1124
|
}
|
|
1088
1125
|
|
|
1089
|
-
return JSON.stringify(entry);
|
|
1126
|
+
return JSON.stringify(redactLogValue(entry));
|
|
1090
1127
|
}
|
|
1091
1128
|
|
|
1092
1129
|
return String(entry);
|
|
@@ -1094,7 +1131,7 @@ export default class GoogleSecOpsClient {
|
|
|
1094
1131
|
|
|
1095
1132
|
/*
|
|
1096
1133
|
* Actionable operator guidance appended behind the echoed body. The
|
|
1097
|
-
* prefix, the status and the body
|
|
1134
|
+
* prefix, the status and the diagnostic body ahead of it are the contract the
|
|
1098
1135
|
* integration doc and the in-product help are written against, so this
|
|
1099
1136
|
* only ever adds to the tail.
|
|
1100
1137
|
*/
|
|
@@ -1102,19 +1139,17 @@ export default class GoogleSecOpsClient {
|
|
|
1102
1139
|
const error: JSONObject | null =
|
|
1103
1140
|
GoogleSecOpsClient.findErrorObject(bodyText);
|
|
1104
1141
|
const reason: string = GoogleSecOpsClient.errorInfoReason(error);
|
|
1105
|
-
const message: string = error
|
|
1106
|
-
? String(error["message"] || "")
|
|
1107
|
-
: bodyText.slice(0, BODY_ECHO_LIMIT);
|
|
1142
|
+
const message: string = error ? String(error["message"] || "") : bodyText;
|
|
1108
1143
|
|
|
1109
1144
|
const hint: string = reason
|
|
1110
1145
|
? GoogleSecOpsClient.hintForReason(reason, error)
|
|
1111
|
-
: GoogleSecOpsClient.hintForStatus(status, message
|
|
1146
|
+
: GoogleSecOpsClient.hintForStatus(status, message);
|
|
1112
1147
|
|
|
1113
1148
|
if (!hint) {
|
|
1114
1149
|
return "";
|
|
1115
1150
|
}
|
|
1116
1151
|
|
|
1117
|
-
return ` — ${hint}`;
|
|
1152
|
+
return ` — ${redactLogString(hint)}`;
|
|
1118
1153
|
}
|
|
1119
1154
|
|
|
1120
1155
|
private static hintForReason(
|
|
@@ -1159,17 +1194,11 @@ export default class GoogleSecOpsClient {
|
|
|
1159
1194
|
return `Google reported ${reason}.`;
|
|
1160
1195
|
}
|
|
1161
1196
|
|
|
1162
|
-
private static hintForStatus(
|
|
1163
|
-
status: number,
|
|
1164
|
-
message: string,
|
|
1165
|
-
error: JSONObject | null,
|
|
1166
|
-
): string {
|
|
1197
|
+
private static hintForStatus(status: number, message: string): string {
|
|
1167
1198
|
if (status === 400) {
|
|
1168
1199
|
/*
|
|
1169
|
-
*
|
|
1170
|
-
*
|
|
1171
|
-
* which means OneUptime's request shape is wrong, never the
|
|
1172
|
-
* customer's credentials.
|
|
1200
|
+
* Specific field errors identify a request-contract problem. A
|
|
1201
|
+
* generic INVALID_ARGUMENT does not identify the failing argument.
|
|
1173
1202
|
*/
|
|
1174
1203
|
if (UNKNOWN_FIELD_PATTERN.test(message)) {
|
|
1175
1204
|
return "OneUptime sent a query parameter this endpoint does not accept. This is a OneUptime bug, not a credential or permission problem.";
|
|
@@ -1179,11 +1208,7 @@ export default class GoogleSecOpsClient {
|
|
|
1179
1208
|
return "Chronicle rejected the request for a missing required field. This is a OneUptime bug, not a credential or permission problem.";
|
|
1180
1209
|
}
|
|
1181
1210
|
|
|
1182
|
-
|
|
1183
|
-
return "Chronicle rejected the request shape before it reached the service. This is a OneUptime bug, not a credential or permission problem.";
|
|
1184
|
-
}
|
|
1185
|
-
|
|
1186
|
-
return "";
|
|
1211
|
+
return "Chronicle rejected an argument without identifying which one. Verify the instance resource name and region in Google SecOps, and confirm the running OneUptime image includes the latest connector fixes.";
|
|
1187
1212
|
}
|
|
1188
1213
|
|
|
1189
1214
|
if (status === 401) {
|
|
@@ -1294,13 +1319,20 @@ export default class GoogleSecOpsClient {
|
|
|
1294
1319
|
}
|
|
1295
1320
|
|
|
1296
1321
|
private static summarizeErrorObject(error: JSONObject): string {
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
const message: string = String(error["message"] || "");
|
|
1322
|
+
return JSON.stringify(redactLogValue(error));
|
|
1323
|
+
}
|
|
1300
1324
|
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1325
|
+
private static redactErrorBody(body: string): string {
|
|
1326
|
+
try {
|
|
1327
|
+
/*
|
|
1328
|
+
* Decode the outer JSON before redacting its string values. A message
|
|
1329
|
+
* can itself contain credential JSON; its escaped key quotes otherwise
|
|
1330
|
+
* bypass the textual redactor, even when it runs again in the poller.
|
|
1331
|
+
*/
|
|
1332
|
+
return JSON.stringify(redactLogValue(JSON.parse(body) as JSONValue));
|
|
1333
|
+
} catch {
|
|
1334
|
+
return redactLogString(body);
|
|
1335
|
+
}
|
|
1304
1336
|
}
|
|
1305
1337
|
|
|
1306
1338
|
private static isJsonObject(
|