@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.
Files changed (673) hide show
  1. package/Models/DatabaseModels/Index.ts +4 -0
  2. package/Models/DatabaseModels/RumApplication.ts +1 -1
  3. package/Models/DatabaseModels/SecurityEventConnection.ts +457 -0
  4. package/Models/DatabaseModels/SecurityEventConnectionRun.ts +263 -0
  5. package/Models/DatabaseModels/TelemetryIngestionKey.ts +2 -2
  6. package/Server/API/AIInvestigationAPI.ts +484 -24
  7. package/Server/API/GoogleSecOpsConnectionAPI.ts +249 -8
  8. package/Server/API/SecurityEventConnectionAPI.ts +250 -0
  9. package/Server/API/TelemetryAPI.ts +402 -265
  10. package/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.ts +99 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  12. package/Server/Middleware/TelemetryIngest.ts +101 -6
  13. package/Server/Services/ExceptionAggregationService.ts +7 -16
  14. package/Server/Services/GoogleSecOpsConnectionService.ts +15 -0
  15. package/Server/Services/Index.ts +4 -0
  16. package/Server/Services/InventoryItemService.ts +28 -0
  17. package/Server/Services/LogAggregationService.ts +17 -23
  18. package/Server/Services/MetricAggregationService.ts +4 -14
  19. package/Server/Services/SecurityEventConnectionRunService.ts +10 -0
  20. package/Server/Services/SecurityEventConnectionService.ts +538 -0
  21. package/Server/Services/TraceAggregationService.ts +77 -28
  22. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
  23. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +13 -1
  24. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +15 -1
  25. package/Server/Utils/AI/SRE/InvestigationEvidence.ts +658 -0
  26. package/Server/Utils/AI/SRE/InvestigationReferences.ts +324 -0
  27. package/Server/Utils/AI/Toolbox/Index.ts +38 -0
  28. package/Server/Utils/AI/Toolbox/TimelineTools.ts +9 -2
  29. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +80 -0
  30. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +5 -3
  31. package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.ts +1108 -0
  32. package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.ts +732 -0
  33. package/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.ts +495 -0
  34. package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.ts +689 -0
  35. package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.ts +767 -0
  36. package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.ts +571 -0
  37. package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.ts +827 -0
  38. package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.ts +610 -0
  39. package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.ts +549 -0
  40. package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.ts +830 -0
  41. package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.ts +684 -0
  42. package/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.ts +487 -0
  43. package/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.ts +778 -0
  44. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.ts +1002 -0
  45. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.ts +556 -0
  46. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.ts +275 -0
  47. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.ts +53 -0
  48. package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.ts +709 -0
  49. package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.ts +596 -0
  50. package/Server/Utils/SecurityEvent/Connectors/Types.ts +191 -0
  51. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.ts +353 -65
  52. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.ts +777 -0
  53. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +747 -148
  54. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.ts +48 -2
  55. package/Server/Utils/SecurityEvent/SecurityEventDedupe.ts +81 -0
  56. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +741 -40
  57. package/Server/Utils/StartServer.ts +10 -0
  58. package/Server/Utils/Telemetry/EntityRegistry.ts +8 -0
  59. package/Server/Utils/Telemetry/KubernetesResourceAttributes.ts +108 -0
  60. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +174 -93
  61. package/Server/Utils/Telemetry/ResourceFacetPlanner.ts +251 -0
  62. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +248 -413
  63. package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +668 -0
  64. package/Server/Utils/Telemetry/TraceContextPropagation.ts +348 -0
  65. package/Server/Utils/Telemetry.ts +18 -0
  66. package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +413 -0
  67. package/Tests/App/Dashboard/AIRootCauseFeedItem.test.tsx +285 -0
  68. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +242 -0
  69. package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +601 -15
  70. package/Tests/App/Dashboard/ChangeAlertStateAIHeader.test.tsx +835 -0
  71. package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +41 -0
  72. package/Tests/App/Dashboard/ConnectionTestModal.test.tsx +604 -0
  73. package/Tests/App/Dashboard/ConnectorTestReportView.test.tsx +738 -0
  74. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +153 -6
  75. package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +165 -0
  76. package/Tests/App/Dashboard/EpisodeChangeState.test.tsx +1069 -0
  77. package/Tests/App/Dashboard/EpisodeMembersCard.test.tsx +772 -0
  78. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +2354 -0
  79. package/Tests/App/Dashboard/EventOverviewSkeleton.test.tsx +210 -0
  80. package/Tests/App/Dashboard/EventStatBar.test.tsx +392 -0
  81. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +247 -0
  82. package/Tests/App/Dashboard/ExceptionAIAssistance.test.tsx +606 -0
  83. package/Tests/App/Dashboard/ExceptionBreadcrumbTimeline.test.tsx +273 -0
  84. package/Tests/App/Dashboard/ExceptionDetailSideMenu.test.tsx +176 -0
  85. package/Tests/App/Dashboard/ExceptionOverviewCards.test.tsx +366 -0
  86. package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +371 -0
  87. package/Tests/App/Dashboard/ExceptionStackFrameViewer.test.tsx +440 -0
  88. package/Tests/App/Dashboard/ExceptionSummary.test.tsx +381 -0
  89. package/Tests/App/Dashboard/ExceptionTriage.test.tsx +306 -0
  90. package/Tests/App/Dashboard/ExceptionsResourceFacets.test.tsx +604 -0
  91. package/Tests/App/Dashboard/ExceptionsViewerEntityChips.test.tsx +706 -0
  92. package/Tests/App/Dashboard/FeedOrdering.test.ts +32 -0
  93. package/Tests/App/Dashboard/GoogleSecOpsConnectionForm.test.tsx +838 -0
  94. package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +18 -0
  95. package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +297 -20
  96. package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +618 -13
  97. package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +254 -207
  98. package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +303 -135
  99. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +1251 -0
  100. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +303 -0
  101. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +876 -8
  102. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +35 -0
  103. package/Tests/App/Dashboard/InvestigationReferenceLink.test.tsx +177 -0
  104. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +1295 -0
  105. package/Tests/App/Dashboard/KubernetesImageReferenceView.test.tsx +114 -0
  106. package/Tests/App/Dashboard/KubernetesLogsTabChips.test.tsx +285 -0
  107. package/Tests/App/Dashboard/LogsEntityChipNames.test.tsx +316 -0
  108. package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +361 -0
  109. package/Tests/App/Dashboard/ProfileTableEntityNames.test.tsx +432 -0
  110. package/Tests/App/Dashboard/ProfileViewEntityName.test.tsx +250 -0
  111. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +10 -0
  112. package/Tests/App/Dashboard/ResourceLogsTabsBareLayout.test.tsx +700 -0
  113. package/Tests/App/Dashboard/ResourcePageEntityNameProps.test.tsx +803 -0
  114. package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +11 -1
  115. package/Tests/App/Dashboard/ScheduledMaintenanceChangeState.test.tsx +1026 -0
  116. package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +436 -0
  117. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +1195 -0
  118. package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +1022 -0
  119. package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +905 -0
  120. package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +247 -0
  121. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +375 -274
  122. package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +410 -0
  123. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +774 -0
  124. package/Tests/App/Dashboard/TopErrorsPanelResourceNames.test.tsx +316 -0
  125. package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +30 -0
  126. package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +88 -24
  127. package/Tests/App/Dashboard/TraceExplorer.test.tsx +1590 -0
  128. package/Tests/App/Dashboard/TraceWaterfall.test.tsx +488 -0
  129. package/Tests/App/Dashboard/TracesAnalyticsSeriesLabels.test.tsx +367 -0
  130. package/Tests/App/Dashboard/TracesEntityNames.test.tsx +585 -0
  131. package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +613 -0
  132. package/Tests/App/Dashboard/UseServiceNames.test.tsx +359 -0
  133. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +7 -0
  134. package/Tests/Models/InventoryItemNaming.test.ts +132 -16
  135. package/Tests/Models/SecurityDomainAccessControl.test.ts +61 -17
  136. package/Tests/Server/API/AIInvestigationAPI.test.ts +611 -2
  137. package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +1098 -0
  138. package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +409 -0
  139. package/Tests/Server/API/SecurityEventConnectionAPI.test.ts +856 -0
  140. package/Tests/Server/API/SessionReplayAPI.test.ts +528 -1
  141. package/Tests/Server/API/TelemetryFacetsAPI.test.ts +810 -0
  142. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +240 -0
  143. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +229 -0
  144. package/Tests/Server/Services/InventoryItemDisplayName.test.ts +66 -0
  145. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  146. package/Tests/Server/Services/SecurityEventConnectionService.test.ts +1233 -0
  147. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +53 -0
  148. package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +218 -0
  149. package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +155 -1
  150. package/Tests/Server/Services/TraceAggregationExceptionScope.test.ts +142 -0
  151. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +85 -24
  152. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +33 -0
  153. package/Tests/Server/Utils/AI/InvestigationEvidence.test.ts +1395 -0
  154. package/Tests/Server/Utils/AI/InvestigationReferences.test.ts +616 -0
  155. package/Tests/Server/Utils/AI/TimelineTools.test.ts +119 -0
  156. package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +151 -0
  157. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +65 -0
  158. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorExceptionScope.test.ts +224 -0
  159. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +55 -2
  160. package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.test.ts +1240 -0
  161. package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.test.ts +1853 -0
  162. package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.test.ts +1129 -0
  163. package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.test.ts +1066 -0
  164. package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.test.ts +1568 -0
  165. package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.test.ts +930 -0
  166. package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.test.ts +1409 -0
  167. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.test.ts +763 -0
  168. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.test.ts +1296 -0
  169. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.test.ts +1102 -0
  170. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.test.ts +1174 -0
  171. package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.test.ts +1032 -0
  172. package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.test.ts +1558 -0
  173. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.test.ts +3041 -0
  174. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.test.ts +1168 -0
  175. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.test.ts +906 -0
  176. package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.test.ts +1068 -0
  177. package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.test.ts +1004 -0
  178. package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.test.ts +784 -0
  179. package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +113 -1
  180. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsClient.test.ts +5 -1
  181. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +93 -13
  182. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsHttpIntegration.test.ts +23 -1
  183. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +25 -3
  184. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +22 -8
  185. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +82 -16
  186. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsSearchDetections.test.ts +730 -0
  187. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsThreePassPoller.test.ts +1577 -0
  188. package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +41 -0
  189. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1453 -18
  190. package/Tests/Server/Utils/Telemetry/KubernetesResourceAttributes.test.ts +162 -0
  191. package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +460 -13
  192. package/Tests/Server/Utils/Telemetry/ResourceFacetPlanner.test.ts +678 -0
  193. package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +348 -2
  194. package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +525 -0
  195. package/Tests/Server/Utils/Telemetry/TraceContextPropagation.test.ts +420 -0
  196. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +73 -0
  197. package/Tests/Types/Rum/SessionReplayTransportContracts.test.ts +95 -0
  198. package/Tests/Types/SecurityEvent/Connectors/ConnectorDiagnostics.test.ts +82 -0
  199. package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +314 -0
  200. package/Tests/Types/Telemetry/ExceptionSpanScope.test.ts +89 -0
  201. package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +96 -0
  202. package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +304 -0
  203. package/Tests/UI/Components/ActiveFilterChipsLockedFilters.test.tsx +357 -0
  204. package/Tests/UI/Components/Card.test.tsx +312 -1
  205. package/Tests/UI/Components/CardModelDetailHeaderLayout.test.tsx +253 -0
  206. package/Tests/UI/Components/CardModelDetailRefresher.test.tsx +342 -0
  207. package/Tests/UI/Components/Checkbox.test.tsx +79 -0
  208. package/Tests/UI/Components/CopyTextButton.test.tsx +142 -0
  209. package/Tests/UI/Components/DetailCompactStyle.test.tsx +621 -0
  210. package/Tests/UI/Components/ErrorBoundary.test.tsx +60 -0
  211. package/Tests/UI/Components/FacetSections.test.tsx +581 -0
  212. package/Tests/UI/Components/FacetSidebarControls.test.tsx +812 -0
  213. package/Tests/UI/Components/FacetVisibility.test.ts +429 -0
  214. package/Tests/UI/Components/LockedFilterActions.test.tsx +396 -0
  215. package/Tests/UI/Components/LockedFilterChip.test.tsx +651 -0
  216. package/Tests/UI/Components/LogsEntityNames.test.ts +1769 -0
  217. package/Tests/UI/Components/LogsEntityNamesComponents.test.tsx +696 -0
  218. package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +600 -0
  219. package/Tests/UI/Components/LogsViewerEntityNames.test.tsx +713 -0
  220. package/Tests/UI/Components/MarkdownInlineReferences.test.tsx +2079 -0
  221. package/Tests/UI/Components/MemberRoleAssignment.test.tsx +446 -0
  222. package/Tests/UI/Components/ModelDetailRefetch.test.tsx +397 -0
  223. package/Tests/UI/Components/ModelListRefetch.test.tsx +233 -0
  224. package/Tests/UI/Components/ModelPageModelChange.test.tsx +409 -0
  225. package/Tests/UI/Components/PaginationIntegration.test.tsx +25 -0
  226. package/Tests/UI/Components/ResourceFacetConfigs.test.ts +172 -0
  227. package/Tests/UI/Components/SavedViewsSidebarIntegration.test.tsx +32 -14
  228. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +44 -1
  229. package/Tests/UI/Components/TelemetryActiveFilterChipsLockedFilters.test.tsx +304 -0
  230. package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +718 -0
  231. package/Tests/UI/Monitor/EvaluationLogList.test.tsx +303 -0
  232. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +55 -1
  233. package/Tests/UI/Rum/FidelityNotices.test.ts +22 -0
  234. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +120 -136
  235. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +988 -0
  236. package/Tests/UI/Rum/ReplayCard.test.tsx +32 -0
  237. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +709 -12
  238. package/Tests/UI/Rum/ReplayHeader.test.tsx +50 -1
  239. package/Tests/UI/Rum/ReplayPinControl.test.tsx +67 -10
  240. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +41 -12
  241. package/Tests/UI/Rum/ReplayStage.test.tsx +663 -1
  242. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +173 -0
  243. package/Tests/UI/Rum/ReplayUi.test.tsx +189 -2
  244. package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +91 -0
  245. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +1 -1
  246. package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +585 -0
  247. package/Tests/UI/Rum/SessionReplayTable.test.tsx +844 -51
  248. package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +29 -1
  249. package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +288 -0
  250. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +31 -1
  251. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +6 -0
  252. package/Tests/UI/Utils/Clipboard.test.ts +154 -0
  253. package/Tests/UI/Utils/Navigation.test.ts +24 -0
  254. package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +2205 -0
  255. package/Tests/UI/Utils/Telemetry/UseTelemetryEntityNames.test.tsx +844 -0
  256. package/Tests/Utils/AI/InvestigationReport.test.ts +2430 -0
  257. package/Tests/Utils/APIOutgoingRequestTracer.test.ts +137 -0
  258. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +40 -0
  259. package/Tests/Utils/Rum/SessionReplayRecordingEnded.test.ts +619 -0
  260. package/Tests/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.test.ts +631 -0
  261. package/Tests/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.test.ts +479 -0
  262. package/Tests/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.test.ts +507 -0
  263. package/Tests/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.test.ts +686 -0
  264. package/Tests/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.test.ts +474 -0
  265. package/Tests/Utils/SecurityEvent/Connectors/OktaNormalizer.test.ts +736 -0
  266. package/Tests/Utils/SecurityEvent/Connectors/SplunkNormalizer.test.ts +407 -0
  267. package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.test.ts +129 -0
  268. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +57 -1
  269. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +36 -0
  270. package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +600 -0
  271. package/Tests/Utils/Telemetry/NetworkHost.test.ts +48 -0
  272. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +154 -0
  273. package/Tests/Utils/Traces/CriticalPath.test.ts +25 -0
  274. package/Types/AI/AIChatTypes.ts +8 -0
  275. package/Types/AI/InvestigationEvidence.ts +96 -0
  276. package/Types/Monitor/MonitorEvaluationSummary.ts +5 -0
  277. package/Types/Permission.ts +2 -2
  278. package/Types/Rum/SessionReplay.ts +109 -0
  279. package/Types/Rum/SessionReplayApi.ts +31 -0
  280. package/Types/SecurityEvent/Connectors/ConnectorDiagnostics.ts +111 -0
  281. package/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.ts +87 -0
  282. package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +492 -0
  283. package/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.ts +41 -0
  284. package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +56 -1
  285. package/Types/SecurityEvent/GoogleSecOpsRegion.ts +34 -0
  286. package/Types/Telemetry/EntityType.ts +14 -0
  287. package/Types/Telemetry/ExceptionSpanScope.ts +83 -0
  288. package/Types/Telemetry/LockedFilterDetail.ts +46 -0
  289. package/Types/Telemetry/ResourceEntityFacet.ts +17 -10
  290. package/Types/Telemetry/ResourceFacetCatalog.ts +171 -0
  291. package/UI/Components/Card/Card.tsx +118 -83
  292. package/UI/Components/Checkbox/Checkbox.tsx +8 -5
  293. package/UI/Components/CopyTextButton/CopyTextButton.tsx +7 -1
  294. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +4 -1
  295. package/UI/Components/Detail/Detail.tsx +137 -22
  296. package/UI/Components/ErrorBoundary.tsx +38 -0
  297. package/UI/Components/LogsViewer/LogsEntityNames.ts +912 -0
  298. package/UI/Components/LogsViewer/LogsViewer.tsx +156 -77
  299. package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +28 -11
  300. package/UI/Components/LogsViewer/components/FacetSection.tsx +66 -79
  301. package/UI/Components/LogsViewer/components/FacetValueRow.tsx +17 -2
  302. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +45 -5
  303. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +100 -19
  304. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +156 -39
  305. package/UI/Components/LogsViewer/components/LogsTable.tsx +30 -8
  306. package/UI/Components/LogsViewer/types.ts +6 -0
  307. package/UI/Components/Markdown.tsx/InlineReferences.tsx +628 -0
  308. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +385 -312
  309. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +50 -22
  310. package/UI/Components/ModelDetail/CardModelDetail.tsx +15 -0
  311. package/UI/Components/ModelDetail/ModelDetail.tsx +64 -19
  312. package/UI/Components/ModelList/ModelList.tsx +33 -8
  313. package/UI/Components/Page/ModelPage.tsx +119 -54
  314. package/UI/Components/Table/Table.tsx +8 -0
  315. package/UI/Components/Table/TableRow.tsx +13 -5
  316. package/UI/Components/TelemetryViewer/FacetVisibility.ts +229 -0
  317. package/UI/Components/TelemetryViewer/ResourceFacetConfigs.ts +46 -0
  318. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +11 -0
  319. package/UI/Components/TelemetryViewer/components/FacetSearchInput.tsx +79 -0
  320. package/UI/Components/TelemetryViewer/components/FacetSectionHeader.tsx +69 -0
  321. package/UI/Components/TelemetryViewer/components/FacetShowMoreButton.tsx +36 -0
  322. package/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.tsx +88 -0
  323. package/UI/Components/TelemetryViewer/components/LockedFilterActions.tsx +205 -0
  324. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +496 -0
  325. package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +30 -10
  326. package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +203 -10
  327. package/UI/Components/TelemetryViewer/components/TelemetryFacetSection.tsx +60 -73
  328. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +94 -7
  329. package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +17 -2
  330. package/UI/Components/TelemetryViewer/types.ts +19 -0
  331. package/UI/Components/TelemetryViewer/useFacetSearchExemptions.ts +158 -0
  332. package/UI/Components/TelemetryViewer/useFacetSectionSearch.ts +102 -0
  333. package/UI/Utils/Clipboard.ts +68 -2
  334. package/UI/Utils/Navigation.ts +17 -2
  335. package/UI/Utils/Telemetry/TelemetryEntityNames.ts +620 -0
  336. package/UI/Utils/Telemetry/UseTelemetryEntityNames.ts +151 -0
  337. package/Utils/AI/InvestigationReport.ts +1789 -0
  338. package/Utils/API.ts +90 -1
  339. package/Utils/Rum/SessionReplayHealth.ts +11 -0
  340. package/Utils/Rum/SessionReplayRecordingEnded.ts +134 -0
  341. package/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.ts +427 -0
  342. package/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.ts +197 -0
  343. package/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.ts +464 -0
  344. package/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.ts +567 -0
  345. package/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.ts +299 -0
  346. package/Utils/SecurityEvent/Connectors/OktaNormalizer.ts +467 -0
  347. package/Utils/SecurityEvent/Connectors/SplunkNormalizer.ts +439 -0
  348. package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +124 -12
  349. package/Utils/Telemetry/CrossSignalScope.ts +22 -8
  350. package/Utils/Telemetry/EntityRelationship.ts +8 -0
  351. package/Utils/Telemetry/LockedFilterSearch.ts +412 -0
  352. package/Utils/Telemetry/NetworkHost.ts +43 -0
  353. package/Utils/Telemetry/OriginAllowList.ts +139 -4
  354. package/Utils/Traces/CriticalPath.ts +10 -4
  355. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  356. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  357. package/build/dist/Models/DatabaseModels/RumApplication.js +1 -1
  358. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  359. package/build/dist/Models/DatabaseModels/SecurityEventConnection.js +490 -0
  360. package/build/dist/Models/DatabaseModels/SecurityEventConnection.js.map +1 -0
  361. package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js +287 -0
  362. package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js.map +1 -0
  363. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +2 -2
  364. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  365. package/build/dist/Server/API/AIInvestigationAPI.js +336 -27
  366. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  367. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +182 -7
  368. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +1 -1
  369. package/build/dist/Server/API/SecurityEventConnectionAPI.js +171 -0
  370. package/build/dist/Server/API/SecurityEventConnectionAPI.js.map +1 -0
  371. package/build/dist/Server/API/TelemetryAPI.js +248 -170
  372. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  373. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js +40 -0
  374. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js.map +1 -0
  375. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  376. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  377. package/build/dist/Server/Middleware/TelemetryIngest.js +57 -4
  378. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  379. package/build/dist/Server/Services/ExceptionAggregationService.js +7 -16
  380. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  381. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +8 -0
  382. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +1 -1
  383. package/build/dist/Server/Services/Index.js +4 -0
  384. package/build/dist/Server/Services/Index.js.map +1 -1
  385. package/build/dist/Server/Services/InventoryItemService.js +22 -0
  386. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  387. package/build/dist/Server/Services/LogAggregationService.js +8 -17
  388. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  389. package/build/dist/Server/Services/MetricAggregationService.js +4 -14
  390. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  391. package/build/dist/Server/Services/SecurityEventConnectionRunService.js +9 -0
  392. package/build/dist/Server/Services/SecurityEventConnectionRunService.js.map +1 -0
  393. package/build/dist/Server/Services/SecurityEventConnectionService.js +356 -0
  394. package/build/dist/Server/Services/SecurityEventConnectionService.js.map +1 -0
  395. package/build/dist/Server/Services/TraceAggregationService.js +51 -25
  396. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  397. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
  398. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  399. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
  400. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  401. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +14 -7
  402. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  403. package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js +468 -0
  404. package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js.map +1 -0
  405. package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js +230 -0
  406. package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js.map +1 -0
  407. package/build/dist/Server/Utils/AI/Toolbox/Index.js +32 -0
  408. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  409. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +6 -2
  410. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -1
  411. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +59 -0
  412. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  413. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +5 -3
  414. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  415. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js +752 -0
  416. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js.map +1 -0
  417. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js +493 -0
  418. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js.map +1 -0
  419. package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js +352 -0
  420. package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js.map +1 -0
  421. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js +405 -0
  422. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js.map +1 -0
  423. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js +466 -0
  424. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js.map +1 -0
  425. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js +344 -0
  426. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js.map +1 -0
  427. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js +511 -0
  428. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js.map +1 -0
  429. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js +406 -0
  430. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js.map +1 -0
  431. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js +336 -0
  432. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js.map +1 -0
  433. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js +474 -0
  434. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js.map +1 -0
  435. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js +417 -0
  436. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js.map +1 -0
  437. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js +314 -0
  438. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js.map +1 -0
  439. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js +494 -0
  440. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js.map +1 -0
  441. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js +719 -0
  442. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js.map +1 -0
  443. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js +404 -0
  444. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js.map +1 -0
  445. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js +209 -0
  446. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js.map +1 -0
  447. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js +40 -0
  448. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js.map +1 -0
  449. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js +494 -0
  450. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js.map +1 -0
  451. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js +379 -0
  452. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js.map +1 -0
  453. package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js +27 -0
  454. package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js.map +1 -0
  455. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js +234 -61
  456. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +1 -1
  457. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js +537 -0
  458. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsConnectionTester.js.map +1 -0
  459. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +572 -115
  460. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  461. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js +35 -1
  462. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +1 -1
  463. package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js +52 -0
  464. package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js.map +1 -0
  465. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +521 -32
  466. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  467. package/build/dist/Server/Utils/StartServer.js +10 -0
  468. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  469. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +8 -0
  470. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  471. package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js +80 -0
  472. package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js.map +1 -0
  473. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +122 -67
  474. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  475. package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js +146 -0
  476. package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js.map +1 -0
  477. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +174 -248
  478. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  479. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +492 -0
  480. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -0
  481. package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js +259 -0
  482. package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js.map +1 -0
  483. package/build/dist/Server/Utils/Telemetry.js +11 -5
  484. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  485. package/build/dist/Types/AI/InvestigationEvidence.js +2 -0
  486. package/build/dist/Types/AI/InvestigationEvidence.js.map +1 -0
  487. package/build/dist/Types/Permission.js +2 -2
  488. package/build/dist/Types/Permission.js.map +1 -1
  489. package/build/dist/Types/Rum/SessionReplay.js +95 -0
  490. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  491. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
  492. package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js +18 -0
  493. package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js.map +1 -0
  494. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js +2 -0
  495. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js.map +1 -0
  496. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +374 -0
  497. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -0
  498. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js +35 -0
  499. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js.map +1 -0
  500. package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js +35 -0
  501. package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js.map +1 -0
  502. package/build/dist/Types/Telemetry/EntityType.js +14 -0
  503. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  504. package/build/dist/Types/Telemetry/ExceptionSpanScope.js +59 -0
  505. package/build/dist/Types/Telemetry/ExceptionSpanScope.js.map +1 -0
  506. package/build/dist/Types/Telemetry/LockedFilterDetail.js +16 -0
  507. package/build/dist/Types/Telemetry/LockedFilterDetail.js.map +1 -0
  508. package/build/dist/Types/Telemetry/ResourceEntityFacet.js +16 -10
  509. package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -1
  510. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +119 -0
  511. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -0
  512. package/build/dist/UI/Components/Card/Card.js +34 -17
  513. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  514. package/build/dist/UI/Components/Checkbox/Checkbox.js +6 -4
  515. package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
  516. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  517. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  518. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +1 -1
  519. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  520. package/build/dist/UI/Components/Detail/Detail.js +63 -13
  521. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  522. package/build/dist/UI/Components/ErrorBoundary.js +34 -0
  523. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  524. package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js +535 -0
  525. package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js.map +1 -0
  526. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +117 -57
  527. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  528. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +5 -7
  529. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
  530. package/build/dist/UI/Components/LogsViewer/components/FacetSection.js +31 -44
  531. package/build/dist/UI/Components/LogsViewer/components/FacetSection.js.map +1 -1
  532. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +17 -3
  533. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
  534. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +19 -3
  535. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  536. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +64 -18
  537. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  538. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +100 -41
  539. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  540. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +13 -5
  541. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  542. package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
  543. package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js +403 -0
  544. package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js.map +1 -0
  545. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +197 -179
  546. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  547. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +30 -21
  548. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  549. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +12 -0
  550. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  551. package/build/dist/UI/Components/ModelDetail/ModelDetail.js +46 -12
  552. package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
  553. package/build/dist/UI/Components/ModelList/ModelList.js +26 -7
  554. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  555. package/build/dist/UI/Components/Page/ModelPage.js +62 -34
  556. package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
  557. package/build/dist/UI/Components/Table/Table.js +3 -1
  558. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  559. package/build/dist/UI/Components/Table/TableRow.js +8 -1
  560. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  561. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +111 -0
  562. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -0
  563. package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js +22 -0
  564. package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js.map +1 -0
  565. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +1 -1
  566. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  567. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js +36 -0
  568. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js.map +1 -0
  569. package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js +21 -0
  570. package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js.map +1 -0
  571. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js +14 -0
  572. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js.map +1 -0
  573. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js +27 -0
  574. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js.map +1 -0
  575. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js +88 -0
  576. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterActions.js.map +1 -0
  577. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +228 -0
  578. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -0
  579. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +6 -6
  580. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
  581. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +111 -12
  582. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
  583. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js +27 -40
  584. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js.map +1 -1
  585. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +70 -10
  586. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  587. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +17 -3
  588. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
  589. package/build/dist/UI/Components/TelemetryViewer/types.js +0 -4
  590. package/build/dist/UI/Components/TelemetryViewer/types.js.map +1 -1
  591. package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js +70 -0
  592. package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js.map +1 -0
  593. package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js +52 -0
  594. package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js.map +1 -0
  595. package/build/dist/UI/Utils/Clipboard.js +59 -2
  596. package/build/dist/UI/Utils/Clipboard.js.map +1 -1
  597. package/build/dist/UI/Utils/Navigation.js +11 -2
  598. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  599. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +471 -0
  600. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -0
  601. package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js +113 -0
  602. package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js.map +1 -0
  603. package/build/dist/Utils/AI/InvestigationReport.js +1241 -0
  604. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -0
  605. package/build/dist/Utils/API.js +25 -0
  606. package/build/dist/Utils/API.js.map +1 -1
  607. package/build/dist/Utils/Rum/SessionReplayHealth.js +10 -0
  608. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -1
  609. package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js +54 -0
  610. package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js.map +1 -0
  611. package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js +311 -0
  612. package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js.map +1 -0
  613. package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js +150 -0
  614. package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js.map +1 -0
  615. package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js +328 -0
  616. package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js.map +1 -0
  617. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js +405 -0
  618. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js.map +1 -0
  619. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js +212 -0
  620. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js.map +1 -0
  621. package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js +351 -0
  622. package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js.map +1 -0
  623. package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js +348 -0
  624. package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js.map +1 -0
  625. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +103 -10
  626. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
  627. package/build/dist/Utils/Telemetry/CrossSignalScope.js +16 -5
  628. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  629. package/build/dist/Utils/Telemetry/EntityRelationship.js +7 -0
  630. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  631. package/build/dist/Utils/Telemetry/LockedFilterSearch.js +277 -0
  632. package/build/dist/Utils/Telemetry/LockedFilterSearch.js.map +1 -0
  633. package/build/dist/Utils/Telemetry/NetworkHost.js +39 -0
  634. package/build/dist/Utils/Telemetry/NetworkHost.js.map +1 -0
  635. package/build/dist/Utils/Telemetry/OriginAllowList.js +105 -4
  636. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
  637. package/build/dist/Utils/Traces/CriticalPath.js +9 -4
  638. package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
  639. package/package.json +1 -1
  640. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +0 -600
  641. package/UI/Components/GanttChart/Bar/BarLabel.tsx +0 -17
  642. package/UI/Components/GanttChart/Bar/Index.tsx +0 -149
  643. package/UI/Components/GanttChart/ChartContainer.tsx +0 -50
  644. package/UI/Components/GanttChart/Index.tsx +0 -90
  645. package/UI/Components/GanttChart/Row/Index.tsx +0 -22
  646. package/UI/Components/GanttChart/Row/Row.tsx +0 -231
  647. package/UI/Components/GanttChart/Row/RowLabel.tsx +0 -30
  648. package/UI/Components/GanttChart/Rows.tsx +0 -59
  649. package/UI/Components/GanttChart/Timeline/Index.tsx +0 -46
  650. package/UI/Components/GanttChart/Timeline/TimelineInterval.tsx +0 -33
  651. package/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.tsx +0 -43
  652. package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js +0 -8
  653. package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js.map +0 -1
  654. package/build/dist/UI/Components/GanttChart/Bar/Index.js +0 -77
  655. package/build/dist/UI/Components/GanttChart/Bar/Index.js.map +0 -1
  656. package/build/dist/UI/Components/GanttChart/ChartContainer.js +0 -33
  657. package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +0 -1
  658. package/build/dist/UI/Components/GanttChart/Index.js +0 -39
  659. package/build/dist/UI/Components/GanttChart/Index.js.map +0 -1
  660. package/build/dist/UI/Components/GanttChart/Row/Index.js +0 -7
  661. package/build/dist/UI/Components/GanttChart/Row/Index.js.map +0 -1
  662. package/build/dist/UI/Components/GanttChart/Row/Row.js +0 -106
  663. package/build/dist/UI/Components/GanttChart/Row/Row.js.map +0 -1
  664. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js +0 -10
  665. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js.map +0 -1
  666. package/build/dist/UI/Components/GanttChart/Rows.js +0 -19
  667. package/build/dist/UI/Components/GanttChart/Rows.js.map +0 -1
  668. package/build/dist/UI/Components/GanttChart/Timeline/Index.js +0 -16
  669. package/build/dist/UI/Components/GanttChart/Timeline/Index.js.map +0 -1
  670. package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js +0 -13
  671. package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js.map +0 -1
  672. package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js +0 -13
  673. package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js.map +0 -1
