@oneuptime/common 13.0.4 → 13.0.6

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 (1589) hide show
  1. package/Models/AnalyticsModels/AuditLog.ts +81 -1
  2. package/Models/AnalyticsModels/SecurityEvent.ts +4 -4
  3. package/Models/DatabaseModels/Alert.ts +62 -0
  4. package/Models/DatabaseModels/GlobalConfig.ts +1 -1
  5. package/Models/DatabaseModels/Incident.ts +66 -0
  6. package/Models/DatabaseModels/IncidentEpisodePublicNote.ts +74 -0
  7. package/Models/DatabaseModels/IncidentPublicNote.ts +74 -0
  8. package/Models/DatabaseModels/Index.ts +10 -4
  9. package/Models/DatabaseModels/NetworkDevice.ts +67 -0
  10. package/Models/DatabaseModels/NetworkDeviceDiagnostic.ts +746 -0
  11. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +151 -0
  12. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +1 -1
  13. package/Models/DatabaseModels/Project.ts +41 -0
  14. package/Models/DatabaseModels/RumApplication.ts +1 -1
  15. package/Models/DatabaseModels/ScheduledMaintenancePublicNote.ts +74 -0
  16. package/Models/DatabaseModels/{GoogleSecOpsConnection.ts → SecurityEventConnection.ts} +61 -51
  17. package/Models/DatabaseModels/{GoogleSecOpsConnectionRun.ts → SecurityEventConnectionRun.ts} +24 -24
  18. package/Models/DatabaseModels/ServiceLevelObjective.ts +185 -8
  19. package/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.ts +746 -43
  20. package/Models/DatabaseModels/ServiceLevelObjectiveFeed.ts +575 -0
  21. package/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.ts +582 -0
  22. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.ts +16 -0
  23. package/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.ts +16 -0
  24. package/Models/DatabaseModels/StatusPageAnnouncement.ts +75 -0
  25. package/Models/DatabaseModels/TelemetryIngestionKey.ts +2 -2
  26. package/Models/DatabaseModels/ThreatIntelFeed.ts +1 -1
  27. package/Server/API/AIInvestigationAPI.ts +484 -24
  28. package/Server/API/BaseAPI.ts +17 -0
  29. package/Server/API/BillingInvoiceAPI.ts +343 -30
  30. package/Server/API/BillingPaymentMethodAPI.ts +126 -5
  31. package/Server/API/DashboardAPI.ts +96 -2
  32. package/Server/API/SecurityEventConnectionAPI.ts +380 -0
  33. package/Server/API/StatusPageAPI.ts +308 -199
  34. package/Server/API/TelemetryAPI.ts +402 -265
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.ts +99 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.ts +83 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.ts +36 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.ts +29 -0
  39. package/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.ts +516 -0
  40. package/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.ts +98 -0
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.ts +27 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.ts +97 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +16 -0
  44. package/Server/Middleware/TelemetryIngest.ts +101 -6
  45. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +138 -67
  46. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +213 -84
  47. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +112 -35
  48. package/Server/Services/AlertLabelRuleEngineService.ts +299 -217
  49. package/Server/Services/AlertOwnerRuleEngineService.ts +572 -396
  50. package/Server/Services/AlertPrivacyRuleEngineService.ts +116 -40
  51. package/Server/Services/AlertService.ts +111 -4
  52. package/Server/Services/AuditLogService.ts +612 -59
  53. package/Server/Services/BillingInvoiceService.ts +112 -102
  54. package/Server/Services/BillingService.ts +539 -11
  55. package/Server/Services/CephClusterLabelRuleEngineService.ts +170 -109
  56. package/Server/Services/CephClusterOwnerRuleEngineService.ts +233 -115
  57. package/Server/Services/CloudResourceLabelRuleEngineService.ts +163 -100
  58. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +236 -115
  59. package/Server/Services/DashboardLabelRuleEngineService.ts +145 -84
  60. package/Server/Services/DashboardOwnerRuleEngineService.ts +213 -95
  61. package/Server/Services/DatabaseService.ts +171 -21
  62. package/Server/Services/DockerHostLabelRuleEngineService.ts +171 -110
  63. package/Server/Services/DockerHostOwnerRuleEngineService.ts +233 -115
  64. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +181 -112
  65. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +243 -118
  66. package/Server/Services/ExceptionAggregationService.ts +7 -16
  67. package/Server/Services/HostLabelRuleEngineService.ts +167 -106
  68. package/Server/Services/HostOwnerRuleEngineService.ts +229 -111
  69. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +141 -67
  70. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +272 -72
  71. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +112 -35
  72. package/Server/Services/IncidentEpisodePublicNoteService.ts +24 -0
  73. package/Server/Services/IncidentLabelRuleEngineService.ts +279 -204
  74. package/Server/Services/IncidentOwnerRuleEngineService.ts +595 -425
  75. package/Server/Services/IncidentPrivacyRuleEngineService.ts +117 -44
  76. package/Server/Services/IncidentPublicNoteService.ts +24 -0
  77. package/Server/Services/IncidentService.ts +114 -3
  78. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +147 -83
  79. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +221 -100
  80. package/Server/Services/Index.ts +10 -4
  81. package/Server/Services/InventoryItemService.ts +28 -0
  82. package/Server/Services/IoTFleetLabelRuleEngineService.ts +145 -84
  83. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +213 -95
  84. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +181 -112
  85. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +243 -118
  86. package/Server/Services/LabelService.ts +23 -28
  87. package/Server/Services/LogAggregationService.ts +17 -23
  88. package/Server/Services/MetricAggregationService.ts +4 -14
  89. package/Server/Services/MonitorLabelRuleEngineService.ts +152 -92
  90. package/Server/Services/MonitorOwnerRuleEngineService.ts +220 -104
  91. package/Server/Services/MonitorProbeService.ts +20 -2
  92. package/Server/Services/MonitorService.ts +11 -9
  93. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +376 -5
  94. package/Server/Services/NetworkDeviceDiagnosticService.ts +417 -0
  95. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +147 -83
  96. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +218 -97
  97. package/Server/Services/NetworkDeviceService.ts +39 -2
  98. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +151 -80
  99. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +222 -97
  100. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +154 -83
  101. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +225 -100
  102. package/Server/Services/PodmanHostLabelRuleEngineService.ts +171 -110
  103. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +235 -115
  104. package/Server/Services/ProjectService.ts +111 -10
  105. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +174 -110
  106. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +239 -116
  107. package/Server/Services/RumApplicationLabelRuleEngineService.ts +137 -73
  108. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +200 -83
  109. package/Server/Services/RunbookLabelRuleEngineService.ts +146 -84
  110. package/Server/Services/RunbookOwnerRuleEngineService.ts +216 -95
  111. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +324 -230
  112. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +613 -428
  113. package/Server/Services/ScheduledMaintenancePublicNoteService.ts +24 -0
  114. package/Server/Services/ScheduledMaintenanceService.ts +43 -14
  115. package/Server/Services/{GoogleSecOpsConnectionRunService.ts → SecurityEventConnectionRunService.ts} +1 -1
  116. package/Server/Services/SecurityEventConnectionService.ts +590 -0
  117. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +143 -74
  118. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +206 -85
  119. package/Server/Services/ServiceLabelRuleEngineService.ts +172 -110
  120. package/Server/Services/ServiceLevelObjectiveBurnRateRuleService.ts +1057 -18
  121. package/Server/Services/ServiceLevelObjectiveFeedService.ts +108 -0
  122. package/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.ts +793 -97
  123. package/Server/Services/ServiceLevelObjectiveMonitorRuleService.ts +1069 -0
  124. package/Server/Services/ServiceLevelObjectiveOwnerTeamService.ts +240 -1
  125. package/Server/Services/ServiceLevelObjectiveOwnerUserService.ts +257 -1
  126. package/Server/Services/ServiceLevelObjectiveService.ts +1356 -56
  127. package/Server/Services/ServiceOwnerRuleEngineService.ts +238 -116
  128. package/Server/Services/StatusPageAnnouncementService.ts +13 -0
  129. package/Server/Services/StatusPageLabelRuleEngineService.ts +146 -85
  130. package/Server/Services/StatusPageOwnerRuleEngineService.ts +210 -99
  131. package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +28 -232
  132. package/Server/Services/StatusPageSubscriberService.ts +6 -0
  133. package/Server/Services/TelemetryUsageBillingService.ts +38 -7
  134. package/Server/Services/ThreatIntelFeedService.ts +1 -1
  135. package/Server/Services/TraceAggregationService.ts +77 -28
  136. package/Server/Services/VMwareVCenterLabelRuleEngineService.ts +173 -110
  137. package/Server/Services/VMwareVCenterOwnerRuleEngineService.ts +238 -116
  138. package/Server/Services/WorkflowLabelRuleEngineService.ts +145 -84
  139. package/Server/Services/WorkflowOwnerRuleEngineService.ts +215 -95
  140. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
  141. package/Server/Types/Database/UpdateByID.ts +3 -0
  142. package/Server/Types/Database/UpdateOneBy.ts +7 -0
  143. package/Server/Utils/AI/AlertAIContextBuilder.ts +19 -0
  144. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +13 -1
  145. package/Server/Utils/AI/IncidentAIContextBuilder.ts +39 -0
  146. package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +15 -1
  147. package/Server/Utils/AI/SRE/InvestigationEvidence.ts +658 -0
  148. package/Server/Utils/AI/SRE/InvestigationReferences.ts +324 -0
  149. package/Server/Utils/AI/Toolbox/AlertTools.ts +37 -1
  150. package/Server/Utils/AI/Toolbox/IncidentTools.ts +22 -1
  151. package/Server/Utils/AI/Toolbox/Index.ts +38 -0
  152. package/Server/Utils/AI/Toolbox/SloTools.ts +416 -51
  153. package/Server/Utils/AI/Toolbox/TimelineTools.ts +9 -2
  154. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +80 -0
  155. package/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.ts +151 -13
  156. package/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.ts +17 -4
  157. package/Server/Utils/Dashboard/PublicDashboardSloWidget.ts +155 -8
  158. package/Server/Utils/Database/ProjectScopedReferenceValidator.ts +16 -0
  159. package/Server/Utils/Database/RelationValueUtil.ts +106 -0
  160. package/Server/Utils/Monitor/Criteria/CompareCriteria.ts +6 -1
  161. package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +22 -27
  162. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +5 -3
  163. package/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.ts +3 -1
  164. package/Server/Utils/Monitor/MonitorStepsProjectValidator.ts +50 -20
  165. package/Server/Utils/Monitor/NetworkDeviceHydrationUtil.ts +13 -1
  166. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +6 -11
  167. package/Server/Utils/Rules/MonitorRulePatternValidator.ts +51 -0
  168. package/Server/Utils/Rules/OwnerRuleAssignment.ts +110 -0
  169. package/Server/Utils/Rules/RuleRun/RuleApplication.ts +81 -0
  170. package/Server/Utils/Rules/RuleRun/RuleRunPermission.ts +188 -0
  171. package/Server/Utils/Rules/RuleRun/RuleRunRegistry.ts +803 -0
  172. package/Server/Utils/Rules/RuleRun/RuleRunner.ts +341 -0
  173. package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +3 -2
  174. package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.ts +1108 -0
  175. package/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.ts +732 -0
  176. package/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.ts +497 -0
  177. package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.ts +689 -0
  178. package/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.ts +767 -0
  179. package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.ts +571 -0
  180. package/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.ts +827 -0
  181. package/Server/Utils/SecurityEvent/{GoogleSecOps → Connectors/GoogleSecOps}/GoogleSecOpsClient.ts +609 -74
  182. package/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.ts +2101 -0
  183. package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.ts +610 -0
  184. package/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.ts +549 -0
  185. package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.ts +830 -0
  186. package/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.ts +684 -0
  187. package/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.ts +487 -0
  188. package/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.ts +778 -0
  189. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.ts +1182 -0
  190. package/Server/Utils/SecurityEvent/{GoogleSecOps/GoogleSecOpsRunExecutor.ts → Connectors/SecurityEventConnectionRunExecutor.ts} +165 -76
  191. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.ts +306 -0
  192. package/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.ts +55 -0
  193. package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.ts +709 -0
  194. package/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.ts +596 -0
  195. package/Server/Utils/SecurityEvent/Connectors/Types.ts +431 -0
  196. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +1 -1
  197. package/Server/Utils/SecurityEvent/SecurityEventDedupe.ts +81 -0
  198. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +2 -2
  199. package/Server/Utils/SessionReplay/SessionReplayReadService.ts +902 -40
  200. package/Server/Utils/Slo/SloFeedUtil.ts +200 -0
  201. package/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.ts +173 -0
  202. package/Server/Utils/Slo/SloMetricUtil.ts +327 -0
  203. package/Server/Utils/Slo/SloOwnerReferenceValidator.ts +208 -0
  204. package/Server/Utils/Slo/SloRecordReferenceValidator.ts +169 -0
  205. package/Server/Utils/StartServer.ts +10 -0
  206. package/Server/Utils/StatusPage/MonitorRulePatternValidator.ts +6 -43
  207. package/Server/Utils/StatusPageResource.ts +50 -5
  208. package/Server/Utils/Telemetry/EntityRegistry.ts +8 -0
  209. package/Server/Utils/Telemetry/KubernetesResourceAttributes.ts +108 -0
  210. package/Server/Utils/Telemetry/ResourceEntityFilter.ts +174 -93
  211. package/Server/Utils/Telemetry/ResourceFacetPlanner.ts +251 -0
  212. package/Server/Utils/Telemetry/ResourceFacetResolver.ts +248 -413
  213. package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +668 -0
  214. package/Server/Utils/Telemetry/TraceContextPropagation.ts +348 -0
  215. package/Server/Utils/Telemetry.ts +18 -0
  216. package/Tests/App/Dashboard/AIInvestigationHeaderStatus.test.tsx +1063 -1
  217. package/Tests/App/Dashboard/AIRootCauseFeedItem.test.tsx +285 -0
  218. package/Tests/App/Dashboard/AddWidgetModal.test.tsx +4 -1
  219. package/Tests/App/Dashboard/AffectedResourcesDisplay.test.tsx +242 -0
  220. package/Tests/App/Dashboard/AffectedResourcesSlo.test.tsx +307 -0
  221. package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +601 -15
  222. package/Tests/App/Dashboard/ArchiveResourceCard.test.tsx +289 -0
  223. package/Tests/App/Dashboard/AuditLogsTable.test.tsx +598 -0
  224. package/Tests/App/Dashboard/BillingDefaultPaymentMethod.test.tsx +1046 -0
  225. package/Tests/App/Dashboard/BillingPaidUsageFlow.test.tsx +3 -0
  226. package/Tests/App/Dashboard/BillingPaymentMethodForm.test.tsx +201 -7
  227. package/Tests/App/Dashboard/BooleanSeriesCriteriaFilterText.test.ts +82 -0
  228. package/Tests/App/Dashboard/BreadcrumbCoverage.test.tsx +16 -1
  229. package/Tests/App/Dashboard/ChangeAlertStateAIHeader.test.tsx +943 -0
  230. package/Tests/App/Dashboard/ChatActivityFeed.test.tsx +168 -1
  231. package/Tests/App/Dashboard/CloudResourceTelemetryScope.test.ts +41 -0
  232. package/Tests/App/Dashboard/ConnectionTestModal.test.tsx +604 -0
  233. package/Tests/App/Dashboard/ConnectorTestReportView.test.tsx +755 -0
  234. package/Tests/App/Dashboard/CorrelateFilterBuilder.test.tsx +1095 -1
  235. package/Tests/App/Dashboard/CorrelateFilterChips.test.tsx +910 -0
  236. package/Tests/App/Dashboard/CorrelateGraph.test.tsx +3747 -25
  237. package/Tests/App/Dashboard/CorrelateGraphHelpers.test.ts +1085 -0
  238. package/Tests/App/Dashboard/CorrelateInspector.test.tsx +1534 -0
  239. package/Tests/App/Dashboard/CorrelateNodeCard.test.tsx +965 -0
  240. package/Tests/App/Dashboard/CorrelateResultSummary.test.tsx +1525 -0
  241. package/Tests/App/Dashboard/CorrelationGraph.test.ts +1030 -0
  242. package/Tests/App/Dashboard/CorrelationGraphLayout.test.ts +526 -0
  243. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +153 -6
  244. package/Tests/App/Dashboard/DeviceDiagnostics.test.tsx +787 -0
  245. package/Tests/App/Dashboard/DeviceLatencyTrend.test.tsx +278 -0
  246. package/Tests/App/Dashboard/DiscoveryReviewInventoryRefresh.test.tsx +279 -0
  247. package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +87 -0
  248. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +443 -8
  249. package/Tests/App/Dashboard/EntityDetailPanel.test.tsx +165 -0
  250. package/Tests/App/Dashboard/EntityFilterDropdownArchivedSlos.test.tsx +340 -0
  251. package/Tests/App/Dashboard/EpisodeChangeState.test.tsx +1069 -0
  252. package/Tests/App/Dashboard/EpisodeMembersCard.test.tsx +772 -0
  253. package/Tests/App/Dashboard/EventOverviewPages.test.tsx +2450 -0
  254. package/Tests/App/Dashboard/EventOverviewSkeleton.test.tsx +210 -0
  255. package/Tests/App/Dashboard/EventStatBar.test.tsx +392 -0
  256. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +247 -0
  257. package/Tests/App/Dashboard/ExceptionAIAssistance.test.tsx +606 -0
  258. package/Tests/App/Dashboard/ExceptionBreadcrumbTimeline.test.tsx +273 -0
  259. package/Tests/App/Dashboard/ExceptionDetailSideMenu.test.tsx +176 -0
  260. package/Tests/App/Dashboard/ExceptionOverviewCards.test.tsx +366 -0
  261. package/Tests/App/Dashboard/ExceptionSegmentedControl.test.tsx +1020 -0
  262. package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +371 -0
  263. package/Tests/App/Dashboard/ExceptionStackFrameViewer.test.tsx +440 -0
  264. package/Tests/App/Dashboard/ExceptionSummary.test.tsx +381 -0
  265. package/Tests/App/Dashboard/ExceptionTriage.test.tsx +306 -0
  266. package/Tests/App/Dashboard/ExceptionsResourceFacets.test.tsx +604 -0
  267. package/Tests/App/Dashboard/ExceptionsViewerEntityChips.test.tsx +706 -0
  268. package/Tests/App/Dashboard/FeedOrdering.test.ts +32 -0
  269. package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +618 -13
  270. package/Tests/App/Dashboard/InfrastructureExplorer.test.tsx +254 -207
  271. package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +303 -135
  272. package/Tests/App/Dashboard/InvestigationEvidenceList.test.tsx +1472 -0
  273. package/Tests/App/Dashboard/InvestigationFeedRefresh.test.tsx +303 -0
  274. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1931 -25
  275. package/Tests/App/Dashboard/InvestigationPanelStatus.test.tsx +159 -2
  276. package/Tests/App/Dashboard/InvestigationReferenceLink.test.tsx +177 -0
  277. package/Tests/App/Dashboard/InvestigationReportView.test.tsx +1398 -0
  278. package/Tests/App/Dashboard/InvestigationRunDetails.test.tsx +1166 -0
  279. package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +437 -0
  280. package/Tests/App/Dashboard/KubernetesImageReferenceView.test.tsx +114 -0
  281. package/Tests/App/Dashboard/KubernetesLogsTabChips.test.tsx +285 -0
  282. package/Tests/App/Dashboard/LogsEntityChipNames.test.tsx +316 -0
  283. package/Tests/App/Dashboard/LogsResourceFacetChips.test.tsx +361 -0
  284. package/Tests/App/Dashboard/NetworkDeviceBulkDelete.test.tsx +65 -0
  285. package/Tests/App/Dashboard/NetworkTopologyLiveView.test.tsx +5 -0
  286. package/Tests/App/Dashboard/ProfileTableEntityNames.test.tsx +432 -0
  287. package/Tests/App/Dashboard/ProfileViewEntityName.test.tsx +250 -0
  288. package/Tests/App/Dashboard/ResourceArchiveSettings.test.tsx +10 -0
  289. package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +74 -0
  290. package/Tests/App/Dashboard/ResourceFeed.test.tsx +125 -5
  291. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +8 -1
  292. package/Tests/App/Dashboard/ResourceLogsTabsBareLayout.test.tsx +700 -0
  293. package/Tests/App/Dashboard/ResourcePageEntityNameProps.test.tsx +803 -0
  294. package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +11 -1
  295. package/Tests/App/Dashboard/ScheduledMaintenanceChangeState.test.tsx +1026 -0
  296. package/Tests/App/Dashboard/ScheduledMaintenanceFeedRefresh.test.tsx +436 -0
  297. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +1195 -0
  298. package/Tests/App/Dashboard/SecurityEventConnectionDiagnostics.test.tsx +1764 -0
  299. package/Tests/App/Dashboard/SecurityEventConnectionFormModal.test.tsx +1958 -0
  300. package/Tests/App/Dashboard/SecurityEventConnectionsEmptyState.test.tsx +448 -0
  301. package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +1455 -0
  302. package/Tests/App/Dashboard/SecurityEventSeverityPill.test.tsx +233 -0
  303. package/Tests/App/Dashboard/SecurityEventsEmptyState.test.tsx +282 -0
  304. package/Tests/App/Dashboard/SecurityEventsSideMenu.test.tsx +247 -0
  305. package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +375 -274
  306. package/Tests/App/Dashboard/SessionReplayAuditTable.test.tsx +410 -0
  307. package/Tests/App/Dashboard/SloActiveBurnEventsCard.test.tsx +538 -0
  308. package/Tests/App/Dashboard/SloBulkActionsArchive.test.tsx +252 -0
  309. package/Tests/App/Dashboard/SloDashboardTemplateWidgets.test.tsx +322 -518
  310. package/Tests/App/Dashboard/SloElement.test.tsx +194 -0
  311. package/Tests/App/Dashboard/SloFeed.test.tsx +289 -0
  312. package/Tests/App/Dashboard/SloHistoryCharts.test.tsx +471 -0
  313. package/Tests/App/Dashboard/SloHistorySeries.test.tsx +607 -0
  314. package/Tests/App/Dashboard/SloListWidget.test.tsx +783 -0
  315. package/Tests/App/Dashboard/SloMetricsPage.test.tsx +346 -0
  316. package/Tests/App/Dashboard/SloMonitorsPage.test.tsx +661 -0
  317. package/Tests/App/Dashboard/SloMonitorsSummaryCard.test.tsx +489 -0
  318. package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +437 -0
  319. package/Tests/App/Dashboard/SloNoticeBanner.test.tsx +305 -0
  320. package/Tests/App/Dashboard/SloOverviewData.test.tsx +563 -0
  321. package/Tests/App/Dashboard/SloOverviewHero.test.tsx +311 -0
  322. package/Tests/App/Dashboard/SloOverviewKpiStrip.test.tsx +426 -0
  323. package/Tests/App/Dashboard/SloOverviewSidebarCards.test.tsx +493 -0
  324. package/Tests/App/Dashboard/SloSettings.test.tsx +633 -0
  325. package/Tests/App/Dashboard/SloStatusSummaryCards.test.tsx +403 -0
  326. package/Tests/App/Dashboard/SloViewSideMenuCounts.test.tsx +373 -0
  327. package/Tests/App/Dashboard/SloWidgetVariableBinding.test.tsx +689 -0
  328. package/Tests/App/Dashboard/TelemetryResourceRetentionSettings.test.tsx +774 -0
  329. package/Tests/App/Dashboard/TopErrorsPanelResourceNames.test.tsx +316 -0
  330. package/Tests/App/Dashboard/TopologyConnectivitySection.test.tsx +206 -0
  331. package/Tests/App/Dashboard/TopologyDataLoading.test.tsx +30 -0
  332. package/Tests/App/Dashboard/TopologyPageNavigation.test.tsx +88 -24
  333. package/Tests/App/Dashboard/TraceExplorer.test.tsx +1590 -0
  334. package/Tests/App/Dashboard/TraceWaterfall.test.tsx +488 -0
  335. package/Tests/App/Dashboard/TracesAnalyticsSeriesLabels.test.tsx +367 -0
  336. package/Tests/App/Dashboard/TracesEntityNames.test.tsx +617 -0
  337. package/Tests/App/Dashboard/TracesResourceFacets.test.tsx +613 -0
  338. package/Tests/App/Dashboard/UseBulkShortenDeviceNames.test.tsx +1312 -0
  339. package/Tests/App/Dashboard/UseServiceNames.test.tsx +359 -0
  340. package/Tests/App/Dashboard/WidgetCatalog.test.ts +9 -1
  341. package/Tests/Models/AnalyticsModels/RumSessionReplayColumns.test.ts +14 -16
  342. package/Tests/Models/DatabaseModels/AuditLogModelConfiguration.test.ts +442 -0
  343. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +13 -7
  344. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +48 -1
  345. package/Tests/Models/DatabaseModels/SloOverhaulModels.test.ts +835 -0
  346. package/Tests/Models/DatabaseModels/StaticRuleCriteriaInheritance.test.ts +3 -2
  347. package/Tests/Models/DiscoveryScanNetbiosLookupColumn.test.ts +328 -0
  348. package/Tests/Models/DiscoveryScanShortDeviceNamesColumn.test.ts +335 -0
  349. package/Tests/Models/InventoryItemNaming.test.ts +132 -16
  350. package/Tests/Models/NetworkDeviceDiagnosticContract.test.ts +194 -0
  351. package/Tests/Models/NetworkDeviceDnsNameColumn.test.ts +321 -0
  352. package/Tests/Models/ProjectDataResidencyColumn.test.ts +154 -0
  353. package/Tests/Models/SecurityDomainAccessControl.test.ts +197 -22
  354. package/Tests/Server/API/AIInvestigationAPI.test.ts +611 -2
  355. package/Tests/Server/API/AIInvestigationEvidenceAPI.test.ts +1098 -0
  356. package/Tests/Server/API/BaseAPI.test.ts +6 -0
  357. package/Tests/Server/API/BaseAPIUpdateMiscDataProps.test.ts +217 -0
  358. package/Tests/Server/API/BillingInvoiceAPI.test.ts +7 -0
  359. package/Tests/Server/API/BillingInvoiceAPIPaymentStates.test.ts +990 -0
  360. package/Tests/Server/API/BillingPaymentMethodAPI.test.ts +498 -0
  361. package/Tests/Server/API/DashboardPublicSloAPI.test.ts +405 -0
  362. package/Tests/Server/API/SecurityEventConnectionAPI.test.ts +1750 -0
  363. package/Tests/Server/API/SessionReplayAPI.test.ts +644 -1
  364. package/Tests/Server/API/StatusPageManageSubscriptionRecipient.test.ts +857 -0
  365. package/Tests/Server/API/StatusPageManageSubscriptionTemplateVariables.test.ts +1084 -0
  366. package/Tests/Server/API/TelemetryFacetsAPI.test.ts +810 -0
  367. package/Tests/Server/Infrastructure/E2EClickHouseFixtureAccess.test.ts +240 -0
  368. package/Tests/Server/Infrastructure/Postgres/AddConfigurableRuleCriteriaMigration.test.ts +33 -3
  369. package/Tests/Server/Infrastructure/Postgres/AddDataResidencyToProjectMigration.test.ts +202 -0
  370. package/Tests/Server/Infrastructure/Postgres/AddNetbiosLookupToNetworkDeviceDiscoveryScanMigration.test.ts +330 -0
  371. package/Tests/Server/Infrastructure/Postgres/AddNetworkDeviceDnsNameAndShortDeviceNamesMigration.test.ts +340 -0
  372. package/Tests/Server/Infrastructure/Postgres/BackfillSloMonitorRulesAndAffectedResourcesMigration.test.ts +343 -0
  373. package/Tests/Server/Infrastructure/Postgres/SloProductOverhaulMigration.test.ts +801 -0
  374. package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +229 -0
  375. package/Tests/Server/Services/AddSubscriberUpdateNotificationStatusMigration.test.ts +307 -0
  376. package/Tests/Server/Services/AuditLogService.test.ts +1124 -0
  377. package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +200 -1
  378. package/Tests/Server/Services/BillingInvoiceServiceMutexRelease.test.ts +254 -0
  379. package/Tests/Server/Services/BillingService.test.ts +70 -0
  380. package/Tests/Server/Services/BillingServicePayInvoiceStates.test.ts +723 -0
  381. package/Tests/Server/Services/BillingServicePaymentMethodReads.test.ts +14 -2
  382. package/Tests/Server/Services/BillingServiceSubscriptionPaymentMethodSync.test.ts +1634 -0
  383. package/Tests/Server/Services/DatabaseServiceAuditRelationDiff.test.ts +492 -0
  384. package/Tests/Server/Services/DatabaseServicePasswordFieldSecrets.test.ts +629 -0
  385. package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +431 -0
  386. package/Tests/Server/Services/IncidentAlertSloReferenceGuard.test.ts +358 -0
  387. package/Tests/Server/Services/InventoryItemDisplayName.test.ts +66 -0
  388. package/Tests/Server/Services/MonitorProbeServicePastDueMonitoring.test.ts +362 -0
  389. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +1460 -1
  390. package/Tests/Server/Services/NetworkDeviceDiagnosticService.test.ts +962 -0
  391. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +106 -0
  392. package/Tests/Server/Services/NetworkDeviceRuleEngines.test.ts +10 -1
  393. package/Tests/Server/Services/NetworkDeviceServicePastDueMonitoring.test.ts +335 -0
  394. package/Tests/Server/Services/NetworkDeviceSiteRuleDnsName.test.ts +568 -0
  395. package/Tests/Server/Services/OpenTelemetryResourceRetentionMemo.test.ts +28 -1
  396. package/Tests/Server/Services/ProjectDataResidencyPostgres.test.ts +344 -0
  397. package/Tests/Server/Services/ProjectServiceAuditLogSettingsCache.test.ts +187 -0
  398. package/Tests/Server/Services/ProjectServiceDataResidency.test.ts +369 -0
  399. package/Tests/Server/Services/ProjectServiceDataResidencySelfHosted.test.ts +176 -0
  400. package/Tests/Server/Services/ProjectServicePastDueMonitoring.test.ts +289 -0
  401. package/Tests/Server/Services/ResourceFeedServices.test.ts +24 -8
  402. package/Tests/Server/Services/RuleRun/IncidentAlertMaintenanceRuleEnginesRun.test.ts +1396 -0
  403. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupARun.test.ts +917 -0
  404. package/Tests/Server/Services/RuleRun/LabelRuleEnginesGroupBRun.test.ts +1262 -0
  405. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupARun.test.ts +902 -0
  406. package/Tests/Server/Services/RuleRun/OwnerRuleEnginesGroupBRun.test.ts +1163 -0
  407. package/Tests/Server/Services/RuleRun/PrivacyRuleEnginesRun.test.ts +843 -0
  408. package/Tests/Server/Services/ScheduledMaintenanceSubscriberTemplateFormats.test.ts +465 -0
  409. package/Tests/Server/Services/SecurityEventConnectionService.test.ts +1754 -0
  410. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +77 -23
  411. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleFeedWrites.test.ts +777 -0
  412. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleOptions.test.ts +1399 -0
  413. package/Tests/Server/Services/ServiceLevelObjectiveBurnRateRuleService.test.ts +67 -74
  414. package/Tests/Server/Services/ServiceLevelObjectiveChildRowTenancy.test.ts +906 -0
  415. package/Tests/Server/Services/ServiceLevelObjectiveDeleteTenancy.test.ts +1029 -0
  416. package/Tests/Server/Services/ServiceLevelObjectiveFeedService.test.ts +313 -0
  417. package/Tests/Server/Services/ServiceLevelObjectiveFeedWrites.test.ts +1214 -0
  418. package/Tests/Server/Services/ServiceLevelObjectiveMarkdownLink.test.ts +289 -0
  419. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.test.ts +1455 -430
  420. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleLegacyLabelAdoption.test.ts +634 -0
  421. package/Tests/Server/Services/ServiceLevelObjectiveMonitorRuleService.test.ts +1193 -0
  422. package/Tests/Server/Services/{SloMonitorLabelRuleHooks.test.ts → ServiceLevelObjectiveMonitorRuleTriggers.test.ts} +135 -41
  423. package/Tests/Server/Services/ServiceLevelObjectiveOwnerFeedWrites.test.ts +671 -0
  424. package/Tests/Server/Services/ServiceLevelObjectiveService.test.ts +180 -85
  425. package/Tests/Server/Services/ServiceLevelObjectiveServiceArchive.test.ts +537 -0
  426. package/Tests/Server/Services/ServiceLevelObjectiveServiceLegacyMonitorLabelWrite.test.ts +870 -0
  427. package/Tests/Server/Services/ServiceLevelObjectiveServiceMonitorRuleGuard.test.ts +343 -0
  428. package/Tests/Server/Services/ServiceLevelObjectiveServiceReEvaluation.test.ts +246 -0
  429. package/Tests/Server/Services/SloAffectedResourceCreatedFeed.test.ts +501 -0
  430. package/Tests/Server/Services/SloAffectedResourceLinkContract.test.ts +86 -0
  431. package/Tests/Server/Services/SloAffectedResourceMetricAttributes.test.ts +547 -0
  432. package/Tests/Server/Services/StaticRuleCriteriaRuntimeCoverage.test.ts +10 -4
  433. package/Tests/Server/Services/StatusPageMonitorRuleHooks.test.ts +7 -2
  434. package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateCompile.test.ts +174 -0
  435. package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateServiceVariables.test.ts +40 -0
  436. package/Tests/Server/Services/SubscriberUpdateNotificationHooks.test.ts +541 -0
  437. package/Tests/Server/Services/TelemetryIngestionKeyValidation.test.ts +53 -0
  438. package/Tests/Server/Services/TelemetryResourceFacetCounting.test.ts +218 -0
  439. package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +155 -1
  440. package/Tests/Server/Services/TelemetryUsageBillingSloExclusion.test.ts +288 -0
  441. package/Tests/Server/Services/TraceAggregationExceptionScope.test.ts +142 -0
  442. package/Tests/Server/Services/TraceAnalyticsResourceDisplayNames.test.ts +85 -24
  443. package/Tests/Server/TestingUtils/PastDueMonitoringClaimSql.ts +177 -0
  444. package/Tests/Server/TestingUtils/Services/BillingServiceHelper.ts +51 -10
  445. package/Tests/Server/TestingUtils/__mocks__/Stripe.mock.ts +16 -1
  446. package/Tests/Server/Types/Database/Permissions/ProjectDataResidencyColumn.test.ts +386 -0
  447. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +34 -11
  448. package/Tests/Server/Utils/AI/InvestigationEvidence.test.ts +1395 -0
  449. package/Tests/Server/Utils/AI/InvestigationReferences.test.ts +616 -0
  450. package/Tests/Server/Utils/AI/SloAffectedResourceAIContext.test.ts +445 -0
  451. package/Tests/Server/Utils/AI/SloTools.test.ts +423 -1
  452. package/Tests/Server/Utils/AI/SloToolsArchive.test.ts +294 -0
  453. package/Tests/Server/Utils/AI/SloToolsRuleReadPermissions.test.ts +297 -0
  454. package/Tests/Server/Utils/AI/TimelineTools.test.ts +119 -0
  455. package/Tests/Server/Utils/AI/Toolbox/AIToolbox.test.ts +151 -0
  456. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +65 -0
  457. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorExceptionScope.test.ts +224 -0
  458. package/Tests/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.test.ts +255 -10
  459. package/Tests/Server/Utils/Dashboard/SloTemplatePublicDashboard.test.ts +404 -750
  460. package/Tests/Server/Utils/Database/ProjectScopedReferenceValidator.test.ts +45 -0
  461. package/Tests/Server/Utils/Database/RelationValueUtil.test.ts +157 -0
  462. package/Tests/Server/Utils/Monitor/Criteria/BooleanSeriesEvaluateOverTime.test.ts +260 -0
  463. package/Tests/Server/Utils/Monitor/Criteria/DatabaseMonitorCriteria.test.ts +181 -0
  464. package/Tests/Server/Utils/Monitor/Criteria/EvaluateOverTime.test.ts +147 -30
  465. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +55 -2
  466. package/Tests/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.test.ts +17 -0
  467. package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidator.test.ts +136 -0
  468. package/Tests/Server/Utils/Monitor/MonitorStepsProjectValidatorLoadOrder.test.ts +472 -0
  469. package/Tests/Server/Utils/Monitor/NetworkDeviceHydrationUtil.test.ts +48 -2
  470. package/Tests/Server/Utils/Monitor/SloTemplateMetricEmitterContract.test.ts +435 -475
  471. package/Tests/Server/Utils/Rules/MonitorRulePatternValidator.test.ts +77 -0
  472. package/Tests/Server/Utils/Rules/OwnerRuleAssignment.test.ts +177 -0
  473. package/Tests/Server/Utils/Rules/RuleRun/RuleRunPermission.test.ts +365 -0
  474. package/Tests/Server/Utils/Rules/RuleRun/RuleRunRegistry.test.ts +173 -0
  475. package/Tests/Server/Utils/Rules/RuleRun/RuleRunner.test.ts +675 -0
  476. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +8 -8
  477. package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.test.ts +1240 -0
  478. package/Tests/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.test.ts +1853 -0
  479. package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorFetchSummary.test.ts +261 -0
  480. package/Tests/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.test.ts +1184 -0
  481. package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.test.ts +1066 -0
  482. package/Tests/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.test.ts +1568 -0
  483. package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.test.ts +930 -0
  484. package/Tests/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.test.ts +1409 -0
  485. package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsAuth.test.ts → Connectors/GoogleSecOps/GoogleSecOpsAuth.test.ts} +5 -5
  486. package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsClient.test.ts → Connectors/GoogleSecOps/GoogleSecOpsClient.test.ts} +9 -5
  487. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.test.ts +483 -0
  488. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorCuratedAndLateAlerts.test.ts +676 -0
  489. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorFetchEvents.test.ts +1994 -0
  490. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorFixtures.ts +332 -0
  491. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorHttpIntegration.test.ts +680 -0
  492. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorRequestContract.test.ts +1206 -0
  493. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnectorTestConnection.test.ts +1136 -0
  494. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsCuratedRuleCounts.test.ts +407 -0
  495. package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsErrorHandling.test.ts → Connectors/GoogleSecOps/GoogleSecOpsErrorHandling.test.ts} +5 -5
  496. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingAdaptiveCatchUp.test.ts +730 -0
  497. package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsClickhouseIntegration.test.ts → Connectors/GoogleSecOps/GoogleSecOpsPollingClickhouseIntegration.test.ts} +130 -35
  498. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingFailureTaxonomy.test.ts +772 -0
  499. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingFixtures.ts +648 -0
  500. package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsHttpIntegration.test.ts → Connectors/GoogleSecOps/GoogleSecOpsPollingHttpIntegration.test.ts} +249 -222
  501. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingIntegration.test.ts +1390 -0
  502. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingLoop.test.ts +981 -0
  503. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsPollingNothingImportedRegression.test.ts +290 -0
  504. package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsRequestContract.test.ts → Connectors/GoogleSecOps/GoogleSecOpsRequestContract.test.ts} +2 -2
  505. package/Tests/Server/Utils/SecurityEvent/{GoogleSecOpsResponseParsing.test.ts → Connectors/GoogleSecOps/GoogleSecOpsResponseParsing.test.ts} +5 -5
  506. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsSearchDetections.test.ts +763 -0
  507. package/Tests/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsTesterIntegration.test.ts +421 -0
  508. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.test.ts +763 -0
  509. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.test.ts +1296 -0
  510. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.test.ts +1102 -0
  511. package/Tests/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.test.ts +1174 -0
  512. package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.test.ts +1032 -0
  513. package/Tests/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.test.ts +1558 -0
  514. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.test.ts +4483 -0
  515. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.test.ts +1178 -0
  516. package/Tests/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.test.ts +1215 -0
  517. package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.test.ts +1068 -0
  518. package/Tests/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.test.ts +1004 -0
  519. package/Tests/Server/Utils/SessionReplay/SessionReplayOriginAllowlist.test.ts +41 -0
  520. package/Tests/Server/Utils/SessionReplay/SessionReplayReadServiceQueries.test.ts +1966 -179
  521. package/Tests/Server/Utils/Slo/SloFeedUtil.test.ts +326 -0
  522. package/Tests/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.test.ts +260 -0
  523. package/Tests/Server/Utils/Slo/SloMetricUtil.test.ts +592 -0
  524. package/Tests/Server/Utils/Slo/SloRecordReferenceValidator.test.ts +311 -0
  525. package/Tests/Server/Utils/StatusPageResource.test.ts +91 -3
  526. package/Tests/Server/Utils/Telemetry/KubernetesResourceAttributes.test.ts +162 -0
  527. package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +460 -13
  528. package/Tests/Server/Utils/Telemetry/ResourceFacetPlanner.test.ts +678 -0
  529. package/Tests/Server/Utils/Telemetry/ResourceFacetResolver.test.ts +348 -2
  530. package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +525 -0
  531. package/Tests/Server/Utils/Telemetry/TraceContextPropagation.test.ts +420 -0
  532. package/Tests/Types/Billing/SubscriptionStatus.test.ts +176 -0
  533. package/Tests/Types/Billing/SubscriptionStatusPastDueMonitoring.test.ts +187 -0
  534. package/Tests/Types/Dashboard/DashboardTemplateInvariants.test.ts +53 -7
  535. package/Tests/Types/Dashboard/SloDashboardTemplate.test.ts +816 -792
  536. package/Tests/Types/Monitor/CriteriaFilter.test.ts +216 -24
  537. package/Tests/Types/Monitor/MonitorStepDnssecMonitor.test.ts +14 -1
  538. package/Tests/Types/Monitor/MonitorStepDomainMonitor.test.ts +14 -1
  539. package/Tests/Types/Monitor/MonitorStepExternalStatusPageMonitor.test.ts +14 -1
  540. package/Tests/Types/Monitor/MonitorStepRetriesParsing.test.ts +201 -0
  541. package/Tests/Types/Rules/RuleRun.test.ts +315 -0
  542. package/Tests/Types/Rum/SessionReplayApiContracts.test.ts +133 -0
  543. package/Tests/Types/Rum/SessionReplayTransportContracts.test.ts +95 -0
  544. package/Tests/Types/SecurityEvent/Connectors/ConnectorDiagnostics.test.ts +82 -0
  545. package/Tests/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.test.ts +339 -0
  546. package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +217 -0
  547. package/Tests/Types/StatusPage/SubscriberUpdateNotification.test.ts +200 -0
  548. package/Tests/Types/Telemetry/ExceptionSpanScope.test.ts +89 -0
  549. package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +96 -0
  550. package/Tests/Types/Telemetry/ResourceFacetCatalog.test.ts +304 -0
  551. package/Tests/UI/Components/ActiveFilterChipsLockedFilters.test.tsx +411 -0
  552. package/Tests/UI/Components/AlertBanner.test.tsx +319 -0
  553. package/Tests/UI/Components/BulkArchiveActionsCopy.test.tsx +310 -0
  554. package/Tests/UI/Components/Card.test.tsx +312 -1
  555. package/Tests/UI/Components/CardModelDetailHeaderLayout.test.tsx +253 -0
  556. package/Tests/UI/Components/CardModelDetailRefresher.test.tsx +342 -0
  557. package/Tests/UI/Components/Checkbox.test.tsx +79 -0
  558. package/Tests/UI/Components/CopyTextButton.test.tsx +142 -0
  559. package/Tests/UI/Components/Detail/DetailIdIsUnique.test.tsx +87 -0
  560. package/Tests/UI/Components/DetailCompactStyle.test.tsx +621 -0
  561. package/Tests/UI/Components/Dropdown/DropdownClearable.test.tsx +393 -0
  562. package/Tests/UI/Components/Dropdown/DropdownMultiSelectChipAccessibleName.test.tsx +64 -0
  563. package/Tests/UI/Components/EmptyState/EmptyState.test.tsx +335 -4
  564. package/Tests/UI/Components/EmptyState/EmptyStateGuideLinks.test.tsx +337 -0
  565. package/Tests/UI/Components/ErrorBoundary.test.tsx +60 -0
  566. package/Tests/UI/Components/FacetSections.test.tsx +581 -0
  567. package/Tests/UI/Components/FacetSidebarControls.test.tsx +812 -0
  568. package/Tests/UI/Components/FacetVisibility.test.ts +429 -0
  569. package/Tests/UI/Components/Forms/ModelFormJsonColumns.test.tsx +21 -20
  570. package/Tests/UI/Components/LabelRuleImportExport.test.tsx +15 -2
  571. package/Tests/UI/Components/LockedFilterChip.test.tsx +788 -0
  572. package/Tests/UI/Components/LogsEntityNames.test.ts +1769 -0
  573. package/Tests/UI/Components/LogsEntityNamesComponents.test.tsx +696 -0
  574. package/Tests/UI/Components/LogsFacetSidebarHiddenFacets.test.tsx +600 -0
  575. package/Tests/UI/Components/LogsViewerEntityNames.test.tsx +713 -0
  576. package/Tests/UI/Components/MarkdownInlineReferences.test.tsx +2079 -0
  577. package/Tests/UI/Components/MemberRoleAssignment.test.tsx +446 -0
  578. package/Tests/UI/Components/ModelDetailRefetch.test.tsx +397 -0
  579. package/Tests/UI/Components/ModelListRefetch.test.tsx +233 -0
  580. package/Tests/UI/Components/ModelPageModelChange.test.tsx +409 -0
  581. package/Tests/UI/Components/MoreMenu.test.tsx +133 -0
  582. package/Tests/UI/Components/MoreMenuMotion.test.tsx +84 -3
  583. package/Tests/UI/Components/PaginationIntegration.test.tsx +25 -0
  584. package/Tests/UI/Components/ResourceFacetConfigs.test.ts +172 -0
  585. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +3 -3
  586. package/Tests/UI/Components/RuleRun/RuleDetailFields.test.tsx +336 -0
  587. package/Tests/UI/Components/RuleRun/RuleTable.test.tsx +304 -0
  588. package/Tests/UI/Components/RuleRun/RunRuleNowModal.test.tsx +231 -0
  589. package/Tests/UI/Components/RuleRun/RunRulesBulkAction.test.ts +213 -0
  590. package/Tests/UI/Components/SavedViewsSidebarIntegration.test.tsx +32 -14
  591. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +44 -1
  592. package/Tests/UI/Components/TelemetryActiveFilterChipsLockedFilters.test.tsx +367 -0
  593. package/Tests/UI/Components/TelemetryFacetSidebarHiddenFacets.test.tsx +718 -0
  594. package/Tests/UI/Monitor/EvaluationLogList.test.tsx +303 -0
  595. package/Tests/UI/Monitor/MonitorSummarySnapshotRender.test.tsx +55 -1
  596. package/Tests/UI/Rum/FidelityNotices.test.ts +22 -0
  597. package/Tests/UI/Rum/RecordingHealthCard.test.tsx +120 -136
  598. package/Tests/UI/Rum/RecordingHealthDashboard.test.tsx +988 -0
  599. package/Tests/UI/Rum/ReplayCard.test.tsx +32 -0
  600. package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +709 -12
  601. package/Tests/UI/Rum/ReplayEngine.test.ts +154 -0
  602. package/Tests/UI/Rum/ReplayHeader.test.tsx +284 -124
  603. package/Tests/UI/Rum/ReplayPinControl.test.tsx +189 -10
  604. package/Tests/UI/Rum/ReplayPlayerChrome.test.tsx +286 -12
  605. package/Tests/UI/Rum/ReplayRail.test.tsx +294 -0
  606. package/Tests/UI/Rum/ReplayScrubber.test.tsx +213 -1
  607. package/Tests/UI/Rum/ReplayStage.test.tsx +1228 -173
  608. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +433 -3
  609. package/Tests/UI/Rum/ReplayTabSwitcher.test.tsx +1391 -0
  610. package/Tests/UI/Rum/ReplayTimeline.test.tsx +222 -0
  611. package/Tests/UI/Rum/ReplayUi.test.tsx +189 -2
  612. package/Tests/UI/Rum/ReplayUserSessionsMenu.test.tsx +91 -0
  613. package/Tests/UI/Rum/SessionReplayEmptyState.test.tsx +1 -1
  614. package/Tests/UI/Rum/SessionReplaySettingsPolicyLoading.test.tsx +585 -0
  615. package/Tests/UI/Rum/SessionReplayTable.test.tsx +844 -51
  616. package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +29 -1
  617. package/Tests/UI/Telemetry/TelemetryDetailPanel.test.tsx +288 -0
  618. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +31 -1
  619. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +6 -0
  620. package/Tests/UI/Utils/Clipboard.test.ts +154 -0
  621. package/Tests/UI/Utils/DashboardStackingLayers.test.ts +8 -1
  622. package/Tests/UI/Utils/Navigation.test.ts +24 -0
  623. package/Tests/UI/Utils/RuleRunClient.test.ts +303 -0
  624. package/Tests/UI/Utils/Telemetry/TelemetryEntityNames.test.ts +2206 -0
  625. package/Tests/UI/Utils/Telemetry/UseTelemetryEntityNames.test.tsx +844 -0
  626. package/Tests/Utils/AI/InvestigationReport.test.ts +2430 -0
  627. package/Tests/Utils/APIOutgoingRequestTracer.test.ts +137 -0
  628. package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +2 -0
  629. package/Tests/Utils/Dashboard/Components/DashboardSloListComponent.test.ts +206 -0
  630. package/Tests/Utils/Dashboard/DashboardSloComponent.test.ts +36 -2
  631. package/Tests/Utils/Dashboard/SloTemplateVariableScoping.test.ts +409 -588
  632. package/Tests/Utils/Dashboard/SloWidgetSource.test.ts +351 -0
  633. package/Tests/Utils/Markdown/MarkdownEscape.test.ts +361 -0
  634. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +1425 -118
  635. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +188 -3
  636. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +661 -13
  637. package/Tests/Utils/NetworkDiscovery/NetbiosNameUtil.test.ts +349 -0
  638. package/Tests/Utils/NetworkDiscovery/RunImportedDeviceNaming.test.ts +656 -0
  639. package/Tests/Utils/NetworkDiscovery/ShortDeviceNamePlanner.test.ts +1020 -0
  640. package/Tests/Utils/NetworkDiscovery/ShortHostnameUtil.test.ts +619 -0
  641. package/Tests/Utils/NetworkSite/CidrMatchUtil.test.ts +317 -0
  642. package/Tests/Utils/Project/DataResidency.test.ts +198 -0
  643. package/Tests/Utils/Rules/RuleRunSummary.test.ts +394 -0
  644. package/Tests/Utils/Rum/SessionReplayHealthDiagnosis.test.ts +40 -0
  645. package/Tests/Utils/Rum/SessionReplayRecordingEnded.test.ts +619 -0
  646. package/Tests/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.test.ts +631 -0
  647. package/Tests/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.test.ts +479 -0
  648. package/Tests/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.test.ts +507 -0
  649. package/Tests/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.test.ts +686 -0
  650. package/Tests/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.test.ts +474 -0
  651. package/Tests/Utils/SecurityEvent/Connectors/OktaNormalizer.test.ts +736 -0
  652. package/Tests/Utils/SecurityEvent/Connectors/SplunkNormalizer.test.ts +407 -0
  653. package/Tests/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.test.ts +129 -0
  654. package/Tests/Utils/Slo/SloAffectedResourceMarkdown.test.ts +302 -0
  655. package/Tests/Utils/Slo/SloBurnRateTemplate.test.ts +468 -0
  656. package/Tests/Utils/Slo/SloEvaluation.test.ts +20 -4
  657. package/Tests/Utils/Slo/SloFeedMarkdown.test.ts +1185 -0
  658. package/Tests/Utils/Slo/SloHealth.test.ts +262 -0
  659. package/Tests/Utils/Slo/SloHistoryMetricName.test.ts +102 -0
  660. package/Tests/Utils/Slo/SloListWidgetFormat.test.ts +522 -0
  661. package/Tests/Utils/Slo/SloMetricType.test.ts +355 -0
  662. package/Tests/Utils/Slo/SloMonitorRuleCriteria.test.ts +387 -0
  663. package/Tests/Utils/Slo/SloMonitorStatusSummary.test.ts +210 -0
  664. package/Tests/Utils/Slo/SloOverviewText.test.ts +226 -0
  665. package/Tests/Utils/Slo/SloProjection.test.ts +1039 -0
  666. package/Tests/Utils/Slo/SloWidgetFormat.test.ts +47 -0
  667. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +57 -1
  668. package/Tests/Utils/Telemetry/EntityRelationship.test.ts +36 -0
  669. package/Tests/Utils/Telemetry/LockedFilterSearch.test.ts +521 -0
  670. package/Tests/Utils/Telemetry/NetworkHost.test.ts +48 -0
  671. package/Tests/Utils/Telemetry/OriginAllowList.test.ts +154 -0
  672. package/Tests/Utils/Traces/CriticalPath.test.ts +25 -0
  673. package/Types/AI/AIChatTypes.ts +8 -0
  674. package/Types/AI/InvestigationEvidence.ts +96 -0
  675. package/Types/BaseDatabase/EnableAuditLogOn.ts +41 -0
  676. package/Types/Billing/SubscriptionStatus.ts +39 -4
  677. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  678. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +5 -0
  679. package/Types/Dashboard/DashboardComponents/DashboardSloComponent.ts +10 -0
  680. package/Types/Dashboard/DashboardComponents/DashboardSloListComponent.ts +29 -0
  681. package/Types/Dashboard/DashboardTemplates.ts +290 -297
  682. package/Types/Database/EnableAuditLog.ts +23 -1
  683. package/Types/Email/EmailTemplateType.ts +4 -0
  684. package/Types/Monitor/CriteriaFilter.ts +55 -8
  685. package/Types/Monitor/MonitorEvaluationSummary.ts +5 -0
  686. package/Types/Monitor/MonitorStep.ts +5 -2
  687. package/Types/Monitor/MonitorStepDnsMonitor.ts +3 -1
  688. package/Types/Monitor/MonitorStepDnssecMonitor.ts +3 -1
  689. package/Types/Monitor/MonitorStepDomainMonitor.ts +3 -1
  690. package/Types/Monitor/MonitorStepExternalStatusPageMonitor.ts +3 -1
  691. package/Types/Monitor/MonitorStepRetries.ts +59 -0
  692. package/Types/Monitor/MonitorStepSnmpMonitor.ts +9 -2
  693. package/Types/NetworkDevice/NetworkDeviceDiagnosticResult.ts +104 -0
  694. package/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.ts +47 -0
  695. package/Types/NetworkDevice/NetworkDeviceDiagnosticType.ts +47 -0
  696. package/Types/NetworkDevice/NetworkDevicePingMetricNames.ts +20 -0
  697. package/Types/Permission.ts +129 -2
  698. package/Types/Rules/RuleCriteriaFieldRegistry.ts +5 -0
  699. package/Types/Rules/RuleRun.ts +518 -0
  700. package/Types/Rum/SessionReplay.ts +109 -0
  701. package/Types/Rum/SessionReplayApi.ts +49 -0
  702. package/Types/SecurityEvent/Connectors/ConnectorDiagnostics.ts +117 -0
  703. package/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.ts +113 -0
  704. package/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.ts +599 -0
  705. package/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.ts +45 -0
  706. package/Types/SecurityEvent/GoogleSecOpsRegion.ts +34 -0
  707. package/Types/ServiceLevelObjective/SloHistoryMetricName.ts +25 -0
  708. package/Types/ServiceLevelObjective/SloMetricType.ts +49 -0
  709. package/Types/StatusPage/StatusPageSubscriberNotificationEventType.ts +4 -0
  710. package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +331 -0
  711. package/Types/StatusPage/SubscriberNotificationTrigger.ts +12 -0
  712. package/Types/StatusPage/SubscriberUpdateNotification.ts +89 -0
  713. package/Types/Telemetry/EntityType.ts +14 -0
  714. package/Types/Telemetry/ExceptionSpanScope.ts +83 -0
  715. package/Types/Telemetry/LockedFilterDetail.ts +25 -0
  716. package/Types/Telemetry/ResourceEntityFacet.ts +17 -10
  717. package/Types/Telemetry/ResourceFacetCatalog.ts +171 -0
  718. package/Types/Telemetry/ServiceType.ts +7 -0
  719. package/Typings/Index.d.ts +53 -3
  720. package/UI/Components/AlertBanner/AlertBanner.tsx +85 -27
  721. package/UI/Components/BulkUpdate/BulkArchiveActions.tsx +21 -2
  722. package/UI/Components/Card/Card.tsx +118 -83
  723. package/UI/Components/Checkbox/Checkbox.tsx +8 -5
  724. package/UI/Components/CopyTextButton/CopyTextButton.tsx +7 -1
  725. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +4 -1
  726. package/UI/Components/Detail/Detail.tsx +145 -23
  727. package/UI/Components/Dropdown/Dropdown.tsx +64 -1
  728. package/UI/Components/EmptyState/EmptyState.tsx +27 -3
  729. package/UI/Components/EmptyState/EmptyStateGuideLinks.tsx +124 -0
  730. package/UI/Components/ErrorBoundary.tsx +38 -0
  731. package/UI/Components/Forms/ModelForm.tsx +6 -5
  732. package/UI/Components/LabelRule/LabelRuleTable.tsx +8 -2
  733. package/UI/Components/LogsViewer/LogsEntityNames.ts +912 -0
  734. package/UI/Components/LogsViewer/LogsViewer.tsx +152 -77
  735. package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +17 -11
  736. package/UI/Components/LogsViewer/components/FacetSection.tsx +66 -79
  737. package/UI/Components/LogsViewer/components/FacetValueRow.tsx +17 -2
  738. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +45 -5
  739. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +100 -19
  740. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +156 -39
  741. package/UI/Components/LogsViewer/components/LogsTable.tsx +30 -8
  742. package/UI/Components/LogsViewer/types.ts +6 -0
  743. package/UI/Components/Markdown.tsx/InlineReferences.tsx +628 -0
  744. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +385 -312
  745. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +50 -22
  746. package/UI/Components/ModelDetail/CardModelDetail.tsx +15 -0
  747. package/UI/Components/ModelDetail/ModelDetail.tsx +64 -19
  748. package/UI/Components/ModelList/ModelList.tsx +33 -8
  749. package/UI/Components/MoreMenu/MoreMenu.tsx +14 -3
  750. package/UI/Components/Page/ModelPage.tsx +119 -54
  751. package/UI/Components/RuleRun/RuleDetailFields.tsx +359 -0
  752. package/UI/Components/RuleRun/RuleTable.tsx +183 -0
  753. package/UI/Components/RuleRun/RuleView.tsx +170 -0
  754. package/UI/Components/RuleRun/RunRuleNowModal.tsx +147 -0
  755. package/UI/Components/RuleRun/RunRulesBulkAction.ts +103 -0
  756. package/UI/Components/Table/Table.tsx +8 -0
  757. package/UI/Components/Table/TableRow.tsx +13 -5
  758. package/UI/Components/TelemetryViewer/FacetVisibility.ts +229 -0
  759. package/UI/Components/TelemetryViewer/ResourceFacetConfigs.ts +46 -0
  760. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +7 -0
  761. package/UI/Components/TelemetryViewer/components/FacetSearchInput.tsx +79 -0
  762. package/UI/Components/TelemetryViewer/components/FacetSectionHeader.tsx +69 -0
  763. package/UI/Components/TelemetryViewer/components/FacetShowMoreButton.tsx +36 -0
  764. package/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.tsx +88 -0
  765. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +430 -0
  766. package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +14 -10
  767. package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +203 -10
  768. package/UI/Components/TelemetryViewer/components/TelemetryFacetSection.tsx +60 -73
  769. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +94 -7
  770. package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +17 -2
  771. package/UI/Components/TelemetryViewer/types.ts +19 -0
  772. package/UI/Components/TelemetryViewer/useFacetSearchExemptions.ts +158 -0
  773. package/UI/Components/TelemetryViewer/useFacetSectionSearch.ts +102 -0
  774. package/UI/Utils/Clipboard.ts +68 -2
  775. package/UI/Utils/Navigation.ts +17 -2
  776. package/UI/Utils/Rules/RuleRunClient.ts +178 -0
  777. package/UI/Utils/Telemetry/TelemetryEntityNames.ts +628 -0
  778. package/UI/Utils/Telemetry/UseTelemetryEntityNames.ts +151 -0
  779. package/Utils/AI/InvestigationReport.ts +1789 -0
  780. package/Utils/API.ts +90 -1
  781. package/Utils/Dashboard/Components/DashboardSloComponent.ts +19 -2
  782. package/Utils/Dashboard/Components/DashboardSloListComponent.ts +126 -0
  783. package/Utils/Dashboard/Components/Index.ts +7 -0
  784. package/Utils/Dashboard/SloWidgetSource.ts +188 -0
  785. package/Utils/Markdown/MarkdownEscape.ts +63 -0
  786. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +161 -36
  787. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +25 -0
  788. package/Utils/NetworkDiscovery/NetbiosNameUtil.ts +146 -0
  789. package/Utils/NetworkDiscovery/RunImportedDeviceNaming.ts +390 -0
  790. package/Utils/NetworkDiscovery/ShortDeviceNamePlanner.ts +291 -0
  791. package/Utils/NetworkDiscovery/ShortHostnameUtil.ts +91 -0
  792. package/Utils/NetworkSite/CidrMatchUtil.ts +37 -12
  793. package/Utils/Project/DataResidency.ts +63 -0
  794. package/Utils/Rules/RuleRunSummary.ts +323 -0
  795. package/Utils/Rum/SessionReplayHealth.ts +11 -0
  796. package/Utils/Rum/SessionReplayRecordingEnded.ts +134 -0
  797. package/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.ts +427 -0
  798. package/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.ts +197 -0
  799. package/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.ts +464 -0
  800. package/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.ts +567 -0
  801. package/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.ts +299 -0
  802. package/Utils/SecurityEvent/Connectors/OktaNormalizer.ts +467 -0
  803. package/Utils/SecurityEvent/Connectors/SplunkNormalizer.ts +439 -0
  804. package/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.ts +124 -12
  805. package/Utils/Slo/SloAffectedResourceMarkdown.ts +123 -0
  806. package/Utils/Slo/SloBurnRateTemplate.ts +373 -0
  807. package/Utils/Slo/SloFeedMarkdown.ts +1507 -0
  808. package/Utils/Slo/SloHealth.ts +96 -9
  809. package/Utils/Slo/SloListWidgetFormat.ts +370 -0
  810. package/Utils/Slo/SloMetricType.ts +237 -0
  811. package/Utils/Slo/SloMonitorRuleCriteria.ts +364 -0
  812. package/Utils/Slo/SloMonitorStatusSummary.ts +210 -0
  813. package/Utils/Slo/SloOverviewText.ts +265 -0
  814. package/Utils/Slo/SloProjection.ts +967 -0
  815. package/Utils/Slo/SloWidgetFormat.ts +12 -2
  816. package/Utils/Telemetry/CrossSignalScope.ts +22 -8
  817. package/Utils/Telemetry/EntityRelationship.ts +8 -0
  818. package/Utils/Telemetry/LockedFilterSearch.ts +366 -0
  819. package/Utils/Telemetry/NetworkHost.ts +43 -0
  820. package/Utils/Telemetry/OriginAllowList.ts +139 -4
  821. package/Utils/Traces/CriticalPath.ts +10 -4
  822. package/build/dist/Models/AnalyticsModels/AuditLog.js +70 -1
  823. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  824. package/build/dist/Models/AnalyticsModels/SecurityEvent.js +4 -4
  825. package/build/dist/Models/DatabaseModels/Alert.js +60 -0
  826. package/build/dist/Models/DatabaseModels/Alert.js.map +1 -1
  827. package/build/dist/Models/DatabaseModels/GlobalConfig.js +1 -1
  828. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  829. package/build/dist/Models/DatabaseModels/Incident.js +64 -0
  830. package/build/dist/Models/DatabaseModels/Incident.js.map +1 -1
  831. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js +75 -0
  832. package/build/dist/Models/DatabaseModels/IncidentEpisodePublicNote.js.map +1 -1
  833. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js +75 -0
  834. package/build/dist/Models/DatabaseModels/IncidentPublicNote.js.map +1 -1
  835. package/build/dist/Models/DatabaseModels/Index.js +10 -4
  836. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  837. package/build/dist/Models/DatabaseModels/NetworkDevice.js +68 -0
  838. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  839. package/build/dist/Models/DatabaseModels/NetworkDeviceDiagnostic.js +772 -0
  840. package/build/dist/Models/DatabaseModels/NetworkDeviceDiagnostic.js.map +1 -0
  841. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +140 -0
  842. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  843. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +1 -1
  844. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
  845. package/build/dist/Models/DatabaseModels/Project.js +42 -0
  846. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  847. package/build/dist/Models/DatabaseModels/RumApplication.js +1 -1
  848. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  849. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js +75 -0
  850. package/build/dist/Models/DatabaseModels/ScheduledMaintenancePublicNote.js.map +1 -1
  851. package/build/dist/Models/DatabaseModels/{GoogleSecOpsConnection.js → SecurityEventConnection.js} +87 -75
  852. package/build/dist/Models/DatabaseModels/SecurityEventConnection.js.map +1 -0
  853. package/build/dist/Models/DatabaseModels/{GoogleSecOpsConnectionRun.js → SecurityEventConnectionRun.js} +37 -37
  854. package/build/dist/Models/DatabaseModels/SecurityEventConnectionRun.js.map +1 -0
  855. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js +192 -10
  856. package/build/dist/Models/DatabaseModels/ServiceLevelObjective.js.map +1 -1
  857. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js +798 -96
  858. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveBurnRateRule.js.map +1 -1
  859. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js +596 -0
  860. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveFeed.js.map +1 -0
  861. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js +590 -0
  862. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveMonitorRule.js.map +1 -0
  863. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js +16 -0
  864. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerTeam.js.map +1 -1
  865. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js +16 -0
  866. package/build/dist/Models/DatabaseModels/ServiceLevelObjectiveOwnerUser.js.map +1 -1
  867. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js +75 -0
  868. package/build/dist/Models/DatabaseModels/StatusPageAnnouncement.js.map +1 -1
  869. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js +2 -2
  870. package/build/dist/Models/DatabaseModels/TelemetryIngestionKey.js.map +1 -1
  871. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +1 -1
  872. package/build/dist/Server/API/AIInvestigationAPI.js +336 -27
  873. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
  874. package/build/dist/Server/API/BaseAPI.js +14 -0
  875. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  876. package/build/dist/Server/API/BillingInvoiceAPI.js +233 -19
  877. package/build/dist/Server/API/BillingInvoiceAPI.js.map +1 -1
  878. package/build/dist/Server/API/BillingPaymentMethodAPI.js +86 -5
  879. package/build/dist/Server/API/BillingPaymentMethodAPI.js.map +1 -1
  880. package/build/dist/Server/API/DashboardAPI.js +72 -2
  881. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  882. package/build/dist/Server/API/SecurityEventConnectionAPI.js +263 -0
  883. package/build/dist/Server/API/SecurityEventConnectionAPI.js.map +1 -0
  884. package/build/dist/Server/API/StatusPageAPI.js +236 -154
  885. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  886. package/build/dist/Server/API/TelemetryAPI.js +248 -170
  887. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  888. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js +40 -0
  889. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792700000000-AddSecurityEventConnections.js.map +1 -0
  890. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.js +34 -0
  891. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792800000000-AddNetworkDeviceDiagnostic.js.map +1 -0
  892. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.js +24 -0
  893. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1792900000000-AddNetworkDeviceDnsNameAndShortDeviceNames.js.map +1 -0
  894. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.js +21 -0
  895. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793000000000-AddNetbiosLookupToNetworkDeviceDiscoveryScan.js.map +1 -0
  896. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.js +207 -0
  897. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793100000000-SloProductOverhaul.js.map +1 -0
  898. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.js +72 -0
  899. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793200000000-BackfillSloMonitorRulesAndAffectedResources.js.map +1 -0
  900. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.js +20 -0
  901. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793300000000-AddDataResidencyToProject.js.map +1 -0
  902. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.js +46 -0
  903. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1793400000000-AddSubscriberUpdateNotificationStatus.js.map +1 -0
  904. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +16 -0
  905. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  906. package/build/dist/Server/Middleware/TelemetryIngest.js +57 -4
  907. package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
  908. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +112 -56
  909. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  910. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +167 -68
  911. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  912. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +87 -26
  913. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  914. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +270 -203
  915. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  916. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +498 -354
  917. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  918. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +97 -34
  919. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  920. package/build/dist/Server/Services/AlertService.js +91 -8
  921. package/build/dist/Server/Services/AlertService.js.map +1 -1
  922. package/build/dist/Server/Services/AuditLogService.js +408 -44
  923. package/build/dist/Server/Services/AuditLogService.js.map +1 -1
  924. package/build/dist/Server/Services/BillingInvoiceService.js +94 -85
  925. package/build/dist/Server/Services/BillingInvoiceService.js.map +1 -1
  926. package/build/dist/Server/Services/BillingService.js +406 -14
  927. package/build/dist/Server/Services/BillingService.js.map +1 -1
  928. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +141 -92
  929. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  930. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +189 -101
  931. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  932. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +135 -86
  933. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  934. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +189 -100
  935. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  936. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +117 -69
  937. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  938. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +171 -83
  939. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  940. package/build/dist/Server/Services/DatabaseService.js +125 -18
  941. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  942. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +141 -92
  943. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  944. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +189 -101
  945. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  946. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +145 -91
  947. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  948. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +191 -101
  949. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  950. package/build/dist/Server/Services/ExceptionAggregationService.js +7 -16
  951. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  952. package/build/dist/Server/Services/HostLabelRuleEngineService.js +141 -92
  953. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  954. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +190 -102
  955. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  956. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +112 -56
  957. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  958. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +220 -63
  959. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  960. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +87 -26
  961. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  962. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js +24 -0
  963. package/build/dist/Server/Services/IncidentEpisodePublicNoteService.js.map +1 -1
  964. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +258 -192
  965. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  966. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +519 -376
  967. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  968. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +95 -32
  969. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  970. package/build/dist/Server/Services/IncidentPublicNoteService.js +24 -0
  971. package/build/dist/Server/Services/IncidentPublicNoteService.js.map +1 -1
  972. package/build/dist/Server/Services/IncidentService.js +90 -5
  973. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  974. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +113 -65
  975. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  976. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +171 -83
  977. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  978. package/build/dist/Server/Services/Index.js +10 -4
  979. package/build/dist/Server/Services/Index.js.map +1 -1
  980. package/build/dist/Server/Services/InventoryItemService.js +22 -0
  981. package/build/dist/Server/Services/InventoryItemService.js.map +1 -1
  982. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +117 -69
  983. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  984. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +171 -83
  985. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  986. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +145 -91
  987. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  988. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +191 -101
  989. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  990. package/build/dist/Server/Services/LabelService.js +20 -25
  991. package/build/dist/Server/Services/LabelService.js.map +1 -1
  992. package/build/dist/Server/Services/LogAggregationService.js +8 -17
  993. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  994. package/build/dist/Server/Services/MetricAggregationService.js +4 -14
  995. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  996. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +123 -77
  997. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  998. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +167 -82
  999. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  1000. package/build/dist/Server/Services/MonitorProbeService.js +18 -2
  1001. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  1002. package/build/dist/Server/Services/MonitorService.js +11 -9
  1003. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  1004. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +287 -5
  1005. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  1006. package/build/dist/Server/Services/NetworkDeviceDiagnosticService.js +333 -0
  1007. package/build/dist/Server/Services/NetworkDeviceDiagnosticService.js.map +1 -0
  1008. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +117 -69
  1009. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  1010. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +171 -83
  1011. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  1012. package/build/dist/Server/Services/NetworkDeviceService.js +36 -2
  1013. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  1014. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +117 -64
  1015. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  1016. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +173 -83
  1017. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  1018. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +116 -65
  1019. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  1020. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +171 -83
  1021. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  1022. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +141 -92
  1023. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  1024. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +189 -101
  1025. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  1026. package/build/dist/Server/Services/ProjectService.js +82 -10
  1027. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  1028. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +141 -92
  1029. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  1030. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +189 -101
  1031. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  1032. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +111 -63
  1033. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  1034. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +161 -77
  1035. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  1036. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +117 -69
  1037. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  1038. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +171 -83
  1039. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  1040. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +280 -209
  1041. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  1042. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +521 -376
  1043. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  1044. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js +24 -0
  1045. package/build/dist/Server/Services/ScheduledMaintenancePublicNoteService.js.map +1 -1
  1046. package/build/dist/Server/Services/ScheduledMaintenanceService.js +24 -8
  1047. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  1048. package/build/dist/Server/Services/{GoogleSecOpsConnectionRunService.js → SecurityEventConnectionRunService.js} +2 -2
  1049. package/build/dist/Server/Services/SecurityEventConnectionRunService.js.map +1 -0
  1050. package/build/dist/Server/Services/SecurityEventConnectionService.js +396 -0
  1051. package/build/dist/Server/Services/SecurityEventConnectionService.js.map +1 -0
  1052. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +115 -62
  1053. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  1054. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +163 -77
  1055. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  1056. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +141 -92
  1057. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  1058. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js +769 -18
  1059. package/build/dist/Server/Services/ServiceLevelObjectiveBurnRateRuleService.js.map +1 -1
  1060. package/build/dist/Server/Services/ServiceLevelObjectiveFeedService.js +96 -0
  1061. package/build/dist/Server/Services/ServiceLevelObjectiveFeedService.js.map +1 -0
  1062. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js +614 -87
  1063. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleEngineService.js.map +1 -1
  1064. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js +844 -0
  1065. package/build/dist/Server/Services/ServiceLevelObjectiveMonitorRuleService.js.map +1 -0
  1066. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js +207 -1
  1067. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerTeamService.js.map +1 -1
  1068. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js +221 -1
  1069. package/build/dist/Server/Services/ServiceLevelObjectiveOwnerUserService.js.map +1 -1
  1070. package/build/dist/Server/Services/ServiceLevelObjectiveService.js +997 -50
  1071. package/build/dist/Server/Services/ServiceLevelObjectiveService.js.map +1 -1
  1072. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +191 -102
  1073. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  1074. package/build/dist/Server/Services/StatusPageAnnouncementService.js +12 -0
  1075. package/build/dist/Server/Services/StatusPageAnnouncementService.js.map +1 -1
  1076. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +118 -70
  1077. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  1078. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +158 -76
  1079. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  1080. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +19 -215
  1081. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
  1082. package/build/dist/Server/Services/StatusPageSubscriberService.js +6 -0
  1083. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  1084. package/build/dist/Server/Services/TelemetryUsageBillingService.js +27 -5
  1085. package/build/dist/Server/Services/TelemetryUsageBillingService.js.map +1 -1
  1086. package/build/dist/Server/Services/ThreatIntelFeedService.js +1 -1
  1087. package/build/dist/Server/Services/TraceAggregationService.js +51 -25
  1088. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  1089. package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js +141 -92
  1090. package/build/dist/Server/Services/VMwareVCenterLabelRuleEngineService.js.map +1 -1
  1091. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js +189 -101
  1092. package/build/dist/Server/Services/VMwareVCenterOwnerRuleEngineService.js.map +1 -1
  1093. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +117 -69
  1094. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  1095. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +171 -83
  1096. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  1097. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
  1098. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  1099. package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js +17 -0
  1100. package/build/dist/Server/Utils/AI/AlertAIContextBuilder.js.map +1 -1
  1101. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +3 -0
  1102. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  1103. package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js +31 -0
  1104. package/build/dist/Server/Utils/AI/IncidentAIContextBuilder.js.map +1 -1
  1105. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +14 -7
  1106. package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
  1107. package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js +468 -0
  1108. package/build/dist/Server/Utils/AI/SRE/InvestigationEvidence.js.map +1 -0
  1109. package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js +230 -0
  1110. package/build/dist/Server/Utils/AI/SRE/InvestigationReferences.js.map +1 -0
  1111. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js +24 -1
  1112. package/build/dist/Server/Utils/AI/Toolbox/AlertTools.js.map +1 -1
  1113. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js +21 -1
  1114. package/build/dist/Server/Utils/AI/Toolbox/IncidentTools.js.map +1 -1
  1115. package/build/dist/Server/Utils/AI/Toolbox/Index.js +32 -0
  1116. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  1117. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js +337 -53
  1118. package/build/dist/Server/Utils/AI/Toolbox/SloTools.js.map +1 -1
  1119. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js +6 -2
  1120. package/build/dist/Server/Utils/AI/Toolbox/TimelineTools.js.map +1 -1
  1121. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +59 -0
  1122. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  1123. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js +108 -15
  1124. package/build/dist/Server/Utils/Dashboard/PublicDashboardResourceListPolicy.js.map +1 -1
  1125. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js +2 -2
  1126. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloHistoryPolicy.js.map +1 -1
  1127. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js +115 -6
  1128. package/build/dist/Server/Utils/Dashboard/PublicDashboardSloWidget.js.map +1 -1
  1129. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js +13 -0
  1130. package/build/dist/Server/Utils/Database/ProjectScopedReferenceValidator.js.map +1 -1
  1131. package/build/dist/Server/Utils/Database/RelationValueUtil.js +82 -0
  1132. package/build/dist/Server/Utils/Database/RelationValueUtil.js.map +1 -0
  1133. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js +10 -6
  1134. package/build/dist/Server/Utils/Monitor/Criteria/CompareCriteria.js.map +1 -1
  1135. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +17 -21
  1136. package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
  1137. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +5 -3
  1138. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  1139. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js +5 -4
  1140. package/build/dist/Server/Utils/Monitor/MonitorCriteriaExpectationBuilder.js.map +1 -1
  1141. package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js +50 -10
  1142. package/build/dist/Server/Utils/Monitor/MonitorStepsProjectValidator.js.map +1 -1
  1143. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js +13 -1
  1144. package/build/dist/Server/Utils/Monitor/NetworkDeviceHydrationUtil.js.map +1 -1
  1145. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +6 -10
  1146. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  1147. package/build/dist/Server/Utils/Rules/MonitorRulePatternValidator.js +34 -0
  1148. package/build/dist/Server/Utils/Rules/MonitorRulePatternValidator.js.map +1 -0
  1149. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js +69 -0
  1150. package/build/dist/Server/Utils/Rules/OwnerRuleAssignment.js.map +1 -0
  1151. package/build/dist/Server/Utils/Rules/RuleRun/RuleApplication.js +25 -0
  1152. package/build/dist/Server/Utils/Rules/RuleRun/RuleApplication.js.map +1 -0
  1153. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunPermission.js +128 -0
  1154. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunPermission.js.map +1 -0
  1155. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js +746 -0
  1156. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunRegistry.js.map +1 -0
  1157. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunner.js +221 -0
  1158. package/build/dist/Server/Utils/Rules/RuleRun/RuleRunner.js.map +1 -0
  1159. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +3 -2
  1160. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -1
  1161. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js +752 -0
  1162. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubClient.js.map +1 -0
  1163. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js +493 -0
  1164. package/build/dist/Server/Utils/SecurityEvent/Connectors/AwsSecurityHub/AwsSecurityHubConnector.js.map +1 -0
  1165. package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js +354 -0
  1166. package/build/dist/Server/Utils/SecurityEvent/Connectors/ConnectorPlatformHealth.js.map +1 -0
  1167. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js +405 -0
  1168. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconClient.js.map +1 -0
  1169. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js +466 -0
  1170. package/build/dist/Server/Utils/SecurityEvent/Connectors/CrowdStrikeFalcon/CrowdStrikeFalconConnector.js.map +1 -0
  1171. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js +344 -0
  1172. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityClient.js.map +1 -0
  1173. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js +511 -0
  1174. package/build/dist/Server/Utils/SecurityEvent/Connectors/ElasticSecurity/ElasticSecurityConnector.js.map +1 -0
  1175. package/build/dist/Server/Utils/SecurityEvent/{GoogleSecOps → Connectors/GoogleSecOps}/GoogleSecOpsClient.js +401 -68
  1176. package/build/dist/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsClient.js.map +1 -0
  1177. package/build/dist/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.js +1417 -0
  1178. package/build/dist/Server/Utils/SecurityEvent/Connectors/GoogleSecOps/GoogleSecOpsConnector.js.map +1 -0
  1179. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js +406 -0
  1180. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrClient.js.map +1 -0
  1181. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js +336 -0
  1182. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdr/MicrosoftDefenderXdrConnector.js.map +1 -0
  1183. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js +474 -0
  1184. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelClient.js.map +1 -0
  1185. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js +417 -0
  1186. package/build/dist/Server/Utils/SecurityEvent/Connectors/MicrosoftSentinel/MicrosoftSentinelConnector.js.map +1 -0
  1187. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js +314 -0
  1188. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaClient.js.map +1 -0
  1189. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js +494 -0
  1190. package/build/dist/Server/Utils/SecurityEvent/Connectors/Okta/OktaConnector.js.map +1 -0
  1191. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js +839 -0
  1192. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionPoller.js.map +1 -0
  1193. package/build/dist/Server/Utils/SecurityEvent/{GoogleSecOps/GoogleSecOpsRunExecutor.js → Connectors/SecurityEventConnectionRunExecutor.js} +77 -50
  1194. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionRunExecutor.js.map +1 -0
  1195. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js +214 -0
  1196. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectionTester.js.map +1 -0
  1197. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js +42 -0
  1198. package/build/dist/Server/Utils/SecurityEvent/Connectors/SecurityEventConnectorRegistry.js.map +1 -0
  1199. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js +494 -0
  1200. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkClient.js.map +1 -0
  1201. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js +379 -0
  1202. package/build/dist/Server/Utils/SecurityEvent/Connectors/Splunk/SplunkConnector.js.map +1 -0
  1203. package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js +122 -0
  1204. package/build/dist/Server/Utils/SecurityEvent/Connectors/Types.js.map +1 -0
  1205. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +1 -1
  1206. package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js +52 -0
  1207. package/build/dist/Server/Utils/SecurityEvent/SecurityEventDedupe.js.map +1 -0
  1208. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +2 -2
  1209. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js +599 -32
  1210. package/build/dist/Server/Utils/SessionReplay/SessionReplayReadService.js.map +1 -1
  1211. package/build/dist/Server/Utils/Slo/SloFeedUtil.js +150 -0
  1212. package/build/dist/Server/Utils/Slo/SloFeedUtil.js.map +1 -0
  1213. package/build/dist/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.js +136 -0
  1214. package/build/dist/Server/Utils/Slo/SloLegacyMonitorLabelAdoption.js.map +1 -0
  1215. package/build/dist/Server/Utils/Slo/SloMetricUtil.js +269 -0
  1216. package/build/dist/Server/Utils/Slo/SloMetricUtil.js.map +1 -0
  1217. package/build/dist/Server/Utils/Slo/SloOwnerReferenceValidator.js +134 -0
  1218. package/build/dist/Server/Utils/Slo/SloOwnerReferenceValidator.js.map +1 -0
  1219. package/build/dist/Server/Utils/Slo/SloRecordReferenceValidator.js +137 -0
  1220. package/build/dist/Server/Utils/Slo/SloRecordReferenceValidator.js.map +1 -0
  1221. package/build/dist/Server/Utils/StartServer.js +10 -0
  1222. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  1223. package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js +6 -26
  1224. package/build/dist/Server/Utils/StatusPage/MonitorRulePatternValidator.js.map +1 -1
  1225. package/build/dist/Server/Utils/StatusPageResource.js +31 -5
  1226. package/build/dist/Server/Utils/StatusPageResource.js.map +1 -1
  1227. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +8 -0
  1228. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  1229. package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js +80 -0
  1230. package/build/dist/Server/Utils/Telemetry/KubernetesResourceAttributes.js.map +1 -0
  1231. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +122 -67
  1232. package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -1
  1233. package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js +146 -0
  1234. package/build/dist/Server/Utils/Telemetry/ResourceFacetPlanner.js.map +1 -0
  1235. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js +174 -248
  1236. package/build/dist/Server/Utils/Telemetry/ResourceFacetResolver.js.map +1 -1
  1237. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +492 -0
  1238. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -0
  1239. package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js +259 -0
  1240. package/build/dist/Server/Utils/Telemetry/TraceContextPropagation.js.map +1 -0
  1241. package/build/dist/Server/Utils/Telemetry.js +11 -5
  1242. package/build/dist/Server/Utils/Telemetry.js.map +1 -1
  1243. package/build/dist/Types/AI/InvestigationEvidence.js +2 -0
  1244. package/build/dist/Types/AI/InvestigationEvidence.js.map +1 -0
  1245. package/build/dist/Types/Billing/SubscriptionStatus.js +37 -3
  1246. package/build/dist/Types/Billing/SubscriptionStatus.js.map +1 -1
  1247. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  1248. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  1249. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +5 -0
  1250. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  1251. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloListComponent.js +2 -0
  1252. package/build/dist/Types/Dashboard/DashboardComponents/DashboardSloListComponent.js.map +1 -0
  1253. package/build/dist/Types/Dashboard/DashboardTemplates.js +275 -286
  1254. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  1255. package/build/dist/Types/Database/EnableAuditLog.js +19 -1
  1256. package/build/dist/Types/Database/EnableAuditLog.js.map +1 -1
  1257. package/build/dist/Types/Email/EmailTemplateType.js +4 -0
  1258. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  1259. package/build/dist/Types/Monitor/CriteriaFilter.js +45 -6
  1260. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  1261. package/build/dist/Types/Monitor/MonitorStep.js +2 -0
  1262. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  1263. package/build/dist/Types/Monitor/MonitorStepDnsMonitor.js +3 -1
  1264. package/build/dist/Types/Monitor/MonitorStepDnsMonitor.js.map +1 -1
  1265. package/build/dist/Types/Monitor/MonitorStepDnssecMonitor.js +3 -1
  1266. package/build/dist/Types/Monitor/MonitorStepDnssecMonitor.js.map +1 -1
  1267. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js +3 -1
  1268. package/build/dist/Types/Monitor/MonitorStepDomainMonitor.js.map +1 -1
  1269. package/build/dist/Types/Monitor/MonitorStepExternalStatusPageMonitor.js +3 -1
  1270. package/build/dist/Types/Monitor/MonitorStepExternalStatusPageMonitor.js.map +1 -1
  1271. package/build/dist/Types/Monitor/MonitorStepRetries.js +47 -0
  1272. package/build/dist/Types/Monitor/MonitorStepRetries.js.map +1 -0
  1273. package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js +3 -1
  1274. package/build/dist/Types/Monitor/MonitorStepSnmpMonitor.js.map +1 -1
  1275. package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticResult.js +29 -0
  1276. package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticResult.js.map +1 -0
  1277. package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.js +37 -0
  1278. package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticStatus.js.map +1 -0
  1279. package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticType.js +42 -0
  1280. package/build/dist/Types/NetworkDevice/NetworkDeviceDiagnosticType.js.map +1 -0
  1281. package/build/dist/Types/NetworkDevice/NetworkDevicePingMetricNames.js +20 -0
  1282. package/build/dist/Types/NetworkDevice/NetworkDevicePingMetricNames.js.map +1 -0
  1283. package/build/dist/Types/Permission.js +116 -2
  1284. package/build/dist/Types/Permission.js.map +1 -1
  1285. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +5 -0
  1286. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  1287. package/build/dist/Types/Rules/RuleRun.js +267 -0
  1288. package/build/dist/Types/Rules/RuleRun.js.map +1 -0
  1289. package/build/dist/Types/Rum/SessionReplay.js +95 -0
  1290. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  1291. package/build/dist/Types/Rum/SessionReplayApi.js.map +1 -1
  1292. package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js +18 -0
  1293. package/build/dist/Types/SecurityEvent/Connectors/ConnectorDiagnostics.js.map +1 -0
  1294. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js +17 -0
  1295. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectionDiagnostics.js.map +1 -0
  1296. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js +439 -0
  1297. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorCatalog.js.map +1 -0
  1298. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js +39 -0
  1299. package/build/dist/Types/SecurityEvent/Connectors/SecurityEventConnectorProvider.js.map +1 -0
  1300. package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js +35 -0
  1301. package/build/dist/Types/SecurityEvent/GoogleSecOpsRegion.js.map +1 -0
  1302. package/build/dist/Types/ServiceLevelObjective/SloHistoryMetricName.js +26 -0
  1303. package/build/dist/Types/ServiceLevelObjective/SloHistoryMetricName.js.map +1 -0
  1304. package/build/dist/Types/ServiceLevelObjective/SloMetricType.js +45 -0
  1305. package/build/dist/Types/ServiceLevelObjective/SloMetricType.js.map +1 -0
  1306. package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js +4 -0
  1307. package/build/dist/Types/StatusPage/StatusPageSubscriberNotificationEventType.js.map +1 -1
  1308. package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +295 -0
  1309. package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -0
  1310. package/build/dist/Types/StatusPage/SubscriberNotificationTrigger.js +13 -0
  1311. package/build/dist/Types/StatusPage/SubscriberNotificationTrigger.js.map +1 -0
  1312. package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js +67 -0
  1313. package/build/dist/Types/StatusPage/SubscriberUpdateNotification.js.map +1 -0
  1314. package/build/dist/Types/Telemetry/EntityType.js +14 -0
  1315. package/build/dist/Types/Telemetry/EntityType.js.map +1 -1
  1316. package/build/dist/Types/Telemetry/ExceptionSpanScope.js +59 -0
  1317. package/build/dist/Types/Telemetry/ExceptionSpanScope.js.map +1 -0
  1318. package/build/dist/Types/Telemetry/LockedFilterDetail.js +16 -0
  1319. package/build/dist/Types/Telemetry/LockedFilterDetail.js.map +1 -0
  1320. package/build/dist/Types/Telemetry/ResourceEntityFacet.js +16 -10
  1321. package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -1
  1322. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js +119 -0
  1323. package/build/dist/Types/Telemetry/ResourceFacetCatalog.js.map +1 -0
  1324. package/build/dist/Types/Telemetry/ServiceType.js +7 -0
  1325. package/build/dist/Types/Telemetry/ServiceType.js.map +1 -1
  1326. package/build/dist/UI/Components/AlertBanner/AlertBanner.js +48 -19
  1327. package/build/dist/UI/Components/AlertBanner/AlertBanner.js.map +1 -1
  1328. package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js +10 -2
  1329. package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js.map +1 -1
  1330. package/build/dist/UI/Components/Card/Card.js +34 -17
  1331. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  1332. package/build/dist/UI/Components/Checkbox/Checkbox.js +6 -4
  1333. package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
  1334. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -1
  1335. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  1336. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +1 -1
  1337. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  1338. package/build/dist/UI/Components/Detail/Detail.js +74 -15
  1339. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  1340. package/build/dist/UI/Components/Dropdown/Dropdown.js +33 -5
  1341. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  1342. package/build/dist/UI/Components/EmptyState/EmptyState.js +3 -3
  1343. package/build/dist/UI/Components/EmptyState/EmptyState.js.map +1 -1
  1344. package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js +47 -0
  1345. package/build/dist/UI/Components/EmptyState/EmptyStateGuideLinks.js.map +1 -0
  1346. package/build/dist/UI/Components/ErrorBoundary.js +34 -0
  1347. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  1348. package/build/dist/UI/Components/Forms/ModelForm.js +6 -5
  1349. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  1350. package/build/dist/UI/Components/LabelRule/LabelRuleTable.js +6 -2
  1351. package/build/dist/UI/Components/LabelRule/LabelRuleTable.js.map +1 -1
  1352. package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js +535 -0
  1353. package/build/dist/UI/Components/LogsViewer/LogsEntityNames.js.map +1 -0
  1354. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +117 -57
  1355. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1356. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +3 -7
  1357. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
  1358. package/build/dist/UI/Components/LogsViewer/components/FacetSection.js +31 -44
  1359. package/build/dist/UI/Components/LogsViewer/components/FacetSection.js.map +1 -1
  1360. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +17 -3
  1361. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
  1362. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +19 -3
  1363. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  1364. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +64 -18
  1365. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  1366. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +100 -41
  1367. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1368. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +13 -5
  1369. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  1370. package/build/dist/UI/Components/LogsViewer/types.js.map +1 -1
  1371. package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js +403 -0
  1372. package/build/dist/UI/Components/Markdown.tsx/InlineReferences.js.map +1 -0
  1373. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +197 -179
  1374. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  1375. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +30 -21
  1376. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  1377. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +12 -0
  1378. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  1379. package/build/dist/UI/Components/ModelDetail/ModelDetail.js +46 -12
  1380. package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
  1381. package/build/dist/UI/Components/ModelList/ModelList.js +26 -7
  1382. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  1383. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +3 -1
  1384. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  1385. package/build/dist/UI/Components/Page/ModelPage.js +62 -34
  1386. package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
  1387. package/build/dist/UI/Components/RuleRun/RuleDetailFields.js +226 -0
  1388. package/build/dist/UI/Components/RuleRun/RuleDetailFields.js.map +1 -0
  1389. package/build/dist/UI/Components/RuleRun/RuleTable.js +97 -0
  1390. package/build/dist/UI/Components/RuleRun/RuleTable.js.map +1 -0
  1391. package/build/dist/UI/Components/RuleRun/RuleView.js +83 -0
  1392. package/build/dist/UI/Components/RuleRun/RuleView.js.map +1 -0
  1393. package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js +74 -0
  1394. package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js.map +1 -0
  1395. package/build/dist/UI/Components/RuleRun/RunRulesBulkAction.js +78 -0
  1396. package/build/dist/UI/Components/RuleRun/RunRulesBulkAction.js.map +1 -0
  1397. package/build/dist/UI/Components/Table/Table.js +3 -1
  1398. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  1399. package/build/dist/UI/Components/Table/TableRow.js +8 -1
  1400. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1401. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +111 -0
  1402. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -0
  1403. package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js +22 -0
  1404. package/build/dist/UI/Components/TelemetryViewer/ResourceFacetConfigs.js.map +1 -0
  1405. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +1 -1
  1406. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1407. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js +36 -0
  1408. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js.map +1 -0
  1409. package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js +21 -0
  1410. package/build/dist/UI/Components/TelemetryViewer/components/FacetSectionHeader.js.map +1 -0
  1411. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js +14 -0
  1412. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js.map +1 -0
  1413. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js +27 -0
  1414. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js.map +1 -0
  1415. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +202 -0
  1416. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -0
  1417. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +2 -6
  1418. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
  1419. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +111 -12
  1420. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
  1421. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js +27 -40
  1422. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSection.js.map +1 -1
  1423. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +70 -10
  1424. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1425. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +17 -3
  1426. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
  1427. package/build/dist/UI/Components/TelemetryViewer/types.js +0 -4
  1428. package/build/dist/UI/Components/TelemetryViewer/types.js.map +1 -1
  1429. package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js +70 -0
  1430. package/build/dist/UI/Components/TelemetryViewer/useFacetSearchExemptions.js.map +1 -0
  1431. package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js +52 -0
  1432. package/build/dist/UI/Components/TelemetryViewer/useFacetSectionSearch.js.map +1 -0
  1433. package/build/dist/UI/Utils/Clipboard.js +59 -2
  1434. package/build/dist/UI/Utils/Clipboard.js.map +1 -1
  1435. package/build/dist/UI/Utils/Navigation.js +11 -2
  1436. package/build/dist/UI/Utils/Navigation.js.map +1 -1
  1437. package/build/dist/UI/Utils/Rules/RuleRunClient.js +98 -0
  1438. package/build/dist/UI/Utils/Rules/RuleRunClient.js.map +1 -0
  1439. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js +479 -0
  1440. package/build/dist/UI/Utils/Telemetry/TelemetryEntityNames.js.map +1 -0
  1441. package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js +113 -0
  1442. package/build/dist/UI/Utils/Telemetry/UseTelemetryEntityNames.js.map +1 -0
  1443. package/build/dist/Utils/AI/InvestigationReport.js +1241 -0
  1444. package/build/dist/Utils/AI/InvestigationReport.js.map +1 -0
  1445. package/build/dist/Utils/API.js +25 -0
  1446. package/build/dist/Utils/API.js.map +1 -1
  1447. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js +16 -2
  1448. package/build/dist/Utils/Dashboard/Components/DashboardSloComponent.js.map +1 -1
  1449. package/build/dist/Utils/Dashboard/Components/DashboardSloListComponent.js +94 -0
  1450. package/build/dist/Utils/Dashboard/Components/DashboardSloListComponent.js.map +1 -0
  1451. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  1452. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  1453. package/build/dist/Utils/Dashboard/SloWidgetSource.js +125 -0
  1454. package/build/dist/Utils/Dashboard/SloWidgetSource.js.map +1 -0
  1455. package/build/dist/Utils/Markdown/MarkdownEscape.js +49 -0
  1456. package/build/dist/Utils/Markdown/MarkdownEscape.js.map +1 -0
  1457. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +112 -34
  1458. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  1459. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +22 -0
  1460. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  1461. package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js +129 -0
  1462. package/build/dist/Utils/NetworkDiscovery/NetbiosNameUtil.js.map +1 -0
  1463. package/build/dist/Utils/NetworkDiscovery/RunImportedDeviceNaming.js +255 -0
  1464. package/build/dist/Utils/NetworkDiscovery/RunImportedDeviceNaming.js.map +1 -0
  1465. package/build/dist/Utils/NetworkDiscovery/ShortDeviceNamePlanner.js +184 -0
  1466. package/build/dist/Utils/NetworkDiscovery/ShortDeviceNamePlanner.js.map +1 -0
  1467. package/build/dist/Utils/NetworkDiscovery/ShortHostnameUtil.js +79 -0
  1468. package/build/dist/Utils/NetworkDiscovery/ShortHostnameUtil.js.map +1 -0
  1469. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js +21 -12
  1470. package/build/dist/Utils/NetworkSite/CidrMatchUtil.js.map +1 -1
  1471. package/build/dist/Utils/Project/DataResidency.js +51 -0
  1472. package/build/dist/Utils/Project/DataResidency.js.map +1 -0
  1473. package/build/dist/Utils/Rules/RuleRunSummary.js +197 -0
  1474. package/build/dist/Utils/Rules/RuleRunSummary.js.map +1 -0
  1475. package/build/dist/Utils/Rum/SessionReplayHealth.js +10 -0
  1476. package/build/dist/Utils/Rum/SessionReplayHealth.js.map +1 -1
  1477. package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js +54 -0
  1478. package/build/dist/Utils/Rum/SessionReplayRecordingEnded.js.map +1 -0
  1479. package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js +311 -0
  1480. package/build/dist/Utils/SecurityEvent/Connectors/AwsSecurityHubNormalizer.js.map +1 -0
  1481. package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js +150 -0
  1482. package/build/dist/Utils/SecurityEvent/Connectors/CrowdStrikeFalconNormalizer.js.map +1 -0
  1483. package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js +328 -0
  1484. package/build/dist/Utils/SecurityEvent/Connectors/ElasticSecurityNormalizer.js.map +1 -0
  1485. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js +405 -0
  1486. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftDefenderXdrNormalizer.js.map +1 -0
  1487. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js +212 -0
  1488. package/build/dist/Utils/SecurityEvent/Connectors/MicrosoftSentinelNormalizer.js.map +1 -0
  1489. package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js +351 -0
  1490. package/build/dist/Utils/SecurityEvent/Connectors/OktaNormalizer.js.map +1 -0
  1491. package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js +348 -0
  1492. package/build/dist/Utils/SecurityEvent/Connectors/SplunkNormalizer.js.map +1 -0
  1493. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js +103 -10
  1494. package/build/dist/Utils/SecurityEvent/GoogleSecOpsAlertNormalizer.js.map +1 -1
  1495. package/build/dist/Utils/Slo/SloAffectedResourceMarkdown.js +51 -0
  1496. package/build/dist/Utils/Slo/SloAffectedResourceMarkdown.js.map +1 -0
  1497. package/build/dist/Utils/Slo/SloBurnRateTemplate.js +228 -0
  1498. package/build/dist/Utils/Slo/SloBurnRateTemplate.js.map +1 -0
  1499. package/build/dist/Utils/Slo/SloFeedMarkdown.js +934 -0
  1500. package/build/dist/Utils/Slo/SloFeedMarkdown.js.map +1 -0
  1501. package/build/dist/Utils/Slo/SloHealth.js +75 -9
  1502. package/build/dist/Utils/Slo/SloHealth.js.map +1 -1
  1503. package/build/dist/Utils/Slo/SloListWidgetFormat.js +217 -0
  1504. package/build/dist/Utils/Slo/SloListWidgetFormat.js.map +1 -0
  1505. package/build/dist/Utils/Slo/SloMetricType.js +212 -0
  1506. package/build/dist/Utils/Slo/SloMetricType.js.map +1 -0
  1507. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js +216 -0
  1508. package/build/dist/Utils/Slo/SloMonitorRuleCriteria.js.map +1 -0
  1509. package/build/dist/Utils/Slo/SloMonitorStatusSummary.js +129 -0
  1510. package/build/dist/Utils/Slo/SloMonitorStatusSummary.js.map +1 -0
  1511. package/build/dist/Utils/Slo/SloOverviewText.js +110 -0
  1512. package/build/dist/Utils/Slo/SloOverviewText.js.map +1 -0
  1513. package/build/dist/Utils/Slo/SloProjection.js +448 -0
  1514. package/build/dist/Utils/Slo/SloProjection.js.map +1 -0
  1515. package/build/dist/Utils/Slo/SloWidgetFormat.js +4 -2
  1516. package/build/dist/Utils/Slo/SloWidgetFormat.js.map +1 -1
  1517. package/build/dist/Utils/Telemetry/CrossSignalScope.js +16 -5
  1518. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  1519. package/build/dist/Utils/Telemetry/EntityRelationship.js +7 -0
  1520. package/build/dist/Utils/Telemetry/EntityRelationship.js.map +1 -1
  1521. package/build/dist/Utils/Telemetry/LockedFilterSearch.js +252 -0
  1522. package/build/dist/Utils/Telemetry/LockedFilterSearch.js.map +1 -0
  1523. package/build/dist/Utils/Telemetry/NetworkHost.js +39 -0
  1524. package/build/dist/Utils/Telemetry/NetworkHost.js.map +1 -0
  1525. package/build/dist/Utils/Telemetry/OriginAllowList.js +105 -4
  1526. package/build/dist/Utils/Telemetry/OriginAllowList.js.map +1 -1
  1527. package/build/dist/Utils/Traces/CriticalPath.js +9 -4
  1528. package/build/dist/Utils/Traces/CriticalPath.js.map +1 -1
  1529. package/package.json +1 -1
  1530. package/Server/API/GoogleSecOpsConnectionAPI.ts +0 -79
  1531. package/Server/Services/GoogleSecOpsConnectionService.ts +0 -101
  1532. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +0 -774
  1533. package/Tests/App/Dashboard/GoogleSecOpsConnectionsErrors.test.tsx +0 -423
  1534. package/Tests/App/Dashboard/GoogleSecOpsDiagnostics.test.tsx +0 -724
  1535. package/Tests/Server/API/GoogleSecOpsConnectionAPI.test.ts +0 -248
  1536. package/Tests/Server/Services/GoogleSecOpsDiagnosticsModel.test.ts +0 -153
  1537. package/Tests/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.test.ts +0 -711
  1538. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsDiagnostics.test.ts +0 -838
  1539. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +0 -716
  1540. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +0 -860
  1541. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerHardening.test.ts +0 -1231
  1542. package/Tests/UI/Rum/RecordingHealthStrip.test.tsx +0 -600
  1543. package/Types/SecurityEvent/GoogleSecOpsDiagnostics.ts +0 -56
  1544. package/UI/Components/GanttChart/Bar/BarLabel.tsx +0 -17
  1545. package/UI/Components/GanttChart/Bar/Index.tsx +0 -149
  1546. package/UI/Components/GanttChart/ChartContainer.tsx +0 -50
  1547. package/UI/Components/GanttChart/Index.tsx +0 -90
  1548. package/UI/Components/GanttChart/Row/Index.tsx +0 -22
  1549. package/UI/Components/GanttChart/Row/Row.tsx +0 -231
  1550. package/UI/Components/GanttChart/Row/RowLabel.tsx +0 -30
  1551. package/UI/Components/GanttChart/Rows.tsx +0 -59
  1552. package/UI/Components/GanttChart/Timeline/Index.tsx +0 -46
  1553. package/UI/Components/GanttChart/Timeline/TimelineInterval.tsx +0 -33
  1554. package/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.tsx +0 -43
  1555. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +0 -1
  1556. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnectionRun.js.map +0 -1
  1557. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js +0 -56
  1558. package/build/dist/Server/API/GoogleSecOpsConnectionAPI.js.map +0 -1
  1559. package/build/dist/Server/Services/GoogleSecOpsConnectionRunService.js.map +0 -1
  1560. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js +0 -62
  1561. package/build/dist/Server/Services/GoogleSecOpsConnectionService.js.map +0 -1
  1562. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsClient.js.map +0 -1
  1563. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +0 -577
  1564. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +0 -1
  1565. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsRunExecutor.js.map +0 -1
  1566. package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js +0 -2
  1567. package/build/dist/Types/SecurityEvent/GoogleSecOpsDiagnostics.js.map +0 -1
  1568. package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js +0 -8
  1569. package/build/dist/UI/Components/GanttChart/Bar/BarLabel.js.map +0 -1
  1570. package/build/dist/UI/Components/GanttChart/Bar/Index.js +0 -77
  1571. package/build/dist/UI/Components/GanttChart/Bar/Index.js.map +0 -1
  1572. package/build/dist/UI/Components/GanttChart/ChartContainer.js +0 -33
  1573. package/build/dist/UI/Components/GanttChart/ChartContainer.js.map +0 -1
  1574. package/build/dist/UI/Components/GanttChart/Index.js +0 -39
  1575. package/build/dist/UI/Components/GanttChart/Index.js.map +0 -1
  1576. package/build/dist/UI/Components/GanttChart/Row/Index.js +0 -7
  1577. package/build/dist/UI/Components/GanttChart/Row/Index.js.map +0 -1
  1578. package/build/dist/UI/Components/GanttChart/Row/Row.js +0 -106
  1579. package/build/dist/UI/Components/GanttChart/Row/Row.js.map +0 -1
  1580. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js +0 -10
  1581. package/build/dist/UI/Components/GanttChart/Row/RowLabel.js.map +0 -1
  1582. package/build/dist/UI/Components/GanttChart/Rows.js +0 -19
  1583. package/build/dist/UI/Components/GanttChart/Rows.js.map +0 -1
  1584. package/build/dist/UI/Components/GanttChart/Timeline/Index.js +0 -16
  1585. package/build/dist/UI/Components/GanttChart/Timeline/Index.js.map +0 -1
  1586. package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js +0 -13
  1587. package/build/dist/UI/Components/GanttChart/Timeline/TimelineInterval.js.map +0 -1
  1588. package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js +0 -13
  1589. package/build/dist/UI/Components/GanttChart/Timeline/TimelineIntervalMarks.js.map +0 -1
