@oneuptime/common 12.0.25 → 12.0.26

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 (834) hide show
  1. package/Models/AnalyticsModels/Index.ts +2 -0
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +413 -0
  3. package/Models/DatabaseModels/AlertSeverity.ts +4 -1
  4. package/Models/DatabaseModels/CephClusterFeed.ts +625 -0
  5. package/Models/DatabaseModels/CloudResourceFeed.ts +625 -0
  6. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +13 -0
  7. package/Models/DatabaseModels/DetectionRule.ts +9 -3
  8. package/Models/DatabaseModels/DockerHostFeed.ts +625 -0
  9. package/Models/DatabaseModels/DockerSwarmClusterFeed.ts +628 -0
  10. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +9 -3
  11. package/Models/DatabaseModels/HostFeed.ts +625 -0
  12. package/Models/DatabaseModels/IncidentSeverity.ts +4 -1
  13. package/Models/DatabaseModels/Index.ts +22 -0
  14. package/Models/DatabaseModels/KubernetesClusterFeed.ts +628 -0
  15. package/Models/DatabaseModels/Monitor.ts +87 -0
  16. package/Models/DatabaseModels/NetworkDevice.ts +96 -5
  17. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +92 -6
  18. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +301 -31
  19. package/Models/DatabaseModels/NetworkSite.ts +120 -0
  20. package/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.ts +1 -0
  21. package/Models/DatabaseModels/PodmanHostFeed.ts +625 -0
  22. package/Models/DatabaseModels/ProxmoxClusterFeed.ts +626 -0
  23. package/Models/DatabaseModels/ScheduledMaintenance.ts +67 -0
  24. package/Models/DatabaseModels/ServiceFeed.ts +625 -0
  25. package/Models/DatabaseModels/TelemetrySourceMap.ts +474 -0
  26. package/Models/DatabaseModels/ThreatIntelFeed.ts +758 -0
  27. package/Models/DatabaseModels/UserOnCallLog.ts +1 -0
  28. package/Models/DatabaseModels/UserTotpAuth.ts +1 -0
  29. package/Models/DatabaseModels/UserWebAuthn.ts +1 -0
  30. package/Server/API/AlertAPI.ts +23 -1
  31. package/Server/API/BaseAPI.ts +14 -3
  32. package/Server/API/IncidentAPI.ts +41 -1
  33. package/Server/API/IncidentEpisodeAPI.ts +23 -1
  34. package/Server/API/MicrosoftTeamsAPI.ts +31 -2
  35. package/Server/API/ScheduledMaintenanceAPI.ts +23 -1
  36. package/Server/API/SlackAPI.ts +48 -0
  37. package/Server/API/TelemetryAPI.ts +167 -42
  38. package/Server/API/UserOnCallLogTimelineAPI.ts +75 -61
  39. package/Server/API/UserTotpAuthAPI.ts +67 -1
  40. package/Server/API/UserWebAuthnAPI.ts +44 -1
  41. package/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.ts +57 -0
  42. package/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.ts +49 -0
  43. package/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.ts +129 -0
  44. package/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.ts +54 -0
  45. package/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.ts +64 -0
  46. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.ts +64 -0
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.ts +72 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.ts +31 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.ts +489 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +18 -0
  51. package/Server/Middleware/IdentityRateLimit.ts +53 -3
  52. package/Server/Services/AIService.ts +181 -41
  53. package/Server/Services/CephClusterFeedService.ts +99 -0
  54. package/Server/Services/CephClusterLabelRuleEngineService.ts +29 -0
  55. package/Server/Services/CephClusterOwnerRuleEngineService.ts +23 -0
  56. package/Server/Services/CephClusterOwnerTeamService.ts +129 -0
  57. package/Server/Services/CephClusterOwnerUserService.ts +123 -0
  58. package/Server/Services/CephClusterService.ts +223 -2
  59. package/Server/Services/CloudResourceFeedService.ts +99 -0
  60. package/Server/Services/CloudResourceLabelRuleEngineService.ts +30 -0
  61. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +33 -0
  62. package/Server/Services/CloudResourceOwnerTeamService.ts +129 -0
  63. package/Server/Services/CloudResourceOwnerUserService.ts +123 -0
  64. package/Server/Services/CloudResourceService.ts +227 -2
  65. package/Server/Services/DatabaseService.ts +265 -0
  66. package/Server/Services/DockerHostFeedService.ts +99 -0
  67. package/Server/Services/DockerHostLabelRuleEngineService.ts +29 -0
  68. package/Server/Services/DockerHostOwnerRuleEngineService.ts +23 -0
  69. package/Server/Services/DockerHostOwnerTeamService.ts +129 -0
  70. package/Server/Services/DockerHostOwnerUserService.ts +123 -0
  71. package/Server/Services/DockerHostService.ts +227 -2
  72. package/Server/Services/DockerSwarmClusterFeedService.ts +102 -0
  73. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +30 -0
  74. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +24 -0
  75. package/Server/Services/DockerSwarmClusterOwnerTeamService.ts +133 -0
  76. package/Server/Services/DockerSwarmClusterOwnerUserService.ts +127 -0
  77. package/Server/Services/DockerSwarmClusterService.ts +229 -2
  78. package/Server/Services/EnterpriseLicenseService.ts +15 -7
  79. package/Server/Services/ExceptionAggregationService.ts +12 -2
  80. package/Server/Services/HostFeedService.ts +99 -0
  81. package/Server/Services/HostLabelRuleEngineService.ts +29 -0
  82. package/Server/Services/HostOwnerRuleEngineService.ts +23 -0
  83. package/Server/Services/HostOwnerTeamService.ts +129 -0
  84. package/Server/Services/HostOwnerUserService.ts +123 -0
  85. package/Server/Services/HostService.ts +215 -2
  86. package/Server/Services/IncidentService.ts +11 -0
  87. package/Server/Services/Index.ts +24 -0
  88. package/Server/Services/KubernetesClusterFeedService.ts +99 -0
  89. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +30 -0
  90. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +24 -0
  91. package/Server/Services/KubernetesClusterOwnerTeamService.ts +133 -0
  92. package/Server/Services/KubernetesClusterOwnerUserService.ts +127 -0
  93. package/Server/Services/KubernetesClusterService.ts +231 -2
  94. package/Server/Services/LogAggregationService.ts +23 -280
  95. package/Server/Services/MetricAggregationService.ts +98 -1
  96. package/Server/Services/MonitorService.ts +177 -13
  97. package/Server/Services/MonitorTemplateService.ts +111 -0
  98. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +777 -86
  99. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +199 -16
  100. package/Server/Services/NetworkDeviceDiscoveryScanService.ts +1055 -14
  101. package/Server/Services/NetworkDeviceService.ts +750 -4
  102. package/Server/Services/NetworkInterfaceService.ts +415 -0
  103. package/Server/Services/NetworkSiteService.ts +485 -52
  104. package/Server/Services/PodmanHostFeedService.ts +99 -0
  105. package/Server/Services/PodmanHostLabelRuleEngineService.ts +29 -0
  106. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +23 -0
  107. package/Server/Services/PodmanHostOwnerTeamService.ts +129 -0
  108. package/Server/Services/PodmanHostOwnerUserService.ts +123 -0
  109. package/Server/Services/PodmanHostService.ts +227 -2
  110. package/Server/Services/ProjectService.ts +16 -10
  111. package/Server/Services/ProxmoxClusterFeedService.ts +99 -0
  112. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +30 -0
  113. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +24 -0
  114. package/Server/Services/ProxmoxClusterOwnerTeamService.ts +131 -0
  115. package/Server/Services/ProxmoxClusterOwnerUserService.ts +124 -0
  116. package/Server/Services/ProxmoxClusterService.ts +225 -2
  117. package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +61 -0
  118. package/Server/Services/ServiceFeedService.ts +99 -0
  119. package/Server/Services/ServiceLabelRuleEngineService.ts +29 -0
  120. package/Server/Services/ServiceOwnerRuleEngineService.ts +26 -0
  121. package/Server/Services/ServiceOwnerTeamService.ts +129 -0
  122. package/Server/Services/ServiceOwnerUserService.ts +123 -0
  123. package/Server/Services/ServiceService.ts +227 -3
  124. package/Server/Services/StatusPageSubscriberService.ts +7 -0
  125. package/Server/Services/TelemetryAttributeService.ts +13 -3
  126. package/Server/Services/TelemetrySourceMapService.ts +307 -0
  127. package/Server/Services/ThreatIntelFeedService.ts +222 -0
  128. package/Server/Services/ThreatIntelIndicatorService.ts +428 -0
  129. package/Server/Services/TraceAggregationService.ts +101 -11
  130. package/Server/Services/UserService.ts +13 -6
  131. package/Server/Services/UserTwoFactorBackupCodeService.ts +127 -0
  132. package/Server/Services/UserWebhookService.ts +11 -2
  133. package/Server/Static/Brand/README.md +38 -0
  134. package/Server/Static/Brand/favicons/apple-touch-icon.png +0 -0
  135. package/Server/Static/Brand/favicons/favicon-16x16.png +0 -0
  136. package/Server/Static/Brand/favicons/favicon-32x32.png +0 -0
  137. package/Server/Static/Brand/favicons/favicon.ico +0 -0
  138. package/Server/Static/Brand/favicons/safari-pinned-tab.svg +31 -0
  139. package/Server/Static/Brand/hou-wb.svg +1 -0
  140. package/Server/Static/Brand/oneuptime-logo.svg +1 -0
  141. package/Server/Static/Brand/ou-wb.svg +1 -0
  142. package/Server/Static/Vendor/README.md +4 -0
  143. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +13 -3
  144. package/Server/Types/Database/AggregateBy.ts +83 -0
  145. package/Server/Types/Database/AggregateResultUtil.ts +126 -0
  146. package/Server/Types/Database/JSONColumnQuery.ts +18 -0
  147. package/Server/Types/Database/QueryHelper.ts +40 -0
  148. package/Server/Types/Database/QueryUtil.ts +26 -0
  149. package/Server/Types/Workflow/Components/API/Utils.ts +10 -1
  150. package/Server/Types/Workflow/Components/JavaScript.ts +8 -0
  151. package/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.ts +9 -0
  152. package/Server/Utils/AI/SRE/InvestigationGrader.ts +18 -0
  153. package/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.ts +422 -0
  154. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +176 -0
  155. package/Server/Utils/DataSource/HttpFetch.ts +18 -0
  156. package/Server/Utils/Database/RelationIdUtil.ts +42 -0
  157. package/Server/Utils/Marketing/MarketingEventUtil.ts +38 -9
  158. package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +34 -3
  159. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +9 -1
  160. package/Server/Utils/Monitor/Criteria/SyntheticMonitor.ts +28 -10
  161. package/Server/Utils/Monitor/MonitorAlert.ts +541 -332
  162. package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +330 -64
  163. package/Server/Utils/Monitor/MonitorIncident.ts +640 -434
  164. package/Server/Utils/Monitor/MonitorResource.ts +226 -49
  165. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +46 -3
  166. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +23 -102
  167. package/Server/Utils/Monitor/PerEntityCriteriaFanOut.ts +329 -0
  168. package/Server/Utils/NetworkDevice/DeviceHealthAggregation.ts +427 -0
  169. package/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.ts +310 -0
  170. package/Server/Utils/OnCallNotificationContext.ts +686 -0
  171. package/Server/Utils/PrivateNetworkWebhookConfig.ts +549 -0
  172. package/Server/Utils/ResourceFeed/ResourceFeedUtil.ts +139 -0
  173. package/Server/Utils/Response.ts +11 -1
  174. package/Server/Utils/SSRFProtection.ts +230 -60
  175. package/Server/Utils/SecurityEvent/ConnectorErrorMessage.ts +106 -0
  176. package/Server/Utils/SecurityEvent/DetectionRuleEvaluator.ts +84 -284
  177. package/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.ts +47 -20
  178. package/Server/Utils/SecurityEvent/SecurityEventAlerting.ts +318 -0
  179. package/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.ts +199 -0
  180. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.ts +252 -0
  181. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.ts +739 -0
  182. package/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.ts +533 -0
  183. package/Server/Utils/StartServer.ts +83 -56
  184. package/Server/Utils/StatusPageSubscriberWebhook.ts +3 -0
  185. package/Server/Utils/Telemetry/SourceMapResolver.ts +480 -0
  186. package/Server/Utils/TwoFactorBackupCodeNotification.ts +106 -0
  187. package/Server/Utils/VM/VMAPI.ts +3 -0
  188. package/Server/Utils/VM/VMRunner.ts +27 -1
  189. package/Server/Utils/VendorAssets.ts +42 -0
  190. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +136 -6
  191. package/Server/Views/AcknowledgeUserOnCallNotification.ejs +11 -9
  192. package/Server/Views/Partials/Head.ejs +9 -9
  193. package/Server/Views/Partials/OnCallNotificationDetails.ejs +48 -0
  194. package/Server/Views/ViewMessage.ejs +11 -9
  195. package/Tests/App/Accounts/LoginTwoFactorRecovery.test.tsx +972 -0
  196. package/Tests/App/Dashboard/AddNeighborToMonitoringModal.test.tsx +401 -0
  197. package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +707 -0
  198. package/Tests/App/Dashboard/DiscoveryScanWizardValidation.test.tsx +1908 -18
  199. package/Tests/App/Dashboard/ResourceFeed.test.tsx +230 -0
  200. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +216 -0
  201. package/Tests/App/Dashboard/TopologyAddToMonitoring.test.tsx +192 -0
  202. package/Tests/App/Dashboard/WorkspaceNotificationRuleConditions.test.tsx +439 -0
  203. package/Tests/Models/DatabaseModels/DateColumnDeserialization.test.ts +182 -0
  204. package/Tests/Models/DatabaseModels/RelationColumnModelTypeCoverage.test.ts +82 -0
  205. package/Tests/Models/DatabaseModels/ResourceFeedModels.test.ts +398 -0
  206. package/Tests/Models/DiscoveryScanNameColumn.test.ts +151 -16
  207. package/Tests/Models/DiscoveryScanSnmpEnabledColumn.test.ts +593 -0
  208. package/Tests/Models/NetworkDeviceCreateContract.test.ts +102 -0
  209. package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +607 -0
  210. package/Tests/Server/API/AIGenerationRequestBudget.test.ts +355 -0
  211. package/Tests/Server/API/AIKillSwitchBackstop.test.ts +602 -0
  212. package/Tests/Server/API/BaseAPIUpdateDateColumns.test.ts +154 -0
  213. package/Tests/Server/API/MicrosoftTeamsBotTestEndpoint.test.ts +335 -0
  214. package/Tests/Server/API/UserOnCallLogTimelineAcknowledgePage.test.ts +611 -0
  215. package/Tests/Server/API/UserTotpAuthAPI.test.ts +498 -4
  216. package/Tests/Server/API/UserWebAuthnBackupCodeMinting.test.ts +682 -0
  217. package/Tests/Server/Infrastructure/ExampleDockerfiles.test.ts +595 -0
  218. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +9 -0
  219. package/Tests/Server/Services/AIServiceProjectAccess.test.ts +6 -0
  220. package/Tests/Server/Services/AutoImportScanCredentialSelect.test.ts +18 -0
  221. package/Tests/Server/Services/DatabaseServiceAggregateBy.test.ts +590 -0
  222. package/Tests/Server/Services/DatabaseServiceUpdateWriteRouting.test.ts +12 -0
  223. package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +162 -26
  224. package/Tests/Server/Services/EnterpriseLicenseServiceCreate.test.ts +292 -0
  225. package/Tests/Server/Services/FeedRetentionConsistency.test.ts +119 -12
  226. package/Tests/Server/Services/LogAggregationAttributeOperators.test.ts +109 -0
  227. package/Tests/Server/Services/MetricAggregationAttributeOperators.test.ts +170 -0
  228. package/Tests/Server/Services/MonitorTemplateServiceNetworkDeviceSync.test.ts +383 -0
  229. package/Tests/Server/Services/NetworkDeviceAutoImportRuleEngineService.test.ts +997 -3
  230. package/Tests/Server/Services/NetworkDeviceAutoImportRuleService.test.ts +830 -0
  231. package/Tests/Server/Services/NetworkDeviceAutoMonitorLifecycle.test.ts +528 -0
  232. package/Tests/Server/Services/NetworkDeviceDiscoveryScanService.test.ts +3141 -1
  233. package/Tests/Server/Services/NetworkDeviceRegisteredHostnames.test.ts +1023 -0
  234. package/Tests/Server/Services/NetworkDeviceSiteAssignmentRuleSkip.test.ts +728 -0
  235. package/Tests/Server/Services/NetworkInterfaceServiceUpsert.test.ts +795 -0
  236. package/Tests/Server/Services/NetworkSiteRollupPolicyAndMaintenance.test.ts +903 -0
  237. package/Tests/Server/Services/NetworkSiteService.test.ts +165 -24
  238. package/Tests/Server/Services/ProjectServiceChangePlan.test.ts +5 -3
  239. package/Tests/Server/Services/ProjectServiceCreateSubscriptionStarted.test.ts +5 -2
  240. package/Tests/Server/Services/ResourceCreationFeedWrites.test.ts +304 -0
  241. package/Tests/Server/Services/ResourceFeedServices.test.ts +269 -0
  242. package/Tests/Server/Services/ResourceOwnerFeedWrites.test.ts +245 -0
  243. package/Tests/Server/Services/SecurityEventLastErrorColumnWidth.test.ts +792 -0
  244. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +483 -0
  245. package/Tests/Server/Services/ThreatIntelFeedService.test.ts +351 -0
  246. package/Tests/Server/Services/ThreatIntelIndicatorService.test.ts +366 -0
  247. package/Tests/Server/Services/TraceAggregationAttributeOperators.test.ts +507 -0
  248. package/Tests/Server/Services/UserTwoFactorBackupCodeGenerateIfNone.test.ts +705 -0
  249. package/Tests/Server/Services/WorkspaceNotificationRuleOnCallDutyPolicy.test.ts +306 -0
  250. package/Tests/Server/Types/Database/AggregateResultUtil.test.ts +386 -0
  251. package/Tests/Server/Types/Database/Permissions/SelectRejectionMessageContract.test.ts +424 -0
  252. package/Tests/Server/Types/Database/QueryHelperWildcard.test.ts +142 -0
  253. package/Tests/Server/Types/Workflow/Components/ApiComponentPrivateNetwork.test.ts +163 -0
  254. package/Tests/Server/Types/Workflow/Components/JavaScriptPrivateNetwork.test.ts +124 -0
  255. package/Tests/Server/Utils/AI/CodeFixAgentCompletion.test.ts +5 -0
  256. package/Tests/Server/Utils/AI/InvestigationGrader.test.ts +39 -1
  257. package/Tests/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.test.ts +338 -0
  258. package/Tests/Server/Utils/AnalyticsDatabase/StatementGeneratorWildcard.test.ts +383 -0
  259. package/Tests/Server/Utils/Marketing/EmittedMarketingEvent.ts +23 -0
  260. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +51 -0
  261. package/Tests/Server/Utils/Monitor/Criteria/SyntheticMonitorCriteria.test.ts +259 -0
  262. package/Tests/Server/Utils/Monitor/MonitorCriteriaEvaluatorPerSeriesFanout.test.ts +557 -0
  263. package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +12 -2
  264. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +404 -0
  265. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +8 -2
  266. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +125 -98
  267. package/Tests/Server/Utils/Monitor/PerEntityCriteriaFanOut.test.ts +444 -0
  268. package/Tests/Server/Utils/Monitor/PerSeriesSecondEntityAlerting.test.ts +1112 -0
  269. package/Tests/Server/Utils/NetworkDevice/DeviceHealthAggregation.test.ts +717 -0
  270. package/Tests/Server/Utils/NetworkDevice/RulePatternValidator.test.ts +78 -0
  271. package/Tests/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.test.ts +363 -0
  272. package/Tests/Server/Utils/OfflineAssetHygiene.test.ts +35 -0
  273. package/Tests/Server/Utils/OnCallNotificationContext.test.ts +908 -0
  274. package/Tests/Server/Utils/PrivateNetworkWebhookConfig.test.ts +423 -0
  275. package/Tests/Server/Utils/ResourceFeed/ResourceFeedUtil.test.ts +191 -0
  276. package/Tests/Server/Utils/SSRFProtectionPrivateNetwork.test.ts +597 -0
  277. package/Tests/Server/Utils/SecurityEvent/ConnectorErrorMessage.test.ts +819 -0
  278. package/Tests/Server/Utils/SecurityEvent/DetectionRuleEvaluator.test.ts +381 -0
  279. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPoller.test.ts +417 -0
  280. package/Tests/Server/Utils/SecurityEvent/GoogleSecOpsPollerFailureTaxonomy.test.ts +819 -0
  281. package/Tests/Server/Utils/SecurityEvent/SecurityEventAlerting.test.ts +246 -0
  282. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.test.ts +282 -0
  283. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.test.ts +312 -0
  284. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.test.ts +854 -0
  285. package/Tests/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.test.ts +437 -0
  286. package/Tests/Server/Utils/StartServerErrorStatus.test.ts +225 -0
  287. package/Tests/Server/Utils/StatusPage/MonitorRulePatternValidator.test.ts +62 -0
  288. package/Tests/Server/Utils/StatusPageSubscriberWebhookPrivateNetwork.test.ts +119 -0
  289. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +542 -0
  290. package/Tests/Server/Utils/TwoFactorBackupCodeNotification.test.ts +272 -0
  291. package/Tests/Server/Utils/VM/VMRunnerPrivateNetworkWiring.test.ts +111 -0
  292. package/Tests/Server/Utils/VendorAssets.test.ts +117 -0
  293. package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +101 -4
  294. package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstallStateDiagnostics.test.ts +922 -0
  295. package/Tests/Server/Utils/Workspace/MicrosoftTeamsRosterDiagnosticMessages.test.ts +642 -0
  296. package/Tests/Server/Views/OnCallAcknowledgePage.test.ts +430 -0
  297. package/Tests/Types/API/URLQueryString.test.ts +472 -0
  298. package/Tests/Types/BaseDatabase/Wildcard.test.ts +163 -0
  299. package/Tests/Types/BaseDatabase/WildcardPattern.test.ts +149 -0
  300. package/Tests/Types/Database/DateColumnValue.test.ts +265 -0
  301. package/Tests/Types/DateToIsoStringOrNull.test.ts +67 -0
  302. package/Tests/Types/Log/LogQueryToFilter.test.ts +218 -43
  303. package/Tests/Types/Monitor/KubernetesTemplateGroupByKeys.test.ts +225 -0
  304. package/Tests/Types/Monitor/TemplateGroupByKeys.test.ts +296 -0
  305. package/Tests/Types/NetworkAutomation/RuleRunResult.test.ts +102 -0
  306. package/Tests/Types/NetworkAutomation/RuleRunResultDescribe.test.ts +145 -0
  307. package/Tests/Types/NetworkSite/SiteHealthRollupPolicy.test.ts +58 -0
  308. package/Tests/Types/SerializableObjectDictionaryImportCycle.test.ts +15 -0
  309. package/Tests/Types/Telemetry/TelemetrySearchQuery.test.ts +620 -0
  310. package/Tests/Types/WhatsApp/WhatsAppTemplates.test.ts +110 -0
  311. package/Tests/Types/Workspace/NotificationRuleConditionUtil.test.ts +76 -6
  312. package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +16 -4
  313. package/Tests/Types/Workspace/NotificationRules/OnCallDutyPolicyConditions.test.ts +669 -0
  314. package/Tests/UI/Components/DictionaryFilterOperatorWildcard.test.ts +175 -0
  315. package/Tests/UI/Components/IconOpticalSize.test.tsx +377 -0
  316. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardInstallGuidance.test.tsx +332 -0
  317. package/Tests/UI/MicrosoftTeams/MicrosoftTeamsInstallGuidanceContent.test.tsx +643 -0
  318. package/Tests/Utils/Monitor/InterfaceInventoryUtil.test.ts +824 -0
  319. package/Tests/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.test.ts +626 -0
  320. package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +718 -0
  321. package/Tests/Utils/NetworkDevice/DeviceHealthStateUtil.test.ts +59 -0
  322. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +287 -2
  323. package/Tests/Utils/NetworkDiscovery/DiscoveryImportEligibility.test.ts +73 -0
  324. package/Tests/Utils/NetworkDiscovery/PingMonitorBuilder.test.ts +317 -0
  325. package/Tests/Utils/NetworkDiscovery/RescanIntervalUtil.test.ts +262 -0
  326. package/Tests/Utils/NetworkDiscovery/ScanModeUtil.test.ts +474 -0
  327. package/Tests/Utils/NetworkDiscovery/SnmpScanConfigUtil.test.ts +2442 -0
  328. package/Tests/Utils/NetworkSite/SiteMaintenanceUtil.test.ts +188 -0
  329. package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +522 -0
  330. package/Tests/Utils/NetworkSite/SiteUptimeUtil.test.ts +694 -0
  331. package/Tests/Utils/SecurityEvent/ThreatIntel/StixPatternParser.test.ts +281 -0
  332. package/Tests/Utils/Telemetry/CrossSignalScope.test.ts +87 -67
  333. package/Types/API/URL.ts +45 -10
  334. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +8 -0
  335. package/Types/BaseDatabase/NotWildcard.ts +86 -0
  336. package/Types/BaseDatabase/Wildcard.ts +89 -0
  337. package/Types/BaseDatabase/WildcardPattern.ts +176 -0
  338. package/Types/Database/DateColumnValue.ts +184 -0
  339. package/Types/Database/TableColumn.ts +40 -5
  340. package/Types/Date.ts +37 -0
  341. package/Types/Email/EmailTemplateType.ts +1 -0
  342. package/Types/JSON.ts +8 -0
  343. package/Types/Log/LogQueryToFilter.ts +167 -129
  344. package/Types/Monitor/DockerAlertTemplates.ts +43 -12
  345. package/Types/Monitor/HostAlertTemplates.ts +31 -3
  346. package/Types/Monitor/KubernetesAlertTemplates.ts +98 -0
  347. package/Types/Monitor/MonitorStep.ts +49 -0
  348. package/Types/Monitor/PodmanAlertTemplates.ts +39 -12
  349. package/Types/Monitor/SnmpMonitor/CdpNeighbor.ts +14 -0
  350. package/Types/Monitor/SnmpMonitor/LldpNeighbor.ts +11 -0
  351. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +11 -4
  352. package/Types/NetworkAutomation/RuleRunResult.ts +191 -2
  353. package/Types/NetworkSite/SiteHealthRollupPolicy.ts +96 -0
  354. package/Types/Permission.ts +411 -0
  355. package/Types/Probe/ProbeApiIngestResponse.ts +42 -0
  356. package/Types/SecurityEvent/ThreatIntelConstants.ts +118 -0
  357. package/Types/SerializableObjectDictionary.ts +8 -0
  358. package/Types/Telemetry/SourceMap.ts +56 -0
  359. package/Types/Telemetry/TelemetrySearchQuery.ts +949 -0
  360. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +12 -1
  361. package/UI/Components/Dictionary/DictionaryFilterOperator.ts +83 -0
  362. package/UI/Components/Icon/Icon.tsx +28 -1
  363. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +26 -4
  364. package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +34 -16
  365. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +15 -2
  366. package/Utils/Metrics/MetricExplorerUrl.ts +77 -15
  367. package/Utils/Monitor/InterfaceInventoryUtil.ts +251 -0
  368. package/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.ts +333 -0
  369. package/Utils/Monitor/NetworkTopologyUtil.ts +249 -28
  370. package/Utils/NetworkDevice/DeviceHealthStateUtil.ts +14 -6
  371. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +2 -0
  372. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +49 -18
  373. package/Utils/NetworkDiscovery/PingMonitorBuilder.ts +215 -0
  374. package/Utils/NetworkDiscovery/RescanIntervalUtil.ts +148 -0
  375. package/Utils/NetworkDiscovery/ScanModeUtil.ts +105 -0
  376. package/Utils/NetworkDiscovery/SnmpScanConfigUtil.ts +827 -0
  377. package/Utils/NetworkSite/SiteMaintenanceUtil.ts +110 -0
  378. package/Utils/NetworkSite/SiteStatusRollupUtil.ts +350 -19
  379. package/Utils/NetworkSite/SiteUptimeUtil.ts +422 -21
  380. package/Utils/SecurityEvent/ThreatIntel/StixPatternParser.ts +383 -0
  381. package/Utils/Telemetry/CrossSignalScope.ts +37 -39
  382. package/build/dist/Models/AnalyticsModels/Index.js +2 -0
  383. package/build/dist/Models/AnalyticsModels/Index.js.map +1 -1
  384. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +325 -0
  385. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -0
  386. package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -1
  387. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  388. package/build/dist/Models/DatabaseModels/CephClusterFeed.js +648 -0
  389. package/build/dist/Models/DatabaseModels/CephClusterFeed.js.map +1 -0
  390. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js +648 -0
  391. package/build/dist/Models/DatabaseModels/CloudResourceFeed.js.map +1 -0
  392. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +11 -0
  393. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  394. package/build/dist/Models/DatabaseModels/DetectionRule.js +9 -3
  395. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  396. package/build/dist/Models/DatabaseModels/DockerHostFeed.js +648 -0
  397. package/build/dist/Models/DatabaseModels/DockerHostFeed.js.map +1 -0
  398. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js +648 -0
  399. package/build/dist/Models/DatabaseModels/DockerSwarmClusterFeed.js.map +1 -0
  400. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +9 -3
  401. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  402. package/build/dist/Models/DatabaseModels/HostFeed.js +648 -0
  403. package/build/dist/Models/DatabaseModels/HostFeed.js.map +1 -0
  404. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -1
  405. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  406. package/build/dist/Models/DatabaseModels/Index.js +22 -0
  407. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  408. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js +648 -0
  409. package/build/dist/Models/DatabaseModels/KubernetesClusterFeed.js.map +1 -0
  410. package/build/dist/Models/DatabaseModels/Monitor.js +81 -0
  411. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  412. package/build/dist/Models/DatabaseModels/NetworkDevice.js +103 -7
  413. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  414. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +91 -6
  415. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  416. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js +276 -31
  417. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  418. package/build/dist/Models/DatabaseModels/NetworkSite.js +124 -1
  419. package/build/dist/Models/DatabaseModels/NetworkSite.js.map +1 -1
  420. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js +1 -0
  421. package/build/dist/Models/DatabaseModels/OnCallDutyPolicyExecutionLog.js.map +1 -1
  422. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js +648 -0
  423. package/build/dist/Models/DatabaseModels/PodmanHostFeed.js.map +1 -0
  424. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js +648 -0
  425. package/build/dist/Models/DatabaseModels/ProxmoxClusterFeed.js.map +1 -0
  426. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +66 -0
  427. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  428. package/build/dist/Models/DatabaseModels/ServiceFeed.js +648 -0
  429. package/build/dist/Models/DatabaseModels/ServiceFeed.js.map +1 -0
  430. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js +496 -0
  431. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js.map +1 -0
  432. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +800 -0
  433. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -0
  434. package/build/dist/Models/DatabaseModels/UserOnCallLog.js +1 -0
  435. package/build/dist/Models/DatabaseModels/UserOnCallLog.js.map +1 -1
  436. package/build/dist/Models/DatabaseModels/UserTotpAuth.js +1 -0
  437. package/build/dist/Models/DatabaseModels/UserTotpAuth.js.map +1 -1
  438. package/build/dist/Models/DatabaseModels/UserWebAuthn.js +1 -0
  439. package/build/dist/Models/DatabaseModels/UserWebAuthn.js.map +1 -1
  440. package/build/dist/Server/API/AlertAPI.js +18 -1
  441. package/build/dist/Server/API/AlertAPI.js.map +1 -1
  442. package/build/dist/Server/API/BaseAPI.js +8 -1
  443. package/build/dist/Server/API/BaseAPI.js.map +1 -1
  444. package/build/dist/Server/API/IncidentAPI.js +35 -1
  445. package/build/dist/Server/API/IncidentAPI.js.map +1 -1
  446. package/build/dist/Server/API/IncidentEpisodeAPI.js +18 -1
  447. package/build/dist/Server/API/IncidentEpisodeAPI.js.map +1 -1
  448. package/build/dist/Server/API/MicrosoftTeamsAPI.js +30 -2
  449. package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
  450. package/build/dist/Server/API/ScheduledMaintenanceAPI.js +18 -1
  451. package/build/dist/Server/API/ScheduledMaintenanceAPI.js.map +1 -1
  452. package/build/dist/Server/API/SlackAPI.js +45 -0
  453. package/build/dist/Server/API/SlackAPI.js.map +1 -1
  454. package/build/dist/Server/API/TelemetryAPI.js +100 -35
  455. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  456. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js +64 -59
  457. package/build/dist/Server/API/UserOnCallLogTimelineAPI.js.map +1 -1
  458. package/build/dist/Server/API/UserTotpAuthAPI.js +65 -1
  459. package/build/dist/Server/API/UserTotpAuthAPI.js.map +1 -1
  460. package/build/dist/Server/API/UserWebAuthnAPI.js +42 -1
  461. package/build/dist/Server/API/UserWebAuthnAPI.js.map +1 -1
  462. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js +26 -0
  463. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787923136162-MigrationName.js.map +1 -0
  464. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js +22 -0
  465. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789600000000-AddAutoProvisionedNetworkDeviceMonitors.js.map +1 -0
  466. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js +88 -0
  467. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789700000000-AddNetworkScaleIndexes.js.map +1 -0
  468. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js +39 -0
  469. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789800000000-WidenSecurityEventLastErrorColumns.js.map +1 -0
  470. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js +34 -0
  471. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789900000000-AddNetworkSiteRollupPolicyAndMaintenance.js.map +1 -0
  472. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js +32 -0
  473. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000000-AddTelemetrySourceMap.js.map +1 -0
  474. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js +61 -0
  475. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790000000001-AddSnmpConfigsToNetworkDeviceDiscoveryScan.js.map +1 -0
  476. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js +23 -0
  477. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790003445000-AddSnmpEnabledToNetworkDeviceDiscoveryScan.js.map +1 -0
  478. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js +179 -0
  479. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790100000000-AddResourceActivityFeeds.js.map +1 -0
  480. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +18 -0
  481. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  482. package/build/dist/Server/Middleware/IdentityRateLimit.js +40 -3
  483. package/build/dist/Server/Middleware/IdentityRateLimit.js.map +1 -1
  484. package/build/dist/Server/Services/AIService.js +177 -30
  485. package/build/dist/Server/Services/AIService.js.map +1 -1
  486. package/build/dist/Server/Services/CephClusterFeedService.js +89 -0
  487. package/build/dist/Server/Services/CephClusterFeedService.js.map +1 -0
  488. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +27 -3
  489. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  490. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +21 -0
  491. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  492. package/build/dist/Server/Services/CephClusterOwnerTeamService.js +120 -0
  493. package/build/dist/Server/Services/CephClusterOwnerTeamService.js.map +1 -1
  494. package/build/dist/Server/Services/CephClusterOwnerUserService.js +113 -0
  495. package/build/dist/Server/Services/CephClusterOwnerUserService.js.map +1 -1
  496. package/build/dist/Server/Services/CephClusterService.js +175 -1
  497. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  498. package/build/dist/Server/Services/CloudResourceFeedService.js +89 -0
  499. package/build/dist/Server/Services/CloudResourceFeedService.js.map +1 -0
  500. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +27 -3
  501. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  502. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +28 -3
  503. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  504. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js +120 -0
  505. package/build/dist/Server/Services/CloudResourceOwnerTeamService.js.map +1 -1
  506. package/build/dist/Server/Services/CloudResourceOwnerUserService.js +113 -0
  507. package/build/dist/Server/Services/CloudResourceOwnerUserService.js.map +1 -1
  508. package/build/dist/Server/Services/CloudResourceService.js +177 -1
  509. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  510. package/build/dist/Server/Services/DatabaseService.js +201 -0
  511. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  512. package/build/dist/Server/Services/DockerHostFeedService.js +89 -0
  513. package/build/dist/Server/Services/DockerHostFeedService.js.map +1 -0
  514. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +27 -3
  515. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  516. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +21 -0
  517. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  518. package/build/dist/Server/Services/DockerHostOwnerTeamService.js +120 -0
  519. package/build/dist/Server/Services/DockerHostOwnerTeamService.js.map +1 -1
  520. package/build/dist/Server/Services/DockerHostOwnerUserService.js +113 -0
  521. package/build/dist/Server/Services/DockerHostOwnerUserService.js.map +1 -1
  522. package/build/dist/Server/Services/DockerHostService.js +177 -1
  523. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  524. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js +90 -0
  525. package/build/dist/Server/Services/DockerSwarmClusterFeedService.js.map +1 -0
  526. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +27 -3
  527. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  528. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +21 -0
  529. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  530. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js +120 -0
  531. package/build/dist/Server/Services/DockerSwarmClusterOwnerTeamService.js.map +1 -1
  532. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js +113 -0
  533. package/build/dist/Server/Services/DockerSwarmClusterOwnerUserService.js.map +1 -1
  534. package/build/dist/Server/Services/DockerSwarmClusterService.js +175 -1
  535. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  536. package/build/dist/Server/Services/EnterpriseLicenseService.js +40 -30
  537. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  538. package/build/dist/Server/Services/ExceptionAggregationService.js +8 -2
  539. package/build/dist/Server/Services/ExceptionAggregationService.js.map +1 -1
  540. package/build/dist/Server/Services/HostFeedService.js +89 -0
  541. package/build/dist/Server/Services/HostFeedService.js.map +1 -0
  542. package/build/dist/Server/Services/HostLabelRuleEngineService.js +27 -3
  543. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  544. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +21 -0
  545. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  546. package/build/dist/Server/Services/HostOwnerTeamService.js +120 -0
  547. package/build/dist/Server/Services/HostOwnerTeamService.js.map +1 -1
  548. package/build/dist/Server/Services/HostOwnerUserService.js +113 -0
  549. package/build/dist/Server/Services/HostOwnerUserService.js.map +1 -1
  550. package/build/dist/Server/Services/HostService.js +175 -1
  551. package/build/dist/Server/Services/HostService.js.map +1 -1
  552. package/build/dist/Server/Services/IncidentService.js +10 -0
  553. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  554. package/build/dist/Server/Services/Index.js +24 -0
  555. package/build/dist/Server/Services/Index.js.map +1 -1
  556. package/build/dist/Server/Services/KubernetesClusterFeedService.js +89 -0
  557. package/build/dist/Server/Services/KubernetesClusterFeedService.js.map +1 -0
  558. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +27 -3
  559. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  560. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +21 -0
  561. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  562. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js +120 -0
  563. package/build/dist/Server/Services/KubernetesClusterOwnerTeamService.js.map +1 -1
  564. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js +113 -0
  565. package/build/dist/Server/Services/KubernetesClusterOwnerUserService.js.map +1 -1
  566. package/build/dist/Server/Services/KubernetesClusterService.js +177 -1
  567. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  568. package/build/dist/Server/Services/LogAggregationService.js +19 -196
  569. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  570. package/build/dist/Server/Services/MetricAggregationService.js +59 -0
  571. package/build/dist/Server/Services/MetricAggregationService.js.map +1 -1
  572. package/build/dist/Server/Services/MonitorService.js +115 -13
  573. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  574. package/build/dist/Server/Services/MonitorTemplateService.js +86 -0
  575. package/build/dist/Server/Services/MonitorTemplateService.js.map +1 -1
  576. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +561 -67
  577. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  578. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +130 -16
  579. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  580. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js +850 -8
  581. package/build/dist/Server/Services/NetworkDeviceDiscoveryScanService.js.map +1 -1
  582. package/build/dist/Server/Services/NetworkDeviceService.js +594 -5
  583. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  584. package/build/dist/Server/Services/NetworkInterfaceService.js +306 -0
  585. package/build/dist/Server/Services/NetworkInterfaceService.js.map +1 -1
  586. package/build/dist/Server/Services/NetworkSiteService.js +408 -47
  587. package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
  588. package/build/dist/Server/Services/PodmanHostFeedService.js +89 -0
  589. package/build/dist/Server/Services/PodmanHostFeedService.js.map +1 -0
  590. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +27 -3
  591. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  592. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +21 -0
  593. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  594. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js +120 -0
  595. package/build/dist/Server/Services/PodmanHostOwnerTeamService.js.map +1 -1
  596. package/build/dist/Server/Services/PodmanHostOwnerUserService.js +113 -0
  597. package/build/dist/Server/Services/PodmanHostOwnerUserService.js.map +1 -1
  598. package/build/dist/Server/Services/PodmanHostService.js +177 -1
  599. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  600. package/build/dist/Server/Services/ProjectService.js +40 -30
  601. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  602. package/build/dist/Server/Services/ProxmoxClusterFeedService.js +89 -0
  603. package/build/dist/Server/Services/ProxmoxClusterFeedService.js.map +1 -0
  604. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +27 -3
  605. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  606. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +21 -0
  607. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  608. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js +120 -0
  609. package/build/dist/Server/Services/ProxmoxClusterOwnerTeamService.js.map +1 -1
  610. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js +113 -0
  611. package/build/dist/Server/Services/ProxmoxClusterOwnerUserService.js.map +1 -1
  612. package/build/dist/Server/Services/ProxmoxClusterService.js +175 -1
  613. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  614. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +56 -0
  615. package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
  616. package/build/dist/Server/Services/ServiceFeedService.js +89 -0
  617. package/build/dist/Server/Services/ServiceFeedService.js.map +1 -0
  618. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +27 -3
  619. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  620. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +24 -0
  621. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  622. package/build/dist/Server/Services/ServiceOwnerTeamService.js +120 -0
  623. package/build/dist/Server/Services/ServiceOwnerTeamService.js.map +1 -1
  624. package/build/dist/Server/Services/ServiceOwnerUserService.js +113 -0
  625. package/build/dist/Server/Services/ServiceOwnerUserService.js.map +1 -1
  626. package/build/dist/Server/Services/ServiceService.js +173 -2
  627. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  628. package/build/dist/Server/Services/StatusPageSubscriberService.js +7 -0
  629. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  630. package/build/dist/Server/Services/TelemetryAttributeService.js +9 -3
  631. package/build/dist/Server/Services/TelemetryAttributeService.js.map +1 -1
  632. package/build/dist/Server/Services/TelemetrySourceMapService.js +265 -0
  633. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -0
  634. package/build/dist/Server/Services/ThreatIntelFeedService.js +157 -0
  635. package/build/dist/Server/Services/ThreatIntelFeedService.js.map +1 -0
  636. package/build/dist/Server/Services/ThreatIntelIndicatorService.js +276 -0
  637. package/build/dist/Server/Services/ThreatIntelIndicatorService.js.map +1 -0
  638. package/build/dist/Server/Services/TraceAggregationService.js +62 -6
  639. package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
  640. package/build/dist/Server/Services/UserService.js +22 -13
  641. package/build/dist/Server/Services/UserService.js.map +1 -1
  642. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js +120 -0
  643. package/build/dist/Server/Services/UserTwoFactorBackupCodeService.js.map +1 -1
  644. package/build/dist/Server/Services/UserWebhookService.js +11 -2
  645. package/build/dist/Server/Services/UserWebhookService.js.map +1 -1
  646. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +12 -1
  647. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  648. package/build/dist/Server/Types/Database/AggregateBy.js +2 -0
  649. package/build/dist/Server/Types/Database/AggregateBy.js.map +1 -0
  650. package/build/dist/Server/Types/Database/AggregateResultUtil.js +90 -0
  651. package/build/dist/Server/Types/Database/AggregateResultUtil.js.map +1 -0
  652. package/build/dist/Server/Types/Database/JSONColumnQuery.js +14 -0
  653. package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -1
  654. package/build/dist/Server/Types/Database/QueryHelper.js +42 -0
  655. package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
  656. package/build/dist/Server/Types/Database/QueryUtil.js +18 -0
  657. package/build/dist/Server/Types/Database/QueryUtil.js.map +1 -1
  658. package/build/dist/Server/Types/Workflow/Components/API/Utils.js +10 -1
  659. package/build/dist/Server/Types/Workflow/Components/API/Utils.js.map +1 -1
  660. package/build/dist/Server/Types/Workflow/Components/JavaScript.js +8 -0
  661. package/build/dist/Server/Types/Workflow/Components/JavaScript.js.map +1 -1
  662. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js +8 -0
  663. package/build/dist/Server/Utils/AI/CodeFix/CodeFixAgentCompletion.js.map +1 -1
  664. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +15 -0
  665. package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js.map +1 -1
  666. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js +266 -0
  667. package/build/dist/Server/Utils/AnalyticsDatabase/AttributeFilterStatement.js.map +1 -0
  668. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +134 -0
  669. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  670. package/build/dist/Server/Utils/DataSource/HttpFetch.js +8 -0
  671. package/build/dist/Server/Utils/DataSource/HttpFetch.js.map +1 -1
  672. package/build/dist/Server/Utils/Database/RelationIdUtil.js +31 -0
  673. package/build/dist/Server/Utils/Database/RelationIdUtil.js.map +1 -1
  674. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +26 -8
  675. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -1
  676. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +42 -17
  677. package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
  678. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +9 -1
  679. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  680. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js +15 -2
  681. package/build/dist/Server/Utils/Monitor/Criteria/SyntheticMonitor.js.map +1 -1
  682. package/build/dist/Server/Utils/Monitor/MonitorAlert.js +386 -271
  683. package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
  684. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js +278 -64
  685. package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.js.map +1 -1
  686. package/build/dist/Server/Utils/Monitor/MonitorIncident.js +469 -350
  687. package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
  688. package/build/dist/Server/Utils/Monitor/MonitorResource.js +183 -44
  689. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  690. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +46 -3
  691. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  692. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +18 -91
  693. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  694. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js +194 -0
  695. package/build/dist/Server/Utils/Monitor/PerEntityCriteriaFanOut.js.map +1 -0
  696. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js +332 -0
  697. package/build/dist/Server/Utils/NetworkDevice/DeviceHealthAggregation.js.map +1 -0
  698. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js +279 -0
  699. package/build/dist/Server/Utils/NetworkSite/NetworkSiteMaintenanceSuppression.js.map +1 -0
  700. package/build/dist/Server/Utils/OnCallNotificationContext.js +415 -0
  701. package/build/dist/Server/Utils/OnCallNotificationContext.js.map +1 -0
  702. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js +424 -0
  703. package/build/dist/Server/Utils/PrivateNetworkWebhookConfig.js.map +1 -0
  704. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js +108 -0
  705. package/build/dist/Server/Utils/ResourceFeed/ResourceFeedUtil.js.map +1 -0
  706. package/build/dist/Server/Utils/Response.js +12 -1
  707. package/build/dist/Server/Utils/Response.js.map +1 -1
  708. package/build/dist/Server/Utils/SSRFProtection.js +160 -58
  709. package/build/dist/Server/Utils/SSRFProtection.js.map +1 -1
  710. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js +89 -0
  711. package/build/dist/Server/Utils/SecurityEvent/ConnectorErrorMessage.js.map +1 -0
  712. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js +75 -234
  713. package/build/dist/Server/Utils/SecurityEvent/DetectionRuleEvaluator.js.map +1 -1
  714. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js +41 -16
  715. package/build/dist/Server/Utils/SecurityEvent/GoogleSecOps/GoogleSecOpsPoller.js.map +1 -1
  716. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js +217 -0
  717. package/build/dist/Server/Utils/SecurityEvent/SecurityEventAlerting.js.map +1 -0
  718. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js +103 -0
  719. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/TaxiiClient.js.map +1 -0
  720. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js +168 -0
  721. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelEnricher.js.map +1 -0
  722. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js +527 -0
  723. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelFeedPoller.js.map +1 -0
  724. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js +376 -0
  725. package/build/dist/Server/Utils/SecurityEvent/ThreatIntel/ThreatIntelMatcher.js.map +1 -0
  726. package/build/dist/Server/Utils/StartServer.js +70 -44
  727. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  728. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js +3 -0
  729. package/build/dist/Server/Utils/StatusPageSubscriberWebhook.js.map +1 -1
  730. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +327 -0
  731. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -0
  732. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js +84 -0
  733. package/build/dist/Server/Utils/TwoFactorBackupCodeNotification.js.map +1 -0
  734. package/build/dist/Server/Utils/VM/VMAPI.js.map +1 -1
  735. package/build/dist/Server/Utils/VM/VMRunner.js +10 -1
  736. package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
  737. package/build/dist/Server/Utils/VendorAssets.js +29 -0
  738. package/build/dist/Server/Utils/VendorAssets.js.map +1 -1
  739. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +121 -6
  740. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  741. package/build/dist/Types/API/URL.js +40 -10
  742. package/build/dist/Types/API/URL.js.map +1 -1
  743. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +8 -0
  744. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js.map +1 -1
  745. package/build/dist/Types/BaseDatabase/NotWildcard.js +72 -0
  746. package/build/dist/Types/BaseDatabase/NotWildcard.js.map +1 -0
  747. package/build/dist/Types/BaseDatabase/Wildcard.js +75 -0
  748. package/build/dist/Types/BaseDatabase/Wildcard.js.map +1 -0
  749. package/build/dist/Types/BaseDatabase/WildcardPattern.js +137 -0
  750. package/build/dist/Types/BaseDatabase/WildcardPattern.js.map +1 -0
  751. package/build/dist/Types/Database/DateColumnValue.js +125 -0
  752. package/build/dist/Types/Database/DateColumnValue.js.map +1 -0
  753. package/build/dist/Types/Database/TableColumn.js +18 -2
  754. package/build/dist/Types/Database/TableColumn.js.map +1 -1
  755. package/build/dist/Types/Date.js +31 -0
  756. package/build/dist/Types/Date.js.map +1 -1
  757. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  758. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  759. package/build/dist/Types/JSON.js +2 -0
  760. package/build/dist/Types/JSON.js.map +1 -1
  761. package/build/dist/Types/Log/LogQueryToFilter.js +111 -108
  762. package/build/dist/Types/Log/LogQueryToFilter.js.map +1 -1
  763. package/build/dist/Types/Monitor/DockerAlertTemplates.js +40 -16
  764. package/build/dist/Types/Monitor/DockerAlertTemplates.js.map +1 -1
  765. package/build/dist/Types/Monitor/HostAlertTemplates.js +29 -7
  766. package/build/dist/Types/Monitor/HostAlertTemplates.js.map +1 -1
  767. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js +98 -4
  768. package/build/dist/Types/Monitor/KubernetesAlertTemplates.js.map +1 -1
  769. package/build/dist/Types/Monitor/MonitorStep.js +40 -0
  770. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  771. package/build/dist/Types/Monitor/PodmanAlertTemplates.js +36 -16
  772. package/build/dist/Types/Monitor/PodmanAlertTemplates.js.map +1 -1
  773. package/build/dist/Types/NetworkAutomation/RuleRunResult.js +90 -0
  774. package/build/dist/Types/NetworkAutomation/RuleRunResult.js.map +1 -1
  775. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js +84 -0
  776. package/build/dist/Types/NetworkSite/SiteHealthRollupPolicy.js.map +1 -0
  777. package/build/dist/Types/Permission.js +354 -0
  778. package/build/dist/Types/Permission.js.map +1 -1
  779. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js +100 -0
  780. package/build/dist/Types/SecurityEvent/ThreatIntelConstants.js.map +1 -0
  781. package/build/dist/Types/SerializableObjectDictionary.js +8 -0
  782. package/build/dist/Types/SerializableObjectDictionary.js.map +1 -1
  783. package/build/dist/Types/Telemetry/SourceMap.js +9 -0
  784. package/build/dist/Types/Telemetry/SourceMap.js.map +1 -0
  785. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js +661 -0
  786. package/build/dist/Types/Telemetry/TelemetrySearchQuery.js.map +1 -0
  787. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +12 -1
  788. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  789. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js +67 -0
  790. package/build/dist/UI/Components/Dictionary/DictionaryFilterOperator.js.map +1 -1
  791. package/build/dist/UI/Components/Icon/Icon.js +28 -1
  792. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  793. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +25 -4
  794. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  795. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +36 -16
  796. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
  797. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +14 -2
  798. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  799. package/build/dist/Utils/Metrics/MetricExplorerUrl.js +54 -9
  800. package/build/dist/Utils/Metrics/MetricExplorerUrl.js.map +1 -1
  801. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js +128 -0
  802. package/build/dist/Utils/Monitor/InterfaceInventoryUtil.js.map +1 -0
  803. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js +190 -0
  804. package/build/dist/Utils/Monitor/NetworkDeviceMonitorTemplateUtil.js.map +1 -0
  805. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +206 -28
  806. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  807. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js +14 -7
  808. package/build/dist/Utils/NetworkDevice/DeviceHealthStateUtil.js.map +1 -1
  809. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  810. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +34 -18
  811. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  812. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js +163 -0
  813. package/build/dist/Utils/NetworkDiscovery/PingMonitorBuilder.js.map +1 -0
  814. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js +99 -0
  815. package/build/dist/Utils/NetworkDiscovery/RescanIntervalUtil.js.map +1 -0
  816. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js +85 -0
  817. package/build/dist/Utils/NetworkDiscovery/ScanModeUtil.js.map +1 -0
  818. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js +560 -0
  819. package/build/dist/Utils/NetworkDiscovery/SnmpScanConfigUtil.js.map +1 -0
  820. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js +56 -0
  821. package/build/dist/Utils/NetworkSite/SiteMaintenanceUtil.js.map +1 -0
  822. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +185 -10
  823. package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
  824. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js +248 -21
  825. package/build/dist/Utils/NetworkSite/SiteUptimeUtil.js.map +1 -1
  826. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js +255 -0
  827. package/build/dist/Utils/SecurityEvent/ThreatIntel/StixPatternParser.js.map +1 -0
  828. package/build/dist/Utils/Telemetry/CrossSignalScope.js +27 -30
  829. package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
  830. package/package.json +2 -1
  831. package/Tests/Types/Log/LogQueryParser.test.ts +0 -186
  832. package/Types/Log/LogQueryParser.ts +0 -252
  833. package/build/dist/Types/Log/LogQueryParser.js +0 -200
  834. package/build/dist/Types/Log/LogQueryParser.js.map +0 -1
