@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
@@ -0,0 +1,412 @@
1
+ import { LockedFilterDetail } from "../../Types/Telemetry/LockedFilterDetail";
2
+ import { buildSearchTokenValue } from "../../Types/Telemetry/TelemetrySearchQuery";
3
+ import { escapeWildcards } from "../../Types/BaseDatabase/WildcardPattern";
4
+ import {
5
+ DictionaryFilterOperator,
6
+ detectOperatorFromValue,
7
+ } from "../../UI/Components/Dictionary/DictionaryFilterOperator";
8
+
9
+ /*
10
+ * Turn a locked filter chip back into the search-bar syntax of the explorer
11
+ * it belongs to, so a reader can copy the filters a resource page pinned and
12
+ * paste them into the main Logs / Traces / Metrics page.
13
+ *
14
+ * The grammar is the shared one in Types/Telemetry/TelemetrySearchQuery; what
15
+ * differs per signal is which top-level columns have a field token at all:
16
+ *
17
+ * logs @<attr>:<v> trace:<id> span:<id> service:<entity id> severity:<level>
18
+ * traces @<attr>:<v> trace:<id> span:<id> service:<entity id>
19
+ * status:<code> kind:<enum> hasexception:<bool> name:<text> statusmessage:<text>
20
+ * metrics @<attr>:<v>
21
+ *
22
+ * `service:` carries the ENTITY ID on logs and traces — both explorers filter
23
+ * the polymorphic `primaryEntityId` column and accept an id verbatim — and is
24
+ * deliberately absent on metrics, whose `service:` token matches Service rows
25
+ * by NAME and would turn an id into an empty result. Values are escaped by
26
+ * the grammar's own {@link buildSearchTokenValue} so a literal `*`, `?`, a
27
+ * quote or a leading operator character means itself.
28
+ */
29
+
30
+ export type TelemetrySignal = "logs" | "traces" | "metrics";
31
+
32
+ /** Human name of each explorer, for button labels and tooltips. */
33
+ export const TELEMETRY_EXPLORER_LABELS: Readonly<
34
+ Record<TelemetrySignal, string>
35
+ > = {
36
+ logs: "Logs",
37
+ traces: "Traces",
38
+ metrics: "Metrics",
39
+ };
40
+
41
+ const ATTRIBUTE_FACET_PREFIX: string = "attributes.";
42
+
43
+ /*
44
+ * A search token KEY is read up to the first colon, ends at whitespace and
45
+ * cannot be quoted, and a leading `@` / `-` is grammar — so a key carrying
46
+ * any of those cannot ride a token at all.
47
+ */
48
+ const UNSAFE_KEY_CHARACTERS: RegExp = /[\s":]/;
49
+
50
+ /*
51
+ * Field tokens per signal, keyed by the chip's facetKey. Only columns whose
52
+ * value is accepted verbatim by the target explorer are listed.
53
+ *
54
+ * The traces columns beyond the ids are the ones a stored span query (an
55
+ * incident's or monitor's snapshot) pins, and each takes the chip's raw
56
+ * value as-is: `status:` resolves the numeric status code the chip carries
57
+ * (toSpanStatusCode), `kind:` passes an OTel enum string through
58
+ * (toSpanKind), `hasexception:` reads "true" / "false", and `name:` /
59
+ * `statusmessage:` match a single value as a substring exactly as the stored
60
+ * query does (TEXT_CHIP_FIELDS in TracesViewer) — several values of one
61
+ * column match exactly on both sides too.
62
+ */
63
+ const FIELD_TOKENS_BY_SIGNAL: Readonly<
64
+ Record<TelemetrySignal, Readonly<Record<string, string>>>
65
+ > = {
66
+ logs: {
67
+ traceId: "trace",
68
+ spanId: "span",
69
+ severityText: "severity",
70
+ primaryEntityId: "service",
71
+ serviceId: "service",
72
+ },
73
+ traces: {
74
+ traceId: "trace",
75
+ spanId: "span",
76
+ primaryEntityId: "service",
77
+ serviceId: "service",
78
+ statusCode: "status",
79
+ kind: "kind",
80
+ hasException: "hasexception",
81
+ name: "name",
82
+ statusMessage: "statusmessage",
83
+ },
84
+ metrics: {},
85
+ };
86
+
87
+ type IsSearchTokenSafeKeyFunction = (key: string) => boolean;
88
+
89
+ /** Whether an attribute key can be the key of an `@key:value` token. */
90
+ export const isSearchTokenSafeKey: IsSearchTokenSafeKeyFunction = (
91
+ key: string,
92
+ ): boolean => {
93
+ if (key.length === 0) {
94
+ return false;
95
+ }
96
+
97
+ if (UNSAFE_KEY_CHARACTERS.test(key)) {
98
+ return false;
99
+ }
100
+
101
+ if (key.startsWith("@") || key.startsWith("-")) {
102
+ return false;
103
+ }
104
+
105
+ return true;
106
+ };
107
+
108
+ type BuildSearchTokenForFilterFunction = (
109
+ signal: TelemetrySignal,
110
+ facetKey: string,
111
+ value: string,
112
+ ) => string | null;
113
+
114
+ /**
115
+ * The search token that reproduces one chip on the explorer for `signal`, or
116
+ * null when that explorer's grammar has no token for the chip's column (a
117
+ * session id, a metrics service id, an unsafe attribute key, an empty value).
118
+ */
119
+ export const buildSearchTokenForFilter: BuildSearchTokenForFilterFunction = (
120
+ signal: TelemetrySignal,
121
+ facetKey: string,
122
+ value: string,
123
+ ): string | null => {
124
+ if (typeof value !== "string" || value.length === 0) {
125
+ return null;
126
+ }
127
+
128
+ if (facetKey.startsWith(ATTRIBUTE_FACET_PREFIX)) {
129
+ const attributeKey: string = facetKey.substring(
130
+ ATTRIBUTE_FACET_PREFIX.length,
131
+ );
132
+
133
+ if (!isSearchTokenSafeKey(attributeKey)) {
134
+ return null;
135
+ }
136
+
137
+ return `@${attributeKey}:${buildSearchTokenValue(value)}`;
138
+ }
139
+
140
+ const fieldToken: string | undefined =
141
+ FIELD_TOKENS_BY_SIGNAL[signal][facetKey];
142
+
143
+ if (!fieldToken) {
144
+ return null;
145
+ }
146
+
147
+ return `${fieldToken}:${buildSearchTokenValue(value)}`;
148
+ };
149
+
150
+ /*
151
+ * The list grammar splits `(a OR b)` on `,` and on ` OR ` without looking at
152
+ * quotes, so an entry carrying either cannot be spelled inside a list at all.
153
+ */
154
+ const LIST_UNSAFE_ENTRY: RegExp = /,|\s+OR\s+/i;
155
+
156
+ const QUOTE_REGEX: RegExp = /(")/g;
157
+ const LEADING_OPERATOR_REGEX: RegExp = /^([-~!<>])/;
158
+ const WRAPPED_LIST_REGEX: RegExp = /^(\()(.*)(\))$|^(\[)(.*)(\])$/;
159
+ const WHITESPACE_REGEX: RegExp = /\s/;
160
+
161
+ type RenderGlobFunction = (glob: string) => string;
162
+
163
+ /*
164
+ * A glob rendered as a token value: quotes, a leading operator character and
165
+ * a wrapping bracket pair are escaped exactly as {@link buildSearchTokenValue}
166
+ * escapes them, but `*` and `?` are LEFT ALONE — they are the point of the
167
+ * glob. Quotes protect spaces, not wildcards, so a glob with a space is
168
+ * quoted and still matches as a pattern.
169
+ */
170
+ const renderGlob: RenderGlobFunction = (glob: string): string => {
171
+ const escaped: string = glob
172
+ .replace(QUOTE_REGEX, "\\$1")
173
+ .replace(LEADING_OPERATOR_REGEX, "\\$1")
174
+ .replace(WRAPPED_LIST_REGEX, "\\$&");
175
+
176
+ return WHITESPACE_REGEX.test(escaped) ? `"${escaped}"` : escaped;
177
+ };
178
+
179
+ type RenderListFunction = (
180
+ entries: Array<string>,
181
+ render: (entry: string) => string,
182
+ ) => string | null;
183
+
184
+ /*
185
+ * `(a OR b)` — one entry is written bare (the parser reads a one-entry list
186
+ * as plain equality anyway), and an entry the list grammar would split in
187
+ * two makes the whole list unspellable.
188
+ */
189
+ const renderList: RenderListFunction = (
190
+ entries: Array<string>,
191
+ render: (entry: string) => string,
192
+ ): string | null => {
193
+ const meaningful: Array<string> = entries.filter((entry: string): boolean => {
194
+ return entry.length > 0;
195
+ });
196
+
197
+ if (meaningful.length === 0) {
198
+ return null;
199
+ }
200
+
201
+ if (
202
+ meaningful.some((entry: string): boolean => {
203
+ return LIST_UNSAFE_ENTRY.test(entry);
204
+ })
205
+ ) {
206
+ return null;
207
+ }
208
+
209
+ if (meaningful.length === 1) {
210
+ return render(meaningful[0]!);
211
+ }
212
+
213
+ return `(${meaningful.map(render).join(" OR ")})`;
214
+ };
215
+
216
+ const GLOB_SEPARATOR: string = " OR ";
217
+
218
+ type SplitGlobsFunction = (value: string) => Array<string>;
219
+
220
+ /*
221
+ * The attribute filter form stores several globs joined by " OR " (see
222
+ * DictionaryFilterOperator.joinGlobs); the same split recovers them.
223
+ */
224
+ const splitGlobs: SplitGlobsFunction = (value: string): Array<string> => {
225
+ return value
226
+ .split(GLOB_SEPARATOR)
227
+ .map((glob: string): string => {
228
+ return glob.trim();
229
+ })
230
+ .filter((glob: string): boolean => {
231
+ return glob.length > 0;
232
+ });
233
+ };
234
+
235
+ type BuildSearchTokenForOperatorValueFunction = (
236
+ attributeKey: string,
237
+ value: unknown,
238
+ ) => string | null;
239
+
240
+ /**
241
+ * The `@key:value` token — negated as `-@key:value` where the grammar puts
242
+ * the negation on the token — that reproduces an attribute filter pinned
243
+ * with an OPERATOR: the shape a log monitor's criteria or an incident's
244
+ * stored query hands the viewer (`Includes`, `Search`, `NotEqual`, ...).
245
+ *
246
+ * Every operator the attribute filter form offers has a spelling in the
247
+ * shared grammar, and the explorer compiles that spelling to the same
248
+ * predicate class the form stored:
249
+ *
250
+ * equals @k:v not equal @k:!v
251
+ * contains @k:~v not contains -@k:~v
252
+ * starts with @k:v* ends with @k:*v
253
+ * matches @k:g not matches -@k:g
254
+ * is any of @k:(a OR b) is none of -@k:(a OR b)
255
+ * > >= < <= @k:>n ... is empty -@k:*
256
+ * is not empty @k:*
257
+ *
258
+ * Literal parts go through the grammar's own escaping, so a literal that
259
+ * starts with `~` or carries a `*` still means itself; a glob keeps its
260
+ * wildcards. Null for a shape the grammar cannot spell: an array of several
261
+ * operators on one key, a list entry the list grammar would split, an unsafe
262
+ * key, an empty value.
263
+ */
264
+ export const buildSearchTokenForOperatorValue: BuildSearchTokenForOperatorValueFunction =
265
+ (attributeKey: string, value: unknown): string | null => {
266
+ if (!isSearchTokenSafeKey(attributeKey)) {
267
+ return null;
268
+ }
269
+
270
+ if (value === undefined || value === null || Array.isArray(value)) {
271
+ return null;
272
+ }
273
+
274
+ const detected: ReturnType<typeof detectOperatorFromValue> =
275
+ detectOperatorFromValue(value);
276
+ const literal: string = detected.rawValue;
277
+ const entries: Array<string> = detected.rawValues || [];
278
+
279
+ const positive: (rendered: string) => string = (
280
+ rendered: string,
281
+ ): string => {
282
+ return `@${attributeKey}:${rendered}`;
283
+ };
284
+ const negative: (rendered: string) => string = (
285
+ rendered: string,
286
+ ): string => {
287
+ return `-@${attributeKey}:${rendered}`;
288
+ };
289
+
290
+ switch (detected.operator) {
291
+ case DictionaryFilterOperator.EqualTo:
292
+ return literal.length > 0
293
+ ? positive(buildSearchTokenValue(literal))
294
+ : null;
295
+ case DictionaryFilterOperator.NotEqual:
296
+ return literal.length > 0
297
+ ? positive(`!${buildSearchTokenValue(literal)}`)
298
+ : null;
299
+ case DictionaryFilterOperator.Contains:
300
+ return literal.length > 0
301
+ ? positive(`~${buildSearchTokenValue(literal)}`)
302
+ : null;
303
+ case DictionaryFilterOperator.NotContains:
304
+ return literal.length > 0
305
+ ? negative(`~${buildSearchTokenValue(literal)}`)
306
+ : null;
307
+ case DictionaryFilterOperator.StartsWith:
308
+ return literal.length > 0
309
+ ? positive(renderGlob(`${escapeWildcards(literal)}*`))
310
+ : null;
311
+ case DictionaryFilterOperator.EndsWith:
312
+ return literal.length > 0
313
+ ? positive(renderGlob(`*${escapeWildcards(literal)}`))
314
+ : null;
315
+ case DictionaryFilterOperator.Matches: {
316
+ // The form joins several globs with " OR "; split them back apart.
317
+ const rendered: string | null = renderList(
318
+ splitGlobs(literal),
319
+ renderGlob,
320
+ );
321
+ return rendered ? positive(rendered) : null;
322
+ }
323
+ case DictionaryFilterOperator.NotMatches: {
324
+ const rendered: string | null = renderList(
325
+ splitGlobs(literal),
326
+ renderGlob,
327
+ );
328
+ return rendered ? negative(rendered) : null;
329
+ }
330
+ case DictionaryFilterOperator.IsAnyOf: {
331
+ const rendered: string | null = renderList(
332
+ entries,
333
+ buildSearchTokenValue,
334
+ );
335
+ return rendered ? positive(rendered) : null;
336
+ }
337
+ case DictionaryFilterOperator.IsNoneOf: {
338
+ const rendered: string | null = renderList(
339
+ entries,
340
+ buildSearchTokenValue,
341
+ );
342
+ return rendered ? negative(rendered) : null;
343
+ }
344
+ case DictionaryFilterOperator.GreaterThan:
345
+ return literal.length > 0
346
+ ? positive(`>${buildSearchTokenValue(literal)}`)
347
+ : null;
348
+ case DictionaryFilterOperator.GreaterThanOrEqual:
349
+ return literal.length > 0
350
+ ? positive(`>=${buildSearchTokenValue(literal)}`)
351
+ : null;
352
+ case DictionaryFilterOperator.LessThan:
353
+ return literal.length > 0
354
+ ? positive(`<${buildSearchTokenValue(literal)}`)
355
+ : null;
356
+ case DictionaryFilterOperator.LessThanOrEqual:
357
+ return literal.length > 0
358
+ ? positive(`<=${buildSearchTokenValue(literal)}`)
359
+ : null;
360
+ case DictionaryFilterOperator.IsEmpty:
361
+ return negative("*");
362
+ case DictionaryFilterOperator.IsNotEmpty:
363
+ return positive("*");
364
+ default:
365
+ return null;
366
+ }
367
+ };
368
+
369
+ /** The subset of a chip this module reads. */
370
+ export interface SearchableLockedFilter {
371
+ facetKey: string;
372
+ value: string;
373
+ lockedDetail?: LockedFilterDetail | undefined;
374
+ }
375
+
376
+ type BuildSearchTextForFiltersFunction = (
377
+ signal: TelemetrySignal,
378
+ filters: Array<SearchableLockedFilter>,
379
+ ) => string;
380
+
381
+ /**
382
+ * The search-bar text that reproduces every given locked chip at once —
383
+ * tokens joined by single spaces, duplicates dropped, order kept.
384
+ *
385
+ * A chip that carries a {@link LockedFilterDetail} is trusted on its own
386
+ * `searchToken` (present or deliberately absent — a filter the grammar
387
+ * cannot spell has none, and re-deriving one from the chip's display text
388
+ * would produce a token that filters on the wrong thing). A chip without one
389
+ * falls back to the column rules above.
390
+ */
391
+ export const buildSearchTextForFilters: BuildSearchTextForFiltersFunction = (
392
+ signal: TelemetrySignal,
393
+ filters: Array<SearchableLockedFilter>,
394
+ ): string => {
395
+ const tokens: Array<string> = [];
396
+ const seen: Set<string> = new Set<string>();
397
+
398
+ for (const filter of filters) {
399
+ const token: string | null = filter.lockedDetail
400
+ ? filter.lockedDetail.searchToken || null
401
+ : buildSearchTokenForFilter(signal, filter.facetKey, filter.value);
402
+
403
+ if (!token || seen.has(token)) {
404
+ continue;
405
+ }
406
+
407
+ seen.add(token);
408
+ tokens.push(token);
409
+ }
410
+
411
+ return tokens.join(" ");
412
+ };
@@ -0,0 +1,43 @@
1
+ import { canonicalizeEntityValue } from "./EntityKey";
2
+
3
+ /*
4
+ * Network-host helpers shared by the dependency discovery job and the trace
5
+ * propagation allowlist. Isomorphic and dependency-free on purpose: both
6
+ * callers sit low in the server import graph.
7
+ */
8
+
9
+ const IPV4_LOOPBACK_REGEX: RegExp = /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
10
+
11
+ /**
12
+ * Normalize a network address attribute to a bare, lowercase host: no
13
+ * scheme, credentials, path, port, IPv6 brackets or trailing dot. Returns
14
+ * null when nothing host-like is left.
15
+ */
16
+ export function normalizeHost(value: string | undefined | null): string | null {
17
+ let host: string = canonicalizeEntityValue(value || "");
18
+ if (!host) {
19
+ return null;
20
+ }
21
+ host = host.replace(/^[a-z][a-z0-9+.-]*:\/\//, "");
22
+ host = host.split("/")[0] || "";
23
+ host = host.includes("@") ? host.substring(host.lastIndexOf("@") + 1) : host;
24
+ if (host.startsWith("[")) {
25
+ const closing: number = host.indexOf("]");
26
+ host = closing > 0 ? host.substring(1, closing) : host.substring(1);
27
+ } else if ((host.match(/:/g) || []).length === 1) {
28
+ host = host.split(":")[0] || "";
29
+ }
30
+ host = host.replace(/\.+$/, "");
31
+ return host.length > 0 ? host : null;
32
+ }
33
+
34
+ /** Loopback targets differ per caller, so they can never be one shared node. */
35
+ export function isLoopbackHost(host: string): boolean {
36
+ return (
37
+ host === "localhost" ||
38
+ host.endsWith(".localhost") ||
39
+ host === "::1" ||
40
+ host === "0.0.0.0" ||
41
+ IPV4_LOOPBACK_REGEX.test(host)
42
+ );
43
+ }
@@ -1,6 +1,7 @@
1
1
  /*
2
- * Origin allowlist matching and validation, shared by every surface that has
3
- * to decide "is this browser allowed to write into this project?".
2
+ * Client-origin allowlist matching and validation, shared by every surface
3
+ * that has to decide "is this browser or installed app allowed to write into
4
+ * this project?".
4
5
  *
5
6
  * This module is deliberately PURE and isomorphic - no server imports, no
6
7
  * Redis, no models - because the same rules have to hold in three places that
@@ -30,6 +31,8 @@
30
31
  * origin binding is exactly the credential we are trying to stop
31
32
  * shipping.
32
33
  */
34
+ import { SESSION_REPLAY_MAX_MOBILE_APP_IDENTIFIER_LENGTH } from "../../Types/Rum/SessionReplay";
35
+
33
36
  /*
34
37
  * Hoisted rather than written inline at each call site: none carries the `g`
35
38
  * flag, so `.test` is stateless and one compiled instance is safe to share,
@@ -38,8 +41,84 @@
38
41
  const WHITESPACE_ANYWHERE: RegExp = /\s/;
39
42
  const DIGITS_ONLY: RegExp = /^[0-9]+$/;
40
43
  const HOST_LABEL_CHARACTERS: RegExp = /^[a-z0-9-]+$/;
44
+ const MOBILE_APP_IDENTIFIER_LABEL_CHARACTERS: RegExp = /^[a-z0-9_-]+$/;
41
45
 
42
46
  export default class OriginAllowList {
47
+ /*
48
+ * Validate an Android application id / Apple bundle identifier before it
49
+ * is allowed to participate in authorization. The accepted grammar is the
50
+ * safe common shape of the two platforms: reverse-DNS labels made from
51
+ * ASCII letters, digits, hyphens and underscores. Requiring at least two
52
+ * labels prevents short, ambiguous values such as `debug` from becoming a
53
+ * project-wide identity by accident.
54
+ */
55
+ public static validateMobileAppIdentifier(identifier: string): string | null {
56
+ if (typeof identifier !== "string") {
57
+ return "Mobile app identifier must be text.";
58
+ }
59
+
60
+ const trimmed: string = identifier.trim();
61
+
62
+ if (!trimmed) {
63
+ return "Mobile app identifier cannot be empty.";
64
+ }
65
+
66
+ if (trimmed.length > SESSION_REPLAY_MAX_MOBILE_APP_IDENTIFIER_LENGTH) {
67
+ return `Mobile app identifier cannot exceed ${SESSION_REPLAY_MAX_MOBILE_APP_IDENTIFIER_LENGTH} characters.`;
68
+ }
69
+
70
+ if (WHITESPACE_ANYWHERE.test(trimmed)) {
71
+ return "Mobile app identifier cannot contain spaces.";
72
+ }
73
+
74
+ const labels: Array<string> = trimmed.toLowerCase().split(".");
75
+
76
+ if (labels.length < 2) {
77
+ return "Mobile app identifier must use at least two reverse-DNS labels, for example com.example.app.";
78
+ }
79
+
80
+ for (const label of labels) {
81
+ if (!label) {
82
+ return "Mobile app identifier cannot contain an empty label.";
83
+ }
84
+
85
+ if (!MOBILE_APP_IDENTIFIER_LABEL_CHARACTERS.test(label)) {
86
+ return "Mobile app identifier may contain only letters, digits, hyphens, underscores and dots.";
87
+ }
88
+
89
+ if (
90
+ label.startsWith("-") ||
91
+ label.endsWith("-") ||
92
+ label.startsWith("_") ||
93
+ label.endsWith("_")
94
+ ) {
95
+ return "Each mobile app identifier label must start and end with a letter or digit.";
96
+ }
97
+ }
98
+
99
+ return null;
100
+ }
101
+
102
+ /*
103
+ * Canonical identifier used in an app:// authorization origin. Returning
104
+ * an empty string on invalid input keeps the hot ingest path branchless at
105
+ * the call site and mirrors normalizeOrigin's invalid-input contract.
106
+ */
107
+ public static normalizeMobileAppIdentifier(identifier: string): string {
108
+ if (this.validateMobileAppIdentifier(identifier) !== null) {
109
+ return "";
110
+ }
111
+
112
+ return identifier.trim().toLowerCase();
113
+ }
114
+
115
+ public static getMobileAppOrigin(identifier: string): string | undefined {
116
+ const normalizedIdentifier: string =
117
+ this.normalizeMobileAppIdentifier(identifier);
118
+
119
+ return normalizedIdentifier ? `app://${normalizedIdentifier}` : undefined;
120
+ }
121
+
43
122
  /*
44
123
  * Canonical form for comparison: trimmed, lowercased, with trailing
45
124
  * slashes removed.
@@ -129,6 +208,18 @@ export default class OriginAllowList {
129
208
  return true;
130
209
  }
131
210
 
211
+ /*
212
+ * Wildcards exist only for HTTP(S) host names. An app:// identity is an
213
+ * exact installed binary identifier; allowing app://*.example would let
214
+ * any sibling application claim the public ingestion key.
215
+ */
216
+ if (
217
+ !normalizedAllowed.startsWith("http://*.") &&
218
+ !normalizedAllowed.startsWith("https://*.")
219
+ ) {
220
+ continue;
221
+ }
222
+
132
223
  const wildcardIndex: number = normalizedAllowed.indexOf("://*.");
133
224
 
134
225
  if (wildcardIndex === -1) {
@@ -184,6 +275,7 @@ export default class OriginAllowList {
184
275
  * real; no public-suffix check is
185
276
  * attempted because it is wrong more
186
277
  * often than right on internal TLDs)
278
+ * app://com.example.checkout exact mobile bundle/package id
187
279
  *
188
280
  * REJECTED
189
281
  * "" / " " empty
@@ -217,6 +309,8 @@ export default class OriginAllowList {
217
309
  * https://example..com empty label
218
310
  * https://-example.com label starting or ending with "-"
219
311
  * https://exa_mple.com character not legal in a hostname
312
+ * app://*.example.com mobile identities never wildcard
313
+ * app://com.example.app:123 mobile identities never carry ports
220
314
  */
221
315
  public static validateOriginPattern(pattern: string): string | null {
222
316
  if (typeof pattern !== "string") {
@@ -244,13 +338,54 @@ export default class OriginAllowList {
244
338
  const schemeSeparatorIndex: number = value.indexOf("://");
245
339
 
246
340
  if (schemeSeparatorIndex === -1) {
247
- return `"${trimmed}" must start with http:// or https://.`;
341
+ return `"${trimmed}" must start with http://, https:// or app://.`;
248
342
  }
249
343
 
250
344
  const scheme: string = value.substring(0, schemeSeparatorIndex);
251
345
 
346
+ if (scheme === "app") {
347
+ let identifier: string = value.substring(schemeSeparatorIndex + 3);
348
+
349
+ if (identifier.endsWith("/")) {
350
+ identifier = identifier.substring(0, identifier.length - 1);
351
+ }
352
+
353
+ if (identifier.includes("*")) {
354
+ return `"${trimmed}" cannot wildcard a mobile app identifier. List each app:// identifier exactly.`;
355
+ }
356
+
357
+ if (identifier.includes("/")) {
358
+ return `"${trimmed}" must not contain a path. Use only app:// followed by the bundle or package identifier.`;
359
+ }
360
+
361
+ if (identifier.includes("?")) {
362
+ return `"${trimmed}" must not contain a query string.`;
363
+ }
364
+
365
+ if (identifier.includes("#")) {
366
+ return `"${trimmed}" must not contain a fragment.`;
367
+ }
368
+
369
+ if (identifier.includes("@")) {
370
+ return `"${trimmed}" must not contain a username or password.`;
371
+ }
372
+
373
+ if (identifier.includes(":")) {
374
+ return `"${trimmed}" must not contain a port. Mobile app identifiers are exact.`;
375
+ }
376
+
377
+ const identifierError: string | null =
378
+ this.validateMobileAppIdentifier(identifier);
379
+
380
+ if (identifierError) {
381
+ return `"${trimmed}" is not a valid mobile app origin. ${identifierError}`;
382
+ }
383
+
384
+ return null;
385
+ }
386
+
252
387
  if (scheme !== "http" && scheme !== "https") {
253
- return `"${trimmed}" must use the http:// or https:// scheme.`;
388
+ return `"${trimmed}" must use the http://, https:// or app:// scheme.`;
254
389
  }
255
390
 
256
391
  let authority: string = value.substring(schemeSeparatorIndex + 3);
@@ -288,9 +288,14 @@ export default class CriticalPathUtil {
288
288
  const selfTimes: Map<string, SpanSelfTime> =
289
289
  CriticalPathUtil.computeSelfTimes(spans);
290
290
 
291
- // Find total trace duration
292
- let traceStart: number = Number.MAX_SAFE_INTEGER;
293
- let traceEnd: number = 0;
291
+ /*
292
+ * Find total trace duration. Real span timestamps are nanoseconds since the
293
+ * epoch (~1.7e18), far above Number.MAX_SAFE_INTEGER (~9e15), so the bounds
294
+ * must start at +/-Infinity: seeding the start with MAX_SAFE_INTEGER left it
295
+ * there, made the trace look 1.7e18 ns long and every service 0.0%.
296
+ */
297
+ let traceStart: number = Infinity;
298
+ let traceEnd: number = -Infinity;
294
299
  for (const span of spans) {
295
300
  if (span.startTimeUnixNano < traceStart) {
296
301
  traceStart = span.startTimeUnixNano;
@@ -299,7 +304,8 @@ export default class CriticalPathUtil {
299
304
  traceEnd = span.endTimeUnixNano;
300
305
  }
301
306
  }
302
- const totalDuration: number = traceEnd - traceStart;
307
+ const totalDuration: number =
308
+ spans.length > 0 ? Math.max(0, traceEnd - traceStart) : 0;
303
309
 
304
310
  // Aggregate by service
305
311
  const serviceMap: Map<
@@ -126,6 +126,8 @@ import LogDropFilter from "./LogDropFilter";
126
126
  import DetectionRule from "./DetectionRule";
127
127
  import GoogleSecOpsConnection from "./GoogleSecOpsConnection";
128
128
  import GoogleSecOpsConnectionRun from "./GoogleSecOpsConnectionRun";
129
+ import SecurityEventConnection from "./SecurityEventConnection";
130
+ import SecurityEventConnectionRun from "./SecurityEventConnectionRun";
129
131
  import ThreatIntelFeed from "./ThreatIntelFeed";
130
132
  import LogScrubRule from "./LogScrubRule";
131
133
  import MetricPipelineRule from "./MetricPipelineRule";
@@ -479,6 +481,8 @@ const AllModelTypes = [
479
481
  DetectionRule,
480
482
  GoogleSecOpsConnection,
481
483
  GoogleSecOpsConnectionRun,
484
+ SecurityEventConnection,
485
+ SecurityEventConnectionRun,
482
486
  ThreatIntelFeed,
483
487
  LogScrubRule,
484
488
  MetricPipelineRule,