@@ -1,11 +1,14 @@
1
1
  import {
2
2
  MAX_DEVICE_DESCRIPTION_LENGTH,
3
+ MAX_DEVICE_DNS_NAME_LENGTH,
3
4
  MAX_DEVICE_NAME_LENGTH,
4
5
  buildDeviceName,
5
6
  buildFallbackDeviceName,
6
7
  buildNetworkDeviceFromDiscoveredHost,
7
8
  getDiscoveredHostDisplayName,
9
+ getDiscoveredHostFullName,
8
10
  DiscoveredDeviceScanSource,
11
+ DiscoveredHostNaming,
9
12
  } from "../../../Utils/NetworkDiscovery/DiscoveredDeviceBuilder";
10
13
  import NetworkDevice from "../../../Models/DatabaseModels/NetworkDevice";
11
14
  import { DiscoveredNetworkDevice } from "../../../Models/DatabaseModels/NetworkDeviceDiscoveryScan";
@@ -13,6 +16,7 @@ import NetworkDeviceMonitoringMethod from "../../../Types/NetworkDevice/NetworkD
13
16
  import ObjectID from "../../../Types/ObjectID";
14
17
  import { DiscoveryScanSnmpConfig } from "../../../Utils/NetworkDiscovery/SnmpScanConfigUtil";