@@ -4,6 +4,8 @@ import Response from "../Utils/Response";
4
4
  import BadDataException from "../../Types/Exception/BadDataException";
5
5
  import CommonAPI from "./CommonAPI";
6
6
  import TelemetryType from "../../Types/Telemetry/TelemetryType";
7
+ import { parseExceptionSpanScope } from "../../Types/Telemetry/ExceptionSpanScope";
8
+ import ServiceType from "../../Types/Telemetry/ServiceType";
7
9
  import TelemetryAttributeService from "../Services/TelemetryAttributeService";
8
10
  import TelemetrySourceMapService from "../Services/TelemetrySourceMapService";
9
11
  import SourceMapResolver, { MAX_FRAMES_PER_RESOLVE_REQUEST, } from "../Utils/Telemetry/SourceMapResolver";
@@ -27,6 +29,8 @@ import RumSession from "../../Models/AnalyticsModels/RumSession";
27
29
  import ObjectID from "../../Types/ObjectID";
28
30
  import OneUptimeDate from "../../Types/Date";
29
31
  import ResourceFacetResolver from "../Utils/Telemetry/ResourceFacetResolver";
32
+ import ResourceFacetPlanner from "../Utils/Telemetry/ResourceFacetPlanner";
33
+ import { RESOURCE_FACET_CATALOG_KEYS } from "../../Types/Telemetry/ResourceFacetCatalog";
30
34
  import ResourceEntityFilter from "../Utils/Telemetry/ResourceEntityFilter";
