@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
|
@@ -121,6 +121,26 @@ const VALID_PATTERNS: Array<ValidPatternCase> = [
|
|
|
121
121
|
pattern: "HTTPS://APP.EXAMPLE.COM",
|
|
122
122
|
coveredOrigin: "https://app.example.com",
|
|
123
123
|
},
|
|
124
|
+
{
|
|
125
|
+
name: "an exact mobile bundle identifier",
|
|
126
|
+
pattern: "app://com.example.checkout",
|
|
127
|
+
coveredOrigin: "app://com.example.checkout",
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "an uppercase mobile package identifier with surrounding whitespace",
|
|
131
|
+
pattern: " APP://COM.EXAMPLE.CHECKOUT ",
|
|
132
|
+
coveredOrigin: "app://com.example.checkout",
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "a mobile identifier containing platform-valid hyphens and underscores",
|
|
136
|
+
pattern: "app://com.example.checkout-beta_native",
|
|
137
|
+
coveredOrigin: "app://com.example.checkout-beta_native",
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "an exact mobile origin with one trailing slash",
|
|
141
|
+
pattern: "app://com.example.checkout/",
|
|
142
|
+
coveredOrigin: "app://com.example.checkout",
|
|
143
|
+
},
|
|
124
144
|
];
|
|
125
145
|
|
|
126
146
|
/*
|
|
@@ -238,6 +258,36 @@ const INVALID_PATTERNS: Array<InvalidPatternCase> = [
|
|
|
238
258
|
pattern: "https://exa_mple.com",
|
|
239
259
|
expectedMessageFragment: "not valid in a host name",
|
|
240
260
|
},
|
|
261
|
+
{
|
|
262
|
+
name: "a wildcard mobile identifier",
|
|
263
|
+
pattern: "app://*.example.com",
|
|
264
|
+
expectedMessageFragment: "wildcard",
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: "a mobile identifier with a port",
|
|
268
|
+
pattern: "app://com.example.checkout:443",
|
|
269
|
+
expectedMessageFragment: "port",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
name: "a mobile identifier with a path",
|
|
273
|
+
pattern: "app://com.example.checkout/screen",
|
|
274
|
+
expectedMessageFragment: "path",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
name: "a single-label mobile identifier",
|
|
278
|
+
pattern: "app://checkout",
|
|
279
|
+
expectedMessageFragment: "reverse-DNS",
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
name: "a mobile identifier with an empty label",
|
|
283
|
+
pattern: "app://com..checkout",
|
|
284
|
+
expectedMessageFragment: "empty label",
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
name: "a mobile identifier with userinfo",
|
|
288
|
+
pattern: "app://user@com.example.checkout",
|
|
289
|
+
expectedMessageFragment: "username",
|
|
290
|
+
},
|
|
241
291
|
];
|
|
242
292
|
|
|
243
293
|
/*
|
|
@@ -326,6 +376,78 @@ describe("OriginAllowList.normalizeOrigin", () => {
|
|
|
326
376
|
});
|
|
327
377
|
});
|
|
328
378
|
|
|
379
|
+
describe("OriginAllowList mobile app identifiers", () => {
|
|
380
|
+
test("normalizes a bundle identifier for a stable app:// identity", () => {
|
|
381
|
+
expect(
|
|
382
|
+
OriginAllowList.normalizeMobileAppIdentifier(
|
|
383
|
+
" COM.Example.Checkout-Beta ",
|
|
384
|
+
),
|
|
385
|
+
).toBe("com.example.checkout-beta");
|
|
386
|
+
expect(
|
|
387
|
+
OriginAllowList.getMobileAppOrigin(" COM.Example.Checkout-Beta "),
|
|
388
|
+
).toBe("app://com.example.checkout-beta");
|
|
389
|
+
});
|
|
390
|
+
|
|
391
|
+
test.each([
|
|
392
|
+
"com.example.checkout",
|
|
393
|
+
"io.oneuptime.app_beta",
|
|
394
|
+
"uk.co.example.checkout-2",
|
|
395
|
+
"1.example.app2",
|
|
396
|
+
])(
|
|
397
|
+
"accepts the valid package or bundle identifier %s",
|
|
398
|
+
(identifier: string) => {
|
|
399
|
+
expect(
|
|
400
|
+
OriginAllowList.validateMobileAppIdentifier(identifier),
|
|
401
|
+
).toBeNull();
|
|
402
|
+
},
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
test.each([
|
|
406
|
+
"",
|
|
407
|
+
" ",
|
|
408
|
+
"checkout",
|
|
409
|
+
".com.example",
|
|
410
|
+
"com.example.",
|
|
411
|
+
"com..example",
|
|
412
|
+
"com.example/app",
|
|
413
|
+
"com.example:443",
|
|
414
|
+
"com.example app",
|
|
415
|
+
"com.*.example",
|
|
416
|
+
"com._example.app",
|
|
417
|
+
"com.example_.app",
|
|
418
|
+
"com.-example.app",
|
|
419
|
+
"com.example-.app",
|
|
420
|
+
"cøm.example.app",
|
|
421
|
+
])("refuses malformed mobile identifier %j", (identifier: string) => {
|
|
422
|
+
expect(
|
|
423
|
+
OriginAllowList.validateMobileAppIdentifier(identifier),
|
|
424
|
+
).not.toBeNull();
|
|
425
|
+
expect(OriginAllowList.normalizeMobileAppIdentifier(identifier)).toBe("");
|
|
426
|
+
expect(OriginAllowList.getMobileAppOrigin(identifier)).toBeUndefined();
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
test("refuses an identifier above the header length cap", () => {
|
|
430
|
+
const identifier: string = `com.example.${"a".repeat(245)}`;
|
|
431
|
+
|
|
432
|
+
expect(identifier.length).toBeGreaterThan(255);
|
|
433
|
+
expect(OriginAllowList.validateMobileAppIdentifier(identifier)).toContain(
|
|
434
|
+
"255",
|
|
435
|
+
);
|
|
436
|
+
expect(OriginAllowList.getMobileAppOrigin(identifier)).toBeUndefined();
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
test("returns validation errors instead of throwing on non-string input", () => {
|
|
440
|
+
expect(
|
|
441
|
+
OriginAllowList.validateMobileAppIdentifier(
|
|
442
|
+
undefined as unknown as string,
|
|
443
|
+
),
|
|
444
|
+
).toContain("text");
|
|
445
|
+
expect(
|
|
446
|
+
OriginAllowList.getMobileAppOrigin(undefined as unknown as string),
|
|
447
|
+
).toBeUndefined();
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
|
|
329
451
|
describe("OriginAllowList.matches - origins that are allowed", () => {
|
|
330
452
|
test("an exact origin matches its own allowlist entry", () => {
|
|
331
453
|
expect(
|
|
@@ -416,6 +538,22 @@ describe("OriginAllowList.matches - origins that are allowed", () => {
|
|
|
416
538
|
]),
|
|
417
539
|
).toBe(true);
|
|
418
540
|
});
|
|
541
|
+
|
|
542
|
+
test("an exact app:// mobile identity matches case-insensitively", () => {
|
|
543
|
+
expect(
|
|
544
|
+
OriginAllowList.matches("app://com.example.checkout", [
|
|
545
|
+
"APP://COM.EXAMPLE.CHECKOUT",
|
|
546
|
+
]),
|
|
547
|
+
).toBe(true);
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
test("a trailing slash does not change an exact app:// identity", () => {
|
|
551
|
+
expect(
|
|
552
|
+
OriginAllowList.matches("app://com.example.checkout/", [
|
|
553
|
+
"app://com.example.checkout",
|
|
554
|
+
]),
|
|
555
|
+
).toBe(true);
|
|
556
|
+
});
|
|
419
557
|
});
|
|
420
558
|
|
|
421
559
|
describe("OriginAllowList.matches - origins that are refused", () => {
|
|
@@ -576,6 +714,22 @@ describe("OriginAllowList.matches - origins that are refused", () => {
|
|
|
576
714
|
]),
|
|
577
715
|
).toBe(false);
|
|
578
716
|
});
|
|
717
|
+
|
|
718
|
+
test("an app:// wildcard never covers a sibling mobile application", () => {
|
|
719
|
+
expect(
|
|
720
|
+
OriginAllowList.matches("app://checkout.example.com", [
|
|
721
|
+
"app://*.example.com",
|
|
722
|
+
]),
|
|
723
|
+
).toBe(false);
|
|
724
|
+
});
|
|
725
|
+
|
|
726
|
+
test("a sibling package id does not match an exact app:// entry", () => {
|
|
727
|
+
expect(
|
|
728
|
+
OriginAllowList.matches("app://com.example.attacker", [
|
|
729
|
+
"app://com.example.checkout",
|
|
730
|
+
]),
|
|
731
|
+
).toBe(false);
|
|
732
|
+
});
|
|
579
733
|
});
|
|
580
734
|
|
|
581
735
|
describe("OriginAllowList.validateOriginPattern - accepted patterns", () => {
|
|
@@ -175,4 +175,29 @@ describe("CriticalPathUtil.computeServiceBreakdown", () => {
|
|
|
175
175
|
expect(breakdown[0]!.spanCount).toBe(2);
|
|
176
176
|
expect(breakdown[0]!.totalDurationUnixNano).toBe(150);
|
|
177
177
|
});
|
|
178
|
+
|
|
179
|
+
test("computes percentages for real epoch-nanosecond timestamps", () => {
|
|
180
|
+
/*
|
|
181
|
+
* Regression: the trace start was seeded with Number.MAX_SAFE_INTEGER
|
|
182
|
+
* (~9e15). Real span times are ~1.7e18 ns, so the start never moved, the
|
|
183
|
+
* trace looked 1.7e18 ns long and every service rendered as 0.0%.
|
|
184
|
+
*/
|
|
185
|
+
const epoch: number = 1_757_890_000_000 * 1_000_000;
|
|
186
|
+
const ms: number = 1_000_000;
|
|
187
|
+
const breakdown: Array<ServiceBreakdown> =
|
|
188
|
+
CriticalPathUtil.computeServiceBreakdown([
|
|
189
|
+
span("root", undefined, epoch, epoch + 1000 * ms, "A"),
|
|
190
|
+
span("child", "root", epoch + 100 * ms, epoch + 350 * ms, "B"),
|
|
191
|
+
]);
|
|
192
|
+
|
|
193
|
+
expect(epoch).toBeGreaterThan(Number.MAX_SAFE_INTEGER);
|
|
194
|
+
expect(breakdown[0]!.primaryEntityId).toBe("A");
|
|
195
|
+
expect(breakdown[0]!.percentOfTrace).toBeCloseTo(75, 3);
|
|
196
|
+
expect(breakdown[1]!.primaryEntityId).toBe("B");
|
|
197
|
+
expect(breakdown[1]!.percentOfTrace).toBeCloseTo(25, 3);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
test("an empty span list has no breakdown", () => {
|
|
201
|
+
expect(CriticalPathUtil.computeServiceBreakdown([])).toEqual([]);
|
|
202
|
+
});
|
|
178
203
|
});
|
package/Types/AI/AIChatTypes.ts
CHANGED
|
@@ -210,6 +210,14 @@ export interface AIRunEventResultSummary {
|
|
|
210
210
|
message?: string | undefined;
|
|
211
211
|
// Log severity for ProgressLog events (Info/Warning/Error/…).
|
|
212
212
|
severity?: string | undefined;
|
|
213
|
+
/*
|
|
214
|
+
* The server-minted citation label and deep-link target of the tool call
|
|
215
|
+
* that completed (ToolCallCompleted events of autonomous investigations).
|
|
216
|
+
* Persisted so the investigation panel can show exactly what each [C#]
|
|
217
|
+
* checked without re-parsing the report text.
|
|
218
|
+
*/
|
|
219
|
+
citationLabel?: string | undefined;
|
|
220
|
+
citationTarget?: AIChatCitationTarget | undefined;
|
|
213
221
|
}
|
|
214
222
|
|
|
215
223
|
/*
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { JSONObject } from "../JSON";
|
|
2
|
+
import { AIChatCitationTarget, AIChatWidget } from "./AIChatTypes";
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Structured evidence for an AI investigation report. The report markdown only
|
|
6
|
+
* carries a flat "Evidence checked" list of labels; the investigation panel
|
|
7
|
+
* needs to know what each citation actually queried so a responder can open
|
|
8
|
+
* it, see its arguments and load the rows behind it.
|
|
9
|
+
*
|
|
10
|
+
* Everything here is derived server-side from the run's own AIRunEvents
|
|
11
|
+
* (never from model-authored text), so a prompt-injected report cannot forge
|
|
12
|
+
* a citation's tool, arguments or deep link.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* One read-only query the investigation ran, keyed by its citation id. The
|
|
17
|
+
* report's inline [C#] markers refer to these.
|
|
18
|
+
*/
|
|
19
|
+
export interface InvestigationEvidenceItem {
|
|
20
|
+
// "C1", "C2" — sequential within the attempt that produced the report.
|
|
21
|
+
citationId: string;
|
|
22
|
+
toolName: string;
|
|
23
|
+
// Server-minted citation label, e.g. "Active incidents (7 total)".
|
|
24
|
+
label: string;
|
|
25
|
+
// Rows the query returned. 0 is meaningful: checked, found nothing.
|
|
26
|
+
rowCount: number;
|
|
27
|
+
durationInMs?: number | undefined;
|
|
28
|
+
/*
|
|
29
|
+
* The tool arguments as executed, reduced to primitives and arrays of
|
|
30
|
+
* primitives with long strings clipped, so the panel can show what was
|
|
31
|
+
* asked without shipping arbitrary JSON to every viewer.
|
|
32
|
+
*/
|
|
33
|
+
queryArguments: JSONObject;
|
|
34
|
+
// Where the underlying data lives in the dashboard, when there is a page for it.
|
|
35
|
+
target?: AIChatCitationTarget | undefined;
|
|
36
|
+
// ISO timestamp of when the query ran.
|
|
37
|
+
executedAt?: string | undefined;
|
|
38
|
+
/*
|
|
39
|
+
* Whether POST /ai-investigation/evidence can re-run this query for the
|
|
40
|
+
* viewer. False for tools that are not part of the read-only toolbox.
|
|
41
|
+
*/
|
|
42
|
+
canLoadRows: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type InvestigationReferenceKind = "incident" | "alert";
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* An incident or alert the report mentions by number ("#6954"), resolved
|
|
49
|
+
* against the project's own records under the VIEWER's permissions. Only
|
|
50
|
+
* numbers that resolve become links; everything else stays plain text.
|
|
51
|
+
*/
|
|
52
|
+
export interface InvestigationEventReference {
|
|
53
|
+
kind: InvestigationReferenceKind;
|
|
54
|
+
number: number;
|
|
55
|
+
// ObjectID of the incident/alert as a string.
|
|
56
|
+
id: string;
|
|
57
|
+
// incidentNumberWithPrefix / alertNumberWithPrefix, or "#<number>".
|
|
58
|
+
displayNumber: string;
|
|
59
|
+
title: string;
|
|
60
|
+
stateName?: string | undefined;
|
|
61
|
+
// Hex color of the current state, e.g. "#10b981".
|
|
62
|
+
stateColor?: string | undefined;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* Response of POST /ai-investigation/evidence: one citation's query re-run
|
|
67
|
+
* with the viewer's own permissions.
|
|
68
|
+
*/
|
|
69
|
+
export interface InvestigationEvidenceRowsResponse {
|
|
70
|
+
citationId: string;
|
|
71
|
+
toolName: string;
|
|
72
|
+
label: string;
|
|
73
|
+
rowCount: number;
|
|
74
|
+
/*
|
|
75
|
+
* Rendered with the dashboard's AI chat widget renderers (incident list,
|
|
76
|
+
* table, chart, trace waterfall...). Built from rows the viewer can read.
|
|
77
|
+
*/
|
|
78
|
+
widget?: AIChatWidget | undefined;
|
|
79
|
+
/*
|
|
80
|
+
* Plain-text rows for tools that have no widget. Never markdown — the panel
|
|
81
|
+
* renders it inside a <pre>.
|
|
82
|
+
*/
|
|
83
|
+
text?: string | undefined;
|
|
84
|
+
isTruncated: boolean;
|
|
85
|
+
// When this re-run executed (ISO).
|
|
86
|
+
executedAt: string;
|
|
87
|
+
/*
|
|
88
|
+
* True when the query's time window was pinned to the original
|
|
89
|
+
* investigation (explicit start/end), so the rows match what the AI saw
|
|
90
|
+
* apart from retention and permissions. False means the query reflects
|
|
91
|
+
* current data (e.g. "active incidents").
|
|
92
|
+
*/
|
|
93
|
+
isPinnedToInvestigationTime: boolean;
|
|
94
|
+
// When the original query ran (ISO), if known.
|
|
95
|
+
investigatedAt?: string | undefined;
|
|
96
|
+
}
|
|
@@ -13,6 +13,10 @@ export type MonitorEvaluationEventType =
|
|
|
13
13
|
| "monitor-status-changed"
|
|
14
14
|
| "probe-agreement";
|
|
15
15
|
|
|
16
|
+
export type MonitorEvaluationCriteriaSkipCause =
|
|
17
|
+
| "disabled"
|
|
18
|
+
| "earlier-criterion-matched";
|
|
19
|
+
|
|
16
20
|
export interface MonitorEvaluationFilterResult {
|
|
17
21
|
checkOn: CheckOn;
|
|
18
22
|
filterType?: FilterType | undefined;
|
|
@@ -30,6 +34,7 @@ export interface MonitorEvaluationCriteriaResult {
|
|
|
30
34
|
filters: Array<MonitorEvaluationFilterResult>;
|
|
31
35
|
skipped?: boolean | undefined;
|
|
32
36
|
skipReason?: string | undefined;
|
|
37
|
+
skipCause?: MonitorEvaluationCriteriaSkipCause | undefined;
|
|
33
38
|
}
|
|
34
39
|
|
|
35
40
|
export interface MonitorEvaluationEvent {
|
package/Types/Permission.ts
CHANGED
|
@@ -2445,7 +2445,7 @@ export class PermissionHelper {
|
|
|
2445
2445
|
permission: Permission.SecurityAdmin,
|
|
2446
2446
|
title: "Security Admin",
|
|
2447
2447
|
description:
|
|
2448
|
-
"Full control over the SIEM: security events, Sigma detection rules, threat intelligence feeds and indicators, and Google SecOps
|
|
2448
|
+
"Full control over the SIEM: security events, Sigma detection rules, threat intelligence feeds and indicators, and security event connections (Google SecOps, Microsoft Sentinel, CrowdStrike Falcon and other sources). Security data is not readable through any other role.",
|
|
2449
2449
|
isAssignableToTenant: true,
|
|
2450
2450
|
isAccessControlPermission: false,
|
|
2451
2451
|
isRolePermission: true,
|
|
@@ -2455,7 +2455,7 @@ export class PermissionHelper {
|
|
|
2455
2455
|
permission: Permission.SecurityMember,
|
|
2456
2456
|
title: "Security Member",
|
|
2457
2457
|
description:
|
|
2458
|
-
"Can read security events and threat intelligence, and create, edit, and delete detection rules and threat intel feeds. Cannot configure
|
|
2458
|
+
"Can read security events and threat intelligence, and create, edit, and delete detection rules and threat intel feeds. Cannot configure security event connections.",
|
|
2459
2459
|
isAssignableToTenant: true,
|
|
2460
2460
|
isAccessControlPermission: false,
|
|
2461
2461
|
isRolePermission: true,
|
|
@@ -130,6 +130,48 @@ export const SESSION_REPLAY_ROLLING_BUFFER_BYTES: number = 2 * 1024 * 1024;
|
|
|
130
130
|
export const SESSION_REPLAY_IDLE_ROLLOVER_MS: number = 30 * 60 * 1000;
|
|
131
131
|
export const SESSION_REPLAY_MAX_SESSION_MS: number = 4 * 60 * 60 * 1000;
|
|
132
132
|
|
|
133
|
+
/*
|
|
134
|
+
* When a recording counts as over.
|
|
135
|
+
*
|
|
136
|
+
* A session is finalized - its aggregates counted and its "Recording now"
|
|
137
|
+
* badge dropped - either when no chunk has arrived for
|
|
138
|
+
* SESSION_REPLAY_IDLE_FINALIZE_MS, or, much sooner, once every tab of it
|
|
139
|
+
* has ended (see Common/Utils/Rum/SessionReplayRecordingEnded.ts: the
|
|
140
|
+
* recorder seals a tab on pagehide) and SESSION_REPLAY_ENDED_FINALIZE_GRACE_MS
|
|
141
|
+
* has passed since the server stored the newest chunk of any of those tabs.
|
|
142
|
+
* The Dashboard applies the same grace before it calls a session "ended",
|
|
143
|
+
* so the list, the player and the finalizer agree.
|
|
144
|
+
*
|
|
145
|
+
* The idle window stays long because a live tab can be silent for minutes:
|
|
146
|
+
* the recorder only flushes when something happened. The grace is short
|
|
147
|
+
* because a final chunk says the tab is gone; it only has to cover the next
|
|
148
|
+
* page of a multi-page app registering its first chunk under the same
|
|
149
|
+
* session id (up to one flush interval after it loads), and a queue backlog
|
|
150
|
+
* between the two.
|
|
151
|
+
*/
|
|
152
|
+
export const SESSION_REPLAY_IDLE_FINALIZE_MS: number = 10 * 60 * 1000;
|
|
153
|
+
export const SESSION_REPLAY_ENDED_FINALIZE_GRACE_MS: number = 60 * 1000;
|
|
154
|
+
|
|
155
|
+
/*
|
|
156
|
+
* How long after its final chunk's END a tab may still have started a chunk
|
|
157
|
+
* and be counted as ended.
|
|
158
|
+
*
|
|
159
|
+
* Older recorders, which stay cached on customer pages for as long as the
|
|
160
|
+
* pinned artifact lives, can post one more non-final chunk after the final
|
|
161
|
+
* one: on a visible tab the browser fires pagehide BEFORE visibilitychange,
|
|
162
|
+
* and their hidden handler flushed the visibility event it had just
|
|
163
|
+
* recorded. That trailing chunk starts at pagehide, but a chunk's end is
|
|
164
|
+
* its LAST BUFFERED EVENT, which can be up to one flush interval before
|
|
165
|
+
* pagehide when the user sat still before closing the tab. Hence one flush
|
|
166
|
+
* interval plus a margin for timer throttling.
|
|
167
|
+
*
|
|
168
|
+
* Nothing legitimate records under the same (session, tab) after a seal
|
|
169
|
+
* other than a back/forward-cache restore, and current recorders give a
|
|
170
|
+
* restored page a new tab id, so a wider bound cannot hide a live tab.
|
|
171
|
+
*/
|
|
172
|
+
export const SESSION_REPLAY_ENDED_TRAILING_CHUNK_TOLERANCE_MS: number =
|
|
173
|
+
SESSION_REPLAY_FLUSH_INTERVAL_MS + 10 * 1000;
|
|
174
|
+
|
|
133
175
|
/*
|
|
134
176
|
* fetch(keepalive) quota is 64KB combined per origin across all in-flight
|
|
135
177
|
* keepalive requests, so the terminal flush gets one request under this
|
|
@@ -153,6 +195,27 @@ export const SESSION_REPLAY_CONTENT_TYPE: string =
|
|
|
153
195
|
export const SESSION_REPLAY_APP_IDENTIFIER_HEADER: string =
|
|
154
196
|
"x-oneuptime-app-identifier";
|
|
155
197
|
|
|
198
|
+
/*
|
|
199
|
+
* The transport surface that is asking for replay policy. This is separate
|
|
200
|
+
* from the recorderKind inside a chunk envelope because authentication runs
|
|
201
|
+
* before the request body is read. Absence deliberately means the historic
|
|
202
|
+
* DOM recorder; only the exact `rn-view-tree` value selects the mobile
|
|
203
|
+
* contract.
|
|
204
|
+
*/
|
|
205
|
+
export const SESSION_REPLAY_RECORDER_KIND_HEADER: string =
|
|
206
|
+
"x-oneuptime-replay-recorder-kind";
|
|
207
|
+
|
|
208
|
+
/*
|
|
209
|
+
* Native applications have no browser-controlled Origin header. The mobile
|
|
210
|
+
* recorder sends its Android package name / iOS bundle identifier here and
|
|
211
|
+
* the ingest guard maps it to an exact app:// origin for allowlist matching.
|
|
212
|
+
* It is not the RUM application identifier above: several app binaries may
|
|
213
|
+
* intentionally report to one configured RUM application.
|
|
214
|
+
*/
|
|
215
|
+
export const SESSION_REPLAY_MOBILE_APP_IDENTIFIER_HEADER: string =
|
|
216
|
+
"x-oneuptime-mobile-app-identifier";
|
|
217
|
+
export const SESSION_REPLAY_MAX_MOBILE_APP_IDENTIFIER_LENGTH: number = 255;
|
|
218
|
+
|
|
156
219
|
/*
|
|
157
220
|
* Header carrying the host page's end-user reference on the CONFIG fetch,
|
|
158
221
|
* URI-component-encoded so a non-ASCII reference cannot make fetch() throw
|
|
@@ -329,12 +392,50 @@ export const SESSION_REPLAY_RECORDER_CAPABILITIES: ReadonlyArray<string> = [
|
|
|
329
392
|
"mousemove-50ms",
|
|
330
393
|
];
|
|
331
394
|
|
|
395
|
+
/*
|
|
396
|
+
* Capabilities emitted by the React Native recorder on its first chunk.
|
|
397
|
+
* Kept separate from the DOM baseline above: otherwise every perfectly
|
|
398
|
+
* healthy web recording would appear to be missing mobile-only features.
|
|
399
|
+
*/
|
|
400
|
+
export const SESSION_REPLAY_MOBILE_RECORDER_CAPABILITIES: ReadonlyArray<string> =
|
|
401
|
+
[
|
|
402
|
+
"mobile-view-tree",
|
|
403
|
+
"mobile-touch-events",
|
|
404
|
+
"custom-events",
|
|
405
|
+
"traits",
|
|
406
|
+
"tags",
|
|
407
|
+
"visibility",
|
|
408
|
+
"visitor-id",
|
|
409
|
+
"route-events",
|
|
410
|
+
"js-errors",
|
|
411
|
+
];
|
|
412
|
+
|
|
332
413
|
/* How the payload bytes were compressed by the recorder. */
|
|
333
414
|
export type SessionReplayPayloadEncoding = "gzip" | "identity";
|
|
334
415
|
|
|
335
416
|
/* Which recorder produced the frame — web DOM, or a mobile view tree. */
|
|
336
417
|
export type SessionReplayRecorderKind = "dom" | "rn-view-tree";
|
|
337
418
|
|
|
419
|
+
/*
|
|
420
|
+
* Strict parser for the recorder-kind REQUEST header. The wire envelope has
|
|
421
|
+
* a backwards-compatible fallback for old stored chunks, but a config fetch
|
|
422
|
+
* must never silently reinterpret a typo as web policy. Header absence is
|
|
423
|
+
* the only legacy fallback.
|
|
424
|
+
*/
|
|
425
|
+
export function parseSessionReplayRecorderKindHeader(
|
|
426
|
+
value: unknown,
|
|
427
|
+
): SessionReplayRecorderKind | null {
|
|
428
|
+
if (value === undefined || value === null) {
|
|
429
|
+
return "dom";
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
if (value === "dom" || value === "rn-view-tree") {
|
|
433
|
+
return value;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
438
|
+
|
|
338
439
|
/* State of the consent handshake at the moment the chunk was cut. */
|
|
339
440
|
export type SessionReplayConsentState = "Granted" | "NotRequired" | "Unknown";
|
|
340
441
|
|
|
@@ -383,6 +484,14 @@ export enum SessionReplayFidelityNotice {
|
|
|
383
484
|
* footage recovers, but playback may skip or freeze around those points.
|
|
384
485
|
*/
|
|
385
486
|
RecorderError = "recorder-error",
|
|
487
|
+
/* Native Image pixels are represented by an opaque placeholder. */
|
|
488
|
+
MobileImagesOpaque = "mobile-images-opaque",
|
|
489
|
+
/* WebView contents cannot be inspected from the React Native view tree. */
|
|
490
|
+
MobileWebViewOpaque = "mobile-webview-opaque",
|
|
491
|
+
/* Native canvas / drawing surfaces are represented as opaque regions. */
|
|
492
|
+
MobileCanvasOpaque = "mobile-canvas-opaque",
|
|
493
|
+
/* Animation state is sampled at snapshots rather than reproduced framewise. */
|
|
494
|
+
MobileAnimationSampled = "mobile-animation-sampled",
|
|
386
495
|
}
|
|
387
496
|
|
|
388
497
|
/* Why a session stopped accumulating chunks. */
|
|
@@ -191,6 +191,17 @@ export interface SessionReplayListItemDto {
|
|
|
191
191
|
* and what the player's "other sessions from this visitor" reads.
|
|
192
192
|
*/
|
|
193
193
|
visitorId?: string;
|
|
194
|
+
/*
|
|
195
|
+
* Additive. True when the session is not finalized yet but every tab of
|
|
196
|
+
* it has ended - sent its final chunk, or stored its last permitted chunk
|
|
197
|
+
* index - and the newest of its chunks was stored at least
|
|
198
|
+
* SESSION_REPLAY_ENDED_FINALIZE_GRACE_MS ago (see
|
|
199
|
+
* Common/Utils/Rum/SessionReplayRecordingEnded.ts): the recording is
|
|
200
|
+
* over and only the finalizer's counting is pending. Always false for a
|
|
201
|
+
* finalized session, and absent from an older server, where the
|
|
202
|
+
* Dashboard falls back to reading "not finalized" as "recording".
|
|
203
|
+
*/
|
|
204
|
+
hasRecordingEnded?: boolean;
|
|
194
205
|
}
|
|
195
206
|
|
|
196
207
|
export interface SessionReplayListResponseDto {
|
|
@@ -435,6 +446,12 @@ export interface SessionReplayManifestHeaderDto {
|
|
|
435
446
|
*/
|
|
436
447
|
identifiedUserKey?: string;
|
|
437
448
|
visitorId?: string;
|
|
449
|
+
/*
|
|
450
|
+
* Additive; same meaning as SessionReplayListItemDto.hasRecordingEnded.
|
|
451
|
+
* The player uses it to stop calling a session "Live" once every tab has
|
|
452
|
+
* closed, while it keeps polling until the finalized header arrives.
|
|
453
|
+
*/
|
|
454
|
+
hasRecordingEnded?: boolean;
|
|
438
455
|
}
|
|
439
456
|
|
|
440
457
|
export interface SessionReplayManifestTabDto {
|
|
@@ -532,6 +549,20 @@ export interface SessionReplayViewsResponseDto {
|
|
|
532
549
|
|
|
533
550
|
export interface SessionReplayForExceptionRequestDto {
|
|
534
551
|
fingerprint: string;
|
|
552
|
+
/*
|
|
553
|
+
* Optional exception-group scope. Fingerprints are unique only within a
|
|
554
|
+
* primary entity, so callers that know the group must send this to avoid
|
|
555
|
+
* matching an identically fingerprinted exception from another service.
|
|
556
|
+
*/
|
|
557
|
+
primaryEntityId?: string;
|
|
558
|
+
/*
|
|
559
|
+
* New callers send this wire value with primaryEntityId. The server validates
|
|
560
|
+
* it against ServiceType before using it; keeping the transport contract a
|
|
561
|
+
* string also keeps this dependency-free Rum module safe to inline in the
|
|
562
|
+
* browser recorder. The server accepts an ID-only rolling-compatibility
|
|
563
|
+
* request through a conservative scoped-unknown path.
|
|
564
|
+
*/
|
|
565
|
+
primaryEntityType?: string;
|
|
535
566
|
/* ISO-8601 bounds; without them the server defaults to a 30-day window. */
|
|
536
567
|
startTime?: string;
|
|
537
568
|
endTime?: string;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { JSONObject } from "../../JSON";
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* The shape every "Test connection" produces, whichever source is behind
|
|
5
|
+
* it — Google SecOps and every provider in the Security Event Connections
|
|
6
|
+
* framework return the same report, so one dashboard component renders
|
|
7
|
+
* all of them.
|
|
8
|
+
*
|
|
9
|
+
* A report is a checklist, not a boolean. The customer complaint this was
|
|
10
|
+
* built for ("connected, but nothing is ingested") is never answered by
|
|
11
|
+
* "credentials accepted": it needs, in order, whether the source can be
|
|
12
|
+
* reached, whether it allows reading detections, whether there is
|
|
13
|
+
* anything to import right now, and whether OneUptime's own scheduler and
|
|
14
|
+
* workers are actually running. Each of those is a check with its own
|
|
15
|
+
* remediation text, so a failed step tells the reader what to do next
|
|
16
|
+
* instead of leaving them with a status word.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export type SecurityConnectorCheckStatus = "pass" | "fail" | "warn" | "skip";
|
|
20
|
+
|
|
21
|
+
export interface SecurityConnectorCheck {
|
|
22
|
+
/*
|
|
23
|
+
* Stable machine key (kebab-case), e.g. "authentication",
|
|
24
|
+
* "worker-consumers". UI groups and tests key off it; the human name may
|
|
25
|
+
* be reworded freely.
|
|
26
|
+
*/
|
|
27
|
+
key: string;
|
|
28
|
+
name: string;
|
|
29
|
+
status: SecurityConnectorCheckStatus;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
// What was observed, in one or two sentences. Credentials are never here.
|
|
32
|
+
message: string;
|
|
33
|
+
// What to do when the check did not pass. Omitted for passing checks.
|
|
34
|
+
remediation?: string | undefined;
|
|
35
|
+
// Structured extras for the UI (counts, timestamps). Never credentials.
|
|
36
|
+
details?: JSONObject | undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* What the tester could learn about the OneUptime deployment itself. Every
|
|
41
|
+
* probe is independently best-effort: `null` means "could not determine",
|
|
42
|
+
* which the UI renders as unknown rather than as healthy.
|
|
43
|
+
*/
|
|
44
|
+
export interface ConnectorPlatformStatus {
|
|
45
|
+
// Processes consuming the Worker queue (BullMQ getWorkersCount).
|
|
46
|
+
workerConsumers: number | null;
|
|
47
|
+
// Whether the minute-cadence poll scheduler is registered on the queue.
|
|
48
|
+
schedulerRegistered: boolean | null;
|
|
49
|
+
schedulerNextRunAt?: string | undefined;
|
|
50
|
+
queueWaiting: number | null;
|
|
51
|
+
queueFailed: number | null;
|
|
52
|
+
// Whether the analytics database that stores security events answered.
|
|
53
|
+
storageReachable: boolean | null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface SecurityConnectorSample {
|
|
57
|
+
id: string;
|
|
58
|
+
title: string;
|
|
59
|
+
severity: string;
|
|
60
|
+
// When the source created the record.
|
|
61
|
+
createdTime?: string | undefined;
|
|
62
|
+
// The record's own event/detection time, which may be much earlier.
|
|
63
|
+
eventTime?: string | undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type SecurityConnectorTestStatus = "pass" | "fail" | "warn";
|
|
67
|
+
|
|
68
|
+
export interface SecurityConnectorTestReport {
|
|
69
|
+
// Provider identifier, e.g. "google-secops" or a SecurityEventConnectorProvider value.
|
|
70
|
+
provider: string;
|
|
71
|
+
status: SecurityConnectorTestStatus;
|
|
72
|
+
startedAt: string;
|
|
73
|
+
completedAt: string;
|
|
74
|
+
durationMs: number;
|
|
75
|
+
checks: Array<SecurityConnectorCheck>;
|
|
76
|
+
// One-paragraph verdict written for the person reading the modal.
|
|
77
|
+
summary: string;
|
|
78
|
+
platform?: ConnectorPlatformStatus | undefined;
|
|
79
|
+
/*
|
|
80
|
+
* Availability counts, keyed by a stable name the UI knows how to label,
|
|
81
|
+
* e.g. { createdLast24h: 12, createdLast7d: 140, hasMoreLast7d: false }.
|
|
82
|
+
*/
|
|
83
|
+
counts?: JSONObject | undefined;
|
|
84
|
+
samples?: Array<SecurityConnectorSample> | undefined;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* Fold check statuses into the report verdict: any failure fails the
|
|
89
|
+
* report; otherwise any warning makes it a warning; skips are neutral.
|
|
90
|
+
*/
|
|
91
|
+
export function summarizeCheckStatuses(
|
|
92
|
+
checks: Array<SecurityConnectorCheck>,
|
|
93
|
+
): SecurityConnectorTestStatus {
|
|
94
|
+
if (
|
|
95
|
+
checks.some((check: SecurityConnectorCheck): boolean => {
|
|
96
|
+
return check.status === "fail";
|
|
97
|
+
})
|
|
98
|
+
) {
|
|
99
|
+
return "fail";
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (
|
|
103
|
+
checks.some((check: SecurityConnectorCheck): boolean => {
|
|
104
|
+
return check.status === "warn";
|
|
105
|
+
})
|
|
106
|
+
) {
|
|
107
|
+
return "warn";
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return "pass";
|
|
111
|
+
}
|