15
18
  import { MAX_REVERSE_DNS_NAME_LENGTH } from "../../../Utils/NetworkDiscovery/ReverseDnsNameUtil";
19
+ import { getShortHostname } from "../../../Utils/NetworkDiscovery/ShortHostnameUtil";
16
20
  import ColumnLength from "../../../Types/Database/ColumnLength";
17
21
  import Slug from "../../../Utils/Slug";
18
22
  import { describe, expect, it, test } from "@jest/globals";
@@ -40,6 +44,18 @@ const PROJECT_ID: ObjectID = new ObjectID(
40
44
  );
41
45
  const PROBE_ID: ObjectID = new ObjectID("11111111-1111-4111-8111-111111111111");
42
46
 
47
+ /*
48
+ * The naming choice every case written before issue #3678 was written
49
+ * against: full names, exactly as every scan named its devices before the
50
+ * short-name setting existed. Spelled `false` rather than `{}` so a reader
51
+ * sees which behaviour the expectations below pin; the "off by default"
52
+ * cases further down prove `{}` means the same thing.
53
+ */
54
+ const FULL_NAMES: DiscoveredHostNaming = { useShortDeviceNames: false };
55
+
56
+ // The scan setting from issue #3678, switched on.
57
+ const SHORT_NAMES: DiscoveredHostNaming = { useShortDeviceNames: true };
58
+
43
59
  function snmpHost(
44
60
  overrides: Partial<DiscoveredNetworkDevice> = {},
45
61
  ): DiscoveredNetworkDevice {
@@ -173,6 +189,14 @@ function expectNoV3Credentials(device: NetworkDevice): void {
173
189
  expect(device.snmpV3PrivKey).toBeUndefined();
174
190
  }
175
191
 
192
+ /*
193
+ * fullScanSource() with issue #3678's short-name setting switched on — the
194
+ * shape a scan row has when the operator ticked "Use Short Device Names".
195
+ */
196
+ function shortNamesScan(): DiscoveredDeviceScanSource {
197
+ return { ...fullScanSource(), useShortDeviceNames: true };
198
+ }
199
+
176
200
  function build(data: {
177
201
  host?: DiscoveredNetworkDevice | undefined;
178
202
  scan?: DiscoveredDeviceScanSource | undefined;
@@ -546,16 +570,20 @@ describe("buildNetworkDeviceFromDiscoveredHost - both kinds of host share the re
546
570
 
547
571
  describe("buildDeviceName", () => {
548
572
  it("prefers the sysName", () => {
549
- expect(buildDeviceName(snmpHost())).toBe("core-switch-01");
573
+ expect(buildDeviceName(snmpHost(), FULL_NAMES)).toBe("core-switch-01");
550
574
  });
551
575
 
552
576
  // A ping-only host has no SNMP identity; the address is all there is.
553
577
  it("falls back to the address when sysName is missing", () => {
554
- expect(buildDeviceName(snmpHost({ sysName: undefined }))).toBe("10.0.0.5");
578
+ expect(buildDeviceName(snmpHost({ sysName: undefined }), FULL_NAMES)).toBe(
579
+ "10.0.0.5",
580
+ );
555
581
  });
556
582
 
557
583
  it("falls back to the address when sysName is whitespace", () => {
558
- expect(buildDeviceName(snmpHost({ sysName: " " }))).toBe("10.0.0.5");
584
+ expect(buildDeviceName(snmpHost({ sysName: " " }), FULL_NAMES)).toBe(
585
+ "10.0.0.5",
586
+ );
559
587
  });
560
588
 
561
589
  /*
@@ -566,7 +594,10 @@ describe("buildDeviceName", () => {
566
594
  */
567
595
  it("clamps a 255-character sysName to MAX_DEVICE_NAME_LENGTH", () => {
568
596
  const longSysName: string = "x".repeat(255);
569
- const name: string = buildDeviceName(snmpHost({ sysName: longSysName }));
597
+ const name: string = buildDeviceName(
598
+ snmpHost({ sysName: longSysName }),
599
+ FULL_NAMES,
600
+ );
570
601
 
571
602
  expect(name.length).toBe(MAX_DEVICE_NAME_LENGTH);
572
603
  expect(name).toBe(longSysName.substring(0, MAX_DEVICE_NAME_LENGTH));
@@ -575,7 +606,7 @@ describe("buildDeviceName", () => {
575
606
 
576
607
  describe("buildFallbackDeviceName", () => {
577
608
  it("appends the address that tells name-twins apart", () => {
578
- expect(buildFallbackDeviceName(snmpHost())).toBe(
609
+ expect(buildFallbackDeviceName(snmpHost(), FULL_NAMES)).toBe(
579
610
  "core-switch-01 (10.0.0.5)",
580
611
  );
581
612
  });
@@ -592,6 +623,7 @@ describe("buildFallbackDeviceName", () => {
592
623
  sysName: "y".repeat(255),
593
624
  ipAddress: "255.255.255.255",
594
625
  }),
626
+ FULL_NAMES,
595
627
  );
596
628
 
597
629
  expect(name.length).toBeLessThanOrEqual(MAX_DEVICE_NAME_LENGTH);
@@ -662,20 +694,26 @@ describe("the reverse-DNS name (issue #3529)", () => {
662
694
  test("a host with no sysName is named by its PTR record", () => {
663
695
  // The reported case, in one line.
664
696
  expect(
665
- buildDeviceName({
666
- ipAddress: "10.18.166.51",
667
- dnsHostname: "core-gw.corp.example.com",
668
- }),
697
+ buildDeviceName(
698
+ {
699
+ ipAddress: "10.18.166.51",
700
+ dnsHostname: "core-gw.corp.example.com",
701
+ },
702
+ FULL_NAMES,
703
+ ),
669
704
  ).toBe("core-gw.corp.example.com");
670
705
  });
671
706
 
672
707
  test("sysName still wins when the host has both", () => {
673
708
  expect(
674
- buildDeviceName({
675
- ipAddress: "10.18.166.51",
676
- sysName: "core-switch-01",
677
- dnsHostname: "sw1.corp.example.com",
678
- }),
709
+ buildDeviceName(
710
+ {
711
+ ipAddress: "10.18.166.51",
712
+ sysName: "core-switch-01",
713
+ dnsHostname: "sw1.corp.example.com",
714
+ },
715
+ FULL_NAMES,
716
+ ),
679
717
  ).toBe("core-switch-01");
680
718
  });
681
719
 
@@ -686,11 +724,14 @@ describe("the reverse-DNS name (issue #3529)", () => {
686
724
  * device named " ".
687
725
  */
688
726
  expect(
689
- buildDeviceName({
690
- ipAddress: "10.18.166.51",
691
- sysName: " ",
692
- dnsHostname: "sw1.corp.example.com",
693
- }),
727
+ buildDeviceName(
728
+ {
729
+ ipAddress: "10.18.166.51",
730
+ sysName: " ",
731
+ dnsHostname: "sw1.corp.example.com",
732
+ },
733
+ FULL_NAMES,
734
+ ),
694
735
  ).toBe("sw1.corp.example.com");
695
736
  });
696
737
 
@@ -710,16 +751,21 @@ describe("the reverse-DNS name (issue #3529)", () => {
710
751
  dnsHostname: "sw1.corp.example.com",
711
752
  };
712
753
 
713
- expect(getDiscoveredHostDisplayName(paddedHost)).toBe("core-switch-01");
754
+ expect(getDiscoveredHostDisplayName(paddedHost, FULL_NAMES)).toBe(
755
+ "core-switch-01",
756
+ );
714
757
  expect(build({ host: paddedHost }).name).toBe("core-switch-01");
715
758
  });
716
759
 
717
760
  test("the address is still the last resort", () => {
718
- expect(buildDeviceName({ ipAddress: "10.18.166.51" })).toBe(
761
+ expect(buildDeviceName({ ipAddress: "10.18.166.51" }, FULL_NAMES)).toBe(
719
762
  "10.18.166.51",
720
763
  );
721
764
  expect(
722
- buildDeviceName({ ipAddress: "10.18.166.51", dnsHostname: "" }),
765
+ buildDeviceName(
766
+ { ipAddress: "10.18.166.51", dnsHostname: "" },
767
+ FULL_NAMES,
768
+ ),
723
769
  ).toBe("10.18.166.51");
724
770
  });
725
771
 
@@ -730,9 +776,14 @@ describe("the reverse-DNS name (issue #3529)", () => {
730
776
  * that has not been upgraded yet.
731
777
  */
732
778
  expect(
733
- buildDeviceName({ ipAddress: "10.0.0.5", sysName: "core-switch-01" }),
779
+ buildDeviceName(
780
+ { ipAddress: "10.0.0.5", sysName: "core-switch-01" },
781
+ FULL_NAMES,
782
+ ),
734
783
  ).toBe("core-switch-01");
735
- expect(buildDeviceName({ ipAddress: "10.0.0.5" })).toBe("10.0.0.5");
784
+ expect(buildDeviceName({ ipAddress: "10.0.0.5" }, FULL_NAMES)).toBe(
785
+ "10.0.0.5",
786
+ );
736
787
  });
737
788
  });
738
789
 
@@ -769,9 +820,12 @@ describe("the reverse-DNS name (issue #3529)", () => {
769
820
  ];
770
821
 
771
822
  for (const discoveredHost of hosts) {
772
- const displayed: string = getDiscoveredHostDisplayName(discoveredHost);
823
+ const displayed: string = getDiscoveredHostDisplayName(
824
+ discoveredHost,
825
+ FULL_NAMES,
826
+ );
773
827
 
774
- expect(buildDeviceName(discoveredHost)).toBe(
828
+ expect(buildDeviceName(discoveredHost, FULL_NAMES)).toBe(
775
829
  displayed.substring(0, MAX_DEVICE_NAME_LENGTH),
776
830
  );
777
831
 
@@ -782,7 +836,7 @@ describe("the reverse-DNS name (issue #3529)", () => {
782
836
  * naming rule would pass the assertion above and fail this one.
783
837
  */
784
838
  expect(build({ host: discoveredHost }).name).toBe(
785
- buildDeviceName(discoveredHost),
839
+ buildDeviceName(discoveredHost, FULL_NAMES),
786
840
  );
787
841
  }
788
842
 
@@ -791,8 +845,8 @@ describe("the reverse-DNS name (issue #3529)", () => {
791
845
  hosts.length - 1
792
846
  ] as DiscoveredNetworkDevice;
793
847
 
794
- expect(getDiscoveredHostDisplayName(clampedHost)).not.toBe(
795
- buildDeviceName(clampedHost),
848
+ expect(getDiscoveredHostDisplayName(clampedHost, FULL_NAMES)).not.toBe(
849
+ buildDeviceName(clampedHost, FULL_NAMES),
796
850
  );
797
851
  });
798
852
 
@@ -806,13 +860,19 @@ describe("the reverse-DNS name (issue #3529)", () => {
806
860
  const longName: string = `${"a".repeat(63)}.${"b".repeat(40)}.example.com`;
807
861
 
808
862
  expect(
809
- getDiscoveredHostDisplayName({
810
- ipAddress: "10.0.0.1",
811
- dnsHostname: longName,
812
- }),
863
+ getDiscoveredHostDisplayName(
864
+ {
865
+ ipAddress: "10.0.0.1",
866
+ dnsHostname: longName,
867
+ },
868
+ FULL_NAMES,
869
+ ),
813
870
  ).toBe(longName);
814
871
  expect(
815
- buildDeviceName({ ipAddress: "10.0.0.1", dnsHostname: longName }),
872
+ buildDeviceName(
873
+ { ipAddress: "10.0.0.1", dnsHostname: longName },
874
+ FULL_NAMES,
875
+ ),
816
876
  ).toHaveLength(MAX_DEVICE_NAME_LENGTH);
817
877
  });
818
878
  });
@@ -828,19 +888,25 @@ describe("the reverse-DNS name (issue #3529)", () => {
828
888
  */
829
889
  test("falls back to the address rather than naming a device after markup", () => {
830
890
  expect(
831
- buildDeviceName({
832
- ipAddress: "10.18.166.51",
833
- dnsHostname: "<script>alert(1)</script>",
834
- }),
891
+ buildDeviceName(
892
+ {
893
+ ipAddress: "10.18.166.51",
894
+ dnsHostname: "<script>alert(1)</script>",
895
+ },
896
+ FULL_NAMES,
897
+ ),
835
898
  ).toBe("10.18.166.51");
836
899
  });
837
900
 
838
901
  test("falls back to the address for a name with whitespace in it", () => {
839
902
  expect(
840
- buildDeviceName({
841
- ipAddress: "10.18.166.51",
842
- dnsHostname: "core switch",
843
- }),
903
+ buildDeviceName(
904
+ {
905
+ ipAddress: "10.18.166.51",
906
+ dnsHostname: "core switch",
907
+ },
908
+ FULL_NAMES,
909
+ ),
844
910
  ).toBe("10.18.166.51");
845
911
  });
846
912
 
@@ -850,16 +916,22 @@ describe("the reverse-DNS name (issue #3529)", () => {
850
916
  * published, which is worse than showing the address as an address.
851
917
  */
852
918
  expect(
853
- buildDeviceName({
854
- ipAddress: "10.18.166.51",
855
- dnsHostname: "10.18.166.51",
856
- }),
919
+ buildDeviceName(
920
+ {
921
+ ipAddress: "10.18.166.51",
922
+ dnsHostname: "10.18.166.51",
923
+ },
924
+ FULL_NAMES,
925
+ ),
857
926
  ).toBe("10.18.166.51");
858
927
  expect(
859
- buildDeviceName({
860
- ipAddress: "10.18.166.51",
861
- dnsHostname: "51.166.18.10.in-addr.arpa",
862
- }),
928
+ buildDeviceName(
929
+ {
930
+ ipAddress: "10.18.166.51",
931
+ dnsHostname: "51.166.18.10.in-addr.arpa",
932
+ },
933
+ FULL_NAMES,
934
+ ),
863
935
  ).toBe("10.18.166.51");
864
936
  });
865
937
 
@@ -873,10 +945,13 @@ describe("the reverse-DNS name (issue #3529)", () => {
873
945
  * "51" and a single all-numeric label is refused anyway.
874
946
  */
875
947
  expect(
876
- buildDeviceName({
877
- ipAddress: "10.18.166.51",
878
- dnsHostname: 51 as unknown as string,
879
- }),
948
+ buildDeviceName(
949
+ {
950
+ ipAddress: "10.18.166.51",
951
+ dnsHostname: 51 as unknown as string,
952
+ },
953
+ FULL_NAMES,
954
+ ),
880
955
  ).toBe("10.18.166.51");
881
956
 
882
957
  /*
@@ -887,19 +962,25 @@ describe("the reverse-DNS name (issue #3529)", () => {
887
962
  * address, and this line is the only thing in the file that notices.
888
963
  */
889
964
  expect(
890
- buildDeviceName({
891
- ipAddress: "10.18.166.51",
892
- dnsHostname: true as unknown as string,
893
- }),
965
+ buildDeviceName(
966
+ {
967
+ ipAddress: "10.18.166.51",
968
+ dnsHostname: true as unknown as string,
969
+ },
970
+ FULL_NAMES,
971
+ ),
894
972
  ).toBe("10.18.166.51");
895
973
  });
896
974
 
897
975
  test("stores the normalised form, not the raw answer", () => {
898
976
  expect(
899
- buildDeviceName({
900
- ipAddress: "10.0.0.1",
901
- dnsHostname: " gw.corp.example.com. ",
902
- }),
977
+ buildDeviceName(
978
+ {
979
+ ipAddress: "10.0.0.1",
980
+ dnsHostname: " gw.corp.example.com. ",
981
+ },
982
+ FULL_NAMES,
983
+ ),
903
984
  ).toBe("gw.corp.example.com");
904
985
  });
905
986
  });
@@ -956,10 +1037,13 @@ describe("the reverse-DNS name (issue #3529)", () => {
956
1037
  * The address is what tells them apart.
957
1038
  */
958
1039
  expect(
959
- buildFallbackDeviceName({
960
- ipAddress: "10.18.166.51",
961
- dnsHostname: "dhcp-pool.corp.example.com",
962
- }),
1040
+ buildFallbackDeviceName(
1041
+ {
1042
+ ipAddress: "10.18.166.51",
1043
+ dnsHostname: "dhcp-pool.corp.example.com",
1044
+ },
1045
+ FULL_NAMES,
1046
+ ),
963
1047
  ).toBe("dhcp-pool.corp.example.com (10.18.166.51)");
964
1048
  });
965
1049
  });
@@ -1015,10 +1099,12 @@ describe("the reverse-DNS name (issue #3529)", () => {
1015
1099
  dnsHostname: "core-gw.corp.example.com",
1016
1100
  };
1017
1101
 
1018
- expect(getDiscoveredHostDisplayName(host)).toBe(
1102
+ expect(getDiscoveredHostDisplayName(host, FULL_NAMES)).toBe(
1103
+ "core-gw.corp.example.com",
1104
+ );
1105
+ expect(buildDeviceName(host, FULL_NAMES)).toBe(
1019
1106
  "core-gw.corp.example.com",
1020
1107
  );
1021
- expect(buildDeviceName(host)).toBe("core-gw.corp.example.com");
1022
1108
  });
1023
1109
 
1024
1110
  test(`${untrusted.reason} sysName falls through to the address`, () => {
@@ -1028,8 +1114,10 @@ describe("the reverse-DNS name (issue #3529)", () => {
1028
1114
  sysName: untrusted.value as unknown as string,
1029
1115
  };
1030
1116
 
1031
- expect(getDiscoveredHostDisplayName(host)).toBe("10.18.166.51");
1032
- expect(buildDeviceName(host)).toBe("10.18.166.51");
1117
+ expect(getDiscoveredHostDisplayName(host, FULL_NAMES)).toBe(
1118
+ "10.18.166.51",
1119
+ );
1120
+ expect(buildDeviceName(host, FULL_NAMES)).toBe("10.18.166.51");
1033
1121
  });
1034
1122
  }
1035
1123
  });
@@ -1041,9 +1129,9 @@ describe("the reverse-DNS name (issue #3529)", () => {
1041
1129
  */
1042
1130
  describe("an untrusted address as the last resort", () => {
1043
1131
  test("a numeric address still names the row", () => {
1044
- expect(buildDeviceName({ ipAddress: 42 as unknown as string })).toBe(
1045
- "42",
1046
- );
1132
+ expect(
1133
+ buildDeviceName({ ipAddress: 42 as unknown as string }, FULL_NAMES),
1134
+ ).toBe("42");
1047
1135
  });
1048
1136
 
1049
1137
  test("a null address degrades to an empty name rather than a throw", () => {
@@ -1053,7 +1141,10 @@ describe("the reverse-DNS name (issue #3529)", () => {
1053
1141
  * than a TypeError that removes the dialog.
1054
1142
  */
1055
1143
  expect(
1056
- getDiscoveredHostDisplayName({ ipAddress: null as unknown as string }),
1144
+ getDiscoveredHostDisplayName(
1145
+ { ipAddress: null as unknown as string },
1146
+ FULL_NAMES,
1147
+ ),
1057
1148
  ).toBe("");
1058
1149
  });
1059
1150
 
@@ -1072,9 +1163,12 @@ describe("the reverse-DNS name (issue #3529)", () => {
1072
1163
  * still holds, which is why the null case above is asserted too.
1073
1164
  */
1074
1165
  expect(
1075
- buildDeviceName({
1076
- ipAddress: { v4: "10.18.166.51" } as unknown as string,
1077
- }),
1166
+ buildDeviceName(
1167
+ {
1168
+ ipAddress: { v4: "10.18.166.51" } as unknown as string,
1169
+ },
1170
+ FULL_NAMES,
1171
+ ),
1078
1172
  ).toBe("[object Object]");
1079
1173
  });
1080
1174
 
@@ -1157,7 +1251,7 @@ describe("the reverse-DNS name (issue #3529)", () => {
1157
1251
  dnsHostname: answer.value as unknown as string,
1158
1252
  };
1159
1253
 
1160
- expect(getDiscoveredHostDisplayName(hostWithBadPtr)).toBe(
1254
+ expect(getDiscoveredHostDisplayName(hostWithBadPtr, FULL_NAMES)).toBe(
1161
1255
  "10.18.166.51",
1162
1256
  );
1163
1257
  // The device, not just the name: a coercion would reach the column.
@@ -1238,13 +1332,13 @@ describe("the reverse-DNS name (issue #3529)", () => {
1238
1332
  });
1239
1333
 
1240
1334
  test("buildFallbackDeviceName tells them apart by their own address", () => {
1241
- expect(buildFallbackDeviceName(firstPoolHost)).not.toBe(
1242
- buildFallbackDeviceName(secondPoolHost),
1335
+ expect(buildFallbackDeviceName(firstPoolHost, FULL_NAMES)).not.toBe(
1336
+ buildFallbackDeviceName(secondPoolHost, FULL_NAMES),
1243
1337
  );
1244
- expect(buildFallbackDeviceName(firstPoolHost)).toBe(
1338
+ expect(buildFallbackDeviceName(firstPoolHost, FULL_NAMES)).toBe(
1245
1339
  "dhcp-pool.corp.example.com (10.18.166.51)",
1246
1340
  );
1247
- expect(buildFallbackDeviceName(secondPoolHost)).toBe(
1341
+ expect(buildFallbackDeviceName(secondPoolHost, FULL_NAMES)).toBe(
1248
1342
  "dhcp-pool.corp.example.com (10.18.166.52)",
1249
1343
  );
1250
1344
  });
@@ -1262,7 +1356,7 @@ describe("the reverse-DNS name (issue #3529)", () => {
1262
1356
  */
1263
1357
  const device: NetworkDevice = build({
1264
1358
  host: secondPoolHost,
1265
- name: buildFallbackDeviceName(secondPoolHost),
1359
+ name: buildFallbackDeviceName(secondPoolHost, FULL_NAMES),
1266
1360
  });
1267
1361
 
1268
1362
  expect(device.name).toBe("dhcp-pool.corp.example.com (10.18.166.52)");
@@ -1289,7 +1383,10 @@ describe("the reverse-DNS name (issue #3529)", () => {
1289
1383
  dnsHostname: WILDCARD_PTR_NAME,
1290
1384
  } as unknown as DiscoveredNetworkDevice;
1291
1385
 
1292
- const fallbackName: string = buildFallbackDeviceName(addresslessHost);
1386
+ const fallbackName: string = buildFallbackDeviceName(
1387
+ addresslessHost,
1388
+ FULL_NAMES,
1389
+ );
1293
1390
 
1294
1391
  expect(fallbackName).toBe(WILDCARD_PTR_NAME);
1295
1392
  expect(fallbackName).not.toContain("undefined");
@@ -1311,8 +1408,12 @@ describe("the reverse-DNS name (issue #3529)", () => {
1311
1408
  dnsHostname: WILDCARD_PTR_NAME,
1312
1409
  };
1313
1410
 
1314
- expect(buildFallbackDeviceName(nullAddressHost)).toBe(WILDCARD_PTR_NAME);
1315
- expect(buildFallbackDeviceName(nullAddressHost)).not.toContain("null)");
1411
+ expect(buildFallbackDeviceName(nullAddressHost, FULL_NAMES)).toBe(
1412
+ WILDCARD_PTR_NAME,
1413
+ );
1414
+ expect(
1415
+ buildFallbackDeviceName(nullAddressHost, FULL_NAMES),
1416
+ ).not.toContain("null)");
1316
1417
  });
1317
1418
  });
1318
1419
 
@@ -1350,10 +1451,13 @@ describe("the reverse-DNS name (issue #3529)", () => {
1350
1451
  */
1351
1452
  expect(MAXIMAL_PTR_NAME).toHaveLength(MAX_REVERSE_DNS_NAME_LENGTH);
1352
1453
  expect(
1353
- buildDeviceName({
1354
- ipAddress: "255.255.255.255",
1355
- dnsHostname: MAXIMAL_PTR_NAME,
1356
- }),
1454
+ buildDeviceName(
1455
+ {
1456
+ ipAddress: "255.255.255.255",
1457
+ dnsHostname: MAXIMAL_PTR_NAME,
1458
+ },
1459
+ FULL_NAMES,
1460
+ ),
1357
1461
  ).toBe(MAXIMAL_PTR_NAME.substring(0, MAX_DEVICE_NAME_LENGTH));
1358
1462
  });
1359
1463
 
@@ -1368,10 +1472,13 @@ describe("the reverse-DNS name (issue #3529)", () => {
1368
1472
  * gives way, or the wildcard range collides again), and what precedes
1369
1473
  * it is a genuine prefix of the PTR name rather than some other string.
1370
1474
  */
1371
- const name: string = buildFallbackDeviceName({
1372
- ipAddress: "255.255.255.255",
1373
- dnsHostname: MAXIMAL_PTR_NAME,
1374
- });
1475
+ const name: string = buildFallbackDeviceName(
1476
+ {
1477
+ ipAddress: "255.255.255.255",
1478
+ dnsHostname: MAXIMAL_PTR_NAME,
1479
+ },
1480
+ FULL_NAMES,
1481
+ );
1375
1482
 
1376
1483
  expect(name).toHaveLength(MAX_DEVICE_NAME_LENGTH);
1377
1484
  expect(name.endsWith(WIDEST_ADDRESS_SUFFIX)).toBe(true);
@@ -1392,15 +1499,21 @@ describe("the reverse-DNS name (issue #3529)", () => {
1392
1499
  * differ only in their last octet.
1393
1500
  */
1394
1501
  expect(
1395
- buildFallbackDeviceName({
1396
- ipAddress: "255.255.255.255",
1397
- dnsHostname: MAXIMAL_PTR_NAME,
1398
- }),
1502
+ buildFallbackDeviceName(
1503
+ {
1504
+ ipAddress: "255.255.255.255",
1505
+ dnsHostname: MAXIMAL_PTR_NAME,
1506
+ },
1507
+ FULL_NAMES,
1508
+ ),
1399
1509
  ).not.toBe(
1400
- buildFallbackDeviceName({
1401
- ipAddress: "255.255.255.254",
1402
- dnsHostname: MAXIMAL_PTR_NAME,
1403
- }),
1510
+ buildFallbackDeviceName(
1511
+ {
1512
+ ipAddress: "255.255.255.254",
1513
+ dnsHostname: MAXIMAL_PTR_NAME,
1514
+ },
1515
+ FULL_NAMES,
1516
+ ),
1404
1517
  );
1405
1518
  });
1406
1519
 
@@ -1420,10 +1533,13 @@ describe("the reverse-DNS name (issue #3529)", () => {
1420
1533
  // Anti-vacuity: this really is the wider of the two suffixes.
1421
1534
  expect(IPV6_SUFFIX.length).toBeGreaterThan(WIDEST_ADDRESS_SUFFIX.length);
1422
1535
 
1423
- const name: string = buildFallbackDeviceName({
1424
- ipAddress: FULL_IPV6_ADDRESS,
1425
- dnsHostname: MAXIMAL_PTR_NAME,
1426
- });
1536
+ const name: string = buildFallbackDeviceName(
1537
+ {
1538
+ ipAddress: FULL_IPV6_ADDRESS,
1539
+ dnsHostname: MAXIMAL_PTR_NAME,
1540
+ },
1541
+ FULL_NAMES,
1542
+ );
1427
1543
 
1428
1544
  expect(name).toHaveLength(MAX_DEVICE_NAME_LENGTH);
1429
1545
  expect(name.endsWith(IPV6_SUFFIX)).toBe(true);
@@ -1449,15 +1565,21 @@ describe("the reverse-DNS name (issue #3529)", () => {
1449
1565
  * an address that occupies 42 of the 80 characters available.
1450
1566
  */
1451
1567
  expect(
1452
- buildFallbackDeviceName({
1453
- ipAddress: FULL_IPV6_ADDRESS,
1454
- dnsHostname: MAXIMAL_PTR_NAME,
1455
- }),
1568
+ buildFallbackDeviceName(
1569
+ {
1570
+ ipAddress: FULL_IPV6_ADDRESS,
1571
+ dnsHostname: MAXIMAL_PTR_NAME,
1572
+ },
1573
+ FULL_NAMES,
1574
+ ),
1456
1575
  ).not.toBe(
1457
- buildFallbackDeviceName({
1458
- ipAddress: "2001:0db8:85a3:0000:0000:8a2e:0370:7335",
1459
- dnsHostname: MAXIMAL_PTR_NAME,
1460
- }),
1576
+ buildFallbackDeviceName(
1577
+ {
1578
+ ipAddress: "2001:0db8:85a3:0000:0000:8a2e:0370:7335",
1579
+ dnsHostname: MAXIMAL_PTR_NAME,
1580
+ },
1581
+ FULL_NAMES,
1582
+ ),
1461
1583
  );
1462
1584
  });
1463
1585
 
@@ -1497,10 +1619,13 @@ describe("the reverse-DNS name (issue #3529)", () => {
1497
1619
  const slugSuffixLength: number =
1498
1620
  Slug.getSlug(SLUG_PROBE).length - SLUG_PROBE.length;
1499
1621
 
1500
- const name: string = buildDeviceName({
1501
- ipAddress: "10.18.166.51",
1502
- sysName: "long-sysname-".repeat(20),
1503
- });
1622
+ const name: string = buildDeviceName(
1623
+ {
1624
+ ipAddress: "10.18.166.51",
1625
+ sysName: "long-sysname-".repeat(20),
1626
+ },
1627
+ FULL_NAMES,
1628
+ );
1504
1629
 
1505
1630
  expect(name).toHaveLength(MAX_DEVICE_NAME_LENGTH);
1506
1631
 
@@ -1582,3 +1707,1185 @@ describe("the reverse-DNS name (issue #3529)", () => {
1582
1707
  }
1583
1708
  });
1584
1709
  });
1710
+
1711
+ /*
1712
+ * OneUptime issue #3678 — "discovered devices are named by their full DNS
1713
+ * name".
1714
+ *
1715
+ * The reporter's estate is one corporate domain, so every device in the list
1716
+ * reads "wb-0660-kds01.wbhq.com", "wb-0660-kds02.wbhq.com", ... and the part
1717
+ * an operator recognises is pushed to the far left of a truncated column. The
1718
+ * scan setting `useShortDeviceNames` names imports by the first label
1719
+ * instead. What these cases pin:
1720
+ *
1721
+ * - OFF unless the setting is exactly `true`. Every scan that existed before
1722
+ * the setting must keep importing under the names it always did, and a
1723
+ * value that arrives as "true" or 1 out of an API payload must not
1724
+ * quietly rename a project's devices.
1725
+ * - ON shortens whichever name WON — sysName or PTR — and never changes
1726
+ * which one wins. A sysName an operator typed ("Core Switch") beats a PTR
1727
+ * record with the setting on exactly as it does with it off.
1728
+ * - What cannot be shortened safely is kept whole: an address, an OS
1729
+ * version string, an address spelled with dashes.
1730
+ * - The Review dialog's name, the device's name, and the collision fallback
1731
+ * all agree, because they all go through the same naming argument.
1732
+ */
1733
+ describe("short device names (issue #3678)", () => {
1734
+ const CUSTOMER_PTR_NAME: string = "wb-0660-kds01.wbhq.com";
1735
+
1736
+ const customerHost: DiscoveredNetworkDevice = {
1737
+ ipAddress: "10.18.167.31",
1738
+ snmpReachable: false,
1739
+ dnsHostname: CUSTOMER_PTR_NAME,
1740
+ };
1741
+
1742
+ describe("the setting is off unless it is exactly true", () => {
1743
+ test("an empty naming choice imports the full name", () => {
1744
+ expect(buildDeviceName(customerHost, {})).toBe(CUSTOMER_PTR_NAME);
1745
+ expect(getDiscoveredHostDisplayName(customerHost, {})).toBe(
1746
+ CUSTOMER_PTR_NAME,
1747
+ );
1748
+ expect(buildFallbackDeviceName(customerHost, {})).toBe(
1749
+ `${CUSTOMER_PTR_NAME} (10.18.167.31)`,
1750
+ );
1751
+ });
1752
+
1753
+ test("false imports the full name", () => {
1754
+ expect(buildDeviceName(customerHost, FULL_NAMES)).toBe(CUSTOMER_PTR_NAME);
1755
+ });
1756
+
1757
+ /*
1758
+ * Values that are truthy but not `true`. A jsonb row, an API client that
1759
+ * stringifies booleans, or a form library that submits 1 — none of them
1760
+ * is an operator saying "rename my devices".
1761
+ */
1762
+ const NOT_TRUE: Array<{ reason: string; value: unknown }> = [
1763
+ { reason: "the string true", value: "true" },
1764
+ { reason: "the number 1", value: 1 },
1765
+ { reason: "null", value: null },
1766
+ { reason: "undefined", value: undefined },
1767
+ { reason: "an object", value: {} },
1768
+ { reason: "the string yes", value: "yes" },
1769
+ ];
1770
+
1771
+ for (const notTrue of NOT_TRUE) {
1772
+ test(`${notTrue.reason} imports the full name`, () => {
1773
+ const naming: DiscoveredHostNaming = {
1774
+ useShortDeviceNames: notTrue.value as boolean,
1775
+ };
1776
+
1777
+ expect(getDiscoveredHostDisplayName(customerHost, naming)).toBe(
1778
+ CUSTOMER_PTR_NAME,
1779
+ );
1780
+ expect(buildDeviceName(customerHost, naming)).toBe(CUSTOMER_PTR_NAME);
1781
+ expect(
1782
+ build({
1783
+ host: customerHost,
1784
+ scan: {
1785
+ ...fullScanSource(),
1786
+ useShortDeviceNames: notTrue.value as boolean,
1787
+ },
1788
+ }).name,
1789
+ ).toBe(CUSTOMER_PTR_NAME);
1790
+ });
1791
+ }
1792
+
1793
+ // Anti-vacuity for the block: the same host really is shortened when on.
1794
+ test("true imports the short name", () => {
1795
+ expect(buildDeviceName(customerHost, SHORT_NAMES)).toBe("wb-0660-kds01");
1796
+ });
1797
+ });
1798
+
1799
+ describe("with the setting on", () => {
1800
+ test("a PTR name is shortened to its first label", () => {
1801
+ expect(getDiscoveredHostDisplayName(customerHost, SHORT_NAMES)).toBe(
1802
+ "wb-0660-kds01",
1803
+ );
1804
+ expect(buildDeviceName(customerHost, SHORT_NAMES)).toBe("wb-0660-kds01");
1805
+ });
1806
+
1807
+ test("a PTR name with a root dot is shortened the same way", () => {
1808
+ expect(
1809
+ buildDeviceName(
1810
+ { ipAddress: "10.18.167.31", dnsHostname: `${CUSTOMER_PTR_NAME}.` },
1811
+ SHORT_NAMES,
1812
+ ),
1813
+ ).toBe("wb-0660-kds01");
1814
+ });
1815
+
1816
+ test("the PTR name's case is preserved", () => {
1817
+ expect(
1818
+ buildDeviceName(
1819
+ { ipAddress: "10.18.167.31", dnsHostname: "WB-0660-KDS01.WBHQ.COM" },
1820
+ SHORT_NAMES,
1821
+ ),
1822
+ ).toBe("WB-0660-KDS01");
1823
+ });
1824
+
1825
+ /*
1826
+ * Network gear routinely reports its FQDN as sysName. Shortening only
1827
+ * PTR-named hosts would leave a list where half the switches carry the
1828
+ * domain and half do not, which reads as broken. The full sysName is not
1829
+ * lost: the poller keeps writing it to the device's sysName column.
1830
+ */
1831
+ test("a fully qualified sysName is shortened too", () => {
1832
+ const host: DiscoveredNetworkDevice = snmpHost({
1833
+ sysName: "core-sw-01.corp.example.com",
1834
+ });
1835
+
1836
+ expect(getDiscoveredHostDisplayName(host, SHORT_NAMES)).toBe(
1837
+ "core-sw-01",
1838
+ );
1839
+ expect(build({ host: host, scan: shortNamesScan() }).name).toBe(
1840
+ "core-sw-01",
1841
+ );
1842
+ });
1843
+
1844
+ test("a padded fully qualified sysName is trimmed and shortened", () => {
1845
+ expect(
1846
+ buildDeviceName(
1847
+ snmpHost({ sysName: " core-sw-01.corp.example.com " }),
1848
+ SHORT_NAMES,
1849
+ ),
1850
+ ).toBe("core-sw-01");
1851
+ });
1852
+
1853
+ test("a sysName that is not a hostname is kept exactly", () => {
1854
+ expect(
1855
+ buildDeviceName(snmpHost({ sysName: "Core Switch" }), SHORT_NAMES),
1856
+ ).toBe("Core Switch");
1857
+ expect(
1858
+ buildDeviceName(snmpHost({ sysName: "Core Switch 1.5" }), SHORT_NAMES),
1859
+ ).toBe("Core Switch 1.5");
1860
+ });
1861
+
1862
+ test("a single-label sysName is kept exactly", () => {
1863
+ expect(buildDeviceName(snmpHost(), SHORT_NAMES)).toBe("core-switch-01");
1864
+ });
1865
+
1866
+ // An address has no domain. "10.18.167.31" must not become "10".
1867
+ test("an IPv4 address is kept whole", () => {
1868
+ expect(buildDeviceName({ ipAddress: "10.18.167.31" }, SHORT_NAMES)).toBe(
1869
+ "10.18.167.31",
1870
+ );
1871
+ });
1872
+
1873
+ test("an IPv6 address is kept whole", () => {
1874
+ expect(
1875
+ buildDeviceName(
1876
+ { ipAddress: "2001:0db8:85a3:0000:0000:8a2e:0370:7334" },
1877
+ SHORT_NAMES,
1878
+ ),
1879
+ ).toBe("2001:0db8:85a3:0000:0000:8a2e:0370:7334");
1880
+ expect(buildDeviceName({ ipAddress: "2001:db8::5" }, SHORT_NAMES)).toBe(
1881
+ "2001:db8::5",
1882
+ );
1883
+ });
1884
+
1885
+ /*
1886
+ * Names that pass as DNS names but that the short-name rule refuses. Kept
1887
+ * FULL, not cut: "ubuntu-22" is a name nobody chose, and
1888
+ * "10-18-167-31" is an address dressed up as a hostname.
1889
+ */
1890
+ test("a name the short-name rule refuses is kept in full", () => {
1891
+ for (const unshortenable of [
1892
+ "ubuntu-22.04",
1893
+ "10-18-167-31.dhcp.corp.com",
1894
+ "a.b.v2",
1895
+ ]) {
1896
+ expect(
1897
+ buildDeviceName(
1898
+ { ipAddress: "10.18.167.31", dnsHostname: unshortenable },
1899
+ SHORT_NAMES,
1900
+ ),
1901
+ ).toBe(unshortenable);
1902
+ expect(
1903
+ buildDeviceName(snmpHost({ sysName: unshortenable }), SHORT_NAMES),
1904
+ ).toBe(unshortenable);
1905
+ }
1906
+ });
1907
+
1908
+ test("an untrusted PTR record still falls back to the address", () => {
1909
+ for (const hostile of [
1910
+ "<script>alert(1)</script>",
1911
+ "core switch.corp.example.com",
1912
+ "31.167.18.10.in-addr.arpa",
1913
+ ]) {
1914
+ expect(
1915
+ buildDeviceName(
1916
+ { ipAddress: "10.18.167.31", dnsHostname: hostile },
1917
+ SHORT_NAMES,
1918
+ ),
1919
+ ).toBe("10.18.167.31");
1920
+ }
1921
+ });
1922
+ });
1923
+
1924
+ /*
1925
+ * Shortening is applied to the WINNER, after the contest. If it were
1926
+ * applied to each candidate first, a sysName the rule refuses could lose to
1927
+ * a shortenable PTR record, and turning the setting on would silently
1928
+ * change which of the device's names it is known by.
1929
+ */
1930
+ describe("shortening never changes which name wins", () => {
1931
+ test('a sysName of "Core Switch" still beats a PTR name', () => {
1932
+ const host: DiscoveredNetworkDevice = {
1933
+ ipAddress: "10.18.167.31",
1934
+ sysName: "Core Switch",
1935
+ dnsHostname: CUSTOMER_PTR_NAME,
1936
+ };
1937
+
1938
+ expect(getDiscoveredHostDisplayName(host, FULL_NAMES)).toBe(
1939
+ "Core Switch",
1940
+ );
1941
+ expect(getDiscoveredHostDisplayName(host, SHORT_NAMES)).toBe(
1942
+ "Core Switch",
1943
+ );
1944
+ expect(build({ host: host, scan: shortNamesScan() }).name).toBe(
1945
+ "Core Switch",
1946
+ );
1947
+ });
1948
+
1949
+ test("an unshortenable sysName still beats a shortenable PTR name", () => {
1950
+ const host: DiscoveredNetworkDevice = {
1951
+ ipAddress: "10.18.167.31",
1952
+ sysName: "ubuntu-22.04",
1953
+ dnsHostname: CUSTOMER_PTR_NAME,
1954
+ };
1955
+
1956
+ expect(buildDeviceName(host, SHORT_NAMES)).toBe("ubuntu-22.04");
1957
+ });
1958
+
1959
+ test("a fully qualified sysName wins and is shortened, not the PTR name", () => {
1960
+ const host: DiscoveredNetworkDevice = {
1961
+ ipAddress: "10.18.167.31",
1962
+ sysName: "kds-controller.corp.example.com",
1963
+ dnsHostname: CUSTOMER_PTR_NAME,
1964
+ };
1965
+
1966
+ expect(buildDeviceName(host, SHORT_NAMES)).toBe("kds-controller");
1967
+ });
1968
+
1969
+ /*
1970
+ * The general statement, over every naming combination: the short name
1971
+ * is always the short form of the FULL name the host would get with the
1972
+ * setting off, or that full name itself.
1973
+ */
1974
+ test("the short name is always the full name or its first label", () => {
1975
+ const hosts: Array<DiscoveredNetworkDevice> = [
1976
+ { ipAddress: "10.0.0.1" },
1977
+ { ipAddress: "10.0.0.2", dnsHostname: "gw.corp.example.com" },
1978
+ { ipAddress: "10.0.0.3", sysName: "sw-3" },
1979
+ { ipAddress: "10.0.0.4", sysName: "sw-4.corp.example.com" },
1980
+ {
1981
+ ipAddress: "10.0.0.5",
1982
+ sysName: "Core Switch",
1983
+ dnsHostname: "sw5.corp.example.com",
1984
+ },
1985
+ { ipAddress: "10.0.0.6", dnsHostname: "ubuntu-22.04" },
1986
+ { ipAddress: "2001:db8::7", dnsHostname: "v6.corp.example.com" },
1987
+ ];
1988
+
1989
+ for (const host of hosts) {
1990
+ const full: string = getDiscoveredHostDisplayName(host, FULL_NAMES);
1991
+ const short: string = getDiscoveredHostDisplayName(host, SHORT_NAMES);
1992
+
1993
+ expect([full, full.split(".")[0]]).toContain(short);
1994
+ expect(full.startsWith(short)).toBe(true);
1995
+ }
1996
+ });
1997
+ });
1998
+
1999
+ describe("the Review name, the device name and the fallback agree", () => {
2000
+ test("the device is created under the clamped short display name", () => {
2001
+ const longPtrName: string = `${"a".repeat(63)}.${"b".repeat(
2002
+ 40,
2003
+ )}.example.com`;
2004
+
2005
+ const hosts: Array<DiscoveredNetworkDevice> = [
2006
+ { ipAddress: "10.0.0.1" },
2007
+ customerHost,
2008
+ snmpHost({ sysName: "core-sw-01.corp.example.com" }),
2009
+ snmpHost({ sysName: "Core Switch" }),
2010
+ { ipAddress: "10.0.0.5", dnsHostname: longPtrName },
2011
+ snmpHost({ sysName: "long-sysname-".repeat(20) }),
2012
+ ];
2013
+
2014
+ for (const host of hosts) {
2015
+ const displayed: string = getDiscoveredHostDisplayName(
2016
+ host,
2017
+ SHORT_NAMES,
2018
+ );
2019
+
2020
+ expect(buildDeviceName(host, SHORT_NAMES)).toBe(
2021
+ displayed.substring(0, MAX_DEVICE_NAME_LENGTH),
2022
+ );
2023
+ expect(build({ host: host, scan: shortNamesScan() }).name).toBe(
2024
+ buildDeviceName(host, SHORT_NAMES),
2025
+ );
2026
+ }
2027
+ });
2028
+
2029
+ /*
2030
+ * Clamping happens AFTER shortening. A PTR name too long to be a device
2031
+ * name with the setting off becomes a first label that fits whole with it
2032
+ * on — the operator gets the entire hostname rather than an 80-character
2033
+ * fragment of the FQDN.
2034
+ */
2035
+ test("a long PTR name is shortened first, so its first label is not clamped", () => {
2036
+ const label: string = "a".repeat(63);
2037
+ const host: DiscoveredNetworkDevice = {
2038
+ ipAddress: "10.0.0.5",
2039
+ dnsHostname: `${label}.${"b".repeat(40)}.example.com`,
2040
+ };
2041
+
2042
+ expect(buildDeviceName(host, FULL_NAMES)).toHaveLength(
2043
+ MAX_DEVICE_NAME_LENGTH,
2044
+ );
2045
+ expect(buildDeviceName(host, SHORT_NAMES)).toBe(label);
2046
+ });
2047
+
2048
+ test("a long name the rule refuses is still clamped with the setting on", () => {
2049
+ const name: string = buildDeviceName(
2050
+ snmpHost({ sysName: "x".repeat(255) }),
2051
+ SHORT_NAMES,
2052
+ );
2053
+
2054
+ expect(name).toHaveLength(MAX_DEVICE_NAME_LENGTH);
2055
+
2056
+ const versionLike: string = buildDeviceName(
2057
+ snmpHost({ sysName: `${"v".repeat(100)}.22.04` }),
2058
+ SHORT_NAMES,
2059
+ );
2060
+
2061
+ expect(versionLike).toBe(
2062
+ `${"v".repeat(100)}.22.04`.substring(0, MAX_DEVICE_NAME_LENGTH),
2063
+ );
2064
+ });
2065
+
2066
+ /*
2067
+ * A wildcard reverse zone gives many hosts one PTR name, so with the
2068
+ * setting on they share one SHORT name too, and the second create
2069
+ * collides. The retry name is the short name plus the address.
2070
+ */
2071
+ test("the collision fallback is the short name plus the address", () => {
2072
+ expect(
2073
+ buildFallbackDeviceName(
2074
+ { ipAddress: "10.0.0.5", dnsHostname: "web.corp.example.com" },
2075
+ SHORT_NAMES,
2076
+ ),
2077
+ ).toBe("web (10.0.0.5)");
2078
+
2079
+ expect(
2080
+ buildFallbackDeviceName(
2081
+ { ipAddress: "2001:db8::5", dnsHostname: "web.corp.example.com" },
2082
+ SHORT_NAMES,
2083
+ ),
2084
+ ).toBe("web (2001:db8::5)");
2085
+
2086
+ expect(
2087
+ buildFallbackDeviceName(
2088
+ snmpHost({ sysName: "Core Switch" }),
2089
+ SHORT_NAMES,
2090
+ ),
2091
+ ).toBe("Core Switch (10.0.0.5)");
2092
+ });
2093
+
2094
+ test("the fallback still tells a wildcard range apart", () => {
2095
+ const first: string = buildFallbackDeviceName(
2096
+ {
2097
+ ipAddress: "10.18.166.51",
2098
+ dnsHostname: "dhcp-pool.corp.example.com",
2099
+ },
2100
+ SHORT_NAMES,
2101
+ );
2102
+ const second: string = buildFallbackDeviceName(
2103
+ {
2104
+ ipAddress: "10.18.166.52",
2105
+ dnsHostname: "dhcp-pool.corp.example.com",
2106
+ },
2107
+ SHORT_NAMES,
2108
+ );
2109
+
2110
+ expect(first).toBe("dhcp-pool (10.18.166.51)");
2111
+ expect(second).toBe("dhcp-pool (10.18.166.52)");
2112
+ });
2113
+
2114
+ test("the fallback with a long first label keeps the address and the ceiling", () => {
2115
+ const name: string = buildFallbackDeviceName(
2116
+ {
2117
+ ipAddress: "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
2118
+ dnsHostname: `${"a".repeat(63)}.example.com`,
2119
+ },
2120
+ SHORT_NAMES,
2121
+ );
2122
+
2123
+ expect(name).toHaveLength(MAX_DEVICE_NAME_LENGTH);
2124
+ expect(name.endsWith(" (2001:0db8:85a3:0000:0000:8a2e:0370:7334)")).toBe(
2125
+ true,
2126
+ );
2127
+ expect(Slug.getSlug(name).length).toBeLessThanOrEqual(ColumnLength.Slug);
2128
+ });
2129
+ });
2130
+
2131
+ describe("the builder reads the scan's own setting", () => {
2132
+ /*
2133
+ * buildNetworkDeviceFromDiscoveredHost takes no naming argument of its
2134
+ * own: the scan it is handed IS the naming choice. That is what makes a
2135
+ * caller that selected the scan without the column fail loudly (a type
2136
+ * error on DiscoveredDeviceScanSource) instead of importing full names
2137
+ * from a scan that asked for short ones.
2138
+ */
2139
+ test("a scan with the setting on imports the short name", () => {
2140
+ const device: NetworkDevice = build({
2141
+ host: customerHost,
2142
+ scan: shortNamesScan(),
2143
+ });
2144
+
2145
+ expect(device.name).toBe("wb-0660-kds01");
2146
+ expect(device.hostname).toBe("10.18.167.31");
2147
+ });
2148
+
2149
+ test("a scan without the setting imports the full name", () => {
2150
+ expect(build({ host: customerHost }).name).toBe(CUSTOMER_PTR_NAME);
2151
+ expect(
2152
+ build({
2153
+ host: customerHost,
2154
+ scan: { ...fullScanSource(), useShortDeviceNames: false },
2155
+ }).name,
2156
+ ).toBe(CUSTOMER_PTR_NAME);
2157
+ });
2158
+
2159
+ /*
2160
+ * Naming is independent of credentials. A multi-config scan with the
2161
+ * setting on must still hand each host its own config.
2162
+ */
2163
+ test("the setting changes the name and nothing else about the device", () => {
2164
+ const host: DiscoveredNetworkDevice = snmpHost({
2165
+ sysName: "core-rtr-01.corp.example.com",
2166
+ snmpConfigId: CORE_CONFIG_ID,
2167
+ });
2168
+
2169
+ const withFullNames: NetworkDevice = build({
2170
+ host: host,
2171
+ scan: multiConfigScanSource(),
2172
+ });
2173
+ const withShortNames: NetworkDevice = build({
2174
+ host: host,
2175
+ scan: { ...multiConfigScanSource(), useShortDeviceNames: true },
2176
+ });
2177
+
2178
+ expect(withFullNames.name).toBe("core-rtr-01.corp.example.com");
2179
+ expect(withShortNames.name).toBe("core-rtr-01");
2180
+
2181
+ expect(withShortNames.hostname).toBe(withFullNames.hostname);
2182
+ expect(withShortNames.description).toBe(withFullNames.description);
2183
+ expect(withShortNames.monitoringMethod).toBe(
2184
+ withFullNames.monitoringMethod,
2185
+ );
2186
+ expect(withShortNames.isPollingEnabled).toBe(
2187
+ withFullNames.isPollingEnabled,
2188
+ );
2189
+ expect(withShortNames.probeId?.toString()).toBe(
2190
+ withFullNames.probeId?.toString(),
2191
+ );
2192
+ expect(withShortNames.snmpVersion).toBe("V3");
2193
+ expect(withShortNames.snmpV3Username).toBe("core-observer");
2194
+ expect(withShortNames.snmpCommunityString).toBeUndefined();
2195
+ });
2196
+
2197
+ /*
2198
+ * The collision retry passes the fallback name explicitly, and it must
2199
+ * be used verbatim — the builder may not shorten a name it was handed,
2200
+ * or "web (10.0.0.5)" and a hand-supplied FQDN would both be rewritten.
2201
+ */
2202
+ test("an explicit name still wins, verbatim, with the setting on", () => {
2203
+ expect(
2204
+ build({
2205
+ host: customerHost,
2206
+ scan: shortNamesScan(),
2207
+ name: "custom-kds-name",
2208
+ }).name,
2209
+ ).toBe("custom-kds-name");
2210
+
2211
+ expect(
2212
+ build({
2213
+ host: customerHost,
2214
+ scan: shortNamesScan(),
2215
+ name: "kds-override.corp.example.com",
2216
+ }).name,
2217
+ ).toBe("kds-override.corp.example.com");
2218
+ });
2219
+
2220
+ test("the retry creates the device under the short fallback name", () => {
2221
+ const scan: DiscoveredDeviceScanSource = shortNamesScan();
2222
+
2223
+ const device: NetworkDevice = build({
2224
+ host: customerHost,
2225
+ scan: scan,
2226
+ name: buildFallbackDeviceName(customerHost, scan),
2227
+ });
2228
+
2229
+ expect(device.name).toBe("wb-0660-kds01 (10.18.167.31)");
2230
+ expect(device.hostname).toBe("10.18.167.31");
2231
+ expect(device.dnsName).toBe(CUSTOMER_PTR_NAME);
2232
+ });
2233
+
2234
+ // The scan model itself is a naming choice, structurally.
2235
+ test("a scan source is accepted wherever a naming choice is", () => {
2236
+ const scan: DiscoveredDeviceScanSource = shortNamesScan();
2237
+ const naming: DiscoveredHostNaming = scan;
2238
+
2239
+ expect(buildDeviceName(customerHost, naming)).toBe("wb-0660-kds01");
2240
+ });
2241
+ });
2242
+ });
2243
+
2244
+ /*
2245
+ * The unshortened winner, which the Review dialog shows beside a shortened
2246
+ * name so the operator can see what was cut. It must be exactly what the
2247
+ * display name WOULD be with short names off.
2248
+ */
2249
+ describe("getDiscoveredHostFullName", () => {
2250
+ test("returns the full PTR name a short display name was cut from", () => {
2251
+ const host: DiscoveredNetworkDevice = {
2252
+ ipAddress: "10.18.167.31",
2253
+ dnsHostname: "wb-0660-kds01.wbhq.com.",
2254
+ };
2255
+
2256
+ expect(getDiscoveredHostFullName(host)).toBe("wb-0660-kds01.wbhq.com");
2257
+ expect(getDiscoveredHostDisplayName(host, SHORT_NAMES)).toBe(
2258
+ "wb-0660-kds01",
2259
+ );
2260
+ });
2261
+
2262
+ test("returns the full sysName, trimmed, when the sysName won", () => {
2263
+ expect(
2264
+ getDiscoveredHostFullName(
2265
+ snmpHost({ sysName: " core-sw-01.corp.example.com " }),
2266
+ ),
2267
+ ).toBe("core-sw-01.corp.example.com");
2268
+ });
2269
+
2270
+ test("keeps the sysName ahead of the PTR name", () => {
2271
+ expect(
2272
+ getDiscoveredHostFullName({
2273
+ ipAddress: "10.0.0.5",
2274
+ sysName: "Core Switch",
2275
+ dnsHostname: "sw.corp.example.com",
2276
+ }),
2277
+ ).toBe("Core Switch");
2278
+ });
2279
+
2280
+ test("falls back to the address, and never throws on junk", () => {
2281
+ expect(getDiscoveredHostFullName({ ipAddress: "10.0.0.5" })).toBe(
2282
+ "10.0.0.5",
2283
+ );
2284
+ expect(
2285
+ getDiscoveredHostFullName({
2286
+ ipAddress: "10.0.0.5",
2287
+ sysName: 42 as unknown as string,
2288
+ dnsHostname: "<b>x</b>",
2289
+ }),
2290
+ ).toBe("10.0.0.5");
2291
+ expect(
2292
+ getDiscoveredHostFullName({ ipAddress: null as unknown as string }),
2293
+ ).toBe("");
2294
+ });
2295
+
2296
+ /*
2297
+ * Stated as the relationship the dialog depends on, across every naming
2298
+ * combination: the full name IS the display name with short names off, and
2299
+ * the short display name is derived from it and nothing else.
2300
+ */
2301
+ test("is the display name with short names off, whatever the host", () => {
2302
+ const hosts: Array<DiscoveredNetworkDevice> = [
2303
+ { ipAddress: "10.0.0.1" },
2304
+ { ipAddress: "10.0.0.2", dnsHostname: "gw.corp.example.com" },
2305
+ { ipAddress: "10.0.0.3", sysName: "sw-3.corp.example.com" },
2306
+ { ipAddress: "10.0.0.4", sysName: " ", dnsHostname: "a.b.example" },
2307
+ { ipAddress: "10.0.0.5", dnsHostname: "ubuntu-22.04" },
2308
+ { ipAddress: 42 as unknown as string },
2309
+ ];
2310
+
2311
+ for (const host of hosts) {
2312
+ expect(getDiscoveredHostFullName(host)).toBe(
2313
+ getDiscoveredHostDisplayName(host, FULL_NAMES),
2314
+ );
2315
+ expect(getDiscoveredHostFullName(host)).toBe(
2316
+ getDiscoveredHostDisplayName(host, {}),
2317
+ );
2318
+ }
2319
+ });
2320
+
2321
+ test("differs from the short display name only when something was cut", () => {
2322
+ expect(
2323
+ getDiscoveredHostFullName({ ipAddress: "10.0.0.5", sysName: "sw-3" }),
2324
+ ).toBe(
2325
+ getDiscoveredHostDisplayName(
2326
+ { ipAddress: "10.0.0.5", sysName: "sw-3" },
2327
+ SHORT_NAMES,
2328
+ ),
2329
+ );
2330
+ expect(
2331
+ getDiscoveredHostFullName({
2332
+ ipAddress: "10.0.0.5",
2333
+ dnsHostname: "sw-3.corp.example.com",
2334
+ }),
2335
+ ).not.toBe(
2336
+ getDiscoveredHostDisplayName(
2337
+ { ipAddress: "10.0.0.5", dnsHostname: "sw-3.corp.example.com" },
2338
+ SHORT_NAMES,
2339
+ ),
2340
+ );
2341
+ });
2342
+
2343
+ // It is the unclamped winner: the dialog shows it whole.
2344
+ test("is not clamped", () => {
2345
+ const longName: string = `${"a".repeat(63)}.${"b".repeat(40)}.example.com`;
2346
+
2347
+ expect(
2348
+ getDiscoveredHostFullName({
2349
+ ipAddress: "10.0.0.5",
2350
+ dnsHostname: longName,
2351
+ }),
2352
+ ).toBe(longName);
2353
+ });
2354
+ });
2355
+
2356
+ /*
2357
+ * NetworkDevice.dnsName (issue #3678): the host's full reverse-DNS name, kept
2358
+ * on the device whatever it ends up being called.
2359
+ *
2360
+ * With short names on it is the ONLY place the FQDN survives, which is what
2361
+ * the issue's follow-up comment asked for; and it is what a site rule written
2362
+ * against "*.wbhq.com" still matches after the name loses the domain. So it is
2363
+ * a fact about the host, not a presentation choice, and these cases pin that
2364
+ * it is written from the PTR record, normalised, and from nowhere else.
2365
+ */
2366
+ describe("the device's DNS name", () => {
2367
+ test("is the PTR name, with short names on", () => {
2368
+ const device: NetworkDevice = build({
2369
+ host: {
2370
+ ipAddress: "10.18.167.31",
2371
+ dnsHostname: "wb-0660-kds01.wbhq.com",
2372
+ },
2373
+ scan: shortNamesScan(),
2374
+ });
2375
+
2376
+ expect(device.name).toBe("wb-0660-kds01");
2377
+ expect(device.dnsName).toBe("wb-0660-kds01.wbhq.com");
2378
+ });
2379
+
2380
+ test("is the PTR name, with short names off", () => {
2381
+ const device: NetworkDevice = build({
2382
+ host: {
2383
+ ipAddress: "10.18.167.31",
2384
+ dnsHostname: "wb-0660-kds01.wbhq.com",
2385
+ },
2386
+ });
2387
+
2388
+ expect(device.name).toBe("wb-0660-kds01.wbhq.com");
2389
+ expect(device.dnsName).toBe("wb-0660-kds01.wbhq.com");
2390
+ });
2391
+
2392
+ test("is set even when the sysName names the device", () => {
2393
+ const device: NetworkDevice = build({
2394
+ host: snmpHost({ dnsHostname: "sw1.corp.example.com" }),
2395
+ scan: shortNamesScan(),
2396
+ });
2397
+
2398
+ expect(device.name).toBe("core-switch-01");
2399
+ expect(device.dnsName).toBe("sw1.corp.example.com");
2400
+ });
2401
+
2402
+ test("is set on a ping-only host", () => {
2403
+ const device: NetworkDevice = build({
2404
+ host: {
2405
+ ipAddress: "10.18.167.31",
2406
+ snmpReachable: false,
2407
+ dnsHostname: "cam-lobby.corp.example.com",
2408
+ },
2409
+ });
2410
+
2411
+ expect(device.dnsName).toBe("cam-lobby.corp.example.com");
2412
+ expect(device.snmpCommunityString).toBeUndefined();
2413
+ });
2414
+
2415
+ test("is stored normalised: no root dot, no padding, case preserved", () => {
2416
+ expect(
2417
+ build({
2418
+ host: {
2419
+ ipAddress: "10.18.167.31",
2420
+ dnsHostname: " WB-0660-KDS01.WbHq.com. ",
2421
+ },
2422
+ }).dnsName,
2423
+ ).toBe("WB-0660-KDS01.WbHq.com");
2424
+ });
2425
+
2426
+ test("is set even when the short-name rule refuses the name", () => {
2427
+ const device: NetworkDevice = build({
2428
+ host: { ipAddress: "10.18.167.31", dnsHostname: "ubuntu-22.04" },
2429
+ scan: shortNamesScan(),
2430
+ });
2431
+
2432
+ expect(device.name).toBe("ubuntu-22.04");
2433
+ expect(device.dnsName).toBe("ubuntu-22.04");
2434
+ });
2435
+
2436
+ /*
2437
+ * A PTR name is at most 253 characters, which is far more than the
2438
+ * 80-character device name but well inside the column. It is stored WHOLE:
2439
+ * clamping it like the name would store half a DNS name.
2440
+ */
2441
+ test("is stored whole at the longest name DNS allows, unlike the device name", () => {
2442
+ const maximalName: string = `${"a".repeat(63)}.${"b".repeat(
2443
+ 63,
2444
+ )}.${"c".repeat(63)}.${"d".repeat(61)}`;
2445
+
2446
+ const device: NetworkDevice = build({
2447
+ host: { ipAddress: "10.18.167.31", dnsHostname: maximalName },
2448
+ });
2449
+
2450
+ expect(maximalName).toHaveLength(MAX_DEVICE_DNS_NAME_LENGTH);
2451
+ expect(device.dnsName).toBe(maximalName);
2452
+ expect(device.name).toHaveLength(MAX_DEVICE_NAME_LENGTH);
2453
+ });
2454
+
2455
+ test("its ceiling is the DNS ceiling, and fits the column", () => {
2456
+ expect(MAX_DEVICE_DNS_NAME_LENGTH).toBe(MAX_REVERSE_DNS_NAME_LENGTH);
2457
+ expect(MAX_DEVICE_DNS_NAME_LENGTH).toBeLessThanOrEqual(
2458
+ ColumnLength.LongText,
2459
+ );
2460
+ });
2461
+
2462
+ test("survives the collision retry's explicit name", () => {
2463
+ const host: DiscoveredNetworkDevice = {
2464
+ ipAddress: "10.18.166.52",
2465
+ dnsHostname: "dhcp-pool.corp.example.com",
2466
+ };
2467
+
2468
+ const device: NetworkDevice = build({
2469
+ host: host,
2470
+ name: buildFallbackDeviceName(host, FULL_NAMES),
2471
+ });
2472
+
2473
+ expect(device.name).toBe("dhcp-pool.corp.example.com (10.18.166.52)");
2474
+ expect(device.dnsName).toBe("dhcp-pool.corp.example.com");
2475
+ });
2476
+
2477
+ describe("is absent when there is no usable PTR name", () => {
2478
+ /*
2479
+ * "Absent", not "blank": an empty string is still a value on a create
2480
+ * payload, and a device with no PTR record should read as having no DNS
2481
+ * name rather than one that happens to be empty. The model initialises
2482
+ * the property to undefined, so undefined is what "not written" looks
2483
+ * like.
2484
+ */
2485
+ const NO_USABLE_PTR: Array<{ reason: string; dnsHostname: unknown }> = [
2486
+ { reason: "no PTR record", dnsHostname: undefined },
2487
+ { reason: "an empty PTR answer", dnsHostname: "" },
2488
+ { reason: "a blank PTR answer", dnsHostname: " " },
2489
+ { reason: "markup", dnsHostname: "<script>alert(1)</script>" },
2490
+ { reason: "a name with spaces", dnsHostname: "core switch" },
2491
+ { reason: "the address restated", dnsHostname: "10.18.167.31" },
2492
+ {
2493
+ reason: "an in-addr.arpa echo",
2494
+ dnsHostname: "31.167.18.10.in-addr.arpa",
2495
+ },
2496
+ {
2497
+ reason: "a name longer than DNS allows",
2498
+ dnsHostname: ["a", "b", "c", "d", "e"]
2499
+ .map((letter: string): string => {
2500
+ return letter.repeat(60);
2501
+ })
2502
+ .join("."),
2503
+ },
2504
+ { reason: "a number", dnsHostname: 42 },
2505
+ { reason: "null", dnsHostname: null },
2506
+ {
2507
+ reason: "the resolver's whole answer array",
2508
+ dnsHostname: ["gw.corp.example.com"],
2509
+ },
2510
+ {
2511
+ reason: "a string-like object",
2512
+ dnsHostname: {
2513
+ toString: (): string => {
2514
+ return "gw.corp.example.com";
2515
+ },
2516
+ },
2517
+ },
2518
+ ];
2519
+
2520
+ for (const noPtr of NO_USABLE_PTR) {
2521
+ test(`${noPtr.reason}`, () => {
2522
+ for (const scan of [fullScanSource(), shortNamesScan()]) {
2523
+ const device: NetworkDevice = build({
2524
+ host: {
2525
+ ipAddress: "10.18.167.31",
2526
+ dnsHostname: noPtr.dnsHostname as string,
2527
+ },
2528
+ scan: scan,
2529
+ });
2530
+
2531
+ expect(device.dnsName).toBeUndefined();
2532
+ expect(device.dnsName).not.toBe("");
2533
+ expect(device.name).toBe("10.18.167.31");
2534
+ }
2535
+ });
2536
+ }
2537
+ });
2538
+
2539
+ /*
2540
+ * sysName is the name the device gives ITSELF. It is already stored as
2541
+ * sysName by the first poll, and calling it a DNS name would be a claim no
2542
+ * resolver made — even when it looks exactly like one.
2543
+ */
2544
+ test("is never taken from the sysName", () => {
2545
+ for (const scan of [fullScanSource(), shortNamesScan()]) {
2546
+ const device: NetworkDevice = build({
2547
+ host: snmpHost({ sysName: "core-sw-01.corp.example.com" }),
2548
+ scan: scan,
2549
+ });
2550
+
2551
+ expect(device.dnsName).toBeUndefined();
2552
+ }
2553
+ });
2554
+
2555
+ test("is never taken from the device name or the address", () => {
2556
+ const device: NetworkDevice = build({
2557
+ host: { ipAddress: "10.18.167.31" },
2558
+ name: "kds01.wbhq.com",
2559
+ });
2560
+
2561
+ expect(device.name).toBe("kds01.wbhq.com");
2562
+ expect(device.dnsName).toBeUndefined();
2563
+ });
2564
+ });
2565
+
2566
+ /*
2567
+ * OneUptime issue #3677 — hosts with no DNS and no SNMP show only as raw IPs.
2568
+ *
2569
+ * The reporter's 10.18.167.31-36 have no PTR record and answer no SNMP, so the
2570
+ * naming chain above had nothing for them but the address. A scan with NetBIOS
2571
+ * lookup on asks those hosts for their NetBIOS name, and the probe stores the
2572
+ * answer as `netbiosName`. These cases pin where that name sits in the chain
2573
+ * — third, below both names that existed before it — and that it is treated
2574
+ * as what it is: a SELF-REPORTED value read out of jsonb, normalised again at
2575
+ * the point of use, allowed to name the device and nothing more.
2576
+ */
2577
+ describe("the NetBIOS name (issue #3677)", () => {
2578
+ // The reporter's address, and a name one of those hosts could answer with.
2579
+ const REPORTER_ADDRESS: string = "10.18.167.31";
2580
+
2581
+ const netbiosHost: DiscoveredNetworkDevice = {
2582
+ ipAddress: REPORTER_ADDRESS,
2583
+ snmpReachable: false,
2584
+ netbiosName: "reg01",
2585
+ };
2586
+
2587
+ describe("precedence: sysName, then PTR name, then NetBIOS name, then address", () => {
2588
+ test("a host with only a NetBIOS name is named by it, not by its address", () => {
2589
+ // The reported case, in one line.
2590
+ expect(buildDeviceName(netbiosHost, FULL_NAMES)).toBe("reg01");
2591
+ expect(getDiscoveredHostDisplayName(netbiosHost, FULL_NAMES)).toBe(
2592
+ "reg01",
2593
+ );
2594
+ expect(getDiscoveredHostFullName(netbiosHost)).toBe("reg01");
2595
+ });
2596
+
2597
+ test("the sysName beats both the PTR name and the NetBIOS name", () => {
2598
+ const host: DiscoveredNetworkDevice = {
2599
+ ipAddress: REPORTER_ADDRESS,
2600
+ sysName: "core-switch-01",
2601
+ dnsHostname: "reg01.corp.example.com",
2602
+ netbiosName: "workstation01",
2603
+ };
2604
+
2605
+ expect(buildDeviceName(host, FULL_NAMES)).toBe("core-switch-01");
2606
+ });
2607
+
2608
+ test("the sysName beats the NetBIOS name on its own", () => {
2609
+ expect(
2610
+ buildDeviceName(
2611
+ { ...netbiosHost, sysName: "core-switch-01" },
2612
+ FULL_NAMES,
2613
+ ),
2614
+ ).toBe("core-switch-01");
2615
+ });
2616
+
2617
+ /*
2618
+ * The PTR name is published by whoever runs DNS for the subnet; the
2619
+ * NetBIOS name is whatever the host says about itself. Where both exist,
2620
+ * the published one wins.
2621
+ */
2622
+ test("the PTR name beats the NetBIOS name", () => {
2623
+ const host: DiscoveredNetworkDevice = {
2624
+ ...netbiosHost,
2625
+ dnsHostname: "wb-0660-kds01.wbhq.com",
2626
+ };
2627
+
2628
+ expect(buildDeviceName(host, FULL_NAMES)).toBe("wb-0660-kds01.wbhq.com");
2629
+ expect(buildDeviceName(host, SHORT_NAMES)).toBe("wb-0660-kds01");
2630
+ });
2631
+
2632
+ test("a whitespace sysName does not block the NetBIOS name", () => {
2633
+ expect(
2634
+ buildDeviceName({ ...netbiosHost, sysName: " " }, FULL_NAMES),
2635
+ ).toBe("reg01");
2636
+ });
2637
+
2638
+ test("an unusable PTR name falls through to the NetBIOS name, not to the address", () => {
2639
+ expect(
2640
+ buildDeviceName(
2641
+ { ...netbiosHost, dnsHostname: "<script>alert(1)</script>" },
2642
+ FULL_NAMES,
2643
+ ),
2644
+ ).toBe("reg01");
2645
+ expect(
2646
+ buildDeviceName(
2647
+ { ...netbiosHost, dnsHostname: REPORTER_ADDRESS },
2648
+ FULL_NAMES,
2649
+ ),
2650
+ ).toBe("reg01");
2651
+ });
2652
+
2653
+ test("the NetBIOS name beats the address", () => {
2654
+ expect(buildDeviceName(netbiosHost, FULL_NAMES)).not.toBe(
2655
+ REPORTER_ADDRESS,
2656
+ );
2657
+ expect(buildDeviceName({ ipAddress: REPORTER_ADDRESS }, FULL_NAMES)).toBe(
2658
+ REPORTER_ADDRESS,
2659
+ );
2660
+ });
2661
+ });
2662
+
2663
+ /*
2664
+ * `discoveredDevices` is jsonb stored verbatim, so "the probe normalised it"
2665
+ * holds only for the probe that wrote the row. A row an older or modified
2666
+ * probe stored in the raw wire form — upper case, padded to fifteen bytes —
2667
+ * must name the device exactly as the normalised row would.
2668
+ */
2669
+ describe("the raw jsonb value is normalised again at the point of use", () => {
2670
+ const RAW_FORMS: Array<{ reason: string; netbiosName: string }> = [
2671
+ { reason: "upper case", netbiosName: "REG01" },
2672
+ {
2673
+ reason: "space-padded to fifteen bytes",
2674
+ netbiosName: "REG01 ",
2675
+ },
2676
+ {
2677
+ reason: "NUL-padded",
2678
+ netbiosName: `REG01${String.fromCharCode(0).repeat(10)}`,
2679
+ },
2680
+ { reason: "leading and trailing spaces", netbiosName: " Reg01 " },
2681
+ ];
2682
+
2683
+ for (const raw of RAW_FORMS) {
2684
+ test(`${raw.reason} names the device "reg01"`, () => {
2685
+ const host: DiscoveredNetworkDevice = {
2686
+ ipAddress: REPORTER_ADDRESS,
2687
+ netbiosName: raw.netbiosName,
2688
+ };
2689
+
2690
+ expect(getDiscoveredHostFullName(host)).toBe("reg01");
2691
+ expect(buildDeviceName(host, FULL_NAMES)).toBe("reg01");
2692
+ expect(build({ host: host }).name).toBe("reg01");
2693
+ });
2694
+ }
2695
+ });
2696
+
2697
+ describe("an unusable NetBIOS name falls through to the address", () => {
2698
+ const UNUSABLE: Array<{ reason: string; netbiosName: unknown }> = [
2699
+ { reason: "a dotted name", netbiosName: "reg01.corp" },
2700
+ { reason: "a trailing root dot", netbiosName: "REG01." },
2701
+ { reason: "an inner space", netbiosName: "REG 01" },
2702
+ { reason: "sixteen characters", netbiosName: "ABCDEFGHIJKLMNOP" },
2703
+ { reason: "only digits", netbiosName: "123456" },
2704
+ { reason: "an address spelled with dashes", netbiosName: "10-18-167" },
2705
+ { reason: "markup", netbiosName: "<b>x</b>" },
2706
+ {
2707
+ reason: "the browser-election pseudo-name",
2708
+ netbiosName: "__MSBROWSE__",
2709
+ },
2710
+ { reason: "only padding", netbiosName: " " },
2711
+ { reason: "the empty string", netbiosName: "" },
2712
+ { reason: "a number", netbiosName: 42 },
2713
+ { reason: "null", netbiosName: null },
2714
+ { reason: "an array", netbiosName: ["REG01"] },
2715
+ {
2716
+ reason: "a string-like object",
2717
+ netbiosName: {
2718
+ toString: (): string => {
2719
+ return "REG01";
2720
+ },
2721
+ },
2722
+ },
2723
+ ];
2724
+
2725
+ for (const unusable of UNUSABLE) {
2726
+ test(`${unusable.reason}`, () => {
2727
+ const host: DiscoveredNetworkDevice = {
2728
+ ipAddress: REPORTER_ADDRESS,
2729
+ netbiosName: unusable.netbiosName as string,
2730
+ };
2731
+
2732
+ expect(() => {
2733
+ return getDiscoveredHostFullName(host);
2734
+ }).not.toThrow();
2735
+
2736
+ for (const naming of [FULL_NAMES, SHORT_NAMES]) {
2737
+ expect(buildDeviceName(host, naming)).toBe(REPORTER_ADDRESS);
2738
+ }
2739
+ expect(build({ host: host }).name).toBe(REPORTER_ADDRESS);
2740
+ });
2741
+ }
2742
+ });
2743
+
2744
+ /*
2745
+ * The short-name option cuts an FQDN to its first label. A NetBIOS name is
2746
+ * one dot-free label by construction, so there is nothing to cut — the
2747
+ * option must neither change it nor make it lose to anything else.
2748
+ */
2749
+ describe("short names do not change a NetBIOS name", () => {
2750
+ test("getShortHostname declines a NetBIOS name, so there is nothing to cut", () => {
2751
+ expect(getShortHostname("reg01")).toBeUndefined();
2752
+ expect(getShortHostname("workstation01")).toBeUndefined();
2753
+ });
2754
+
2755
+ test("the name is the same with short names on, off, or unset", () => {
2756
+ expect(getDiscoveredHostDisplayName(netbiosHost, SHORT_NAMES)).toBe(
2757
+ "reg01",
2758
+ );
2759
+ expect(getDiscoveredHostDisplayName(netbiosHost, FULL_NAMES)).toBe(
2760
+ "reg01",
2761
+ );
2762
+ expect(getDiscoveredHostDisplayName(netbiosHost, {})).toBe("reg01");
2763
+ });
2764
+
2765
+ test("the device and its fallback name are the same with short names on or off", () => {
2766
+ for (const scan of [fullScanSource(), shortNamesScan()]) {
2767
+ expect(build({ host: netbiosHost, scan: scan }).name).toBe("reg01");
2768
+ expect(buildFallbackDeviceName(netbiosHost, scan)).toBe(
2769
+ "reg01 (10.18.167.31)",
2770
+ );
2771
+ }
2772
+ });
2773
+
2774
+ test("a raw upper-case name is lower-cased, not shortened, with short names on", () => {
2775
+ expect(
2776
+ getDiscoveredHostDisplayName(
2777
+ { ipAddress: REPORTER_ADDRESS, netbiosName: "REG01 " },
2778
+ SHORT_NAMES,
2779
+ ),
2780
+ ).toBe("reg01");
2781
+ });
2782
+ });
2783
+
2784
+ /*
2785
+ * Several Windows hosts answering with the same name — a cloned image, a
2786
+ * rebuilt machine that kept its predecessor's name — collide on the device
2787
+ * name exactly as a wildcard PTR zone does, and the same fallback breaks
2788
+ * the tie.
2789
+ */
2790
+ describe("the collision fallback", () => {
2791
+ test("appends the address to the NetBIOS name", () => {
2792
+ expect(buildFallbackDeviceName(netbiosHost, FULL_NAMES)).toBe(
2793
+ "reg01 (10.18.167.31)",
2794
+ );
2795
+ });
2796
+
2797
+ test("two hosts answering with one name get distinct fallback names", () => {
2798
+ const twin: DiscoveredNetworkDevice = {
2799
+ ...netbiosHost,
2800
+ ipAddress: "10.18.167.32",
2801
+ };
2802
+
2803
+ expect(buildDeviceName(twin, FULL_NAMES)).toBe(
2804
+ buildDeviceName(netbiosHost, FULL_NAMES),
2805
+ );
2806
+ expect(buildFallbackDeviceName(twin, FULL_NAMES)).toBe(
2807
+ "reg01 (10.18.167.32)",
2808
+ );
2809
+ expect(buildFallbackDeviceName(twin, FULL_NAMES)).not.toBe(
2810
+ buildFallbackDeviceName(netbiosHost, FULL_NAMES),
2811
+ );
2812
+ });
2813
+
2814
+ test("the fallback name survives into the device through the name override", () => {
2815
+ const device: NetworkDevice = build({
2816
+ host: netbiosHost,
2817
+ name: buildFallbackDeviceName(netbiosHost, FULL_NAMES),
2818
+ });
2819
+
2820
+ expect(device.name).toBe("reg01 (10.18.167.31)");
2821
+ expect(device.hostname).toBe(REPORTER_ADDRESS);
2822
+ });
2823
+ });
2824
+
2825
+ /*
2826
+ * A NetBIOS name is what the host says about itself, not a record anyone
2827
+ * published. Storing it as `dnsName` would make it searchable, and matched
2828
+ * by site-assignment hostname patterns, as though DNS had vouched for it.
2829
+ * It names the device; it goes nowhere else on it.
2830
+ */
2831
+ describe("the NetBIOS name names the device and does nothing else", () => {
2832
+ test("the device's DNS name is never taken from the NetBIOS name", () => {
2833
+ for (const scan of [fullScanSource(), shortNamesScan()]) {
2834
+ const device: NetworkDevice = build({ host: netbiosHost, scan: scan });
2835
+
2836
+ expect(device.name).toBe("reg01");
2837
+ expect(device.dnsName).toBeUndefined();
2838
+ }
2839
+ });
2840
+
2841
+ test("the device's DNS name is still the PTR name when a host has both", () => {
2842
+ const device: NetworkDevice = build({
2843
+ host: { ...netbiosHost, dnsHostname: "reg01.corp.example.com" },
2844
+ });
2845
+
2846
+ expect(device.dnsName).toBe("reg01.corp.example.com");
2847
+ });
2848
+
2849
+ test("the device's hostname stays the address", () => {
2850
+ const device: NetworkDevice = build({ host: netbiosHost });
2851
+
2852
+ expect(device.hostname).toBe(REPORTER_ADDRESS);
2853
+ expect(device.name).toBe("reg01");
2854
+ });
2855
+
2856
+ test("a ping-only NetBIOS-named host still carries no credentials", () => {
2857
+ const device: NetworkDevice = build({ host: netbiosHost });
2858
+
2859
+ expect(device.monitoringMethod).toBe(NetworkDeviceMonitoringMethod.Probe);
2860
+ expect(device.snmpCommunityString).toBeUndefined();
2861
+ expect(device.snmpVersion).toBeUndefined();
2862
+ expect(device.probeId?.toString()).toBe(PROBE_ID.toString());
2863
+ });
2864
+
2865
+ test("a NetBIOS-named device's name produces a valid slug", () => {
2866
+ const device: NetworkDevice = build({ host: netbiosHost });
2867
+
2868
+ expect(Slug.getSlug(device.name!)).toContain("reg01");
2869
+ });
2870
+ });
2871
+
2872
+ test("the full name is still the display name with short names off, across every source", () => {
2873
+ const hosts: Array<DiscoveredNetworkDevice> = [
2874
+ { ipAddress: "10.0.0.1", netbiosName: "reg01" },
2875
+ { ipAddress: "10.0.0.2", netbiosName: "REG02 " },
2876
+ { ipAddress: "10.0.0.3", netbiosName: "not valid" },
2877
+ {
2878
+ ipAddress: "10.0.0.4",
2879
+ dnsHostname: "gw.corp.example.com",
2880
+ netbiosName: "reg04",
2881
+ },
2882
+ { ipAddress: "10.0.0.5", sysName: "sw-5", netbiosName: "reg05" },
2883
+ ];
2884
+
2885
+ for (const host of hosts) {
2886
+ expect(getDiscoveredHostFullName(host)).toBe(
2887
+ getDiscoveredHostDisplayName(host, FULL_NAMES),
2888
+ );
2889
+ }
2890
+ });
2891
+ });