31
35
  import RumApplicationService from "../Services/RumApplicationService";
32
36
  import ProjectService from "../Services/ProjectService";
@@ -35,7 +39,7 @@ import SessionIdentity from "../../Utils/Rum/SessionIdentity";
35
39
  import SessionReplayTargeting from "../Utils/SessionReplay/SessionReplayTargeting";
36
40
  import SessionReplayUsage from "../Utils/SessionReplay/SessionReplayUsage";
37
41
  import RumSessionReplayViewService, { normalizeSecondsWatched, } from "../Services/RumSessionReplayViewService";
38
- import SessionReplayReadService, { DEFAULT_SESSION_REPLAY_LIST_LIMIT, DEFAULT_SESSION_REPLAY_USERS_LIMIT, MAX_SESSION_REPLAY_FOR_EXCEPTION_LIMIT, MAX_SESSION_REPLAY_LIST_LIMIT, MAX_SESSION_REPLAY_USERS_LIMIT, SESSION_REPLAY_EXCEPTION_WINDOW_PADDING_MS, } from "../Utils/SessionReplay/SessionReplayReadService";
42
+ import SessionReplayReadService, { DEFAULT_SESSION_REPLAY_LIST_LIMIT, DEFAULT_SESSION_REPLAY_USERS_LIMIT, MAX_SESSION_REPLAY_FOR_EXCEPTION_LIMIT, MAX_SESSION_REPLAY_LIST_LIMIT, MAX_SESSION_REPLAY_SESSION_ID_LENGTH, MAX_SESSION_REPLAY_SUMMARIES_BATCH_SIZE, MAX_SESSION_REPLAY_USERS_LIMIT, SESSION_REPLAY_EXCEPTION_WINDOW_PADDING_MS, } from "../Utils/SessionReplay/SessionReplayReadService";
39
43
  import SessionReplayHealthCounters from "../Utils/SessionReplay/SessionReplayHealthCounters";