@@ -10,15 +10,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import NetworkDeviceAutoImportRuleService from "./NetworkDeviceAutoImportRuleService";
11
11
  import NetworkDeviceDiscoveryScanService from "./NetworkDeviceDiscoveryScanService";
12
12
  import NetworkDeviceService from "./NetworkDeviceService";
13
+ import MonitorService from "./MonitorService";
14
+ import MonitorTemplateService from "./MonitorTemplateService";
13
15
  import BadDataException from "../../Types/Exception/BadDataException";
14
16
  import LIMIT_MAX from "../../Types/Database/LimitMax";
17
+ import ObjectID from "../../Types/ObjectID";
15
18
  import OneUptimeDate from "../../Types/Date";
16
19
  import SortOrder from "../../Types/BaseDatabase/SortOrder";
20
+ import MonitorType from "../../Types/Monitor/MonitorType";
17
21
  import { MAX_MATCHED_IP_SAMPLE, } from "../../Types/NetworkAutomation/RuleRunResult";
18
22
  import AutoImportRuleMatcher from "../../Utils/NetworkDiscovery/AutoImportRuleMatcher";
19
23
  import { buildFallbackDeviceName, buildNetworkDeviceFromDiscoveredHost, } from "../../Utils/NetworkDiscovery/DiscoveredDeviceBuilder";
