@oneuptime/common 13.0.4 → 13.0.5
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/Index.ts +4 -0
- package/Models/DatabaseModels/RumApplication.ts +1 -1
- package/Models/DatabaseModels/SecurityEventConnection.ts +457 -0
- package/Models/DatabaseModels/SecurityEventConnectionRun.ts +263 -0
- package/Models/DatabaseModels/TelemetryIngestionKey.ts +2 -2
- package/Server/API/AIInvestigationAPI.ts +484 -24
- package/Server/API/GoogleSecOpsConnectionAPI.ts +249 -8
- package/Server/API/SecurityEventConnectionAPI.ts +250 -0
- package/Server/API/TelemetryAPI.ts +402 -265
- package/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.ts +99 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
- package/Server/Middleware/TelemetryIngest.ts +101 -6
- package/Server/Services/ExceptionAggregationService.ts +7 -16
- package/Server/Services/GoogleSecOpsConnectionService.ts +15 -0
- package/Server/Services/Index.ts +4 -0
- package/Server/Services/InventoryItemService.ts +28 -0
- package/Server/Services/LogAggregationService.ts +17 -23
- package/Server/Services/MetricAggregationService.ts +4 -14
- package/Server/Services/SecurityEventConnectionRunService.ts +10 -0
- package/Server/Services/SecurityEventConnectionService.ts +538 -0
- package/Server/Services/TraceAggregationService.ts +77 -28
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
- package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +13 -1
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +15 -1
- package/Server/Utils/AI/SRE/InvestigationEvidence.ts +658 -0
- package/Server/Utils/AI/SRE/InvestigationReferences.ts +324 -0
- package/Server/Utils/AI/Toolbox/Index.ts +38 -0
- package/Server/Utils/AI/Toolbox/TimelineTools.ts +9 -2
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +80 -0
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +5 -3
- package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.ts +1108 -0
- package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.ts +732 -0
- package/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.ts +495 -0
- package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.ts +689 -0
- package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.ts +767 -0
- package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.ts +571 -0
- package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.ts +827 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.ts +610 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.ts +549 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.ts +830 -0
- package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.ts +684 -0
- package/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.ts +487 -0
- package/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.ts +778 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.ts +1002 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.ts +556 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.ts +275 -0
- package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.ts +53 -0
- package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.ts +709 -0
- package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.ts +596 -0
- package/Server/Utils/SecurityEvent/Connectors/Types.ts +191 -0
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +353 -65
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.ts +777 -0
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +747 -148
- package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +48 -2
- package/Server/Utils/SecurityEvent/SecurityEventDedupe.ts +81 -0
- package/Server/Utils/SessionReplay/SessionReplayReadService.ts +741 -40
- package/Server/Utils/StartServer.ts +10 -0
- package/Server/Utils/Telemetry/EntityRegistry.ts +8 -0
- package/Server/Utils/Telemetry/KubernetesResourceAttributes.ts +108 -0
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +174 -93
- package/Server/Utils/Telemetry/ResourceFacetPlanner.ts +251 -0
- package/Server/Utils/Telemetry/ResourceFacetResolver.ts +248 -413
- package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +668 -0
- package/Server/Utils/Telemetry/TraceContextPropagation.ts +348 -0
- package/Server/Utils/Telemetry.ts +18 -0
- package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +413 -0
- package/Tests/App/Dashboard/AIRootCauseFeedItem.test.tsx +285 -0
- package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +242 -0
- package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +601 -15
- package/Tests/App/Dashboard/ChangeAlertStateAIHeader.test.tsx +835 -0
- package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +41 -0
- package/Tests/App/Dashboard/ConnectionTestModal.test.tsx +604 -0
- package/Tests/App/Dashboard/ConnectorTestReportView.test.tsx +738 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +153 -6
- package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +165 -0
- package/Tests/App/Dashboard/EpisodeChangeState.test.tsx +1069 -0
- package/Tests/App/Dashboard/EpisodeMembersCard.test.tsx +772 -0
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +2354 -0
- package/Tests/App/Dashboard/EventOverviewSkeleton.test.tsx +210 -0
- package/Tests/App/Dashboard/EventStatBar.test.tsx +392 -0
- package/Tests/App/Dashboard/EventStatusPanel.test.tsx +247 -0
- package/Tests/App/Dashboard/ExceptionAIAssistance.test.tsx +606 -0
- package/Tests/App/Dashboard/ExceptionBreadcrumbTimeline.test.tsx +273 -0
- package/Tests/App/Dashboard/ExceptionDetailSideMenu.test.tsx +176 -0
- package/Tests/App/Dashboard/ExceptionOverviewCards.test.tsx +366 -0
- package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +371 -0
- package/Tests/App/Dashboard/ExceptionStackFrameViewer.test.tsx +440 -0
- package/Tests/App/Dashboard/ExceptionSummary.test.tsx +381 -0
- package/Tests/App/Dashboard/ExceptionTriage.test.tsx +306 -0
- package/Tests/App/Dashboard/ExceptionsResourceFacets.test.tsx +604 -0
- package/Tests/App/Dashboard/ExceptionsViewerEntityChips.test.tsx +706 -0
- package/Tests/App/Dashboard/FeedOrdering.test.ts +32 -0
- package/Tests/App/Dashboard/GoogleSecOpsConnectionForm.test.tsx +838 -0
- package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +18 -0
- package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +297 -20
- package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +618 -13
- package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +254 -207
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +303 -135
- package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +1251 -0
- package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +303 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +876 -8
- package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +35 -0
- package/Tests/App/Dashboard/InvestigationReferenceLink.test.tsx +177 -0
- package/Tests/App/Dashboard/InvestigationReportView.test.tsx +1295 -0
- package/Tests/App/Dashboard/KubernetesImageReferenceView.test.tsx +114 -0
- package/Tests/App/Dashboard/KubernetesLogsTabChips.test.tsx +285 -0
- package/Tests/App/Dashboard/LogsEntityChipNames.test.tsx +316 -0
- package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +361 -0
- package/Tests/App/Dashboard/ProfileTableEntityNames.test.tsx +432 -0
- package/Tests/App/Dashboard/ProfileViewEntityName.test.tsx +250 -0
- package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +10 -0
- package/Tests/App/Dashboard/ResourceLogsTabsBareLayout.test.tsx +700 -0
- package/Tests/App/Dashboard/ResourcePageEntityNameProps.test.tsx +803 -0
- package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +11 -1
- package/Tests/App/Dashboard/ScheduledMaintenanceChangeState.test.tsx +1026 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +436 -0
- package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +1195 -0
- package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +1022 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +905 -0
- package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +247 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +375 -274
- package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +410 -0
- package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +774 -0
- package/Tests/App/Dashboard/TopErrorsPanelResourceNames.test.tsx +316 -0
- package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +30 -0
- package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +88 -24
- package/Tests/App/Dashboard/TraceExplorer.test.tsx +1590 -0
- package/Tests/App/Dashboard/TraceWaterfall.test.tsx +488 -0
- package/Tests/App/Dashboard/TracesAnalyticsSeriesLabels.test.tsx +367 -0
- package/Tests/App/Dashboard/TracesEntityNames.test.tsx +585 -0
- package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +613 -0
- package/Tests/App/Dashboard/UseServiceNames.test.tsx +359 -0
- package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +7 -0
- package/Tests/Models/InventoryItemNaming.test.ts +132 -16
- package/Tests/Models/SecurityDomainAccessControl.test.ts +61 -17
- package/Tests/Server/API/AIInvestigationAPI.test.ts +611 -2
- package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +1098 -0
- package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +409 -0
- package/Tests/Server/API/SecurityEventConnectionAPI.test.ts +856 -0
- package/Tests/Server/API/SessionReplayAPI.test.ts +528 -1
- package/Tests/Server/API/TelemetryFacetsAPI.test.ts +810 -0
- package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +240 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +229 -0
- package/Tests/Server/Services/InventoryItemDisplayName.test.ts +66 -0
- package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
- package/Tests/Server/Services/SecurityEventConnectionService.test.ts +1233 -0
- package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +53 -0
- package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +218 -0
- package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +155 -1
- package/Tests/Server/Services/TraceAggregationExceptionScope.test.ts +142 -0
- package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +85 -24
- package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +33 -0
- package/Tests/Server/Utils/AI/InvestigationEvidence.test.ts +1395 -0
- package/Tests/Server/Utils/AI/InvestigationReferences.test.ts +616 -0
- package/Tests/Server/Utils/AI/TimelineTools.test.ts +119 -0
- package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +151 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +65 -0
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorExceptionScope.test.ts +224 -0
- package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +55 -2
- package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.test.ts +1240 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.test.ts +1853 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.test.ts +1129 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.test.ts +1066 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.test.ts +1568 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.test.ts +930 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.test.ts +1409 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.test.ts +763 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.test.ts +1296 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.test.ts +1102 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.test.ts +1174 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.test.ts +1032 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.test.ts +1558 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.test.ts +3041 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.test.ts +1168 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.test.ts +906 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.test.ts +1068 -0
- package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.test.ts +1004 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.test.ts +784 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +113 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +5 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +93 -13
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +23 -1
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +25 -3
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +22 -8
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +82 -16
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSearchDetections.test.ts +730 -0
- package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsThreePassPoller.test.ts +1577 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +41 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1453 -18
- package/Tests/Server/Utils/Telemetry/KubernetesResourceAttributes.test.ts +162 -0
- package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +460 -13
- package/Tests/Server/Utils/Telemetry/ResourceFacetPlanner.test.ts +678 -0
- package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +348 -2
- package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +525 -0
- package/Tests/Server/Utils/Telemetry/TraceContextPropagation.test.ts +420 -0
- package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +73 -0
- package/Tests/Types/Rum/SessionReplayTransportContracts.test.ts +95 -0
- package/Tests/Types/SecurityEvent/Connectors/ConnectorDiagnostics.test.ts +82 -0
- package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +314 -0
- package/Tests/Types/Telemetry/ExceptionSpanScope.test.ts +89 -0
- package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +96 -0
- package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +304 -0
- package/Tests/UI/Components/ActiveFilterChipsLockedFilters.test.tsx +357 -0
- package/Tests/UI/Components/Card.test.tsx +312 -1
- package/Tests/UI/Components/CardModelDetailHeaderLayout.test.tsx +253 -0
- package/Tests/UI/Components/CardModelDetailRefresher.test.tsx +342 -0
- package/Tests/UI/Components/Checkbox.test.tsx +79 -0
- package/Tests/UI/Components/CopyTextButton.test.tsx +142 -0
- package/Tests/UI/Components/DetailCompactStyle.test.tsx +621 -0
- package/Tests/UI/Components/ErrorBoundary.test.tsx +60 -0
- package/Tests/UI/Components/FacetSections.test.tsx +581 -0
- package/Tests/UI/Components/FacetSidebarControls.test.tsx +812 -0
- package/Tests/UI/Components/FacetVisibility.test.ts +429 -0
- package/Tests/UI/Components/LockedFilterActions.test.tsx +396 -0
- package/Tests/UI/Components/LockedFilterChip.test.tsx +651 -0
- package/Tests/UI/Components/LogsEntityNames.test.ts +1769 -0
- package/Tests/UI/Components/LogsEntityNamesComponents.test.tsx +696 -0
- package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +600 -0
- package/Tests/UI/Components/LogsViewerEntityNames.test.tsx +713 -0
- package/Tests/UI/Components/MarkdownInlineReferences.test.tsx +2079 -0
- package/Tests/UI/Components/MemberRoleAssignment.test.tsx +446 -0
- package/Tests/UI/Components/ModelDetailRefetch.test.tsx +397 -0
- package/Tests/UI/Components/ModelListRefetch.test.tsx +233 -0
- package/Tests/UI/Components/ModelPageModelChange.test.tsx +409 -0
- package/Tests/UI/Components/PaginationIntegration.test.tsx +25 -0
- package/Tests/UI/Components/ResourceFacetConfigs.test.ts +172 -0
- package/Tests/UI/Components/SavedViewsSidebarIntegration.test.tsx +32 -14
- package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +44 -1
- package/Tests/UI/Components/TelemetryActiveFilterChipsLockedFilters.test.tsx +304 -0
- package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +718 -0
- package/Tests/UI/Monitor/EvaluationLogList.test.tsx +303 -0
- package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +55 -1
- package/Tests/UI/Rum/FidelityNotices.test.ts +22 -0
- package/Tests/UI/Rum/RecordingHealthCard.test.tsx +120 -136
- package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +988 -0
- package/Tests/UI/Rum/ReplayCard.test.tsx +32 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +709 -12
- package/Tests/UI/Rum/ReplayHeader.test.tsx +50 -1
- package/Tests/UI/Rum/ReplayPinControl.test.tsx +67 -10
- package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +41 -12
- package/Tests/UI/Rum/ReplayStage.test.tsx +663 -1
- package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +173 -0
- package/Tests/UI/Rum/ReplayUi.test.tsx +189 -2
- package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +91 -0
- package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +1 -1
- package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +585 -0
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +844 -51
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +29 -1
- package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +288 -0
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +31 -1
- package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +6 -0
- package/Tests/UI/Utils/Clipboard.test.ts +154 -0
- package/Tests/UI/Utils/Navigation.test.ts +24 -0
- package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +2205 -0
- package/Tests/UI/Utils/Telemetry/UseTelemetryEntityNames.test.tsx +844 -0
- package/Tests/Utils/AI/InvestigationReport.test.ts +2430 -0
- package/Tests/Utils/APIOutgoingRequestTracer.test.ts +137 -0
- package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +40 -0
- package/Tests/Utils/Rum/SessionReplayRecordingEnded.test.ts +619 -0
- package/Tests/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.test.ts +631 -0
- package/Tests/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.test.ts +479 -0
- package/Tests/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.test.ts +507 -0
- package/Tests/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.test.ts +686 -0
- package/Tests/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.test.ts +474 -0
- package/Tests/Utils/SecurityEvent/Connectors/OktaNormalizer.test.ts +736 -0
- package/Tests/Utils/SecurityEvent/Connectors/SplunkNormalizer.test.ts +407 -0
- package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.test.ts +129 -0
- package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +57 -1
- package/Tests/Utils/Telemetry/EntityRelationship.test.ts +36 -0
- package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +600 -0
- package/Tests/Utils/Telemetry/NetworkHost.test.ts +48 -0
- package/Tests/Utils/Telemetry/OriginAllowList.test.ts +154 -0
- package/Tests/Utils/Traces/CriticalPath.test.ts +25 -0
- package/Types/AI/AIChatTypes.ts +8 -0
- package/Types/AI/InvestigationEvidence.ts +96 -0
- package/Types/Monitor/MonitorEvaluationSummary.ts +5 -0
- package/Types/Permission.ts +2 -2
- package/Types/Rum/SessionReplay.ts +109 -0
- package/Types/Rum/SessionReplayApi.ts +31 -0
- package/Types/SecurityEvent/Connectors/ConnectorDiagnostics.ts +111 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.ts +87 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +492 -0
- package/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.ts +41 -0
- package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -1
- package/Types/SecurityEvent/GoogleSecOpsRegion.ts +34 -0
- package/Types/Telemetry/EntityType.ts +14 -0
- package/Types/Telemetry/ExceptionSpanScope.ts +83 -0
- package/Types/Telemetry/LockedFilterDetail.ts +46 -0
- package/Types/Telemetry/ResourceEntityFacet.ts +17 -10
- package/Types/Telemetry/ResourceFacetCatalog.ts +171 -0
- package/UI/Components/Card/Card.tsx +118 -83
- package/UI/Components/Checkbox/Checkbox.tsx +8 -5
- package/UI/Components/CopyTextButton/CopyTextButton.tsx +7 -1
- package/UI/Components/CustomFields/CustomFieldsDetail.tsx +4 -1
- package/UI/Components/Detail/Detail.tsx +137 -22
- package/UI/Components/ErrorBoundary.tsx +38 -0
- package/UI/Components/LogsViewer/LogsEntityNames.ts +912 -0
- package/UI/Components/LogsViewer/LogsViewer.tsx +156 -77
- package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +28 -11
- package/UI/Components/LogsViewer/components/FacetSection.tsx +66 -79
- package/UI/Components/LogsViewer/components/FacetValueRow.tsx +17 -2
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +45 -5
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +100 -19
- package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +156 -39
- package/UI/Components/LogsViewer/components/LogsTable.tsx +30 -8
- package/UI/Components/LogsViewer/types.ts +6 -0
- package/UI/Components/Markdown.tsx/InlineReferences.tsx +628 -0
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +385 -312
- package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +50 -22
- package/UI/Components/ModelDetail/CardModelDetail.tsx +15 -0
- package/UI/Components/ModelDetail/ModelDetail.tsx +64 -19
- package/UI/Components/ModelList/ModelList.tsx +33 -8
- package/UI/Components/Page/ModelPage.tsx +119 -54
- package/UI/Components/Table/Table.tsx +8 -0
- package/UI/Components/Table/TableRow.tsx +13 -5
- package/UI/Components/TelemetryViewer/FacetVisibility.ts +229 -0
- package/UI/Components/TelemetryViewer/ResourceFacetConfigs.ts +46 -0
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +11 -0
- package/UI/Components/TelemetryViewer/components/FacetSearchInput.tsx +79 -0
- package/UI/Components/TelemetryViewer/components/FacetSectionHeader.tsx +69 -0
- package/UI/Components/TelemetryViewer/components/FacetShowMoreButton.tsx +36 -0
- package/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.tsx +88 -0
- package/UI/Components/TelemetryViewer/components/LockedFilterActions.tsx +205 -0
- package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +496 -0
- package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +30 -10
- package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +203 -10
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSection.tsx +60 -73
- package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +94 -7
- package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +17 -2
- package/UI/Components/TelemetryViewer/types.ts +19 -0
- package/UI/Components/TelemetryViewer/useFacetSearchExemptions.ts +158 -0
- package/UI/Components/TelemetryViewer/useFacetSectionSearch.ts +102 -0
- package/UI/Utils/Clipboard.ts +68 -2
- package/UI/Utils/Navigation.ts +17 -2
- package/UI/Utils/Telemetry/TelemetryEntityNames.ts +620 -0
- package/UI/Utils/Telemetry/UseTelemetryEntityNames.ts +151 -0
- package/Utils/AI/InvestigationReport.ts +1789 -0
- package/Utils/API.ts +90 -1
- package/Utils/Rum/SessionReplayHealth.ts +11 -0
- package/Utils/Rum/SessionReplayRecordingEnded.ts +134 -0
- package/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.ts +427 -0
- package/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.ts +197 -0
- package/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.ts +464 -0
- package/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.ts +567 -0
- package/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.ts +299 -0
- package/Utils/SecurityEvent/Connectors/OktaNormalizer.ts +467 -0
- package/Utils/SecurityEvent/Connectors/SplunkNormalizer.ts +439 -0
- package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +124 -12
- package/Utils/Telemetry/CrossSignalScope.ts +22 -8
- package/Utils/Telemetry/EntityRelationship.ts +8 -0
- package/Utils/Telemetry/LockedFilterSearch.ts +412 -0
- package/Utils/Telemetry/NetworkHost.ts +43 -0
- package/Utils/Telemetry/OriginAllowList.ts +139 -4
- package/Utils/Traces/CriticalPath.ts +10 -4
- package/build/dist/Models/DatabaseModels/Index.js +4 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js +1 -1
- package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
- package/build/dist/Models/DatabaseModels/SecurityEventConnection.js +490 -0
- package/build/dist/Models/DatabaseModels/SecurityEventConnection.js.map +1 -0
- package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js +287 -0
- package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js.map +1 -0
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +2 -2
- package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +336 -27
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +182 -7
- package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -1
- package/build/dist/Server/API/SecurityEventConnectionAPI.js +171 -0
- package/build/dist/Server/API/SecurityEventConnectionAPI.js.map +1 -0
- package/build/dist/Server/API/TelemetryAPI.js +248 -170
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +57 -4
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/ExceptionAggregationService.js +7 -16
- package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +8 -0
- package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
- package/build/dist/Server/Services/Index.js +4 -0
- package/build/dist/Server/Services/Index.js.map +1 -1
- package/build/dist/Server/Services/InventoryItemService.js +22 -0
- package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +8 -17
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/MetricAggregationService.js +4 -14
- package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
- package/build/dist/Server/Services/SecurityEventConnectionRunService.js +9 -0
- package/build/dist/Server/Services/SecurityEventConnectionRunService.js.map +1 -0
- package/build/dist/Server/Services/SecurityEventConnectionService.js +356 -0
- package/build/dist/Server/Services/SecurityEventConnectionService.js.map +1 -0
- package/build/dist/Server/Services/TraceAggregationService.js +51 -25
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
- package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +14 -7
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js +468 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js.map +1 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js +230 -0
- package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js.map +1 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js +32 -0
- package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +6 -2
- package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +59 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +5 -3
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js +752 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js +493 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js +352 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js +405 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js +466 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js +344 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js +511 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js +406 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js +336 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js +474 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js +417 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js +314 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js +494 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js +719 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js +404 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js +209 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js +40 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js +494 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js +379 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js +27 -0
- package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +234 -61
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js +537 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js.map +1 -0
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +572 -115
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +35 -1
- package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -1
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js +52 -0
- package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js.map +1 -0
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +521 -32
- package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +10 -0
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +8 -0
- package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js +80 -0
- package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +122 -67
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js +146 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +174 -248
- package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +492 -0
- package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js +259 -0
- package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry.js +11 -5
- package/build/dist/Server/Utils/Telemetry.js.map +1 -1
- package/build/dist/Types/AI/InvestigationEvidence.js +2 -0
- package/build/dist/Types/AI/InvestigationEvidence.js.map +1 -0
- package/build/dist/Types/Permission.js +2 -2
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplay.js +95 -0
- package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
- package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
- package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js +18 -0
- package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js +2 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +374 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js +35 -0
- package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js.map +1 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js +35 -0
- package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js.map +1 -0
- package/build/dist/Types/Telemetry/EntityType.js +14 -0
- package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
- package/build/dist/Types/Telemetry/ExceptionSpanScope.js +59 -0
- package/build/dist/Types/Telemetry/ExceptionSpanScope.js.map +1 -0
- package/build/dist/Types/Telemetry/LockedFilterDetail.js +16 -0
- package/build/dist/Types/Telemetry/LockedFilterDetail.js.map +1 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js +16 -10
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -1
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +119 -0
- package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -0
- package/build/dist/UI/Components/Card/Card.js +34 -17
- package/build/dist/UI/Components/Card/Card.js.map +1 -1
- package/build/dist/UI/Components/Checkbox/Checkbox.js +6 -4
- package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
- package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +1 -1
- package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
- package/build/dist/UI/Components/Detail/Detail.js +63 -13
- package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
- package/build/dist/UI/Components/ErrorBoundary.js +34 -0
- package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js +535 -0
- package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +117 -57
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +5 -7
- package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/FacetSection.js +31 -44
- package/build/dist/UI/Components/LogsViewer/components/FacetSection.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +17 -3
- package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +19 -3
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +64 -18
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +100 -41
- package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +13 -5
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js +403 -0
- package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js.map +1 -0
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +197 -179
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +30 -21
- package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +12 -0
- package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js +46 -12
- package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
- package/build/dist/UI/Components/ModelList/ModelList.js +26 -7
- package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
- package/build/dist/UI/Components/Page/ModelPage.js +62 -34
- package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
- package/build/dist/UI/Components/Table/Table.js +3 -1
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +8 -1
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +111 -0
- package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js +22 -0
- package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js +36 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js +21 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js +14 -0
- package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js +27 -0
- package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js +88 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +228 -0
- package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +6 -6
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +111 -12
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js +27 -40
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +70 -10
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +17 -3
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/types.js +0 -4
- package/build/dist/UI/Components/TelemetryViewer/types.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js +70 -0
- package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js.map +1 -0
- package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js +52 -0
- package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js.map +1 -0
- package/build/dist/UI/Utils/Clipboard.js +59 -2
- package/build/dist/UI/Utils/Clipboard.js.map +1 -1
- package/build/dist/UI/Utils/Navigation.js +11 -2
- package/build/dist/UI/Utils/Navigation.js.map +1 -1
- package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +471 -0
- package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -0
- package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js +113 -0
- package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js.map +1 -0
- package/build/dist/Utils/AI/InvestigationReport.js +1241 -0
- package/build/dist/Utils/AI/InvestigationReport.js.map +1 -0
- package/build/dist/Utils/API.js +25 -0
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayHealth.js +10 -0
- package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -1
- package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js +54 -0
- package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js +311 -0
- package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js +150 -0
- package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js +328 -0
- package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js +405 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js +212 -0
- package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js +351 -0
- package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js +348 -0
- package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js.map +1 -0
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +103 -10
- package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +16 -5
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/build/dist/Utils/Telemetry/EntityRelationship.js +7 -0
- package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
- package/build/dist/Utils/Telemetry/LockedFilterSearch.js +277 -0
- package/build/dist/Utils/Telemetry/LockedFilterSearch.js.map +1 -0
- package/build/dist/Utils/Telemetry/NetworkHost.js +39 -0
- package/build/dist/Utils/Telemetry/NetworkHost.js.map +1 -0
- package/build/dist/Utils/Telemetry/OriginAllowList.js +105 -4
- package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
- package/build/dist/Utils/Traces/CriticalPath.js +9 -4
- package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
- package/package.json +1 -1
- package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +0 -600
- package/UI/Components/GanttChart/Bar/BarLabel.tsx +0 -17
- package/UI/Components/GanttChart/Bar/Index.tsx +0 -149
- package/UI/Components/GanttChart/ChartContainer.tsx +0 -50
- package/UI/Components/GanttChart/Index.tsx +0 -90
- package/UI/Components/GanttChart/Row/Index.tsx +0 -22
- package/UI/Components/GanttChart/Row/Row.tsx +0 -231
- package/UI/Components/GanttChart/Row/RowLabel.tsx +0 -30
- package/UI/Components/GanttChart/Rows.tsx +0 -59
- package/UI/Components/GanttChart/Timeline/Index.tsx +0 -46
- package/UI/Components/GanttChart/Timeline/TimelineInterval.tsx +0 -33
- package/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.tsx +0 -43
- package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js +0 -8
- package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Bar/Index.js +0 -77
- package/build/dist/UI/Components/GanttChart/Bar/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/ChartContainer.js +0 -33
- package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Index.js +0 -39
- package/build/dist/UI/Components/GanttChart/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Row/Index.js +0 -7
- package/build/dist/UI/Components/GanttChart/Row/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Row/Row.js +0 -106
- package/build/dist/UI/Components/GanttChart/Row/Row.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Row/RowLabel.js +0 -10
- package/build/dist/UI/Components/GanttChart/Row/RowLabel.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Rows.js +0 -19
- package/build/dist/UI/Components/GanttChart/Rows.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Timeline/Index.js +0 -16
- package/build/dist/UI/Components/GanttChart/Timeline/Index.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js +0 -13
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js.map +0 -1
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js +0 -13
- package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js.map +0 -1
|
@@ -37,6 +37,28 @@ import TelemetryImprovementTaskTrigger from "../Utils/AI/SRE/TelemetryImprovemen
|
|
|
37
37
|
import PostedRootCause from "../Utils/AI/SRE/PostedRootCause";
|
|
38
38
|
import CodeFixTaskType from "../../Types/AI/CodeFixTaskType";
|
|
39
39
|
import { AnalyzableSpan } from "../Utils/AI/PerfEvidence/SpanTreeAnalyzer";
|
|
40
|
+
import {
|
|
41
|
+
InvestigationEventReference,
|
|
42
|
+
InvestigationEvidenceItem,
|
|
43
|
+
InvestigationEvidenceRowsResponse,
|
|
44
|
+
InvestigationReferenceKind,
|
|
45
|
+
} from "../../Types/AI/InvestigationEvidence";
|
|
46
|
+
import {
|
|
47
|
+
buildInvestigationEvidence,
|
|
48
|
+
EVIDENCE_CITATION_ID_REGEX,
|
|
49
|
+
findInvestigationToolCall,
|
|
50
|
+
InvestigationToolCallRecord,
|
|
51
|
+
isRerunnableEvidenceTool,
|
|
52
|
+
} from "../Utils/AI/SRE/InvestigationEvidence";
|
|
53
|
+
import { resolveInvestigationReferences } from "../Utils/AI/SRE/InvestigationReferences";
|
|
54
|
+
import AIToolbox, { ToolCallOutcome } from "../Utils/AI/Toolbox/Index";
|
|
55
|
+
import {
|
|
56
|
+
ObservabilityTool,
|
|
57
|
+
ToolExecutionResult,
|
|
58
|
+
} from "../Utils/AI/Toolbox/ToolTypes";
|
|
59
|
+
import { AIRunEventResultSummary } from "../../Types/AI/AIChatTypes";
|
|
60
|
+
import logger from "../Utils/Logger";
|
|
61
|
+
import OneUptimeDate from "../../Types/Date";
|
|
40
62
|
|
|
41
63
|
const router: ExpressRouter = Express.getRouter();
|
|
42
64
|
|
|
@@ -168,6 +190,108 @@ async function getLoggedInProps(
|
|
|
168
190
|
return props;
|
|
169
191
|
}
|
|
170
192
|
|
|
193
|
+
/*
|
|
194
|
+
* The panel routes act inside exactly ONE project: the tenant the request is
|
|
195
|
+
* authenticated for. A request carrying the `is-multi-tenant-query` header
|
|
196
|
+
* makes the model layer answer from any project the user belongs to — so the
|
|
197
|
+
* subject could live in project B while every tenant-keyed permission check
|
|
198
|
+
* (the AI toolbox's grants, the reference lookups) reads the caller's grants
|
|
199
|
+
* in project A. The viewer props are therefore always pinned to the tenant,
|
|
200
|
+
* and the subject is then asserted to belong to it, so "whose grants were
|
|
201
|
+
* checked" and "which project was queried" can never diverge.
|
|
202
|
+
*/
|
|
203
|
+
function pinPropsToTenant(
|
|
204
|
+
props: DatabaseCommonInteractionProps,
|
|
205
|
+
): DatabaseCommonInteractionProps {
|
|
206
|
+
return { ...props, isMultiTenantRequest: false };
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/*
|
|
210
|
+
* Access check under the VIEWER's tenant-pinned permissions: throws unless
|
|
211
|
+
* they can read the incident/alert AND it belongs to the tenant.
|
|
212
|
+
*/
|
|
213
|
+
async function assertSubjectReadableInTenant(data: {
|
|
214
|
+
subjectType: InvestigationReferenceKind;
|
|
215
|
+
subjectId: ObjectID;
|
|
216
|
+
tenantId: ObjectID;
|
|
217
|
+
viewerProps: DatabaseCommonInteractionProps;
|
|
218
|
+
}): Promise<void> {
|
|
219
|
+
const subject: Incident | Alert | null =
|
|
220
|
+
data.subjectType === "incident"
|
|
221
|
+
? await IncidentService.findOneById({
|
|
222
|
+
id: data.subjectId,
|
|
223
|
+
select: { _id: true, projectId: true },
|
|
224
|
+
props: data.viewerProps,
|
|
225
|
+
})
|
|
226
|
+
: await AlertService.findOneById({
|
|
227
|
+
id: data.subjectId,
|
|
228
|
+
select: { _id: true, projectId: true },
|
|
229
|
+
props: data.viewerProps,
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
if (!subject || !subject.projectId) {
|
|
233
|
+
throw new BadDataException(
|
|
234
|
+
`${data.subjectType === "incident" ? "Incident" : "Alert"} not found (or you do not have access to it).`,
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
CommonAPI.assertResourceBelongsToProject({
|
|
239
|
+
resourceProjectId: subject.projectId,
|
|
240
|
+
projectId: data.tenantId,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Plain-text rows returned by the evidence route are clipped to this size.
|
|
245
|
+
export const MAX_EVIDENCE_TEXT_LENGTH: number = 20000;
|
|
246
|
+
|
|
247
|
+
/*
|
|
248
|
+
* The event JSON the panel receives keeps its long-standing shape. The run's
|
|
249
|
+
* tool arguments and citation metadata are read only to build `evidence`
|
|
250
|
+
* (which sanitises them); shipping the raw LLM arguments to every viewer in
|
|
251
|
+
* the activity feed would bypass that sanitisation.
|
|
252
|
+
*/
|
|
253
|
+
function toClientEventJson(eventJson: JSONObject): JSONObject {
|
|
254
|
+
const clientJson: JSONObject = { ...eventJson };
|
|
255
|
+
delete clientJson["toolArguments"];
|
|
256
|
+
delete clientJson["citationId"];
|
|
257
|
+
|
|
258
|
+
const resultSummary: unknown = clientJson["resultSummary"];
|
|
259
|
+
|
|
260
|
+
if (
|
|
261
|
+
resultSummary &&
|
|
262
|
+
typeof resultSummary === "object" &&
|
|
263
|
+
!Array.isArray(resultSummary)
|
|
264
|
+
) {
|
|
265
|
+
const clientSummary: AIRunEventResultSummary = {
|
|
266
|
+
...(resultSummary as AIRunEventResultSummary),
|
|
267
|
+
};
|
|
268
|
+
delete clientSummary.citationLabel;
|
|
269
|
+
delete clientSummary.citationTarget;
|
|
270
|
+
clientJson["resultSummary"] = clientSummary as JSONObject;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return clientJson;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/*
|
|
277
|
+
* Structured evidence for the published report. Pure over the loaded events,
|
|
278
|
+
* but guarded anyway: evidence enriches the panel and must never fail the
|
|
279
|
+
* payload that carries the report itself.
|
|
280
|
+
*/
|
|
281
|
+
function buildEvidenceForReport(data: {
|
|
282
|
+
events: Array<AIRunEvent>;
|
|
283
|
+
analysisMarkdown: string;
|
|
284
|
+
}): Array<InvestigationEvidenceItem> {
|
|
285
|
+
try {
|
|
286
|
+
return buildInvestigationEvidence(data);
|
|
287
|
+
} catch (error) {
|
|
288
|
+
logger.error(
|
|
289
|
+
`AI: could not build investigation evidence for the panel: ${error}`,
|
|
290
|
+
);
|
|
291
|
+
return [];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
171
295
|
/*
|
|
172
296
|
* Read the latest investigation run + its events as root (bypasses the
|
|
173
297
|
* per-user pin) and send them. Callers must have already access-checked the
|
|
@@ -181,6 +305,16 @@ async function sendLatestInvestigation(
|
|
|
181
305
|
incidentId?: ObjectID | undefined;
|
|
182
306
|
alertId?: ObjectID | undefined;
|
|
183
307
|
},
|
|
308
|
+
viewer: {
|
|
309
|
+
subjectType: InvestigationReferenceKind;
|
|
310
|
+
/*
|
|
311
|
+
* The authenticated tenant, which the subject was asserted to belong to;
|
|
312
|
+
* the run, its events and the references are all read inside it only.
|
|
313
|
+
*/
|
|
314
|
+
projectId: ObjectID;
|
|
315
|
+
// The VIEWER's tenant-pinned props — references use their permissions.
|
|
316
|
+
props: DatabaseCommonInteractionProps;
|
|
317
|
+
},
|
|
184
318
|
): Promise<void> {
|
|
185
319
|
const runs: Array<AIRun> = await AIRunService.findBy({
|
|
186
320
|
query: runQuery,
|
|
@@ -218,12 +352,21 @@ async function sendLatestInvestigation(
|
|
|
218
352
|
analysisMarkdown: null,
|
|
219
353
|
analysisTldr: null,
|
|
220
354
|
isAnalysisPending: false,
|
|
355
|
+
evidence: [],
|
|
356
|
+
references: [],
|
|
221
357
|
});
|
|
222
358
|
return;
|
|
223
359
|
}
|
|
224
360
|
|
|
361
|
+
/*
|
|
362
|
+
* Evidence is only ever built next to a published report, which requires a
|
|
363
|
+
* Completed run. The panel polls every few seconds while a run is active,
|
|
364
|
+
* so the (potentially large) raw tool arguments are not read until then.
|
|
365
|
+
*/
|
|
366
|
+
const isEvidenceEligible: boolean = run.status === AIRunStatus.Completed;
|
|
367
|
+
|
|
225
368
|
const events: Array<AIRunEvent> = await AIRunEventService.findBy({
|
|
226
|
-
query: { aiRunId: run.id
|
|
369
|
+
query: { aiRunId: run.id!, projectId: viewer.projectId },
|
|
227
370
|
select: {
|
|
228
371
|
_id: true,
|
|
229
372
|
sequence: true,
|
|
@@ -231,6 +374,11 @@ async function sendLatestInvestigation(
|
|
|
231
374
|
toolName: true,
|
|
232
375
|
resultSummary: true,
|
|
233
376
|
createdAt: true,
|
|
377
|
+
/*
|
|
378
|
+
* Read for the structured evidence list only — toClientEventJson
|
|
379
|
+
* strips both from the event JSON sent to the panel.
|
|
380
|
+
*/
|
|
381
|
+
...(isEvidenceEligible ? { citationId: true, toolArguments: true } : {}),
|
|
234
382
|
},
|
|
235
383
|
sort: { sequence: SortOrder.Ascending },
|
|
236
384
|
limit: MAX_EVENTS,
|
|
@@ -243,7 +391,11 @@ async function sendLatestInvestigation(
|
|
|
243
391
|
AIRun,
|
|
244
392
|
)[0];
|
|
245
393
|
|
|
246
|
-
const eventsJson: JSONArray = BaseModel.toJSONArray(events, AIRunEvent)
|
|
394
|
+
const eventsJson: JSONArray = BaseModel.toJSONArray(events, AIRunEvent).map(
|
|
395
|
+
(eventJson: JSONObject): JSONObject => {
|
|
396
|
+
return toClientEventJson(eventJson);
|
|
397
|
+
},
|
|
398
|
+
);
|
|
247
399
|
|
|
248
400
|
/*
|
|
249
401
|
* RootCause is the canonical persisted investigation result. The explicit
|
|
@@ -287,12 +439,32 @@ async function sendLatestInvestigation(
|
|
|
287
439
|
runJson["analysisTldr"] = analysisTldr;
|
|
288
440
|
}
|
|
289
441
|
|
|
442
|
+
/*
|
|
443
|
+
* Evidence and references describe the report, so — like the TL;DR — they
|
|
444
|
+
* only travel next to one. References are resolved under the viewer's own
|
|
445
|
+
* tenant-pinned permissions inside the tenant; a failure yields no links.
|
|
446
|
+
*/
|
|
447
|
+
const evidence: Array<InvestigationEvidenceItem> = analysisMarkdown
|
|
448
|
+
? buildEvidenceForReport({ events, analysisMarkdown })
|
|
449
|
+
: [];
|
|
450
|
+
|
|
451
|
+
const references: Array<InvestigationEventReference> = analysisMarkdown
|
|
452
|
+
? await resolveInvestigationReferences({
|
|
453
|
+
markdown: analysisMarkdown,
|
|
454
|
+
subjectType: viewer.subjectType,
|
|
455
|
+
projectId: viewer.projectId,
|
|
456
|
+
props: viewer.props,
|
|
457
|
+
})
|
|
458
|
+
: [];
|
|
459
|
+
|
|
290
460
|
Response.sendJsonObjectResponse(req, res, {
|
|
291
461
|
run: runJson || null,
|
|
292
462
|
events: eventsJson,
|
|
293
463
|
analysisMarkdown,
|
|
294
464
|
analysisTldr,
|
|
295
465
|
isAnalysisPending,
|
|
466
|
+
evidence: evidence as unknown as JSONArray,
|
|
467
|
+
references: references as unknown as JSONArray,
|
|
296
468
|
});
|
|
297
469
|
}
|
|
298
470
|
|
|
@@ -307,6 +479,15 @@ router.post(
|
|
|
307
479
|
try {
|
|
308
480
|
const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
|
|
309
481
|
|
|
482
|
+
/*
|
|
483
|
+
* Pinned to the authenticated tenant before any read (see
|
|
484
|
+
* pinPropsToTenant). Read authorization itself is the model layer's
|
|
485
|
+
* check on the subject below, which also admits master admins.
|
|
486
|
+
*/
|
|
487
|
+
const tenantId: ObjectID = CommonAPI.assertTenantScoped(props);
|
|
488
|
+
const viewerProps: DatabaseCommonInteractionProps =
|
|
489
|
+
pinPropsToTenant(props);
|
|
490
|
+
|
|
310
491
|
const incidentIdString: string | undefined = req.body["incidentId"] as
|
|
311
492
|
| string
|
|
312
493
|
| undefined;
|
|
@@ -317,29 +498,30 @@ router.post(
|
|
|
317
498
|
|
|
318
499
|
const incidentId: ObjectID = new ObjectID(incidentIdString);
|
|
319
500
|
|
|
320
|
-
// Access check under the USER's permissions
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
501
|
+
// Access check under the USER's permissions, inside the tenant.
|
|
502
|
+
await assertSubjectReadableInTenant({
|
|
503
|
+
subjectType: "incident",
|
|
504
|
+
subjectId: incidentId,
|
|
505
|
+
tenantId,
|
|
506
|
+
viewerProps,
|
|
325
507
|
});
|
|
326
508
|
|
|
327
|
-
if (!incident) {
|
|
328
|
-
throw new BadDataException(
|
|
329
|
-
"Incident not found (or you do not have access to it).",
|
|
330
|
-
);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
509
|
await sendLatestInvestigation(
|
|
334
510
|
req,
|
|
335
511
|
res,
|
|
336
512
|
{
|
|
513
|
+
projectId: tenantId,
|
|
337
514
|
triggeredByIncidentId: incidentId,
|
|
338
515
|
runType: AIRunType.Investigation,
|
|
339
516
|
},
|
|
340
517
|
{
|
|
341
518
|
incidentId,
|
|
342
519
|
},
|
|
520
|
+
{
|
|
521
|
+
subjectType: "incident",
|
|
522
|
+
projectId: tenantId,
|
|
523
|
+
props: viewerProps,
|
|
524
|
+
},
|
|
343
525
|
);
|
|
344
526
|
return;
|
|
345
527
|
} catch (err) {
|
|
@@ -360,6 +542,15 @@ router.post(
|
|
|
360
542
|
try {
|
|
361
543
|
const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
|
|
362
544
|
|
|
545
|
+
/*
|
|
546
|
+
* Pinned to the authenticated tenant before any read (see
|
|
547
|
+
* pinPropsToTenant). Read authorization itself is the model layer's
|
|
548
|
+
* check on the subject below, which also admits master admins.
|
|
549
|
+
*/
|
|
550
|
+
const tenantId: ObjectID = CommonAPI.assertTenantScoped(props);
|
|
551
|
+
const viewerProps: DatabaseCommonInteractionProps =
|
|
552
|
+
pinPropsToTenant(props);
|
|
553
|
+
|
|
363
554
|
const alertIdString: string | undefined = req.body["alertId"] as
|
|
364
555
|
| string
|
|
365
556
|
| undefined;
|
|
@@ -370,29 +561,298 @@ router.post(
|
|
|
370
561
|
|
|
371
562
|
const alertId: ObjectID = new ObjectID(alertIdString);
|
|
372
563
|
|
|
373
|
-
// Access check under the USER's permissions
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
564
|
+
// Access check under the USER's permissions, inside the tenant.
|
|
565
|
+
await assertSubjectReadableInTenant({
|
|
566
|
+
subjectType: "alert",
|
|
567
|
+
subjectId: alertId,
|
|
568
|
+
tenantId,
|
|
569
|
+
viewerProps,
|
|
378
570
|
});
|
|
379
571
|
|
|
380
|
-
if (!alert) {
|
|
381
|
-
throw new BadDataException(
|
|
382
|
-
"Alert not found (or you do not have access to it).",
|
|
383
|
-
);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
572
|
await sendLatestInvestigation(
|
|
387
573
|
req,
|
|
388
574
|
res,
|
|
389
575
|
{
|
|
576
|
+
projectId: tenantId,
|
|
390
577
|
triggeredByAlertId: alertId,
|
|
391
578
|
runType: AIRunType.Investigation,
|
|
392
579
|
},
|
|
393
580
|
{
|
|
394
581
|
alertId,
|
|
395
582
|
},
|
|
583
|
+
{
|
|
584
|
+
subjectType: "alert",
|
|
585
|
+
projectId: tenantId,
|
|
586
|
+
props: viewerProps,
|
|
587
|
+
},
|
|
588
|
+
);
|
|
589
|
+
return;
|
|
590
|
+
} catch (err) {
|
|
591
|
+
next(err);
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
);
|
|
596
|
+
|
|
597
|
+
/*
|
|
598
|
+
* The original arguments of a cited tool call, with its time window pinned to
|
|
599
|
+
* when the investigation ran: a tool whose schema accepts endTime (or atTime)
|
|
600
|
+
* but whose call omitted it defaulted to "now" at investigation time, so the
|
|
601
|
+
* re-run passes that moment explicitly. Returns a copy; the event's JSON is
|
|
602
|
+
* never mutated.
|
|
603
|
+
*/
|
|
604
|
+
export function pinEvidenceArgumentsToInvestigationTime(data: {
|
|
605
|
+
tool: ObservabilityTool;
|
|
606
|
+
rawArguments: JSONObject;
|
|
607
|
+
investigatedAt: Date | undefined;
|
|
608
|
+
}): { args: JSONObject; isPinnedToInvestigationTime: boolean } {
|
|
609
|
+
const args: JSONObject = { ...data.rawArguments };
|
|
610
|
+
|
|
611
|
+
const schemaProperties: unknown = data.tool.inputSchema?.["properties"];
|
|
612
|
+
const properties: JSONObject =
|
|
613
|
+
schemaProperties &&
|
|
614
|
+
typeof schemaProperties === "object" &&
|
|
615
|
+
!Array.isArray(schemaProperties)
|
|
616
|
+
? (schemaProperties as JSONObject)
|
|
617
|
+
: {};
|
|
618
|
+
|
|
619
|
+
const hasArgument: (key: string) => boolean = (key: string): boolean => {
|
|
620
|
+
const value: unknown = args[key];
|
|
621
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
622
|
+
};
|
|
623
|
+
|
|
624
|
+
let isPinnedToInvestigationTime: boolean = false;
|
|
625
|
+
|
|
626
|
+
for (const timeKey of ["endTime", "atTime"]) {
|
|
627
|
+
if (!Object.prototype.hasOwnProperty.call(properties, timeKey)) {
|
|
628
|
+
continue;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
if (!hasArgument(timeKey) && data.investigatedAt) {
|
|
632
|
+
args[timeKey] = data.investigatedAt.toISOString();
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
if (hasArgument(timeKey)) {
|
|
636
|
+
isPinnedToInvestigationTime = true;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
return { args, isPinnedToInvestigationTime };
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/*
|
|
644
|
+
* "Load rows" for one piece of evidence in the investigation panel: re-runs
|
|
645
|
+
* the query behind a report citation ([C#]) with the VIEWER's permissions.
|
|
646
|
+
*
|
|
647
|
+
* Trust model:
|
|
648
|
+
* - the caller must be an authenticated member of the request's tenant,
|
|
649
|
+
* and every read and the tool run are pinned to that tenant (never a
|
|
650
|
+
* project reached through the multi-tenant header): the toolbox checks
|
|
651
|
+
* the caller's grants in the tenant, so the query must run there too;
|
|
652
|
+
* - the subject is access-checked under the viewer's props before any
|
|
653
|
+
* other read, exactly like the routes above, and must belong to the
|
|
654
|
+
* tenant;
|
|
655
|
+
* - the run must be an Investigation of THAT subject in the tenant, so a
|
|
656
|
+
* citation of another subject's run cannot be replayed through a
|
|
657
|
+
* subject the viewer can read;
|
|
658
|
+
* - the tool and its arguments come from the run's own server-recorded
|
|
659
|
+
* events — never from the request body — and only read-only toolbox
|
|
660
|
+
* tools are re-runnable;
|
|
661
|
+
* - the tool executes under the viewer's props (the investigation itself
|
|
662
|
+
* ran as root), so the viewer only ever sees rows they may read.
|
|
663
|
+
* Body: { subjectType: "incident" | "alert", subjectId,
|
|
664
|
+
* investigationRunId (or its aiRunId alias), citationId: "C1" }.
|
|
665
|
+
* Response: InvestigationEvidenceRowsResponse.
|
|
666
|
+
*/
|
|
667
|
+
router.post(
|
|
668
|
+
"/ai-investigation/evidence",
|
|
669
|
+
UserMiddleware.getUserMiddleware,
|
|
670
|
+
async (
|
|
671
|
+
req: ExpressRequest,
|
|
672
|
+
res: ExpressResponse,
|
|
673
|
+
next: NextFunction,
|
|
674
|
+
): Promise<void> => {
|
|
675
|
+
try {
|
|
676
|
+
const props: DatabaseCommonInteractionProps = await getLoggedInProps(req);
|
|
677
|
+
|
|
678
|
+
/*
|
|
679
|
+
* The re-run executes a toolbox tool whose permission gate reads the
|
|
680
|
+
* caller's grants in props.tenantId, so the caller must be a member of
|
|
681
|
+
* that tenant and everything below happens inside it — never in a
|
|
682
|
+
* project reached through the multi-tenant header.
|
|
683
|
+
*/
|
|
684
|
+
const tenantId: ObjectID =
|
|
685
|
+
CommonAPI.assertAuthenticatedProjectMember(props);
|
|
686
|
+
const viewerProps: DatabaseCommonInteractionProps =
|
|
687
|
+
pinPropsToTenant(props);
|
|
688
|
+
|
|
689
|
+
const subjectType: string | undefined = req.body["subjectType"] as
|
|
690
|
+
| string
|
|
691
|
+
| undefined;
|
|
692
|
+
|
|
693
|
+
if (subjectType !== "incident" && subjectType !== "alert") {
|
|
694
|
+
throw new BadDataException(
|
|
695
|
+
'subjectType must be "incident" or "alert".',
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
const subjectIdString: string =
|
|
700
|
+
typeof req.body["subjectId"] === "string"
|
|
701
|
+
? (req.body["subjectId"] as string).trim()
|
|
702
|
+
: "";
|
|
703
|
+
|
|
704
|
+
if (!subjectIdString) {
|
|
705
|
+
throw new BadDataException("subjectId is required.");
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if (!ObjectID.isValidUUID(subjectIdString)) {
|
|
709
|
+
throw new BadDataException("subjectId must be a valid ID.");
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
const subjectId: ObjectID = new ObjectID(subjectIdString);
|
|
713
|
+
|
|
714
|
+
const investigationRunId: ObjectID = getDisplayedInvestigationRunId(req);
|
|
715
|
+
|
|
716
|
+
const citationId: string =
|
|
717
|
+
typeof req.body["citationId"] === "string"
|
|
718
|
+
? (req.body["citationId"] as string).trim()
|
|
719
|
+
: "";
|
|
720
|
+
|
|
721
|
+
if (!EVIDENCE_CITATION_ID_REGEX.test(citationId)) {
|
|
722
|
+
throw new BadDataException(
|
|
723
|
+
'citationId must be a citation marker such as "C1".',
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
// Access check under the USER's permissions, inside the tenant.
|
|
728
|
+
await assertSubjectReadableInTenant({
|
|
729
|
+
subjectType,
|
|
730
|
+
subjectId,
|
|
731
|
+
tenantId,
|
|
732
|
+
viewerProps,
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
const run: AIRun | null = await AIRunService.findOneBy({
|
|
736
|
+
query: {
|
|
737
|
+
_id: investigationRunId,
|
|
738
|
+
projectId: tenantId,
|
|
739
|
+
runType: AIRunType.Investigation,
|
|
740
|
+
...(subjectType === "incident"
|
|
741
|
+
? { triggeredByIncidentId: subjectId }
|
|
742
|
+
: { triggeredByAlertId: subjectId }),
|
|
743
|
+
},
|
|
744
|
+
select: { _id: true },
|
|
745
|
+
props: { isRoot: true },
|
|
746
|
+
});
|
|
747
|
+
|
|
748
|
+
if (!run) {
|
|
749
|
+
throw new BadDataException(
|
|
750
|
+
`This investigation was not found for this ${subjectType}.`,
|
|
751
|
+
);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
const events: Array<AIRunEvent> = await AIRunEventService.findBy({
|
|
755
|
+
query: { aiRunId: investigationRunId, projectId: tenantId },
|
|
756
|
+
select: {
|
|
757
|
+
_id: true,
|
|
758
|
+
sequence: true,
|
|
759
|
+
eventType: true,
|
|
760
|
+
toolName: true,
|
|
761
|
+
toolArguments: true,
|
|
762
|
+
resultSummary: true,
|
|
763
|
+
citationId: true,
|
|
764
|
+
createdAt: true,
|
|
765
|
+
},
|
|
766
|
+
sort: { sequence: SortOrder.Ascending },
|
|
767
|
+
limit: MAX_EVENTS,
|
|
768
|
+
skip: 0,
|
|
769
|
+
props: { isRoot: true },
|
|
770
|
+
});
|
|
771
|
+
|
|
772
|
+
const toolCall: InvestigationToolCallRecord | null =
|
|
773
|
+
findInvestigationToolCall({ events, citationId });
|
|
774
|
+
|
|
775
|
+
if (!toolCall) {
|
|
776
|
+
throw new BadDataException("This evidence is no longer available.");
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
const tool: ObservabilityTool | undefined = AIToolbox.getToolByName(
|
|
780
|
+
toolCall.item.toolName,
|
|
781
|
+
);
|
|
782
|
+
|
|
783
|
+
// Re-checked here rather than trusted from the item: defense in depth.
|
|
784
|
+
if (
|
|
785
|
+
!tool ||
|
|
786
|
+
!toolCall.item.canLoadRows ||
|
|
787
|
+
!isRerunnableEvidenceTool(toolCall.item.toolName)
|
|
788
|
+
) {
|
|
789
|
+
throw new BadDataException("This evidence can't be re-run.");
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
const investigatedAt: Date | undefined = toolCall.item.executedAt
|
|
793
|
+
? new Date(toolCall.item.executedAt)
|
|
794
|
+
: undefined;
|
|
795
|
+
|
|
796
|
+
const pinned: { args: JSONObject; isPinnedToInvestigationTime: boolean } =
|
|
797
|
+
pinEvidenceArgumentsToInvestigationTime({
|
|
798
|
+
tool,
|
|
799
|
+
rawArguments: toolCall.rawArguments,
|
|
800
|
+
investigatedAt: toolCall.startedAt || investigatedAt,
|
|
801
|
+
});
|
|
802
|
+
|
|
803
|
+
const outcome: ToolCallOutcome = await AIToolbox.executeTool({
|
|
804
|
+
name: toolCall.item.toolName,
|
|
805
|
+
args: pinned.args,
|
|
806
|
+
ctx: {
|
|
807
|
+
projectId: tenantId,
|
|
808
|
+
props: viewerProps,
|
|
809
|
+
},
|
|
810
|
+
});
|
|
811
|
+
|
|
812
|
+
if (!outcome.success || !outcome.result) {
|
|
813
|
+
throw new BadDataException(
|
|
814
|
+
outcome.errorMessage || "This evidence could not be loaded.",
|
|
815
|
+
);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
const result: ToolExecutionResult = outcome.result;
|
|
819
|
+
|
|
820
|
+
const rowsResponse: InvestigationEvidenceRowsResponse = {
|
|
821
|
+
citationId,
|
|
822
|
+
toolName: toolCall.item.toolName,
|
|
823
|
+
label: result.citationLabel || toolCall.item.label,
|
|
824
|
+
rowCount: result.rowCount,
|
|
825
|
+
isTruncated: result.isTruncated,
|
|
826
|
+
executedAt: OneUptimeDate.getCurrentDate().toISOString(),
|
|
827
|
+
isPinnedToInvestigationTime: pinned.isPinnedToInvestigationTime,
|
|
828
|
+
};
|
|
829
|
+
|
|
830
|
+
if (result.widget) {
|
|
831
|
+
// Mirror ChatAgentRunner: widgets carry their own id + citation.
|
|
832
|
+
rowsResponse.widget = {
|
|
833
|
+
...result.widget,
|
|
834
|
+
id: result.widget.id || "W1",
|
|
835
|
+
citationId,
|
|
836
|
+
};
|
|
837
|
+
} else {
|
|
838
|
+
const text: string = result.dataForLlm || "";
|
|
839
|
+
|
|
840
|
+
if (text.length > MAX_EVIDENCE_TEXT_LENGTH) {
|
|
841
|
+
rowsResponse.text = text.substring(0, MAX_EVIDENCE_TEXT_LENGTH);
|
|
842
|
+
rowsResponse.isTruncated = true;
|
|
843
|
+
} else {
|
|
844
|
+
rowsResponse.text = text;
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
if (toolCall.item.executedAt) {
|
|
849
|
+
rowsResponse.investigatedAt = toolCall.item.executedAt;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
Response.sendJsonObjectResponse(
|
|
853
|
+
req,
|
|
854
|
+
res,
|
|
855
|
+
rowsResponse as unknown as JSONObject,
|
|
396
856
|
);
|
|
397
857
|
return;
|
|
398
858
|
} catch (err) {
|