40
44
  import { isSessionErased } from "../Utils/SessionReplay/SessionReplayErasureTombstone";
41
45
  import NotFoundException from "../../Types/Exception/NotFoundException";
@@ -375,9 +379,10 @@ router.post("/telemetry/logs/facets", ...requireLogReadAccess, async (req, res,
375
379
  : undefined;
376
380
  /*
377
381
  * Per-facet partial-match filter applied at the Postgres source-of-truth
378
- * lookup stage. Only consulted for resource facets (primaryEntityId /
379
- * hostId / dockerHostId / kubernetesClusterId) — other facets continue
380
- * to filter client-side over the loaded value list.
382
+ * lookup stage. Only consulted for resource facets (primaryEntityId and
383
+ * every ResourceFacetCatalog key — hostId / kubernetesClusterId / ...)
384
+ * — other facets continue to filter client-side over the loaded value
385
+ * list.
381
386
  */
382
387
  const facetSearchText = body["facetSearchText"]
383
388
  ? body["facetSearchText"]
@@ -389,11 +394,21 @@ router.post("/telemetry/logs/facets", ...requireLogReadAccess, async (req, res,
389
394
  const projectId = databaseProps.tenantId;
390
395
  const resourceScopes = await resolveResourceScopesFromBody(body, projectId);
391
396
  /*
392
- * Run facet queries in parallel so a slow individual facet can't
393
- * starve the endpoint. Per-facet errors degrade gracefully to [].
397
+ * One ClickHouse GROUP BY per facet, in parallel so a slow facet can't
398
+ * starve the endpoint; per-facet errors degrade gracefully to [].
399
+ * Resource facets come back as the Postgres source-of-truth list
400
+ * (filtered by facetSearchText, enriched with displayName) with those
401
+ * counts merged in, so low-volume resources stay visible and search
402
+ * reaches resources outside the window. Their lists are fetched FIRST:
403
+ * a resource type the project has none of skips its ClickHouse scan
404
+ * entirely (see ResourceFacetPlanner).
394
405
  */
395
- const facetResults = await Promise.all(facetKeys.map(async (facetKey) => {
396
- try {
406
+ const facets = await ResourceFacetPlanner.countPerFacet({
407
+ projectId,
408
+ facetKeys,
409
+ facetSearchText,
410
+ limit,
411
+ countFacet: (facetKey) => {
397
412
  const request = {
398
413
  projectId,
399
414
  startTime,
@@ -410,43 +425,9 @@ router.post("/telemetry/logs/facets", ...requireLogReadAccess, async (req, res,
410
425
  sessionIds,
411
426
  attributes,
412
427
  };
413
- const values = await LogAggregationService.getFacetValues(request);
414
- return [facetKey, values];
415
- }
416
- catch (_a) {
417
- return [facetKey, []];
418
- }
419
- }));
420
- const facets = Object.fromEntries(facetResults);
421
- /*
422
- * Replace resource-facet results with the Postgres source-of-truth list
423
- * (filtered by facetSearchText and enriched with displayName). See the
424
- * trace facets handler above for the rationale — same pattern, same
425
- * benefit: low-volume resources stay visible and search can reach
426
- * resources outside the ClickHouse sample window.
427
- */
428
- const resourceSpecs = facetKeys
429
- .filter((key) => {
430
- return ResourceFacetResolver.isResourceFacet(key);
431
- })
432
- .map((key) => {
433
- const counts = new Map();
434
- for (const fv of facets[key] || []) {
435
- counts.set(fv.value, fv.count);
436
- }
437
- return {
438
- facetKey: key,
439
- counts,
440
- searchText: facetSearchText === null || facetSearchText === void 0 ? void 0 : facetSearchText[key],
441
- limit,
442
- };
428
+ return LogAggregationService.getFacetValues(request);
429
+ },
443
430
  });
444
- if (resourceSpecs.length > 0) {
445
- const resolved = await ResourceFacetResolver.resolve(projectId, resourceSpecs);
446
- for (const key of Object.keys(resolved)) {
447
- facets[key] = resolved[key];
448
- }
449
- }
450
431
  return Response.sendJsonObjectResponse(req, res, {
451
432
  facets: facets,
452
433
  });
@@ -457,13 +438,16 @@ router.post("/telemetry/logs/facets", ...requireLogReadAccess, async (req, res,
457
438
  });
458
439
  /**
459
440
  * Resolve the `resourceFilters` field — the explorers' non-Service resource
460
- * facet selections (Kubernetes cluster / host / docker host / podman host),
461
- * sent as Postgres ids into the scopes the aggregation services compile.
441
+ * facet selections (any ResourceFacetCatalog type: host / Kubernetes cluster
442
+ * / Proxmox cluster / serverless function / ...), sent as Postgres ids —
443
+ * into the scopes the aggregation services compile.
462
444
  *
463
445
  * Kept out of the sync body parsers because turning an id into an entity
464
446
  * key needs a Postgres round trip: the id names a row whose identifying
465
- * value (`clusterIdentifier` / `hostIdentifier`) is what ingest hashed into
466
- * `entityKeys`.
447
+ * value (`hostIdentifier` / `clusterIdentifier` / a cluster `name` / ...) is
448
+ * what ingest hashed into `entityKeys` and stamped as a resource attribute.
449
+ * Types without such an identity keep an id-only scope (see
450
+ * ResourceEntityFilter).
467
451
  *
468
452
  * Returns undefined when nothing was selected so the request field stays
469
453
  * absent rather than becoming an empty array.
@@ -525,6 +509,21 @@ function parseAttributeFilterRecord(raw) {
525
509
  }
526
510
  return filters;
527
511
  }
512
+ /*
513
+ * An exception scope that is present but malformed is a client bug, and
514
+ * dropping it would silently chart every span in the project under an
515
+ * exception's heading — so it is refused instead.
516
+ */
517
+ function parseTraceExceptionScope(raw) {
518
+ if (raw === undefined || raw === null) {
519
+ return undefined;
520
+ }
521
+ const scope = parseExceptionSpanScope(raw);
522
+ if (!scope) {
523
+ throw new BadDataException("exceptionScope must have a fingerprint and, optionally, a primaryEntityId UUID.");
524
+ }
525
+ return scope;
526
+ }
528
527
  /*
529
528
  * Shared body parsing for every trace aggregation endpoint (histogram,
530
529
  * facets, analytics). Defensive about shapes: arrays are validated and
@@ -606,6 +605,7 @@ function parseTraceFilterBody(body) {
606
605
  hasException: typeof body["hasException"] === "boolean"
607
606
  ? body["hasException"]
608
607
  : undefined,
608
+ exceptionScope: parseTraceExceptionScope(body["exceptionScope"]),
609
609
  minDurationNano: typeof body["minDurationNano"] === "number"
610
610
  ? body["minDurationNano"]
611
611
  : undefined,
@@ -670,9 +670,10 @@ router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, r
670
670
  const traceFilters = Object.assign(Object.assign({}, parseTraceFilterBody(body)), { resourceScopes: await resolveResourceScopesFromBody(body, databaseProps.tenantId) });
671
671
  /*
672
672
  * Per-facet partial-match filter applied at the Postgres source-of-truth
673
- * lookup stage. Only consulted for resource facets (primaryEntityId /
674
- * hostId / dockerHostId / kubernetesClusterId) — other facets continue
675
- * to filter client-side over the loaded value list.
673
+ * lookup stage. Only consulted for resource facets (primaryEntityId and
674
+ * every ResourceFacetCatalog key — hostId / kubernetesClusterId / ...)
675
+ * — other facets continue to filter client-side over the loaded value
676
+ * list.
676
677
  */
677
678
  const facetSearchText = body["facetSearchText"]
678
679
  ? body["facetSearchText"]
@@ -688,9 +689,8 @@ router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, r
688
689
  facetKeys,
689
690
  limit }, traceFilters);
690
691
  /*
691
- * Resource facets (primaryEntityId / hostId / dockerHostId / k8s
692
- * cluster ...) and statusCode are counted with an exact,
693
- * projection-backed GROUP BY
692
+ * Resource facets (primaryEntityId and every ResourceFacetCatalog key)
693
+ * and statusCode are counted with an exact, projection-backed GROUP BY
694
694
  * in getResourceFacetCounts(). The recent-N sample below saturates with
695
695
  * whichever service is chattiest right now and reports 0 for every other
696
696
  * service regardless of its true volume over the window — the "top 1000"
@@ -704,10 +704,20 @@ router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, r
704
704
  key !== "isRootSpan" &&
705
705
  key !== "hasException");
706
706
  });
707
- const needsAccurateCounts = facetKeys.includes("statusCode") ||
708
- facetKeys.some((key) => {
709
- return ResourceFacetResolver.isResourceFacet(key);
710
- });
707
+ /*
708
+ * Resource facets list their Postgres rows FIRST. The exact counts are
709
+ * one shared GROUP BY for statusCode and every resource facet, so it
710
+ * only runs when statusCode is requested or some requested resource
711
+ * facet listed a row to merge counts into — a sidebar whose resource
712
+ * types the project has none of skips the scan entirely. The listing
713
+ * still overlaps the sample / root-span / exception queries.
714
+ */
715
+ const resourceListing = ResourceFacetPlanner.listResourceFacets({
716
+ projectId: databaseProps.tenantId,
717
+ facetKeys,
718
+ facetSearchText,
719
+ limit,
720
+ });
711
721
  const wantsRootSpan = facetKeys.includes("isRootSpan");
712
722
  const wantsHasException = facetKeys.includes("hasException");
713
723
  const emptyAccurate = {
@@ -722,7 +732,7 @@ router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, r
722
732
  * the projection-backed sample / resource / root-span queries keeps it
723
733
  * off the critical path. Each query keeps its own degrade-to-empty catch.
724
734
  */
725
- const [sampledFacets, accurate, rootSpanCounts, exceptionCounts] = await Promise.all([
735
+ const [sampledFacets, listedResourceFacets, accurate, rootSpanCounts, exceptionCounts,] = await Promise.all([
726
736
  sampledKeys.length > 0
727
737
  ? TraceAggregationService.getFacetValuesFromSample(Object.assign(Object.assign({}, multiRequest), { facetKeys: sampledKeys })).catch(() => {
728
738
  return Object.fromEntries(sampledKeys.map((key) => {
@@ -730,15 +740,22 @@ router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, r
730
740
  }));
731
741
  })
732
742
  : Promise.resolve({}),
733
- needsAccurateCounts
734
- ? TraceAggregationService.getResourceFacetCounts(multiRequest).catch(() => {
743
+ resourceListing,
744
+ resourceListing.then((listed) => {
745
+ if (!ResourceFacetPlanner.needsTraceResourceFacetCounts({
746
+ facetKeys,
747
+ listed,
748
+ })) {
749
+ return Promise.resolve(emptyAccurate);
750
+ }
751
+ return TraceAggregationService.getResourceFacetCounts(multiRequest).catch(() => {
735
752
  /*
736
753
  * Degrade gracefully: resource facets still enumerate via
737
754
  * Postgres (count 0), statusCode falls back to empty.
738
755
  */
739
756
  return emptyAccurate;
740
- })
741
- : Promise.resolve(emptyAccurate),
757
+ });
758
+ }),
742
759
  wantsRootSpan
743
760
  ? TraceAggregationService.getRootSpanCounts(multiRequest).catch(() => {
744
761
  return null;
@@ -790,31 +807,23 @@ router.post("/telemetry/traces/facets", ...requireTraceReadAccess, async (req, r
790
807
  : [];
791
808
  }
792
809
  /*
793
- * Replace resource-facet results with the Postgres source-of-truth list
810
+ * Resource facets answer with the Postgres source-of-truth list
794
811
  * (filtered by facetSearchText and enriched with displayName). Every
795
812
  * resource facet shares the same exact primaryEntityId -> count map;
796
813
  * resource ids are globally unique, so each facet only ever resolves its own
797
814
  * entities. Entities with no telemetry in the window surface with count
798
815
  * 0 instead of being hidden, and the search box can find resources
799
- * beyond the loaded subset.
816
+ * beyond the loaded subset. A facet that listed nothing answers [].
800
817
  */
801
- const resourceSpecs = facetKeys
802
- .filter((key) => {
803
- return ResourceFacetResolver.isResourceFacet(key);
804
- })
805
- .map((key) => {
806
- return {
807
- facetKey: key,
808
- counts: serviceCounts,
809
- searchText: facetSearchText === null || facetSearchText === void 0 ? void 0 : facetSearchText[key],
810
- limit,
811
- };
818
+ const resourceFacets = ResourceFacetPlanner.mergeResourceFacetCounts({
819
+ facetKeys,
820
+ listed: listedResourceFacets,
821
+ countsFor: () => {
822
+ return serviceCounts;
823
+ },
812
824
  });
813
- if (resourceSpecs.length > 0) {
814
- const resolved = await ResourceFacetResolver.resolve(databaseProps.tenantId, resourceSpecs);
815
- for (const key of Object.keys(resolved)) {
816
- facets[key] = resolved[key];
817
- }
825
+ for (const key of Object.keys(resourceFacets)) {
826
+ facets[key] = resourceFacets[key] || [];
818
827
  }
819
828
  return Response.sendJsonObjectResponse(req, res, {
820
829
  facets: facets,
@@ -966,10 +975,7 @@ router.post("/telemetry/exceptions/facets", ...requireExceptionReadAccess, async
966
975
  ? body["facetKeys"]
967
976
  : [
968
977
  "primaryEntityId",
969
- "hostId",
970
- "dockerHostId",
971
- "podmanHostId",
972
- "kubernetesClusterId",
978
+ ...RESOURCE_FACET_CATALOG_KEYS,
973
979
  "exceptionType",
974
980
  "environment",
975
981
  ];
@@ -1011,11 +1017,19 @@ router.post("/telemetry/exceptions/facets", ...requireExceptionReadAccess, async
1011
1017
  : undefined;
1012
1018
  const projectId = databaseProps.tenantId;
1013
1019
  /*
1014
- * Per-facet ClickHouse query in parallel. Per-facet errors degrade
1020
+ * Per-facet ClickHouse query in parallel; per-facet errors degrade
1015
1021
  * gracefully to [] so a slow / failing facet can't block the others.
1022
+ * Resource facets answer with the Postgres source-of-truth list
1023
+ * (filtered by facetSearchText, enriched with displayName), listed
1024
+ * first so a type with no rows skips its count query. Same flow as the
1025
+ * log facets endpoint.
1016
1026
  */
1017
- const facetResults = await Promise.all(facetKeys.map(async (facetKey) => {
1018
- try {
1027
+ const facets = await ResourceFacetPlanner.countPerFacet({
1028
+ projectId,
1029
+ facetKeys,
1030
+ facetSearchText,
1031
+ limit,
1032
+ countFacet: (facetKey) => {
1019
1033
  const request = {
1020
1034
  projectId,
1021
1035
  startTime,
@@ -1030,41 +1044,9 @@ router.post("/telemetry/exceptions/facets", ...requireExceptionReadAccess, async
1030
1044
  escaped,
1031
1045
  messageSearchText,
1032
1046
  };
1033
- const values = await ExceptionAggregationService.getFacetValues(request);
1034
- return [facetKey, values];
1035
- }
1036
- catch (_a) {
1037
- return [facetKey, []];
1038
- }
1039
- }));
1040
- const facets = Object.fromEntries(facetResults);
1041
- /*
1042
- * Replace resource-facet results with the Postgres source-of-truth list
1043
- * (filtered by facetSearchText and enriched with displayName). Same
1044
- * pattern as the trace/log facets endpoints.
1045
- */
1046
- const resourceSpecs = facetKeys
1047
- .filter((key) => {
1048
- return ResourceFacetResolver.isResourceFacet(key);
1049
- })
1050
- .map((key) => {
1051
- const counts = new Map();
1052
- for (const fv of facets[key] || []) {
1053
- counts.set(fv.value, fv.count);
1054
- }
1055
- return {
1056
- facetKey: key,
1057
- counts,
1058
- searchText: facetSearchText === null || facetSearchText === void 0 ? void 0 : facetSearchText[key],
1059
- limit,
1060
- };
1047
+ return ExceptionAggregationService.getFacetValues(request);
1048
+ },
1061
1049
  });
1062
- if (resourceSpecs.length > 0) {
1063
- const resolved = await ResourceFacetResolver.resolve(projectId, resourceSpecs);
1064
- for (const key of Object.keys(resolved)) {
1065
- facets[key] = resolved[key];
1066
- }
1067
- }
1068
1050
  return Response.sendJsonObjectResponse(req, res, {
1069
1051
  facets: facets,
1070
1052
  });
@@ -1083,13 +1065,7 @@ router.post("/telemetry/metrics/facets", ...requireMetricReadAccess, async (req,
1083
1065
  const body = req.body;
1084
1066
  const facetKeys = body["facetKeys"]
1085
1067
  ? body["facetKeys"]
1086
- : [
1087
- "primaryEntityId",
1088
- "hostId",
1089
- "dockerHostId",
1090
- "podmanHostId",
1091
- "kubernetesClusterId",
1092
- ];
1068
+ : ["primaryEntityId", ...RESOURCE_FACET_CATALOG_KEYS];
1093
1069
  const startTime = body["startTime"]
1094
1070
  ? OneUptimeDate.fromString(body["startTime"])
1095
1071
  : OneUptimeDate.addRemoveHours(OneUptimeDate.getCurrentDate(), -1);
@@ -1111,11 +1087,19 @@ router.post("/telemetry/metrics/facets", ...requireMetricReadAccess, async (req,
1111
1087
  : undefined;
1112
1088
  const projectId = databaseProps.tenantId;
1113
1089
  /*
1114
- * Per-facet ClickHouse GROUP BY in parallel. Per-facet errors degrade
1115
- * to [] so a slow facet doesn't block the rest.
1090
+ * Per-facet ClickHouse GROUP BY in parallel; per-facet errors degrade
1091
+ * to [] so a slow facet doesn't block the rest. Resource facets answer
1092
+ * with the Postgres source-of-truth list (filtered by facetSearchText,
1093
+ * enriched with displayName), listed first so a type with no rows
1094
+ * skips its count query. Same flow as the log / exception facets
1095
+ * endpoints.
1116
1096
  */
1117
- const facetResults = await Promise.all(facetKeys.map(async (facetKey) => {
1118
- try {
1097
+ const facets = await ResourceFacetPlanner.countPerFacet({
1098
+ projectId,
1099
+ facetKeys,
1100
+ facetSearchText,
1101
+ limit,
1102
+ countFacet: (facetKey) => {
1119
1103
  const request = {
1120
1104
  projectId,
1121
1105
  startTime,
@@ -1126,41 +1110,9 @@ router.post("/telemetry/metrics/facets", ...requireMetricReadAccess, async (req,
1126
1110
  metricNames,
1127
1111
  attributes,
1128
1112
  };
1129
- const values = await MetricAggregationService.getFacetValues(request);
1130
- return [facetKey, values];
1131
- }
1132
- catch (_a) {
1133
- return [facetKey, []];
1134
- }
1135
- }));
1136
- const facets = Object.fromEntries(facetResults);
1137
- /*
1138
- * Replace resource-facet results with the Postgres source-of-truth list
1139
- * (filtered by facetSearchText and enriched with displayName). Same
1140
- * pattern as the trace / log / exception facets endpoints.
1141
- */
1142
- const resourceSpecs = facetKeys
1143
- .filter((key) => {
1144
- return ResourceFacetResolver.isResourceFacet(key);
1145
- })
1146
- .map((key) => {
1147
- const counts = new Map();
1148
- for (const fv of facets[key] || []) {
1149
- counts.set(fv.value, fv.count);
1150
- }
1151
- return {
1152
- facetKey: key,
1153
- counts,
1154
- searchText: facetSearchText === null || facetSearchText === void 0 ? void 0 : facetSearchText[key],
1155
- limit,
1156
- };
1113
+ return MetricAggregationService.getFacetValues(request);
1114
+ },
1157
1115
  });
1158
- if (resourceSpecs.length > 0) {
1159
- const resolved = await ResourceFacetResolver.resolve(projectId, resourceSpecs);
1160
- for (const key of Object.keys(resolved)) {
1161
- facets[key] = resolved[key];
1162
- }
1163
- }
1164
1116
  return Response.sendJsonObjectResponse(req, res, {
1165
1117
  facets: facets,
1166
1118
  });
@@ -2094,7 +2046,7 @@ router.post("/telemetry/profiles/trace-presence", ...requireProfileReadAccess, a
2094
2046
  * Session replay playback
2095
2047
  * ---------------------------------------------------------------------
2096
2048
  *
2097
- * These five routes are the ONLY reader of RumSessionV1 / RumSessionChunkV1:
2049
+ * These routes are the ONLY reader of RumSessionV1 / RumSessionChunkV1:
2098
2050
  * both analytics models deliberately omit `crudApiPath`, so there is no
2099
2051
  * generic CRUD surface for them and ModelPermission is NEVER invoked on
2100
2052
  * this path.
@@ -2176,6 +2128,24 @@ const SESSION_REPLAY_LIST_PERMISSIONS = [
2176
2128
  */
2177
2129
  Permission.ReadRumSessionReplayPayload,
2178
2130
  ];
2131
+ /*
2132
+ * The optional audit-table enrichment must admit an audit-only reviewer so a
2133
+ * 403 from the shared browser API does not navigate them away from the audit
2134
+ * page. The handler still returns metadata only after a separate LIST-scope
2135
+ * check for the resolved application; audit access alone receives an empty,
2136
+ * successful response.
2137
+ */
2138
+ const SESSION_REPLAY_SUMMARY_PERMISSIONS = [
2139
+ ...SESSION_REPLAY_LIST_PERMISSIONS,
2140
+ Permission.ReadRumSessionReplayAudit,
2141
+ ];
2142
+ const requireSessionReplaySummaryAccess = [
2143
+ UserMiddleware.getUserMiddleware,
2144
+ UserMiddleware.requireUserAuthentication,
2145
+ UserMiddleware.requirePermission({
2146
+ permissions: SESSION_REPLAY_SUMMARY_PERMISSIONS,
2147
+ }),
2148
+ ];
2179
2149
  const SESSION_REPLAY_PAYLOAD_PERMISSIONS = [
2180
2150
  Permission.ProjectOwner,
2181
2151
  Permission.ProjectAdmin,
@@ -2383,6 +2353,26 @@ const canReadIdentifiedUserLabel = (data) => {
2383
2353
  application: data.application,
2384
2354
  });
2385
2355
  };
2356
+ /*
2357
+ * Audit-only roles may load the summaries route so the optional request can
2358
+ * fail closed without a browser-wide forbidden redirect. They still must not
2359
+ * gain the session-list metadata this endpoint projects. Re-evaluate the
2360
+ * list scope against the already-resolved application and turn unsupported
2361
+ * scope shapes into "no metadata" rather than an authorization error.
2362
+ */
2363
+ const canReadSessionReplayListMetadata = (data) => {
2364
+ let scope;
2365
+ try {
2366
+ scope = getSessionReplayLabelScope(data.databaseProps, SESSION_REPLAY_LIST_PERMISSIONS);
2367
+ }
2368
+ catch (_a) {
2369
+ return false;
2370
+ }
2371
+ return isApplicationInSessionReplayScope({
2372
+ scope: scope,
2373
+ application: data.application,
2374
+ });
2375
+ };
2386
2376
  const resolveAccessibleRumApplicationIds = async (data) => {
2387
2377
  const scope = getSessionReplayLabelScope(data.databaseProps, data.permissions);
2388
2378
  if (scope.isUnrestricted) {
@@ -2618,7 +2608,6 @@ const readObjectIdFromBody = (body, key) => {
2618
2608
  * callers exist - but it is a cap: an unbounded caller-supplied string
2619
2609
  * reaches ClickHouse as a bound parameter on a hot path.
2620
2610
  */
2621
- const MAX_SESSION_REPLAY_SESSION_ID_LENGTH = 128;
2622
2611
  const readSessionIdFromBody = (body) => {
2623
2612
  const sessionId = body["sessionId"];
2624
2613
  if (typeof sessionId !== "string" || sessionId.length === 0) {
@@ -2629,6 +2618,35 @@ const readSessionIdFromBody = (body) => {
2629
2618
  }
2630
2619
  return sessionId;
2631
2620
  };
2621
+ /*
2622
+ * The summaries route accepts one audit-table page at a time. Validate the
2623
+ * raw array before de-duplicating it so repeated values cannot be used to
2624
+ * bypass the request-size ceiling, then preserve first-occurrence order.
2625
+ */
2626
+ const readSessionIdsFromBody = (body) => {
2627
+ const value = body["sessionIds"];
2628
+ if (!Array.isArray(value) || value.length === 0) {
2629
+ throw new BadDataException("sessionIds must be a non-empty array");
2630
+ }
2631
+ if (value.length > MAX_SESSION_REPLAY_SUMMARIES_BATCH_SIZE) {
2632
+ throw new BadDataException(`sessionIds must contain at most ${MAX_SESSION_REPLAY_SUMMARIES_BATCH_SIZE} ids`);
2633
+ }
2634
+ const sessionIds = [];
2635
+ const seen = new Set();
2636
+ for (const sessionId of value) {
2637
+ if (typeof sessionId !== "string" || sessionId.length === 0) {
2638
+ throw new BadDataException("Every sessionId must be a non-empty string");
2639
+ }
2640
+ if (sessionId.length > MAX_SESSION_REPLAY_SESSION_ID_LENGTH) {
2641
+ throw new BadDataException(`Every sessionId must be at most ${MAX_SESSION_REPLAY_SESSION_ID_LENGTH} characters.`);
2642
+ }
2643
+ if (!seen.has(sessionId)) {
2644
+ seen.add(sessionId);
2645
+ sessionIds.push(sessionId);
2646
+ }
2647
+ }
2648
+ return sessionIds;
2649
+ };
2632
2650
  /*
2633
2651
  * Caps on the list's filter inputs.
2634
2652
  *
@@ -2931,6 +2949,51 @@ router.post("/telemetry/rum/session-replay/list", ...requireSessionReplayListAcc
2931
2949
  next(err);
2932
2950
  }
2933
2951
  });
2952
+ // --- Session Replay Summary Batch Endpoint ---
2953
+ /*
2954
+ * Audit rows store only the session id. Resolve one page of those ids into
2955
+ * compact, non-identity session context. Audit-only callers receive an empty
2956
+ * success; session-list metadata is returned only after the resolved
2957
+ * application passes the list scope. The service performs one
2958
+ * application-pinned argMax query, so this route never turns an audit page
2959
+ * into an N+1 ClickHouse workload.
2960
+ */
2961
+ router.post("/telemetry/rum/session-replay/summaries", ...requireSessionReplaySummaryAccess, async (req, res, next) => {
2962
+ try {
2963
+ const databaseProps = await CommonAPI.getDatabaseCommonInteractionProps(req);
2964
+ if (!(databaseProps === null || databaseProps === void 0 ? void 0 : databaseProps.tenantId)) {
2965
+ return Response.sendErrorResponse(req, res, new BadDataException("Invalid Project ID"));
2966
+ }
2967
+ assertSessionReplayPlan(databaseProps);
2968
+ const projectId = databaseProps.tenantId;
2969
+ const body = req.body;
2970
+ const rumApplicationId = readObjectIdFromBody(body, "rumApplicationId");
2971
+ const sessionIds = readSessionIdsFromBody(body);
2972
+ const application = await assertSessionReplayApplicationAccess({
2973
+ projectId: projectId,
2974
+ rumApplicationId: rumApplicationId,
2975
+ databaseProps: databaseProps,
2976
+ permissions: SESSION_REPLAY_SUMMARY_PERMISSIONS,
2977
+ });
2978
+ if (!canReadSessionReplayListMetadata({
2979
+ databaseProps: databaseProps,
2980
+ application: application,
2981
+ })) {
2982
+ return Response.sendJsonObjectResponse(req, res, { sessions: [] });
2983
+ }
2984
+ const sessions = await SessionReplayReadService.getSessionSummaries({
2985
+ projectId: projectId,
2986
+ rumApplicationId: rumApplicationId,
2987
+ sessionIds: sessionIds,
2988
+ });
2989
+ return Response.sendJsonObjectResponse(req, res, {
2990
+ sessions: sessions,
2991
+ });
2992
+ }
2993
+ catch (err) {
2994
+ next(err);
2995
+ }
2996
+ });
2934
2997
  // --- Session Replay Users Endpoint ---
2935
2998
  /*
2936
2999
  * The cursor /users emits and accepts: the last row's "last seen" clock
@@ -3536,6 +3599,21 @@ router.post("/telemetry/rum/session-replay/for-exception", ...requireSessionRepl
3536
3599
  if (typeof fingerprint !== "string" || fingerprint.length === 0) {
3537
3600
  return Response.sendErrorResponse(req, res, new BadDataException("fingerprint is required"));
3538
3601
  }
3602
+ const primaryEntityId = readOptionalObjectIdFromBody(body, "primaryEntityId");
3603
+ const rawPrimaryEntityType = body["primaryEntityType"];
3604
+ let primaryEntityType = undefined;
3605
+ if (rawPrimaryEntityType !== undefined &&
3606
+ rawPrimaryEntityType !== null &&
3607
+ rawPrimaryEntityType !== "") {
3608
+ if (typeof rawPrimaryEntityType !== "string" ||
3609
+ !Object.values(ServiceType).includes(rawPrimaryEntityType)) {
3610
+ throw new BadDataException("primaryEntityType is not valid");
3611
+ }
3612
+ primaryEntityType = rawPrimaryEntityType;
3613
+ }
3614
+ if (primaryEntityId === undefined && primaryEntityType !== undefined) {
3615
+ throw new BadDataException("primaryEntityId is required with its type");
3616
+ }
3539
3617
  /*
3540
3618
  * An exception is not scoped to a RUM application, so there is no
3541
3619
  * single application to authorize against. Restrict the query to
@@ -3572,7 +3650,7 @@ router.post("/telemetry/rum/session-replay/for-exception", ...requireSessionRepl
3572
3650
  }
3573
3651
  /* Pin to the session the caller already knows threw, when it does. */
3574
3652
  const pinnedSessionId = body["sessionId"];
3575
- const sessions = await SessionReplayReadService.getSessionsForException(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: projectId, exceptionFingerprint: fingerprint, accessibleRumApplicationIds: accessibleApplications.applicationIds }, (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (typeof pinnedSessionId === "string" &&
3653
+ const sessions = await SessionReplayReadService.getSessionsForException(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ projectId: projectId, exceptionFingerprint: fingerprint }, (primaryEntityId !== undefined && { primaryEntityId })), (primaryEntityType !== undefined && { primaryEntityType })), { accessibleRumApplicationIds: accessibleApplications.applicationIds }), (startTime !== undefined && { startTime })), (endTime !== undefined && { endTime })), (typeof pinnedSessionId === "string" &&
3576
3654
  pinnedSessionId.length > 0 && { sessionId: pinnedSessionId })), { limit: readLimitFromBody(body, MAX_SESSION_REPLAY_FOR_EXCEPTION_LIMIT, MAX_SESSION_REPLAY_FOR_EXCEPTION_LIMIT) }));
3577
3655
  return Response.sendJsonObjectResponse(req, res, {
3578
3656
  sessions: sessions,