20
24
  import { normalizeDiscoveredHosts } from "../../Utils/NetworkDiscovery/DiscoveredHostUtil";
25
+ import { monitoringMethodForDiscoveredHost } from "../../Utils/NetworkDiscovery/DiscoveryImportEligibility";
26
+ import NetworkDeviceMonitoringMethod, { NetworkDeviceMonitoringMethodUtil, } from "../../Types/NetworkDevice/NetworkDeviceMonitoringMethod";
27
+ import NetworkDeviceMonitorTemplateUtil from "../../Utils/Monitor/NetworkDeviceMonitorTemplateUtil";
21
28
  import Semaphore from "../Infrastructure/Semaphore";
29
+ import QueryHelper from "../Types/Database/QueryHelper";
30
+ import NetworkDeviceHydrationUtil from "../Utils/Monitor/NetworkDeviceHydrationUtil";
22
31
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
23
32
  import logger from "../Utils/Logger";
24
33
  /*
@@ -40,8 +49,9 @@ import logger from "../Utils/Logger";
40
49
  *
41
50
  * Everything here is idempotent by construction: a device exists per
42
51
  * (project, address), recurring scans re-report the same hosts every
43
- * interval, and both paths skip hosts whose address is already registered
44
- * so seeing the same results twice creates nothing twice.
52
+ * interval, and both paths reuse hosts whose address is already registered.
53
+ * Existing devices are still reconciled for a selected template monitor,
54
+ * while provenance keys prevent the same monitor from being created twice.
45
55
  */
46
56
  /*
47
57
  * The scan columns an import copies onto an SNMP device — the same set the
@@ -52,6 +62,13 @@ import logger from "../Utils/Logger";
52
62
  */
53
63
  export const AUTO_IMPORT_SCAN_CREDENTIAL_SELECT = {
54
64
  probeId: true,
65
+ /*
66
+ * The ordered credential list, so an imported device is built with the
67
+ * config that ACTUALLY answered its address rather than with the scan's
68
+ * first one. The flattened columns below are what a scan written out of
69
+ * band carries, and are the fallback SnmpScanConfigUtil resolves to.
70
+ */
71
+ snmpConfigs: true,
55
72
  snmpVersion: true,
56
73
  snmpCommunityString: true,
57
74
  snmpPort: true,
@@ -72,6 +89,15 @@ export const AUTO_IMPORT_SCAN_CREDENTIAL_SELECT = {
72
89
  * /16" from an outage into a few paced ticks an operator can catch.
73
90
  */
74
91
  export const MAX_DEVICES_PER_AUTO_IMPORT_RUN = 500;
92
+ /*
93
+ * Monitor creates run an even broader service pipeline than device creates:
94
+ * plan limits, operational status, labels, owners, SLOs and status pages all
95
+ * participate. Keep a separate cap so reconciling an existing /16 cannot
96
+ * bypass the device cap merely because all devices are already registered.
97
+ * A truncated automatic pass leaves its marker NULL whenever it made
98
+ * progress, and the next sweep resumes from the queryable provenance keys.
99
+ */
100
+ export const MAX_MONITORS_PER_AUTO_IMPORT_RUN = 500;
75
101
  // Scans one manual "Run Now" will read, oldest results last.
76
102
  export const MAX_SCANS_PER_AUTO_IMPORT_RULE_RUN = 100;
77
103
  /*
@@ -121,7 +147,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
121
147
  * the zero-progress note at the stamp below.)
122
148
  */
123
149
  async processCompletedScan(data) {
124
- var _a, _b;
150
+ var _a, _b, _c;
125
151
  const scan = await NetworkDeviceDiscoveryScanService.findOneBy({
126
152
  query: {
127
153
  _id: data.scanId,
@@ -156,16 +182,45 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
156
182
  await this.stampScan({ scan: scan, createdIpAddresses: [] });
157
183
  return null;
158
184
  }
159
- const existingHostnames = await this.getExistingHostnames({
185
+ const existingDevices = this.getExistingDevices({
160
186
  projectId: projectId,
161
187
  cache: data.existingHostnamesByProjectId,
162
188
  });
189
+ const hasMonitorProvisioningRules = rules.some((rule) => {
190
+ return !rule.isExclusion && Boolean(rule.monitorTemplateId);
191
+ });
192
+ const existingMonitors = hasMonitorProvisioningRules
193
+ ? await this.getExistingMonitors({
194
+ projectId: projectId,
195
+ cache: data.existingMonitorsByProjectId || new Map(),
196
+ })
197
+ : this.emptyExistingMonitorProvisioningState();
198
+ const monitorTemplates = hasMonitorProvisioningRules
199
+ ? await this.loadMonitorTemplates({ projectId, rules })
200
+ : new Map();
163
201
  const result = this.emptyResult(false);
164
- const attempts = { count: 0 };
202
+ const projectBudgetKey = projectId.toString();
203
+ const attempts = data.attemptBudgetsByProjectId
204
+ ? data.attemptBudgetsByProjectId.get(projectBudgetKey) || {
205
+ deviceCount: 0,
206
+ monitorCount: 0,
207
+ }
208
+ : { deviceCount: 0, monitorCount: 0 };
209
+ /*
210
+ * A project budget is shared across every scan in one worker sweep. Keep
211
+ * the starting values so a scan reached after an earlier scan consumed
212
+ * the budget can be distinguished from a scan whose own create attempts
213
+ * all failed. The former must remain unprocessed for the next sweep; the
214
+ * latter is deliberately retired to avoid an infinite retry loop.
215
+ */
216
+ const attemptsAtStart = Object.assign({}, attempts);
217
+ (_b = data.attemptBudgetsByProjectId) === null || _b === void 0 ? void 0 : _b.set(projectBudgetKey, attempts);
165
218
  const createdIpAddresses = await this.importHostsFromScan({
166
219
  scan: scan,
167
220
  rules: rules,
168
- existingHostnames: existingHostnames,
221
+ existingDevices: existingDevices,
222
+ existingMonitors: existingMonitors,
223
+ monitorTemplates: monitorTemplates,
169
224
  result: result,
170
225
  attempts: attempts,
171
226
  isDryRun: false,
@@ -179,9 +234,17 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
179
234
  * pass, so stamping keeps the two consistent. Run Now remains the
180
235
  * deliberate way back into a stamped scan.
181
236
  */
182
- const shouldResume = result.isTruncated && result.devicesCreated > 0;
183
- if (result.isTruncated && result.devicesCreated === 0) {
184
- logger.error(`Auto-import: scan ${(_b = scan.id) === null || _b === void 0 ? void 0 : _b.toString()} hit the per-pass cap with every create failing (${result.devicesFailed} failure(s)); stamping it processed so the sweep does not retry it forever. Inspect the failures and use the rule's Run Now to retry deliberately.`, { projectId: projectId.toString() });
237
+ const inheritedBudget = result.isTruncated &&
238
+ (attemptsAtStart.deviceCount > 0 || attemptsAtStart.monitorCount > 0);
239
+ const shouldResume = result.isTruncated &&
240
+ (result.devicesCreated > 0 ||
241
+ result.monitorsCreated > 0 ||
242
+ inheritedBudget);
243
+ if (result.isTruncated &&
244
+ result.devicesCreated === 0 &&
245
+ result.monitorsCreated === 0 &&
246
+ !inheritedBudget) {
247
+ logger.error(`Auto-import: scan ${(_c = scan.id) === null || _c === void 0 ? void 0 : _c.toString()} hit a per-pass cap without making progress (${result.devicesFailed} device failure(s), ${result.monitorsFailed} monitor failure(s)); stamping it processed so the sweep does not retry it forever. Inspect the failures and use the rule's Run Now to retry deliberately.`, { projectId: projectId.toString() });
185
248
  }
186
249
  await this.stampScan({
187
250
  scan: scan,
@@ -201,6 +264,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
201
264
  * full rule set would.
202
265
  */
203
266
  async applyRuleToCompletedScans(data) {
267
+ var _a, _b;
204
268
  const rule = await NetworkDeviceAutoImportRuleService.findOneBy({
205
269
  query: {
206
270
  _id: data.ruleId,
@@ -216,12 +280,20 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
216
280
  sysDescrPattern: true,
217
281
  sysObjectIdPattern: true,
218
282
  includePingOnlyHosts: true,
283
+ monitorTemplateId: true,
219
284
  },
220
285
  props: { isRoot: true },
221
286
  });
222
287
  if (!rule) {
223
288
  throw new BadDataException("Auto-import rule not found.");
224
289
  }
290
+ if (data.expectedMonitorTemplateId !== undefined) {
291
+ const expectedTemplateId = ((_a = data.expectedMonitorTemplateId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
292
+ const currentTemplateId = ((_b = rule.monitorTemplateId) === null || _b === void 0 ? void 0 : _b.toString()) || "";
293
+ if (expectedTemplateId !== currentTemplateId) {
294
+ throw new BadDataException("This auto-import rule changed while the run was being authorized. Review it and run it again.");
295
+ }
296
+ }
225
297
  /*
226
298
  * A DISABLED rule can still be dry-run — that is the point of the dry
227
299
  * run: answer "what would this rule import" BEFORE enabling it against
@@ -283,9 +355,23 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
283
355
  data.rule,
284
356
  ...exclusionRules,
285
357
  ];
286
- const existingHostnames = await this.loadExistingHostnames(data.projectId);
358
+ /*
359
+ * Starts empty and is primed per scan from the addresses that scan found.
360
+ * See getExistingDevices.
361
+ */
362
+ const existingDevices = new Map();
363
+ const hasMonitorProvisioningRule = Boolean(data.rule.monitorTemplateId);
364
+ const existingMonitors = hasMonitorProvisioningRule
365
+ ? await this.loadExistingMonitors(data.projectId)
366
+ : this.emptyExistingMonitorProvisioningState();
367
+ const monitorTemplates = hasMonitorProvisioningRule
368
+ ? await this.loadMonitorTemplates({
369
+ projectId: data.projectId,
370
+ rules: rules,
371
+ })
372
+ : new Map();
287
373
  const result = this.emptyResult(data.isDryRun);
288
- const attempts = { count: 0 };
374
+ const attempts = { deviceCount: 0, monitorCount: 0 };
289
375
  /*
290
376
  * Newest results first: a manual run is "bring the estate up to date",
291
377
  * and the newest scan of a subnet supersedes its older runs — with
@@ -332,7 +418,9 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
332
418
  const createdIpAddresses = await this.importHostsFromScan({
333
419
  scan: scan,
334
420
  rules: rules,
335
- existingHostnames: existingHostnames,
421
+ existingDevices: existingDevices,
422
+ existingMonitors: existingMonitors,
423
+ monitorTemplates: monitorTemplates,
336
424
  result: result,
337
425
  attempts: attempts,
338
426
  isDryRun: data.isDryRun,
@@ -381,12 +469,24 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
381
469
  hostsSkippedAlreadyRegistered: 0,
382
470
  devicesCreated: 0,
383
471
  devicesFailed: 0,
472
+ monitorsWouldCreate: 0,
473
+ monitorsCreated: 0,
474
+ monitorsSkippedAlreadyExisting: 0,
475
+ monitorsSkippedUnsupportedHost: 0,
476
+ monitorsFailed: 0,
384
477
  isTruncated: false,
385
478
  hasMoreScans: false,
386
479
  isDryRun: isDryRun,
387
480
  matchedIpAddressSample: [],
388
481
  };
389
482
  }
483
+ emptyExistingMonitorProvisioningState() {
484
+ return {
485
+ autoProvisionedKeys: new Set(),
486
+ manuallyMonitoredDeviceIds: new Set(),
487
+ attemptedProvisioningKeys: new Set(),
488
+ };
489
+ }
390
490
  /*
391
491
  * ALL enabled rules of the project, paged to completeness — never a capped
392
492
  * subset. The label/owner engines cap their fetch at 100 and a dropped
@@ -413,6 +513,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
413
513
  sysDescrPattern: true,
414
514
  sysObjectIdPattern: true,
415
515
  includePingOnlyHosts: true,
516
+ monitorTemplateId: true,
416
517
  },
417
518
  sort: {
418
519
  createdAt: SortOrder.Ascending,
@@ -434,15 +535,39 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
434
535
  }
435
536
  return OneUptimeDate.isBefore(OneUptimeDate.fromString(scan.completedAt), OneUptimeDate.getSomeHoursAgo(MAX_RESULT_AGE_IN_HOURS));
436
537
  }
437
- async getExistingHostnames(data) {
538
+ /*
539
+ * The project's running map of "this address already has a device", shared
540
+ * across every scan in one sweep.
541
+ *
542
+ * It starts EMPTY and is filled per scan by `primeExistingDevices`, from the
543
+ * addresses that scan actually found. It used to start full — every device
544
+ * in the project, paged out of the database — which was both a full-table
545
+ * read per sweep and, on a fleet whose devices share one `createdAt` (what a
546
+ * bulk import produces), an unstable page walk that SKIPPED hostnames and
547
+ * let this engine create duplicates. See loadExistingDevices.
548
+ */
549
+ getExistingDevices(data) {
438
550
  const key = data.projectId.toString();
439
551
  const cached = data.cache.get(key);
440
552
  if (cached) {
441
553
  return cached;
442
554
  }
443
- const loaded = await this.loadExistingHostnames(data.projectId);
444
- data.cache.set(key, loaded);
445
- return loaded;
555
+ const fresh = new Map();
556
+ data.cache.set(key, fresh);
557
+ return fresh;
558
+ }
559
+ /*
560
+ * Fills the running map with whatever of THESE addresses already has a
561
+ * device. Only what is found is recorded, so an address that is not
562
+ * registered is looked up again if a later scan in the same sweep carries it
563
+ * — one indexed lookup, and recording absence would go stale the moment this
564
+ * run creates the device.
565
+ */
566
+ async primeExistingDevices(data) {
567
+ const found = await this.loadExistingDevices(data.projectId, data.hostnames);
568
+ for (const [hostname, device] of found) {
569
+ data.into.set(hostname, device);
570
+ }
446
571
  }
447
572
  /*
448
573
  * Every device address in the project — the same paged walk the probe
@@ -450,43 +575,201 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
450
575
  * a truncated answer produces duplicate devices, which is worse than a
451
576
  * slow answer. Sorted for stable paging.
452
577
  */
453
- async loadExistingHostnames(projectId) {
454
- const existingHostnames = new Set();
578
+ /*
579
+ * The devices already at these addresses, keyed by hostname.
580
+ *
581
+ * This used to load EVERY device in the project, paging `ORDER BY
582
+ * createdAt` — and a bulk discovery import stamps every device it creates
583
+ * with the same `createdAt`, so on a large fleet the sort key is
584
+ * single-valued and `LIMIT/OFFSET` over it returns an arbitrary,
585
+ * non-deterministic slice per call. Pages overlapped and skipped, and a
586
+ * skipped hostname reads as "not registered", which CREATES A DUPLICATE
587
+ * DEVICE — the exact failure the paging was added to prevent. It also cost
588
+ * a full table scan per page.
589
+ *
590
+ * Asking about the addresses the scans actually carry is both correct and
591
+ * an indexed lookup. See NetworkDeviceService.getDevicesByHostnames.
592
+ */
593
+ async loadExistingDevices(projectId, hostnames) {
594
+ return NetworkDeviceService.getDevicesByHostnames({
595
+ projectId: projectId,
596
+ hostnames: hostnames,
597
+ select: {
598
+ _id: true,
599
+ projectId: true,
600
+ name: true,
601
+ hostname: true,
602
+ monitoringMethod: true,
603
+ },
604
+ props: {
605
+ isRoot: true,
606
+ },
607
+ });
608
+ }
609
+ static monitorProvisioningKey(networkDeviceId, monitorTemplateId) {
610
+ return `${networkDeviceId.toString()}:${monitorTemplateId.toString()}`;
611
+ }
612
+ async getExistingMonitors(data) {
613
+ const key = data.projectId.toString();
614
+ const cached = data.cache.get(key);
615
+ if (cached) {
616
+ return cached;
617
+ }
618
+ const loaded = await this.loadExistingMonitors(data.projectId);
619
+ data.cache.set(key, loaded);
620
+ return loaded;
621
+ }
622
+ /*
623
+ * Queryable provenance is the concurrency/idempotency key for monitors
624
+ * created by this engine. Existing manually-created Network Device
625
+ * monitors are parsed once and suppress automatic duplicates: an operator
626
+ * who already chose how to monitor a device must not receive a second,
627
+ * potentially billable monitor merely because an import rule was edited.
628
+ */
629
+ async loadExistingMonitors(projectId) {
630
+ const state = this.emptyExistingMonitorProvisioningState();
455
631
  for (let skip = 0;; skip += LIMIT_MAX) {
456
- const existing = await NetworkDeviceService.findBy({
632
+ const monitors = await MonitorService.findBy({
457
633
  query: {
458
634
  projectId: projectId,
635
+ monitorType: MonitorType.NetworkDevice,
459
636
  },
460
637
  select: {
461
- hostname: true,
638
+ _id: true,
639
+ monitorType: true,
640
+ monitorSteps: true,
641
+ monitorTemplateId: true,
642
+ autoProvisionedNetworkDeviceId: true,
462
643
  },
463
644
  sort: {
464
645
  createdAt: SortOrder.Ascending,
465
646
  },
466
647
  limit: LIMIT_MAX,
467
648
  skip: skip,
468
- props: {
469
- isRoot: true,
649
+ props: { isRoot: true },
650
+ });
651
+ for (const monitor of monitors) {
652
+ this.recordExistingMonitor(state, monitor);
653
+ }
654
+ if (monitors.length < LIMIT_MAX) {
655
+ break;
656
+ }
657
+ }
658
+ return state;
659
+ }
660
+ /*
661
+ * Classify one stored monitor from both its queryable provenance and its
662
+ * actual step binding. Provenance is trusted only while the monitor still
663
+ * watches the device it was provisioned for. An orphaned template link or
664
+ * any legacy drift is treated as an operator-managed monitor on its actual
665
+ * device(s), which is the conservative no-duplicate behavior.
666
+ */
667
+ recordExistingMonitor(state, monitor) {
668
+ var _a;
669
+ const referencedDeviceIds = new Set(NetworkDeviceHydrationUtil.getReferencedNetworkDeviceIds([monitor]));
670
+ const provenanceDeviceId = ((_a = monitor.autoProvisionedNetworkDeviceId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
671
+ if (provenanceDeviceId &&
672
+ monitor.monitorTemplateId &&
673
+ referencedDeviceIds.size === 1 &&
674
+ referencedDeviceIds.has(provenanceDeviceId)) {
675
+ state.autoProvisionedKeys.add(NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(provenanceDeviceId, monitor.monitorTemplateId));
676
+ return;
677
+ }
678
+ for (const networkDeviceId of referencedDeviceIds) {
679
+ state.manuallyMonitoredDeviceIds.add(networkDeviceId);
680
+ }
681
+ }
682
+ /*
683
+ * Close the practical manual-create race left by the project-wide snapshot:
684
+ * immediately before provisioning a device, search the JSON step payload
685
+ * for its UUID and classify exact bindings. The automatic (device,template)
686
+ * partial unique index remains the final concurrent-auto backstop; this
687
+ * narrow read prevents a monitor a human just created from being ignored by
688
+ * a long-running sweep.
689
+ */
690
+ async refreshExistingMonitorsForDevice(data) {
691
+ for (let skip = 0;; skip += LIMIT_MAX) {
692
+ const monitors = await MonitorService.findBy({
693
+ query: {
694
+ projectId: data.projectId,
695
+ monitorType: MonitorType.NetworkDevice,
696
+ monitorSteps: QueryHelper.search(data.networkDeviceId.toString()),
697
+ },
698
+ select: {
699
+ _id: true,
700
+ monitorType: true,
701
+ monitorSteps: true,
702
+ monitorTemplateId: true,
703
+ autoProvisionedNetworkDeviceId: true,
470
704
  },
705
+ sort: { createdAt: SortOrder.Ascending },
706
+ limit: LIMIT_MAX,
707
+ skip: skip,
708
+ props: { isRoot: true },
471
709
  });
472
- for (const device of existing) {
473
- if (device.hostname) {
474
- existingHostnames.add(device.hostname);
710
+ for (const monitor of monitors) {
711
+ this.recordExistingMonitor(data.state, monitor);
712
+ }
713
+ if (monitors.length < LIMIT_MAX) {
714
+ break;
715
+ }
716
+ }
717
+ }
718
+ async loadMonitorTemplates(data) {
719
+ const ids = Array.from(new Map(data.rules
720
+ .filter((rule) => {
721
+ return Boolean(rule.monitorTemplateId);
722
+ })
723
+ .map((rule) => {
724
+ const id = rule.monitorTemplateId;
725
+ return [id.toString(), id];
726
+ })).values());
727
+ const templatesById = new Map();
728
+ if (ids.length === 0) {
729
+ return templatesById;
730
+ }
731
+ for (let skip = 0;; skip += LIMIT_MAX) {
732
+ const templates = await MonitorTemplateService.findBy({
733
+ query: {
734
+ _id: QueryHelper.any(ids),
735
+ projectId: data.projectId,
736
+ monitorType: MonitorType.NetworkDevice,
737
+ },
738
+ select: {
739
+ _id: true,
740
+ projectId: true,
741
+ monitorName: true,
742
+ monitorDescription: true,
743
+ monitorType: true,
744
+ monitorSteps: true,
745
+ monitoringInterval: true,
746
+ minimumProbeAgreement: true,
747
+ customFields: true,
748
+ labels: { _id: true },
749
+ },
750
+ sort: { createdAt: SortOrder.Ascending },
751
+ limit: LIMIT_MAX,
752
+ skip: skip,
753
+ props: { isRoot: true },
754
+ });
755
+ for (const template of templates) {
756
+ if (template.id) {
757
+ templatesById.set(template.id.toString(), template);
475
758
  }
476
759
  }
477
- if (existing.length < LIMIT_MAX) {
760
+ if (templates.length < LIMIT_MAX) {
478
761
  break;
479
762
  }
480
763
  }
481
- return existingHostnames;
764
+ return templatesById;
482
765
  }
483
766
  /*
484
767
  * The core loop: evaluate every discovered host of one scan against the
485
- * rule set, create what should import, and account for every host in the
486
- * shared result. Returns the addresses actually created (for the jsonb
487
- * write-back). Mutates `existingHostnames` as it creates, which is what
488
- * makes duplicate rows, overlapping scans in one sweep, and repeat runs
489
- * idempotent.
768
+ * rule set, create what should import, reconcile selected template monitors,
769
+ * and account for every host in the shared result. Returns the addresses
770
+ * actually created (for the jsonb write-back). Mutates `existingDevices` as
771
+ * it creates, which is what makes duplicate rows, overlapping scans in one
772
+ * sweep, and repeat runs idempotent.
490
773
  */
491
774
  async importHostsFromScan(data) {
492
775
  const scan = data.scan;
@@ -500,6 +783,17 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
500
783
  * Review dialog already learned to survive. See DiscoveredHostUtil.
501
784
  */
502
785
  const hosts = normalizeDiscoveredHosts(scan.discoveredDevices || []);
786
+ /*
787
+ * Ask the database about THESE addresses, once, before the loop — rather
788
+ * than having loaded every device in the project up front.
789
+ */
790
+ await this.primeExistingDevices({
791
+ projectId: scan.projectId,
792
+ hostnames: hosts.map((host) => {
793
+ return host.ipAddress || "";
794
+ }),
795
+ into: data.existingDevices,
796
+ });
503
797
  const createdIpAddresses = [];
504
798
  for (const host of hosts) {
505
799
  /*
@@ -523,52 +817,244 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
523
817
  continue;
524
818
  }
525
819
  result.hostsMatched++;
820
+ const templateIds = Array.from(new Set(evaluation.matchedRules
821
+ .map((matchedRule) => {
822
+ var _a;
823
+ return ((_a = matchedRule.monitorTemplateId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
824
+ })
825
+ .filter((id) => {
826
+ return Boolean(id);
827
+ })));
828
+ let networkDevice = data.existingDevices.get(host.ipAddress);
829
+ let deviceWasCreated = false;
526
830
  /*
527
831
  * The frozen isAlreadyRegistered flag AND the live set: the flag is a
528
832
  * point-in-time answer from the last upload, the set covers devices
529
833
  * created since — including by this very run, which is what collapses
530
834
  * duplicate rows and overlapping scans into one device.
531
835
  */
532
- if (host.isAlreadyRegistered ||
533
- data.existingHostnames.has(host.ipAddress)) {
836
+ if (host.isAlreadyRegistered || networkDevice) {
534
837
  result.hostsSkippedAlreadyRegistered++;
535
- continue;
536
- }
537
- if (data.attempts.count >= MAX_DEVICES_PER_AUTO_IMPORT_RUN) {
538
- result.isTruncated = true;
539
- break;
838
+ /*
839
+ * A stale scan can claim a deleted device is still registered. With
840
+ * no live row there is neither a safe binding nor enough intent to
841
+ * recreate it from old data, so preserve the established skip.
842
+ */
843
+ if (!networkDevice) {
844
+ continue;
845
+ }
540
846
  }
541
847
  if (result.matchedIpAddressSample.length < MAX_MATCHED_IP_SAMPLE) {
542
- result.matchedIpAddressSample.push(host.ipAddress);
848
+ if (!result.matchedIpAddressSample.includes(host.ipAddress)) {
849
+ result.matchedIpAddressSample.push(host.ipAddress);
850
+ }
543
851
  }
544
- if (data.isDryRun) {
545
- /*
546
- * A dry run reports the device as "created" in no counter at all —
547
- * hostsMatched minus hostsSkippedAlreadyRegistered is exactly what a
548
- * real run would attempt, and the sample above says which hosts.
549
- * The address still joins the set, simulating the create's dedupe:
550
- * without this, a host on duplicate rows (or in two overlapping
551
- * scans) would be counted as importable once per appearance, and
552
- * the dry run would promise more than the real run does.
553
- */
554
- data.attempts.count++;
555
- data.existingHostnames.add(host.ipAddress);
852
+ if (!networkDevice) {
853
+ if (data.attempts.deviceCount >= MAX_DEVICES_PER_AUTO_IMPORT_RUN) {
854
+ result.isTruncated = true;
855
+ break;
856
+ }
857
+ if (data.isDryRun) {
858
+ /*
859
+ * Add a fully-shaped in-memory device to simulate the create. Its
860
+ * generated id never leaves this process; it merely lets monitor
861
+ * reconciliation deduplicate the same host across duplicate rows
862
+ * and overlapping scans exactly as a real run would.
863
+ */
864
+ data.attempts.deviceCount++;
865
+ networkDevice = buildNetworkDeviceFromDiscoveredHost({
866
+ projectId: scan.projectId,
867
+ host: host,
868
+ scan: scan,
869
+ autoApplyVendorHealthTemplate: true,
870
+ });
871
+ networkDevice.id = ObjectID.generate();
872
+ data.existingDevices.set(host.ipAddress, networkDevice);
873
+ }
874
+ else {
875
+ const createResult = await this.createDeviceForHost({
876
+ projectId: scan.projectId,
877
+ scan: scan,
878
+ host: host,
879
+ existingDevices: data.existingDevices,
880
+ result: result,
881
+ attempts: data.attempts,
882
+ });
883
+ networkDevice = createResult.device || undefined;
884
+ deviceWasCreated = createResult.wasCreated;
885
+ if (!networkDevice) {
886
+ continue;
887
+ }
888
+ }
889
+ }
890
+ if (deviceWasCreated) {
891
+ createdIpAddresses.push(host.ipAddress);
892
+ }
893
+ if (templateIds.length === 0) {
556
894
  continue;
557
895
  }
558
- const wasCreated = await this.createDeviceForHost({
896
+ const monitorsWereTruncated = await this.ensureMonitorsForDevice({
559
897
  projectId: scan.projectId,
560
- scan: scan,
561
898
  host: host,
562
- existingHostnames: data.existingHostnames,
899
+ networkDevice: networkDevice,
900
+ templateIds: templateIds,
901
+ monitorTemplates: data.monitorTemplates,
902
+ existingMonitors: data.existingMonitors,
563
903
  result: result,
564
904
  attempts: data.attempts,
905
+ isDryRun: data.isDryRun,
565
906
  });
566
- if (wasCreated) {
567
- createdIpAddresses.push(host.ipAddress);
907
+ if (monitorsWereTruncated) {
908
+ result.isTruncated = true;
909
+ break;
568
910
  }
569
911
  }
570
912
  return createdIpAddresses;
571
913
  }
914
+ async ensureMonitorsForDevice(data) {
915
+ /*
916
+ * A Network Device monitor is evaluated from SNMP walks. A ping-only
917
+ * import intentionally has polling disabled and can never supply those
918
+ * results. Rule validation prevents this combination, while this guard
919
+ * keeps legacy or directly-written rows from creating inert monitors.
920
+ */
921
+ if (monitoringMethodForDiscoveredHost(data.host) ===
922
+ NetworkDeviceMonitoringMethod.Monitor ||
923
+ NetworkDeviceMonitoringMethodUtil.isMonitorBacked(data.networkDevice.monitoringMethod)) {
924
+ data.result.monitorsSkippedUnsupportedHost += data.templateIds.length;
925
+ return false;
926
+ }
927
+ if (!data.networkDevice.id) {
928
+ data.result.monitorsFailed += data.templateIds.length;
929
+ logger.error(`Auto-import: cannot provision monitor(s) for ${data.host.ipAddress} because the Network Device has no id.`, { projectId: data.projectId.toString() });
930
+ return false;
931
+ }
932
+ const networkDeviceId = data.networkDevice.id;
933
+ const networkDeviceIdString = networkDeviceId.toString();
934
+ const pendingTemplateIds = [];
935
+ /*
936
+ * The project-wide snapshot is complete and indexed. Settle everything
937
+ * it already covers before issuing the narrow JSON race-check query; an
938
+ * established fleet whose monitors are already reconciled must not do one
939
+ * full monitor-table search per discovered device on every scan.
940
+ */
941
+ for (const templateId of data.templateIds) {
942
+ const key = NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(networkDeviceId, templateId);
943
+ if (data.existingMonitors.autoProvisionedKeys.has(key)) {
944
+ data.result.monitorsSkippedAlreadyExisting++;
945
+ continue;
946
+ }
947
+ if (data.existingMonitors.attemptedProvisioningKeys.has(key)) {
948
+ continue;
949
+ }
950
+ pendingTemplateIds.push(templateId);
951
+ }
952
+ if (pendingTemplateIds.length === 0) {
953
+ return false;
954
+ }
955
+ if (data.existingMonitors.manuallyMonitoredDeviceIds.has(networkDeviceIdString)) {
956
+ data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
957
+ return false;
958
+ }
959
+ /*
960
+ * Do not run the unindexed JSON race-check after this run's monitor-work
961
+ * budget is already exhausted. The device remains unreconciled and the
962
+ * truncated marker protocol brings it back on the next bounded pass.
963
+ */
964
+ if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
965
+ return true;
966
+ }
967
+ if (!data.isDryRun) {
968
+ await this.refreshExistingMonitorsForDevice({
969
+ projectId: data.projectId,
970
+ networkDeviceId: networkDeviceId,
971
+ state: data.existingMonitors,
972
+ });
973
+ }
974
+ if (data.existingMonitors.manuallyMonitoredDeviceIds.has(networkDeviceIdString)) {
975
+ data.result.monitorsSkippedAlreadyExisting += pendingTemplateIds.length;
976
+ return false;
977
+ }
978
+ for (const templateId of pendingTemplateIds) {
979
+ const key = NetworkDeviceAutoImportRuleEngineServiceClass.monitorProvisioningKey(networkDeviceId, templateId);
980
+ /* The race-check may have found this key after the initial snapshot. */
981
+ if (data.existingMonitors.autoProvisionedKeys.has(key)) {
982
+ data.result.monitorsSkippedAlreadyExisting++;
983
+ continue;
984
+ }
985
+ if (data.attempts.monitorCount >= MAX_MONITORS_PER_AUTO_IMPORT_RUN) {
986
+ return true;
987
+ }
988
+ data.attempts.monitorCount++;
989
+ data.existingMonitors.attemptedProvisioningKeys.add(key);
990
+ /*
991
+ * Invalid or concurrently deleted templates are failed attempts too.
992
+ * Count them inside the same cap before looking up the cached template;
993
+ * otherwise one stale rule could walk and log an unbounded estate in a
994
+ * single API request or worker tick.
995
+ */
996
+ const template = data.monitorTemplates.get(templateId);
997
+ if (!template) {
998
+ data.result.monitorsFailed++;
999
+ logger.error(`Auto-import: Network Device monitor template ${templateId} is missing, deleted, or not valid for project ${data.projectId.toString()}.`, { projectId: data.projectId.toString() });
1000
+ continue;
1001
+ }
1002
+ if (data.isDryRun) {
1003
+ data.result.monitorsWouldCreate++;
1004
+ data.existingMonitors.autoProvisionedKeys.add(key);
1005
+ continue;
1006
+ }
1007
+ try {
1008
+ const monitor = NetworkDeviceMonitorTemplateUtil.buildMonitor({
1009
+ template: template,
1010
+ networkDevice: data.networkDevice,
1011
+ });
1012
+ await MonitorService.create({
1013
+ data: monitor,
1014
+ props: {
1015
+ isRoot: true,
1016
+ tenantId: data.projectId,
1017
+ },
1018
+ });
1019
+ data.existingMonitors.autoProvisionedKeys.add(key);
1020
+ data.result.monitorsCreated++;
1021
+ }
1022
+ catch (error) {
1023
+ /*
1024
+ * The partial unique index is the final race backstop. If another
1025
+ * writer won between our cache read and create, classify that as an
1026
+ * idempotent skip; otherwise expose a real provisioning failure and
1027
+ * leave the key absent so a later scan or Run Now can retry it.
1028
+ */
1029
+ const createdMeanwhile = await MonitorService.findOneBy({
1030
+ query: {
1031
+ projectId: data.projectId,
1032
+ monitorType: MonitorType.NetworkDevice,
1033
+ monitorTemplateId: new ObjectID(templateId),
1034
+ autoProvisionedNetworkDeviceId: networkDeviceId,
1035
+ },
1036
+ select: {
1037
+ _id: true,
1038
+ monitorType: true,
1039
+ monitorSteps: true,
1040
+ monitorTemplateId: true,
1041
+ autoProvisionedNetworkDeviceId: true,
1042
+ },
1043
+ props: { isRoot: true },
1044
+ });
1045
+ if (createdMeanwhile) {
1046
+ this.recordExistingMonitor(data.existingMonitors, createdMeanwhile);
1047
+ if (data.existingMonitors.autoProvisionedKeys.has(key)) {
1048
+ data.result.monitorsSkippedAlreadyExisting++;
1049
+ continue;
1050
+ }
1051
+ }
1052
+ data.result.monitorsFailed++;
1053
+ logger.error(`Auto-import: could not create monitor from template ${templateId} for Network Device ${networkDeviceId.toString()} (${data.host.ipAddress}): ${error}`, { projectId: data.projectId.toString() });
1054
+ }
1055
+ }
1056
+ return false;
1057
+ }
572
1058
  /*
573
1059
  * One host -> one device, with the collision protocol the estate needs:
574
1060
  *
@@ -582,7 +1068,7 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
582
1068
  */
583
1069
  async createDeviceForHost(data) {
584
1070
  var _a;
585
- data.attempts.count++;
1071
+ data.attempts.deviceCount++;
586
1072
  const attemptCreate = async (name) => {
587
1073
  const device = buildNetworkDeviceFromDiscoveredHost({
588
1074
  projectId: data.projectId,
@@ -597,15 +1083,17 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
597
1083
  */
598
1084
  autoApplyVendorHealthTemplate: true,
599
1085
  });
600
- await NetworkDeviceService.create({
1086
+ const created = await NetworkDeviceService.create({
601
1087
  data: device,
602
1088
  props: {
603
1089
  isRoot: true,
604
1090
  },
605
1091
  });
1092
+ return created || device;
606
1093
  };
1094
+ let createdDevice;
607
1095
  try {
608
- await attemptCreate();
1096
+ createdDevice = await attemptCreate();
609
1097
  }
610
1098
  catch (firstError) {
611
1099
  const registeredMeanwhile = await NetworkDeviceService.findOneBy({
@@ -613,27 +1101,33 @@ class NetworkDeviceAutoImportRuleEngineServiceClass {
613
1101
  projectId: data.projectId,
614
1102
  hostname: data.host.ipAddress,
615
1103
  },
616
- select: { _id: true },
1104
+ select: {
1105
+ _id: true,
1106
+ projectId: true,
1107
+ name: true,
1108
+ hostname: true,
1109
+ monitoringMethod: true,
1110
+ },
617
1111
  props: { isRoot: true },
618
1112
  });
619
1113
  if (registeredMeanwhile) {
620
1114
  // Skipped is a sub-bucket of matched, same as the other run results.
621
1115
  data.result.hostsSkippedAlreadyRegistered++;
622
- data.existingHostnames.add(data.host.ipAddress);
623
- return false;
1116
+ data.existingDevices.set(data.host.ipAddress, registeredMeanwhile);
1117
+ return { device: registeredMeanwhile, wasCreated: false };
624
1118
  }
625
1119
  try {
626
- await attemptCreate(buildFallbackDeviceName(data.host));
1120
+ createdDevice = await attemptCreate(buildFallbackDeviceName(data.host));
627
1121
  }
628
1122
  catch (secondError) {
629
1123
  data.result.devicesFailed++;
630
1124
  logger.error(`Auto-import: could not create a device for ${data.host.ipAddress} (scan ${(_a = data.scan.id) === null || _a === void 0 ? void 0 : _a.toString()}): ${firstError} / retry: ${secondError}`, { projectId: data.projectId.toString() });
631
- return false;
1125
+ return { device: null, wasCreated: false };
632
1126
  }
633
1127
  }
634
1128
  data.result.devicesCreated++;
635
- data.existingHostnames.add(data.host.ipAddress);
636
- return true;
1129
+ data.existingDevices.set(data.host.ipAddress, createdDevice);
1130
+ return { device: createdDevice, wasCreated: true };
637
1131
  }
638
1132
  /*
639
1133
  * The one write this engine makes to the scan row: retire the consumed